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 +4 -4
- data/CHANGELOG.md +12 -2
- data/README.md +1 -0
- data/bin/check-marathon-apps.rb +398 -0
- data/lib/sensu-plugins-mesos/version.rb +2 -2
- metadata +76 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e10b24c48670147d1b92bd26eb23f9d3d41cc8898a9eceae4e8eec37337c275d
|
4
|
+
data.tar.gz: 36f43ad36b03fa997bd3658d2f918a503d1a5e0ae74cab0bbef9bc40cedeef44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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.
|
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
@@ -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
|
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.
|
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:
|
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
|
-
-
|
269
|
+
- metrics-mesos.rb
|
208
270
|
- check-marathon-task.rb
|
209
|
-
- check-marathon.rb
|
210
271
|
- check-mesos-cpu-balance.rb
|
211
|
-
- check-mesos-
|
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-
|
278
|
+
- check-chronos.rb
|
279
|
+
- check-mesos-disk-balance.rb
|
280
|
+
- check-mesos-leader-status.rb
|
218
281
|
- check-mesos.rb
|
219
|
-
- check-
|
220
|
-
-
|
221
|
-
-
|
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.
|
335
|
+
rubygems_version: 2.7.6
|
272
336
|
signing_key:
|
273
337
|
specification_version: 4
|
274
338
|
summary: Sensu plugins for checking mesos
|