sensu-plugins-mesos 2.1.2 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49f47811de2e1c9561493b853c17c7798a928756a3a833dbd84f443f232ea401
4
- data.tar.gz: a702867f72846ecc058f68a81c02a6f1e5ceb4376fd730c14ea7a272aac85626
3
+ metadata.gz: e10b24c48670147d1b92bd26eb23f9d3d41cc8898a9eceae4e8eec37337c275d
4
+ data.tar.gz: 36f43ad36b03fa997bd3658d2f918a503d1a5e0ae74cab0bbef9bc40cedeef44
5
5
  SHA512:
6
- metadata.gz: 67698870e977112d92d95a3615b51041ee4d69e0f68366d3bdf70ac4152b1f130fd566de63b619e960a3c5456da4ad808f9a5b25d8d39ecec3431a894769ab05
7
- data.tar.gz: cea4ad31176d7c96a326b5c50832a3a7b57c92d4ea241b8c96007f8fde84c51a741147561608731c4cc1fba9d203b4754b6f61777b8673391f1e0924fbe33fa4
6
+ metadata.gz: 7f1dd2f114f1179da80e69c48555a700e64bde5ac561827e8353aec76c305d92def4afec8b00110f7d6b2be832def154716bb178bd378976d0d3511c35967222
7
+ data.tar.gz: e6e8302cd5a95ba10e2f6dafe8556e32eb2c718245f212664b6316224f2e883509093abff12e0b7e234edb527f12a43639ac293dbd416c6c43f6131693850078
data/CHANGELOG.md CHANGED
@@ -1,10 +1,18 @@
1
1
  # Change Log
2
2
  This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
- This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
4
+ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins/community/blob/master/HOW_WE_CHANGELOG.md)
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.3.0] - 2018-03-17
9
+ ### Added
10
+ - testing skeleton for `test-kitchen`, `kitchen-docker`, and `serverspec` (@majormoses)
11
+ - check-marathon-apps.rb: create a check result per Marathon app (@bergerx, @epierotto)
12
+
13
+ ### Changed
14
+ - updated CHANGELOG guidelines location (@majormoses)
15
+
8
16
  ## [2.2.2] - 2017-12-05
9
17
  ### Fixed
10
18
  - metrics-marathon.rb: ignore 2 new keys (start, end) in Marathon 1.5 /metrics endpoint (@bergerx)
@@ -86,7 +94,9 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
86
94
  ### Added
87
95
  - initial release
88
96
 
89
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-mesos/compare/2.1.2...HEAD
97
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-mesos/compare/2.3.0...HEAD
98
+ [2.3.0]: https://github.com/sensu-plugins/sensu-plugins-mesos/compare/2.2.2...2.3.0
99
+ [2.2.2]: https://github.com/sensu-plugins/sensu-plugins-mesos/compare/2.1.2...2.2.2
90
100
  [2.1.2]: https://github.com/sensu-plugins/sensu-plugins-mesos/compare/2.1.1...2.1.2
91
101
  [2.1.1]: https://github.com/sensu-plugins/sensu-plugins-mesos/compare/2.1.0...2.1.1
92
102
  [2.1.0]: https://github.com/sensu-plugins/sensu-plugins-mesos/compare/2.0.0...2.1.0
data/README.md CHANGED
@@ -12,6 +12,7 @@
12
12
  * bin/check-chronos.rb
13
13
  * bin/check-metronome.rb
14
14
  * bin/check-marathon.rb
15
+ * bin/check-marathon-apps.rb
15
16
  * bin/check-mesos.rb
16
17
  * bin/check-mesos-cpu-balance.rb
17
18
  * bin/check-mesos-disk-balance.rb
