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