Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commit fc34b69

Browse files
mbbrobergMatthew Broberg
authored andcommitted
Define Plugin Status types
* Introduction of a tiered approach to plugin maturity * Added definitions where these terms will be important to understand
1 parent f36d1aa commit fc34b69

4 files changed

Lines changed: 105 additions & 13 deletions

File tree

CONTRIBUTING.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,15 @@ Snap is Apache 2.0 licensed and accepts contributions via GitHub. This document
88

99
* [Reporting Security Issues](#reporting-security-issues)
1010
* [Reporting Issues or Feature Requests](#reporting-issues-or-feature-requests)
11+
* [What is an RFC?](#what-is-an-rfc)
1112
* [Contributing Code](#contributing-code)
13+
* [Commit Guidelines](#commit-guidelines)
14+
* [Testing Guidelines](#testing-guidelines)
15+
* [Pull Request Guidelines](#pull-request-guidelines)
16+
* [Submitting a Plugin](#submitting-a-plugin)
1217
* [Notes on GitHub Usage](#notes-on-github-usage)
18+
* [TL;DR Labels](#tldr-labels)
19+
* [Issue Labels](#issue-labels)
1320

1421
## Reporting Security Issues
1522

@@ -82,17 +89,24 @@ Your pull request should be rebased against the current master branch. Please do
8289
the current master branch in with your topic branch, nor use the Update Branch button provided
8390
by GitHub on the pull request page.
8491

92+
## Submitting a Plugin
93+
94+
Sharing a new plugin is one of the most impressive ways to jump into the Snap community as a contributor. This process is as simple as adding your plugin information to the [list in plugis.yml](docs/plugin.yml). Read more about what is required of plugin authors in [Plugin Authoring](docs/PLUGIN_AUTHORING.md).
95+
8596
## Notes on GitHub Usage
97+
8698
It's worth noting that we don't use all the native GitHub features for issue management. For instance, it's uncommon for us to assign issues to the developer who will address it. Here are notes on what we do use.
8799

88100
### TL;DR Labels
101+
89102
We use a number of labels for context in the main framework of Snap. Plugin repository labels will keep it simple. If you want to contribute to Snap, here are the most helpful ones for you:
90103

91104
1. **help-wanted** ([link](https://github.com/intelsdi-x/snap/labels/help-wanted)) - some specific issues maintainers would like help addressing
92105
2. **type/rfc** ([link](https://github.com/intelsdi-x/snap/labels/type%2Frfc)) - we need active feedback on *how best* to solve these issues
93106
3. **plugin-wishlist** ([link](https://github.com/intelsdi-x/snap/labels/plugin-wishlist)) - these are a great opportunity to write a plugin
94107

95108
### Issue Labels
109+
96110
Snap maintainers have a set of labels we use to keep up with issues. They are separated into namespaces:
97111

98112
* **type/** - the category of issue. All issues will have one or more

docs/GLOSSARY.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Snap is simple in scope and it becomes more simple when you know the terminology
1212
* [Metric Namespace: Dynamic Element](#metric-dynamic-namespace-element)
1313
* [Metric Namespace: Static Element](#metric-static-namespace-element)
1414
* [Plugin](#plugin)
15+
* [Plugin Status](#plugin-status)
1516
* [Plugin Type: Collector](#plugin-type-collector)
1617
* [Plugin Type: Processor](#plugin-type-processor)
1718
* [Plugin Type: Publisher](#plugin-type-publisher)
@@ -24,9 +25,9 @@ Snap is simple in scope and it becomes more simple when you know the terminology
2425
* [Tribe](#tribe)
2526
* [Workflow](#workflow)
2627
* [Workflow: Distributed](#workflow-distributed)
27-
* [Workflow Manifest](#workflow-manifest)
28+
* [Workflow Manifest](#workflow-manifest)
2829

29-
### Config: Global Config
30+
### Config: Global Config
3031
* Values loaded at runtime of the daemon ([reference](SNAPTELD_CONFIGURATION.md))
3132

3233
### Config: Global Options
@@ -47,7 +48,7 @@ Snap is simple in scope and it becomes more simple when you know the terminology
4748
### Metric: Namespace
4849
* Namespaces are a series of namespace elements that uniquely identify a metric in Snap ([reference](METRICS.md))
4950

50-
#### Metric: Dynamic Namespace Element
51+
#### Metric: Dynamic Namespace Element
5152
* An element of a metric whose value is set at runtime ([reference](METRICS.md))
5253

5354
#### Metric: Static Namespace Element
@@ -56,19 +57,22 @@ Snap is simple in scope and it becomes more simple when you know the terminology
5657
### Plugin
5758
* An independent [binary][binary] that is compatible with Snap (see [Plugin Lifecycle](PLUGIN_LIFECYCLE.md))
5859

60+
### Plugin Status
61+
* An indicator of whether a plugin meets the maintainer's recommendations for best practices (see [Plugin Status](PLUGIN_STATUS.md))
62+
5963
### Plugin Type: Collector
6064
* Gathers data and presents as a dynamically-generated namespaced metric catalog ([reference](PLUGIN_AUTHORING.md#plugin-type))
6165

62-
### Plugin Type: Processor
66+
### Plugin Type: Processor
6367
* Extends or filters collected metrics ([reference](PLUGIN_AUTHORING.md#plugin-type))
6468

6569
### Plugin Type: Publisher
6670
* Persists metrics into a target endpoint ([reference](PLUGIN_AUTHORING.md#plugin-type))
6771

68-
### Snap
72+
### Snap
6973
* The project name, focused on the Snap daemon and the plugins that power its collection, processing and publishing of telemetry
7074

71-
### Snap Telemetry
75+
### Snap Telemetry
7276
* The full name of the Snap project, used mostly for easy searching (like snap-telemetry.io) or hashtag (#SnapTelemetry)
7377

7478
### 'snaptel'
@@ -80,19 +84,19 @@ Snap is simple in scope and it becomes more simple when you know the terminology
8084
### Task
8185
* A job running within Snap, including the API version, schedule and workflow (all documented [here](TASKS.md))
8286

83-
### Task Manifest
87+
### Task Manifest
8488
* A file that includes the API version, schedule and workflow of a Task in a declarative form ([reference](TASKS.md#task-manifest))
8589

8690
### Tribe
8791
* The clustering feature of Snap, documented [here](TRIBE.md)
8892

89-
### Workflow
93+
### Workflow
9094
* The explicit map of how collectors, processors and publishers are used in Snap ([reference](TASKS.md#the-workflow))
9195

9296
### Workflow: Distributed
9397
* A workflow where one or more steps have a remote target specified ([reference](DISTRIBUTED_WORKFLOW_ARCHITECTURE.md))
9498

95-
### Workflow Manifest
99+
### Workflow Manifest
96100
* A file that describes only the workflow of a Task ([example at the bottom](SNAPTEL.md#load-and-unload-plugins-create-and-start-a-task))
97101

98102
[binary]: https://www.quora.com/Whats-the-difference-between-an-installer-source-code-and-a-binary-package-when-installing-software

docs/PLUGIN_AUTHORING.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
### Table of Content
44

55
* [Overview](#overview)
6-
* [Plugin Library](#plugin-library)
6+
* [Plugin Library](#plugin-library)
77
* [Developing Plugins](#developing-plugins)
88
* [Plugin Type](#plugin-type)
99
* [Plugin Name](#plugin-name)
@@ -127,7 +127,7 @@ In the plugin repo root directory, the `metadata.yml` file provides Snap project
127127
* **description**: paragraph describing the plugin's purpose
128128
* **badge**: a list of [badges](https://shields.io/) to display
129129
* **ci**: a list of ci services running for this repo
130-
* **status**: one of the three statuses [described below](#plugin-status)
130+
* **status**: one of the four statuses [described below](#plugin-status)
131131

132132
All metadata fields are optional, but recommended to help users discover your plugin. Please check out the file plugin's [metadata.yml](https://github.com/intelsdi-x/snap-plugin-publisher-file/blob/master/metadata.yml) file for a working example.
133133

@@ -144,12 +144,19 @@ We provide a list of Snap plugins at [snap-telemetry.io](http://snap-telemetry.i
144144

145145
### Plugin Status
146146

147-
While the Snap framework is hardened through tons of testing, **plugins mature at their own pace**. We want our community to share plugins early and update them often. We are defining categories of maturity of a plugin and will roll them out with the resolution of [#1322](https://github.com/intelsdi-x/snap/issues/1322).
147+
While the Snap framework is hardened through tons of testing, **plugins mature at their own pace**. We also want our community to share plugins early and update them often. To help both of these goals, we have tiers of maturity defined for plugins being added to the Plugin Catalog:
148+
* [**Supported**](#supported-plugins) - Created by a company with the intent of supporting customers
149+
* [**Approved**](#approved-plugins) - Vetted by Snap maintainers to meet our best practices for design
150+
* [**Experimental**](#experimental) - Early plugins ready for testing but not known to work as intended
151+
* [**Unlabeled**](#all-other-plugins-unlabeled) - Shared for reference or extension
152+
153+
Further details to these definitions are available in [Plugin Status](PLUGIN_STATUS.md).
148154

149155
### Documentation
150156

151-
All plugins should include a README with the following information:
157+
We request that all plugins include a README with the following information:
152158

159+
1. What It Does (and who it's for)
153160
1. Supported Platforms
154161
1. Known Issues
155162
1. Snap Version dependencies

docs/PLUGIN_STATUS.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Plugin Status
2+
3+
Not all plugins are designed with the same level of readiness in mind. To visualize that fact while also allowing everyone to share their work, we have introduced the concept of "tiers" of plugins. These tiers are communicated as statuses which will be visualized everywhere you see the [Plugin Catalog](PLUGIN_CATALOG.md).
4+
5+
Note that plugins can and likely will be demoted if they fall significantly behind best practices of the project. I know that's vague, but it will have to do for this first version :grimacing:
6+
7+
### What this is
8+
9+
* A way to quickly see the highest quality plugins
10+
* A way to encourage contribution to existing plugins instead of forking
11+
12+
### What this is not
13+
14+
* Not a definition of the plugin version - that's done through `releases`
15+
* Not a contract of support - we do our best as maintainers of Snap, but make no promises
16+
17+
## Plugin Status Matrix
18+
19+
All plugins meet a set of minimum requirements to be included at its status level. Note that some earlier stage plugins *can* have other requirements implemented, but they *must* have all checkboxes to be in the next tier.
20+
21+
| Requirements | Unlabeled | Experimental | Approved | Supported |
22+
|:-------------------------------|:------------------:|:------------------:|:------------------:|:------------------:|
23+
| No naming conflict | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
24+
| Includes README.md | | :white_check_mark: | :white_check_mark: | :white_check_mark: |
25+
| Active maintainers | | :white_check_mark: | :white_check_mark: | :white_check_mark: |
26+
| Release includes binary | | | :white_check_mark: | :white_check_mark: |
27+
| Known to compile | | | :white_check_mark: | :white_check_mark: |
28+
| Known to load in Snap | | | :white_check_mark: | :white_check_mark: |
29+
| Uses Snap plugin library | | | :white_check_mark: | :white_check_mark: |
30+
| Reasonable test coverage | | | :white_check_mark: | :white_check_mark: |
31+
| Includes example tasks | | | :white_check_mark: | :white_check_mark: |
32+
| Includes dependency management | | | :white_check_mark: | :white_check_mark: |
33+
| Includes CI status | | | :white_check_mark: | :white_check_mark: |
34+
| Includes license | | | :white_check_mark: | :white_check_mark: |
35+
| Support provided by a company | | | | :white_check_mark: |
36+
37+
## Supported Plugins
38+
39+
These are our premier plugins for the Snap telemetry framework and its users. These are designed to follow all of our recommended practices. Issues are also closely monitored by its supporting company ([read more about that here](#more-on-support-for-plugins)). While companies may support some plugins they contribute to Snap, not all contributions will meet the Supported standard.
40+
41+
We prefer to not have other repositories that overlap with Supported plugins and suggest contributing to the existing version to help keep this list small and effective. Like all plugins, community contribution is welcome.
42+
43+
44+
## Approved Plugins
45+
46+
These are primarily community-contributed plugins that meet or exceed the project's best practices. These plugins have been vetted by Snap maintainers as of the date listed in the Plugin Catalog. They are excellent references and are quite likely ready for use in your own Snap deployment.
47+
48+
We prefer to not have other repositories that overlap with Approved plugins and suggest contributing to the existing version to help keep this list small and effective. Don't be shy about reaching out to existing plugin authors to see if you can help improve upon it.
49+
50+
## Experimental
51+
52+
These plugins are in development and are not yet complete, but are shared with the community for feedback and testing. They are shared with the community for feedback and testing. Think of this tier as an incubation phase that should move toward Approved or drop down to Unlabeled.
53+
54+
We prefer to not have other repositories that overlap with Experimental plugins and suggest contributing to the existing version to help keep this list small and effective. Don't be shy about reaching out to existing plugin authors to see if you can help improve upon it.
55+
56+
57+
## All Other Plugins (Unlabeled)
58+
59+
These are plugins in varying phases of completeness and are shared for reference. They do not necessarily follow best practices for plugin development. We welcome anyone forking these plugins and working toward Approved status.
60+
61+
## Changing Tiers
62+
63+
If you find a plugin that should move between tiers (ex. from Unlabeled to Approved, Supported to Experimental or Approved to Experimental), open an issue to do so on the [main Snap repository](https://github.com/intelsdi-x/snap/issues). Please include any corresponding issues opened on the plugin repository as well.
64+
65+
## More On Support For Plugins
66+
67+
Snap is an open source project originated and actively maintained by Intel with the goal of becoming a broad community standard for telemetry. We stand behind Supported plugins with the intention of making them part of your monitoring infrastructure. As other companies adopt Snap as their standard telemetry framework, they may also choose to support various plugins. We want to make sure you know which ones, and what companies, are here to support you.

0 commit comments

Comments
 (0)