dropsonde 0.0.3 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ac6f28ed9d64982c400f6a7460b57f44396020e6f17f04f587cc6e5007ff115
4
- data.tar.gz: ef5a2ac1957b4b45c756b0e4bbc5ae66291706afabd3a7b80e899702f8aa6757
3
+ metadata.gz: b2b344789cd257a8cae81d53150c1ab50fe0cf20716c4fce306446a2c207c7e2
4
+ data.tar.gz: 563788ccfcf13c75feb8529e4870ba65a0679a1d461eda2413cd401c0c52decd
5
5
  SHA512:
6
- metadata.gz: d9bda687091ec5a1d6bd8ca7e5f1414e2c489e3a1c66a970b879d7f6a2d6ab82e11f079eebfea13ed7a710ebe20b4c0aefd0a08f1af17547e3a5cd120c587847
7
- data.tar.gz: e96d699c38c0d158bce376f13d77d9bafa3ef5d4020e104d32694df04fcc68c91bb458d2bb858f9d120dc5b9146ffd3bfde450535cfe0b971b331b349e7dc78b
6
+ metadata.gz: 5006cf40dd17e018b6af805ae6192d5cc8b1842b981a4eba6895966a7ace7ee13365b9bae976169adaad1399ee9ca767d10b56cef56542ba5420cd04cecafdb6
7
+ data.tar.gz: ebda439d8baeec73d04887fb03b745acb2a11b9af8621f8992ad585b9ea9380f4c5732f88a5c17661f8123cba8125dc781d2929302a0954511bd6fae221c78f4
data/CHANGELOG.md ADDED
@@ -0,0 +1,58 @@
1
+ # Changelog
2
+
3
+ ## [0.0.7](https://github.com/puppetlabs/dropsonde/tree/0.0.7) (2022-02-10)
4
+
5
+ [Full Changelog](https://github.com/puppetlabs/dropsonde/compare/v0.0.6...0.0.7)
6
+
7
+ **Merged pull requests:**
8
+
9
+ - update server language [\#20](https://github.com/puppetlabs/dropsonde/pull/20) ([binford2k](https://github.com/binford2k))
10
+ - Updates the telemetry endpoint to a stable URL [\#19](https://github.com/puppetlabs/dropsonde/pull/19) ([MikaelSmith](https://github.com/MikaelSmith))
11
+ - docs updates now that it's shipped [\#18](https://github.com/puppetlabs/dropsonde/pull/18) ([binford2k](https://github.com/binford2k))
12
+
13
+ ## [v0.0.6](https://github.com/puppetlabs/dropsonde/tree/v0.0.6) (2021-11-17)
14
+
15
+ [Full Changelog](https://github.com/puppetlabs/dropsonde/compare/v0.0.5...v0.0.6)
16
+
17
+ **Merged pull requests:**
18
+
19
+ - \(MAINT\) Update gemspec license param to 'Apache-2.0' [\#17](https://github.com/puppetlabs/dropsonde/pull/17) ([sanfrancrisko](https://github.com/sanfrancrisko))
20
+ - \(MAINT\) Release prep for 0.0.6 [\#16](https://github.com/puppetlabs/dropsonde/pull/16) ([sanfrancrisko](https://github.com/sanfrancrisko))
21
+ - \(MAINT\) Fix Rubocop violations [\#15](https://github.com/puppetlabs/dropsonde/pull/15) ([sanfrancrisko](https://github.com/sanfrancrisko))
22
+ - \(SERVER-3079\) Allow overriding Puppet's base settings [\#14](https://github.com/puppetlabs/dropsonde/pull/14) ([Magisus](https://github.com/Magisus))
23
+ - Load Ruby's CA certificates instead of using httpclient defaults [\#13](https://github.com/puppetlabs/dropsonde/pull/13) ([Magisus](https://github.com/Magisus))
24
+ - \(IAC-1676\) - Add nightly workflow [\#12](https://github.com/puppetlabs/dropsonde/pull/12) ([adrianiurca](https://github.com/adrianiurca))
25
+ - \(IAC-1659\) - Add Acceptance Tests [\#11](https://github.com/puppetlabs/dropsonde/pull/11) ([adrianiurca](https://github.com/adrianiurca))
26
+ - \(IAC-1624\) - Expand unit test case suit [\#9](https://github.com/puppetlabs/dropsonde/pull/9) ([adrianiurca](https://github.com/adrianiurca))
27
+ - \(IAC-1620\) - replace travis workflow with github actions [\#8](https://github.com/puppetlabs/dropsonde/pull/8) ([adrianiurca](https://github.com/adrianiurca))
28
+ - \(IAC-1605\) - add static checks - rubocop [\#5](https://github.com/puppetlabs/dropsonde/pull/5) ([adrianiurca](https://github.com/adrianiurca))
29
+ - Allow to specify siteid with a flag [\#4](https://github.com/puppetlabs/dropsonde/pull/4) ([raphink](https://github.com/raphink))
30
+
31
+ ## [v0.0.5](https://github.com/puppetlabs/dropsonde/tree/v0.0.5) (2020-06-11)
32
+
33
+ [Full Changelog](https://github.com/puppetlabs/dropsonde/compare/v0.0.4...v0.0.5)
34
+
35
+ ## [v0.0.4](https://github.com/puppetlabs/dropsonde/tree/v0.0.4) (2020-06-05)
36
+
37
+ [Full Changelog](https://github.com/puppetlabs/dropsonde/compare/v0.0.3...v0.0.4)
38
+
39
+ ## [v0.0.3](https://github.com/puppetlabs/dropsonde/tree/v0.0.3) (2020-05-24)
40
+
41
+ [Full Changelog](https://github.com/puppetlabs/dropsonde/compare/v0.0.2...v0.0.3)
42
+
43
+ ## [v0.0.2](https://github.com/puppetlabs/dropsonde/tree/v0.0.2) (2020-05-08)
44
+
45
+ [Full Changelog](https://github.com/puppetlabs/dropsonde/compare/v0.0.1...v0.0.2)
46
+
47
+ ## [v0.0.1](https://github.com/puppetlabs/dropsonde/tree/v0.0.1) (2020-02-27)
48
+
49
+ [Full Changelog](https://github.com/puppetlabs/dropsonde/compare/502bce39de366c8d6816676e0cf7ca6284b90734...v0.0.1)
50
+
51
+ **Merged pull requests:**
52
+
53
+ - Add simple puppetfile metric [\#2](https://github.com/puppetlabs/dropsonde/pull/2) ([binford2k](https://github.com/binford2k))
54
+ - MVP workable tool [\#1](https://github.com/puppetlabs/dropsonde/pull/1) ([binford2k](https://github.com/binford2k))
55
+
56
+
57
+
58
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/README.md CHANGED
@@ -15,8 +15,7 @@ data in a way that lets you signal approval simply by using a module is the
15
15
  primary goal of this project.
16
16
 
17
17
  > **This means that the best way for you to help yourself find new modules is to
18
- > install this telemetry tool and, along with your peers, share your module usage
19
- > data.** ✅
18
+ > opt in and use this telemetry tool to share your module usage data.** ✅
20
19
 
21
20
 
22
21
  ## Design
@@ -34,19 +33,24 @@ You can see exactly what will be phoned home by running the command:
34
33
  $ dropsonde preview
35
34
  ```
36
35
 
37
- Dropsonde is a simple telemetry probe designed to run as a regular cron job.
38
- Metrics are defined by plugins that gather data, but also export a schema that
39
- constrains the data allowed to be reported on. Dropsonde will reject metrics
40
- that don't meet these constraints. The backend database is also defined by this
41
- schema so the system cannot gather any data that's not described in the schema.
36
+ > *Note:* as of Puppetserver 7.5.0, Dropsonde is bundled in as a standard `puppetserver`
37
+ > command. You should run it as `puppetserver dropsonde` (or `/opt/puppetlabs/bin/puppetserver
38
+ > dropsonde` if your `$PATH` isn't configured.)
39
+
40
+ Dropsonde is a simple telemetry probe designed to run both as a command-line
41
+ tool and optionally as a regularly scheduled task. Metrics are defined by
42
+ plugins that gather data, but also export a schema that constrains the data
43
+ allowed to be reported on. Dropsonde will reject metrics that don't meet these
44
+ constraints. The backend database is also defined by this schema so the system
45
+ cannot gather any data that's not described in the schema.
42
46
 
43
47
  See the full schema of all enabled plugins by running the command:
44
48
 
45
49
  ```
46
- $ dropsonde schema
50
+ $ dropsonde dev schema
47
51
  ```
48
52
 
49
- All information in the report is keyed off a non-reversible SHA512 hash site-id
53
+ All information in the report is keyed off a non-reversible SHA512 hashed site-id
50
54
  to make it unidentifiable; this report cannot be linked back to you or to your
51
55
  infrastructure. Now that said, we know that the more bits of data shared about a
52
56
  specific site, the easier it is to fingerprint that site. See
@@ -63,6 +67,8 @@ For example, this aggregated data might include records that show a count of how
63
67
  many sites are using various combinations of modules together, but it will never
64
68
  include a record showing the full list of modules that any single site is using.
65
69
 
70
+ ![Data aggregation workflow](./aggregation.png)
71
+
66
72
  With your own Google Cloud account, you can use that [dataset](https://console.cloud.google.com/bigquery?p=dataops-puppet-public-data&d=community&t=forge_modules&page=table)
67
73
  in your own tooling and you can see/contribute to the aggregation queries in its
68
74
  own [repository](https://github.com/puppetlabs/dropsonde-aggregation).
@@ -85,9 +91,11 @@ possible: [privacy@puppet.com](mailto:privacy@puppet.com)
85
91
 
86
92
  ## Installation
87
93
 
88
- This is distributed as a Ruby gem. Simply `gem install dropsonde`. There's a
89
- [Puppet module](https://github.com/puppetlabs/puppetlabs-dropsonde) to manage it
90
- if that's more your thing.
94
+ As of Puppetserver 7.5.0, Dropsonde is bundled in as a standard `puppetserver`
95
+ command. If you're running an older version, you can install it yourself with
96
+ `gem install dropsonde` or let the
97
+ [Puppet module](https://github.com/puppetlabs/puppetlabs-dropsonde) manage it
98
+ for you.
91
99
 
92
100
 
93
101
  ## Configuration
@@ -100,11 +108,33 @@ will not report the `:puppetfiles` metrics.
100
108
  ``` yaml
101
109
  ---
102
110
  :update: false
103
- :blacklist:
111
+ :disable:
104
112
  - puppetfiles
105
113
  ```
106
114
 
107
- The `puppetlabs-dropsonde` Puppet module manages this configuration for you.
115
+ The [`puppetlabs-dropsonde`](https://github.com/puppetlabs/puppetlabs-dropsonde)
116
+ Puppet module manages this configuration for you.
117
+
118
+
119
+ ## Scheduled Reporting
120
+
121
+ Dropsonde is intended to run on a regular schedule to submit usage reports back
122
+ to Puppet. The [`puppetlabs-dropsonde`](https://github.com/puppetlabs/puppetlabs-dropsonde)
123
+ Puppet module will manage this for you, or you can follow the instructions below
124
+ to configure a schedule manually.
125
+
126
+ If you're running Puppetserver 7.5.0 or above, it's already set up so you can
127
+ simply opt in. Add or update the following stanza of
128
+ `/etc/puppetlabs/puppetserver/conf.d/puppetserver.conf`:
129
+
130
+ ``` hocon
131
+ dropsonde: {
132
+ enabled: true
133
+ }
134
+ ```
135
+
136
+ If you're running an older version of Puppetserver, then create a cron job that
137
+ runs `dropsonde submit` once a week.
108
138
 
109
139
 
110
140
  ## Running
@@ -137,7 +167,7 @@ Developer comands
137
167
 
138
168
  ## Architecture
139
169
 
140
- Dropsonde is a simple telemetry probe designed to run as a regular cron job. It
170
+ Dropsonde is a simple telemetry probe designed to run as a scheduled task. It
141
171
  will gather metrics defined by self-contained plugins that each defines its own
142
172
  partial schema and then gathers the data to meet that schema.
143
173
 
@@ -153,7 +183,8 @@ of modules is updated.
153
183
 
154
184
  ## Limitations
155
185
 
156
- This is super early in development and has not yet been battle tested.
186
+ The output format of individual metrics is not yet formally defined. If you write
187
+ tooling to use it, then make your tooling resilient to changes.
157
188
 
158
189
 
159
190
  Contact
data/bin/dropsonde CHANGED
@@ -5,6 +5,9 @@ require 'dropsonde'
5
5
  class Dropsonde
6
6
  extend GLI::App
7
7
 
8
+ @cache = nil
9
+ @puppetdb_session = Dropsonde.new
10
+
8
11
  program_desc 'A simple telemetry tool for Puppet infrastructures'
9
12
  config_file "#{File.dirname(Puppet.settings[:confdir])}/telemetry.yaml"
10
13
  version Dropsonde::VERSION
@@ -22,20 +25,26 @@ class Dropsonde
22
25
  flag [:ttl], :default_value => 7, :type => Integer
23
26
 
24
27
  desc 'List of metrics to omit'
25
- flag [:blacklist, :b], :type => Array
28
+ flag [:disable, :d], :type => Array
29
+
30
+ desc 'Only load these metrics'
31
+ flag [:enable, :e], :type => Array
26
32
 
27
33
  desc 'Any number or string used to generate the randomized site ID.'
28
34
  flag [:seed]
29
35
 
36
+ desc 'Static site ID'
37
+ flag [:siteid]
38
+
30
39
  pre do |global, command, options, args|
31
40
  Dropsonde.settings = global
32
- Dropsonde::Cache.init(global[:cachepath], global[:ttl], global[:update])
41
+ @cache = Dropsonde::Cache.new(global[:cachepath], global[:ttl], global[:update])
33
42
  end
34
43
 
35
44
  desc 'Manually update the Forge module name cache'
36
45
  command :update do |c|
37
46
  c.action do |global, options, args|
38
- Dropsonde::Cache.update
47
+ @cache.update
39
48
  end
40
49
  end
41
50
 
@@ -52,21 +61,21 @@ class Dropsonde
52
61
  c.flag [:format], :default_value => 'human'
53
62
 
54
63
  c.action do |global, options, args|
55
- Dropsonde::Cache.autoupdate
56
- Dropsonde.generate_report(options[:format])
64
+ @cache.autoupdate
65
+ Dropsonde.generate_report(options[:format], @puppetdb_session)
57
66
  end
58
67
  end
59
68
 
60
69
  desc 'Submit a telemetry report'
61
70
  command :submit do |c|
62
71
  c.desc 'Telemetry endpoint'
63
- c.flag [:endpoint], :default_value => 'https://prod.dujour.k8s.puppet.net'
72
+ c.flag [:endpoint], :default_value => 'https://updates.puppet.com'
64
73
 
65
74
  c.desc 'Telemetry port'
66
75
  c.flag [:port], :default_value => 443, :type => Integer
67
76
 
68
77
  c.action do |global, options, args|
69
- Dropsonde::Cache.autoupdate
78
+ @cache.autoupdate
70
79
  Dropsonde.submit_report(options[:endpoint], options[:port])
71
80
  end
72
81
  end
@@ -102,13 +111,13 @@ class Dropsonde
102
111
  This is in jsonl format for direct upload to BigQuery."
103
112
  t.command :example do |c|
104
113
  c.desc 'How many rows to generate'
105
- c.flag [:size], :default_value => 100
114
+ c.flag [:size], :default_value => 100, :type => Integer
106
115
 
107
116
  c.desc 'Filename for the output (in jsonl format).'
108
117
  c.flag [:filename], :default_value => 'example.jsonl'
109
118
 
110
119
  c.action do |global, options, args|
111
- Dropsonde::Cache.autoupdate
120
+ @cache.autoupdate
112
121
  Dropsonde.generate_example(options[:size], options[:filename])
113
122
  end
114
123
  end
@@ -1,34 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
2
4
  require 'json'
3
5
  require 'fileutils'
4
6
  require 'puppet_forge'
5
7
 
8
+ # cache class
6
9
  class Dropsonde::Cache
7
- @@autoupdate = false
10
+ @autoupdate = false
8
11
 
9
- def self.init(path, ttl, autoupdate)
12
+ def initialize(path, ttl, autoupdate)
10
13
  FileUtils.mkdir_p(path)
11
- @@path = "#{File.expand_path(path)}/forge.json"
12
- @@ttl = ttl
13
- @@autoupdate = autoupdate
14
-
15
- if File.file? @@path
16
- @@cache = JSON.parse(File.read(@@path))
17
- else
18
- @@cache = {
19
- 'timestamp' => '2000-1-1', # long before any puppet modules were released!
20
- 'modules' => [],
21
- }
22
- end
23
-
24
- PuppetForge.user_agent = "Dropsonde Telemetry Client/0.0.1"
14
+ @path = "#{File.expand_path(path)}/forge.json"
15
+ @ttl = ttl
16
+ @autoupdate = autoupdate
17
+
18
+ @@cache = if File.file? @path # rubocop:disable Style/ClassVars
19
+ JSON.parse(File.read(@path))
20
+ else
21
+ {
22
+ 'timestamp' => '2000-1-1', # long before any puppet modules were released!
23
+ 'modules' => [],
24
+ }
25
+ end
26
+
27
+ PuppetForge.user_agent = 'Dropsonde Telemetry Client/0.0.1'
25
28
  end
26
29
 
27
- def self.modules
30
+ def modules
28
31
  @@cache['modules']
29
32
  end
30
33
 
31
- def self.forgeModule?(mod)
34
+ def cache
35
+ @@cache
36
+ end
37
+
38
+ def self.forge_module?(mod)
32
39
  case mod
33
40
  when Puppet::Module
34
41
  modname = mod.forge_slug
@@ -39,12 +46,12 @@ class Dropsonde::Cache
39
46
  end
40
47
  return unless modname
41
48
 
42
- modules.include? modname.tr('/','-')
49
+ @@cache['modules'].include? modname.tr('/', '-')
43
50
  end
44
51
 
45
- def self.update
46
- puts "Updating module cache..."
47
- iter = PuppetForge::Module.all(:sort_by => 'latest_release')
52
+ def update
53
+ puts 'Updating module cache...'
54
+ iter = PuppetForge::Module.all(sort_by: 'latest_release')
48
55
  newest = DateTime.parse(@@cache['timestamp'])
49
56
 
50
57
  @@cache['timestamp'] = iter.first.updated_at
@@ -53,7 +60,7 @@ class Dropsonde::Cache
53
60
  # stop once we reach modules we've already cached
54
61
  break if DateTime.parse(iter.first.updated_at) <= newest
55
62
 
56
- @@cache['modules'].concat iter.map {|mod| mod.slug }
63
+ @@cache['modules'].concat(iter.map { |mod| mod.slug })
57
64
 
58
65
  iter = iter.next
59
66
  print '.'
@@ -62,22 +69,19 @@ class Dropsonde::Cache
62
69
  @@cache['modules'].sort!
63
70
  @@cache['modules'].uniq!
64
71
 
65
- File.write(@@path, JSON.pretty_generate(@@cache))
72
+ File.write(@path, JSON.pretty_generate(@@cache))
66
73
  end
67
74
 
68
- def self.autoupdate
69
- return unless @@autoupdate
75
+ def autoupdate
76
+ return unless @autoupdate
70
77
 
71
- unless File.file? @@path
72
- puts "Dropsonde caches a list of all Forge modules to ensure that it only reports"
73
- puts "usage data on public modules. Generating this cache may take some time on"
78
+ unless File.file? @path
79
+ puts 'Dropsonde caches a list of all Forge modules to ensure that it only reports'
80
+ puts 'usage data on public modules. Generating this cache may take some time on'
74
81
  puts "the first run and you'll see your screen fill up with dots."
75
82
  update
76
83
  end
77
84
 
78
- if (Date.today - File.mtime(@@path).to_date).to_i > @@ttl
79
- update
80
- end
85
+ return update if (Date.today - File.mtime(@path).to_date).to_i > @ttl
81
86
  end
82
-
83
87
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # dependencies plugin
1
4
  class Dropsonde::Metrics::Dependencies
2
5
  def self.initialize_dependencies
3
6
  # require any libraries needed here -- no need to load puppet; it's already initialized
@@ -5,10 +8,10 @@ class Dropsonde::Metrics::Dependencies
5
8
  end
6
9
 
7
10
  def self.description
8
- <<~EOF
11
+ <<~DESCRIPTION
9
12
  This group of metrics discovers dependencies between modules in all
10
13
  environments. It will omit dependencies on private modules.
11
- EOF
14
+ DESCRIPTION
12
15
  end
13
16
 
14
17
  def self.schema
@@ -18,23 +21,23 @@ class Dropsonde::Metrics::Dependencies
18
21
  {
19
22
  "fields": [
20
23
  {
21
- "description": "The depended on module name",
22
- "mode": "NULLABLE",
23
- "name": "name",
24
- "type": "STRING"
24
+ "description": 'The depended on module name',
25
+ "mode": 'NULLABLE',
26
+ "name": 'name',
27
+ "type": 'STRING',
25
28
  },
26
29
  {
27
- "description": "The depended on module version requirement",
28
- "mode": "NULLABLE",
29
- "name": "version_requirement",
30
- "type": "STRING"
31
- }
30
+ "description": 'The depended on module version requirement',
31
+ "mode": 'NULLABLE',
32
+ "name": 'version_requirement',
33
+ "type": 'STRING',
34
+ },
32
35
  ],
33
- "description": "List of modules that private modules in all environments depend on.",
34
- "mode": "REPEATED",
35
- "name": "dependencies",
36
- "type": "RECORD"
37
- }
36
+ "description": 'List of modules that private modules in all environments depend on.',
37
+ "mode": 'REPEATED',
38
+ "name": 'dependencies',
39
+ "type": 'RECORD',
40
+ },
38
41
  ]
39
42
  end
40
43
 
@@ -42,26 +45,25 @@ class Dropsonde::Metrics::Dependencies
42
45
  # run just before generating this metric
43
46
  end
44
47
 
45
- def self.run
48
+ def self.run(_puppetdb_session = nil)
46
49
  # return an array of hashes representing the data to be merged into the combined checkin
47
- environments = Puppet.lookup(:environments).list.map{|e|e.name}
48
- modules = environments.map do |env|
50
+ environments = Puppet.lookup(:environments).list.map { |e| e.name }
51
+ modules = environments.map { |env|
49
52
  Puppet.lookup(:environments).get(env).modules
50
- end.flatten
53
+ }.flatten
51
54
 
52
55
  # we want only PUBLIC modules that PRIVATE modules depend on
53
- dependencies = modules.map do|mod|
56
+ dependencies = modules.map { |mod|
54
57
  next unless mod.dependencies
55
- next if Dropsonde::Cache.forgeModule? mod # skip unless this is a private module
58
+ next if Dropsonde::Cache.forge_module? mod # skip unless this is a private module
56
59
 
57
60
  # and return a list of all public modules it depends on
58
- mod.dependencies.select {|mod| Dropsonde::Cache.forgeModule? mod }
59
- end.flatten.compact
61
+ mod.dependencies.select { |dep| Dropsonde::Cache.forge_module? dep }
62
+ }.flatten.compact
60
63
 
61
64
  [
62
- { :dependencies => dependencies },
65
+ { dependencies: dependencies },
63
66
  ]
64
-
65
67
  end
66
68
 
67
69
  def self.example
@@ -69,14 +71,17 @@ class Dropsonde::Metrics::Dependencies
69
71
  # make it easier to write data aggregation queries without access to the
70
72
  # actual private data that users have submitted.
71
73
 
74
+ dropsonde_cache = Dropsonde::Cache.new('foo', 7, true)
72
75
  versions = ['>= 1.5.2', '>= 4.3.2', '>= 3.0.0 < 4.0.0', '>= 2.2.1 < 5.0.0', '>= 5.0.0 < 7.0.0', '>= 4.11.0']
73
76
  [
74
- :dependencies => Dropsonde::Cache.modules
75
- .sample(rand(250))
76
- .map {|item| {
77
- :name => item,
78
- :version_requirement => versions.sample,
79
- }},
77
+ dependencies: dropsonde_cache.modules
78
+ .sample(rand(250))
79
+ .map do |item|
80
+ {
81
+ name: item,
82
+ version_requirement: versions.sample,
83
+ }
84
+ end,
80
85
  ]
81
86
  end
82
87
 
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ # environments plugin
4
+ class Dropsonde::Metrics::Environments
5
+ def self.initialize_environments
6
+ # Require any libraries needed here -- no need to load puppet or puppetdb;
7
+ # they're already loaded. This hook is named after the class name.
8
+ # All plugins are initialized at startup before any metrics are generated.
9
+ end
10
+
11
+ def self.description
12
+ # This is a Ruby squiggle heredoc; just a multi-line string with indentation removed
13
+ <<~DESCRIPTION
14
+ This group of metrics gathers information about environments.
15
+ DESCRIPTION
16
+ end
17
+
18
+ def self.schema
19
+ # return an array of hashes of a partial schema to be merged into the complete schema
20
+ [
21
+ {
22
+ "description": 'The number of environments',
23
+ "mode": 'NULLABLE',
24
+ "name": 'environment_count',
25
+ "type": 'INTEGER',
26
+ },
27
+ ]
28
+ end
29
+
30
+ def self.setup
31
+ # run just before generating this metric
32
+ end
33
+
34
+ def self.run(_puppetdb_session = nil)
35
+ # return an array of hashes representing the data to be merged into the combined checkin
36
+ [
37
+ environment_count: Puppet.lookup(:environments).list.count,
38
+ ]
39
+ end
40
+
41
+ def self.example
42
+ # this method is used to generate a table filled with randomized data to
43
+ # make it easier to write data aggregation queries without access to the
44
+ # actual private data that users have submitted.
45
+ [
46
+ environment_count: rand(1..100),
47
+ ]
48
+ end
49
+
50
+ def self.cleanup
51
+ # run just after generating this metric
52
+ end
53
+ end