@@ -0,0 +1,398 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-marathon-apps
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin creates checks results for each Marathon app that is running,
7
+ # and reports the status of the app based on Marathon Application Status Reference.
8
+ # https://mesosphere.github.io/marathon/docs/marathon-ui.html#application-status-reference
9
+ #
10
+ # OUTPUT:
11
+ # plain text
12
+ #
13
+ # PLATFORMS:
14
+ # Linux
15
+ #
16
+ # DEPENDENCIES:
17
+ # gem: sensu-plugin
18
+ #
19
+ # USAGE:
20
+ # Exclude apps matching "test"
21
+ # check-marathon-apps.rb -x test
22
+ # CheckMarathonApps OK: Marathon Apps Status and Health check is running properly
23
+ #
24
+ # Only apps matching "test"
25
+ # check-marathon-task.rb -i test
26
+ # CheckMarathonApps OK: Marathon Apps Status and Health check is running properly
27
+ #
28
+ # NOTES:
29
+ #
30
+ # LICENSE:
31
+ # Copyright 2018, Sensu Plugins
32
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
33
+ # for details.
34
+ #
35
+
36
+ require 'sensu-plugin/check/cli'
37
+ require 'rest-client'
38
+ require 'json'
39
+
40
+ # This plugin checks Marathon apps based on https://mesosphere.github.io/marathon/docs/marathon-ui.html#application-status-reference
41
+ #
42
+ # It produces a check result for `health` and another check result for `status`
43
+ # Check results can be customised by providing default values on '--default-check-config JSON' or by populating Marathon app labels, example:
44
+ # SENSU_MARATHON_STATUS_UNSCHEDULED_TTL = 10
45
+ # SENSU_MARATHON_STATUS_UNSCHEDULED_SOURCE = my_source
46
+ #
47
+ # Those labels will override the default values and create the following check result if the status is Unscheduled:
48
+ # {
49
+ # "name": "check_marathon_app_test_status",
50
+ # "executed": 1519305736,
51
+ # "marathon": {
52
+ # "id": "/test",
53
+ # "version": "2018-02-20T15:09:43.086Z",
54
+ # "versionInfo": {
55
+ # "lastScalingAt": "2018-02-20T15:09:43.086Z",
56
+ # "lastConfigChangeAt": "2018-02-20T15:09:43.086Z"
57
+ # },
58
+ # "tasksStaged": 0,
59
+ # "tasksRunning": 1,
60
+ # "tasksHealthy": 1,
61
+ # "tasksUnhealthy": 0
62
+ # },
63
+ # "source": "my_source",
64
+ # "output": "STATUS Unscheduled - tasksRunning(1), tasksStaged(0), tasksHealthy(1), tasksUnhealthy(0)",
65
+ # "ttl": 10,
66
+ # "status": 0
67
+ # }
68
+ #
69
+ class MarathonAppsCheck < Sensu::Plugin::Check::CLI
70
+ REFERENCES = %w(health status).freeze
71
+ STATUS_STATES = %w(waiting delayed suspended deploying running).freeze
72
+ HEALTH_STATES = %w(unscheduled overcapacity staged unknown unhealthy healthy).freeze
73
+ APPS_EMBED_RESOURCES = %w(apps.task apps.count apps.deployments apps.lastTaskFailure apps.failures apps.taskStats).freeze
74
+ DEFAULT_CHECK_CONFIG = <<-CONFIG.gsub(/^\s+\|/, '').freeze
75
+ |{
76
+ | "_": {"ttl": 70},
77
+ | "status":{
78
+ | "running": {"status": 0},
79
+ | "delayed": {"status": 1},
80
+ | "deploying": {"status": 1},
81
+ | "suspended": {"status": 1},
82
+ | "waiting": {"status": 1}
83
+ | },
84
+ | "health":{
85
+ | "healthy": {"status": 0},
86
+ | "overcapacity": {"status": 1},
87
+ | "staged": {"status": 1},
88
+ | "unhealthy": {"status": 2},
89
+ | "unscheduled": {"status": 2},
90
+ | "unknown": {"status": 0}
91
+ | }
92
+ |}
93
+ CONFIG
94
+
95
+ check_name 'CheckMarathonApps'
96
+ banner <<-BANNER.gsub(/^\s+\|/, '')
97
+ |Usage: ./check-marathon-apps.rb (options)
98
+ |
99
+ |This check will always return OK and publish two check results (health and status) per Marathon app.
100
+ |Marathon applications can override default_check_config by using labels as described below.
101
+ |
102
+ |Some example labels that can be used in Marathon application manifests:
103
+ |
104
+ |# Publish '"aggregate": "component"' field in the check results for all health and status checks.
105
+ |- SENSU_MARATHON_AGGREGATE=component
106
+ |# similar for some other fields
107
+ |- SENSU_MARATHON_CONTACT=support
108
+ |
109
+ |# Publish '"aggregate": "component"' field in the check results only for status checks.
110
+ |- SENSU_MARATHON_STATUS_AGGREGATE=component
111
+ |# Don't handle status check results
112
+ |- SENSU_MARATHON_STATUS_HANDLE=false
113
+ |
114
+ |# Generate UNKNOWN result for unknown health status, rather then the default OK result
115
+ |- SENSU_MARATHON_HEALTH_UNKNOWN_STATUS=3
116
+ |
117
+ |Similar logic could be applied for the provided default_check_config. Values
118
+ |under the special '_' key will be used as a default value for deeper levels.
119
+ |
120
+ |Here is the default value for default_check_config:
121
+ |#{DEFAULT_CHECK_CONFIG}
122
+ |
123
+ |Options:
124
+ BANNER
125
+
126
+ option :url,
127
+ description: 'Marathon API URL',
128
+ short: '-u url',
129
+ long: '--url url',
130
+ default: 'http://localhost:8080'
131
+
132
+ option :username,
133
+ short: '-u USERNAME',
134
+ long: '--username USERNAME',
135
+ default: nil,
136
+ required: false,
137
+ description: 'Marathon API username'
138
+
139
+ option :password,
140
+ long: '--password PASSWORD',
141
+ default: nil,
142
+ required: false,
143
+ description: 'Marathon API password'
144
+
145
+ option :match_pattern,
146
+ short: '-m PATTERN',
147
+ long: '--match-pattern PATTERN',
148
+ required: false,
149
+ description: 'Match app names against a pattern, exlude pattern takes precedence if both provided'
150
+
151
+ option :exclude_pattern,
152
+ short: '-x PATTERN',
153
+ long: '--exclude-pattern PATTERN',
154
+ required: false,
155
+ description: 'Exclude apps that match a pattern, takes precedence over match pattern'
156
+
157
+ option :marathon_keys,
158
+ long: '--marathon-keys KEY1,KEY2,KEY3',
159
+ default: 'id,version,versionInfo,tasksStaged,tasksRunning,tasksHealthy,tasksUnhealthy,lastTaskFailure',
160
+ required: false,
161
+ description: 'Keys retrieved from Marathon API that will be included in the output'
162
+
163
+ option :default_check_config,
164
+ long: '--default-check-config "{"status":{"running":{"valid":"json"}},"health":{"healthy":{"valid":"json"}}}"',
165
+ required: false,
166
+ description: 'Default values to be used while creating the check results, '\
167
+ 'can be overridden in a per-marathon application config via Marathon labels.'
168
+
169
+ option :default_check_config_file,
170
+ long: '--default-check-config-file CONFIG_FILE',
171
+ required: false,
172
+ description: 'Similar to `--default-check-config` but read from given file. If both parameters are provided '\
173
+ '`--default-check-config` will override this one.'
174
+
175
+ option :sensu_client_url,
176
+ description: 'Sensu client HTTP URL socket',
177
+ long: '--sensu-client-url url',
178
+ default: 'http://localhost:3031'
179
+
180
+ option :timeout,
181
+ description: 'timeout in seconds',
182
+ short: '-T TIMEOUT',
183
+ long: '--timeout TIMEOUT',
184
+ proc: proc(&:to_i),
185
+ default: 5
186
+
187
+ def run
188
+ if !config[:username].nil? && config[:password].nil? || config[:username].nil? && !config[:password].nil?
189
+ unknown 'You must provide both username and password to authenticate on Marathon API'
190
+ end
191
+
192
+ # Get Marathon API apps
193
+ apps = fetch_apps
194
+
195
+ # Get Marathon API queue
196
+ queue = fetch_queue
197
+
198
+ # Get and parse default check config
199
+ check_config_str = if !config[:default_check_config].nil?
200
+ config[:default_check_config]
201
+ elsif !config[:default_check_config_file].nil?
202
+ File.read(config[:default_check_config_file])
203
+ else
204
+ DEFAULT_CHECK_CONFIG
205
+ end
206
+ check_config = parse_json(check_config_str)
207
+
208
+ # Filter apps, if both exists exclude pattern will override match pattern
209
+ apps.keep_if { |app| app['id'][/#{config[:match_pattern]}/] } if config[:match_pattern]
210
+ apps.delete_if { |app| app['id'][/#{config[:exclude_pat]}/] } if config[:exclude_pat]
211
+
212
+ apps.each do |app|
213
+ # Select app queue if any
214
+ app_queue = queue.select { |q| q['app']['id'][/^#{app['id']}$/] }.to_a.first
215
+
216
+ # Build check result
217
+ check_result = check_result_scaffold(app)
218
+
219
+ # Parse Marathon app labels
220
+ labels_config = parse_app_labels(app['labels'].to_h)
221
+
222
+ REFERENCES.each do |reference|
223
+ # / is and invalid character
224
+ check_result['name'] = "check_marathon_app#{app['id'].tr('/', '_')}_#{reference}"
225
+
226
+ state = case reference
227
+ when 'health'
228
+ get_marathon_app_health(app)
229
+ when 'status'
230
+ get_marathon_app_status(app, app_queue.to_h)
231
+ end
232
+
233
+ # Merge user provided check config
234
+ check_result.merge!(check_config.dig('_').to_h)
235
+ check_result.merge!(check_config.dig(reference, '_').to_h)
236
+ check_result.merge!(check_config.dig(reference, state).to_h)
237
+
238
+ # Merge Marathon parsed check config
239
+ check_result.merge!(labels_config.dig('_').to_h)
240
+ check_result.merge!(labels_config.dig(reference, '_').to_h)
241
+ check_result.merge!(labels_config.dig(reference, state).to_h)
242
+
243
+ # Build check result output
244
+ check_result['output'] = "#{reference.upcase} #{state.capitalize} - "\
245
+ "tasksRunning(#{app['tasksRunning'].to_i}), tasksStaged(#{app['tasksStaged'].to_i}), "\
246
+ "tasksHealthy(#{app['tasksHealthy'].to_i}), tasksUnhealthy(#{app['tasksUnhealthy'].to_i})"
247
+
248
+ # Make sure that check result data types are correct
249
+ sanitize_check_result(check_result)
250
+
251
+ # Send the result to sensu-client HTTP socket
252
+ post_check_result(check_result)
253
+ end
254
+ end
255
+
256
+ ok 'Marathon Apps Status and Health check is running properly'
257
+ end
258
+
259
+ def check_result_scaffold(app)
260
+ {
261
+ 'name' => '',
262
+ 'executed' => Time.now.to_i,
263
+ 'marathon' => app.select { |k, _| config[:marathon_keys].split(',').include?(k) },
264
+ 'source' => 'marathon',
265
+ 'output' => '',
266
+ 'status' => 3
267
+ }
268
+ end
269
+
270
+ def sanitize_check_result(check_result)
271
+ # Force data types of different fields on the check result
272
+ # https://sensuapp.org/docs/latest/reference/checks.html#example-check-definition
273
+ # https://sensuapp.org/docs/latest/reference/checks.html#check-result-specification
274
+ check_result.each do |k, v|
275
+ if %w(publish standalone auto_resolve force_resolve handle truncate_output).include?(k)
276
+ # Boolean
277
+ check_result[k] = v.to_s.eql?('true')
278
+ elsif %w(status interval issued executed timeout ttl ttl_status low_flap_threshold high_flap_threshold truncate_output_length).include?(k)
279
+ # Integer
280
+ check_result[k] = Integer(v)
281
+ elsif %w(subscribers handlers aggregates).include?(k)
282
+ # Array
283
+ check_result[k] = Array(v.split(','))
284
+ end
285
+ end
286
+ end
287
+
288
+ def get(path)
289
+ RestClient.get("#{config[:url]}#{path}",
290
+ user: config[:username],
291
+ password: config[:password],
292
+ accept: 'application/json',
293
+ timeout: config[:timeout]).body
294
+ rescue RestClient::ExceptionWithResponse => e
295
+ critical "Error while trying to GET (#{config[:url]}#{path}): #{e.response}"
296
+ end
297
+
298
+ def fetch_apps
299
+ # http://mesosphere.github.io/marathon/api-console/index.html
300
+ resources_query = APPS_EMBED_RESOURCES.map { |resource| "embed=#{resource}" }.join('&')
301
+ parse_json(get("/v2/apps?#{resources_query}"))['apps']
302
+ end
303
+
304
+ def fetch_queue
305
+ # http://mesosphere.github.io/marathon/api-console/index.html
306
+ parse_json(get('/v2/queue'))['queue']
307
+ end
308
+
309
+ def post_check_result(data)
310
+ RestClient.post("#{config[:sensu_client_url]}/results",
311
+ data.to_json,
312
+ content_type: 'application/json',
313
+ timeout: config[:timeout])
314
+ rescue RestClient::ExceptionWithResponse => e
315
+ critical "Error while trying to POST check result (#{config[:sensu_client_url]}/results): #{e.response}"
316
+ end
317
+
318
+ def parse_json(json)
319
+ JSON.parse(json.to_s)
320
+ rescue JSON::ParserError => e
321
+ critical "Failed to parse JSON: #{e}\nJSON => #{json}"
322
+ end
323
+
324
+ def parse_app_labels(app_labels)
325
+ config = {}
326
+ # Only grab labels that starts with SENSU_MARATHON
327
+ labels = app_labels.to_h.select { |e| /^SENSU_MARATHON/.match(e) }
328
+
329
+ labels.each do |label, value|
330
+ config_keys = label.split('_')
331
+
332
+ # Delete SENSU and MARATHON element
333
+ config_keys.delete_if { |k| /^SENSU$|^MARATHON$/.match(k) }
334
+
335
+ # Downcase
336
+ config_keys.map!(&:downcase)
337
+
338
+ reference = config_keys.shift if REFERENCES.include? config_keys[0]
339
+ if (reference == 'health' && HEALTH_STATES.include?(config_keys[0])) ||
340
+ (reference == 'status' && STATUS_STATES.include?(config_keys[0]))
341
+ state = config_keys.shift
342
+ end
343
+ key = config_keys.join(' ')
344
+
345
+ # Add nested keys and value
346
+ unless reference
347
+ config['_'] ||= {}
348
+ config['_'][key] = value
349
+ next
350
+ end
351
+ config[reference] ||= {}
352
+ unless state
353
+ config[reference]['_'] ||= {}
354
+ config[reference]['_'][key] = value
355
+ next
356
+ end
357
+ config[reference][state] ||= {}
358
+ config[reference][state][key] = value
359
+ end
360
+ config
361
+ end
362
+
363
+ def get_marathon_app_status(app, app_queue)
364
+ # https://mesosphere.github.io/marathon/docs/marathon-ui.html#application-status-reference
365
+ if app_queue.to_h.dig('delay', 'overdue') == true
366
+ 'waiting'
367
+ elsif app_queue.to_h.dig('delay', 'overdue') == false
368
+ 'delayed'
369
+ elsif app['instances'].to_i.zero? && app['tasksRunning'].to_i.zero?
370
+ 'suspended'
371
+ elsif app['deployments'].to_a.any?
372
+ 'deploying'
373
+ elsif app['instances'].to_i == app['tasksRunning'].to_i
374
+ 'running'
375
+ else
376
+ ''
377
+ end
378
+ end
379
+
380
+ def get_marathon_app_health(app)
381
+ # https://mesosphere.github.io/marathon/docs/marathon-ui.html#application-health-reference
382
+ if app['tasks'].to_a.length.zero? && app['deployments'].to_a.length.zero?
383
+ 'unscheduled'
384
+ elsif app['instances'].to_i < app['tasksRunning'].to_i
385
+ 'overcapacity'
386
+ elsif app['tasksStaged'].to_i > 0
387
+ 'staged'
388
+ elsif app['healthChecks'].to_a.empty?
389
+ 'unknown'
390
+ elsif app['tasksUnhealthy'].to_i > 0
391
+ 'unhealthy'
392
+ elsif app['healthChecks'].to_a.any? && app['tasksHealthy'].to_i > 0
393
+ 'healthy'
394
+ else
395
+ ''
396
+ end
397
+ end
398
+ end
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsMesos
2
2
  module Version
3
3
  MAJOR = 2
4
- MINOR = 1
5
- PATCH = 2
4
+ MINOR = 3
5
+ PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-mesos
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-06 00:00:00.000000000 Z
11
+ date: 2018-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -94,6 +94,54 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: kitchen-docker
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.6'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: kitchen-localhost
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mixlib-shellout
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "<"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.3.0
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '2.2'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "<"
140
+ - !ruby/object:Gem::Version
141
+ version: 2.3.0
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '2.2'
97
145
  - !ruby/object:Gem::Dependency
98
146
  name: pry
99
147
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +212,20 @@ dependencies:
164
212
  - - "~>"
165
213
  - !ruby/object:Gem::Version
166
214
  version: 0.40.0
215
+ - !ruby/object:Gem::Dependency
216
+ name: test-kitchen
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: 1.16.0
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: 1.16.0
167
229
  - !ruby/object:Gem::Dependency
168
230
  name: yard
169
231
  requirement: !ruby/object:Gem::Requirement
@@ -204,21 +266,22 @@ description: |-
204
266
  for Mesos, Chronos, and Marathon.
205
267
  email: "<sensu-users@googlegroups.com>"
206
268
  executables:
207
- - check-chronos.rb
269
+ - metrics-mesos.rb
208
270
  - check-marathon-task.rb
209
- - check-marathon.rb
210
271
  - check-mesos-cpu-balance.rb
211
- - check-mesos-disk-balance.rb
272
+ - check-mesos-running-tasks.rb
273
+ - check-metronome.rb
274
+ - metrics-marathon.rb
212
275
  - check-mesos-failed-tasks.rb
213
276
  - check-mesos-gpu-balance.rb
214
- - check-mesos-leader-status.rb
215
- - check-mesos-lost-tasks.rb
216
277
  - check-mesos-mem-balance.rb
217
- - check-mesos-running-tasks.rb
278
+ - check-chronos.rb
279
+ - check-mesos-disk-balance.rb
280
+ - check-mesos-leader-status.rb
218
281
  - check-mesos.rb
219
- - check-metronome.rb
220
- - metrics-marathon.rb
221
- - metrics-mesos.rb
282
+ - check-marathon.rb
283
+ - check-mesos-lost-tasks.rb
284
+ - check-marathon-apps.rb
222
285
  extensions: []
223
286
  extra_rdoc_files: []
224
287
  files:
@@ -226,6 +289,7 @@ files:
226
289
  - LICENSE
227
290
  - README.md
228
291
  - bin/check-chronos.rb
292
+ - bin/check-marathon-apps.rb
229
293
  - bin/check-marathon-task.rb
230
294
  - bin/check-marathon.rb
231
295
  - bin/check-mesos-cpu-balance.rb
@@ -268,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
332
  version: '0'
269
333
  requirements: []
270
334
  rubyforge_project:
271
- rubygems_version: 2.7.3
335
+ rubygems_version: 2.7.6
272
336
  signing_key:
273
337
  specification_version: 4
274
338
  summary: Sensu plugins for checking mesos