sensu-plugins-mesos 2.1.2 → 2.3.0

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: 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