sensu-plugins-habitat 0.1.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 +7 -0
- data/CHANGELOG.md +11 -0
- data/LICENSE +22 -0
- data/README.md +52 -0
- data/bin/check-habitat-service-health.rb +205 -0
- data/lib/sensu_plugins_habitat/check/base.rb +146 -0
- data/lib/sensu_plugins_habitat/version.rb +15 -0
- data/lib/sensu_plugins_habitat.rb +4 -0
- metadata +217 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 78f83a717bdfd6489442ff6b8ecf5a9827bf75790418bb89cc9dfad4f1e6ebe8
|
4
|
+
data.tar.gz: 4e18e2eade59f650897c2866f68ce96ba9570ad88ff59e4c60dfdc1005242479
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5ff0ad6acbe87ef80973d755a723e08a1f09b57277b29bcf3bd68dda9fa6c93b354b039a4cf37b0909f12e2976bb4dea93b581f541434dde14bec5e85ed78cbb
|
7
|
+
data.tar.gz: 58e24650b0639c26b9f4bf0819d821547b027d3ad301d532a1178f72c9ee34a5297e403dac55587206ab8b0b257cc22deaa103b25102e7e426fa9bb815bce701
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
This project adheres to [Semantic Versioning](http://semver.org/).
|
4
|
+
|
5
|
+
This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
|
6
|
+
|
7
|
+
## [0.1.0] - 2017-10-09
|
8
|
+
### Added
|
9
|
+
- Initial release
|
10
|
+
|
11
|
+
[0.1.0]: https://github.com/socrata-platform/sensu-plugins-habitat/tree/v0.1.0
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2018 Sensu-Plugins
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Sensu Plugins Habitat
|
2
|
+
|
3
|
+
[][travis]
|
4
|
+
[][rubygems]
|
5
|
+
|
6
|
+
[travis]: https://travis-ci.com/socrata-platform/sensu-plugins-habitat
|
7
|
+
[rubygems]: https://rubygems.org/gems/sensu-plugins-habitat
|
8
|
+
|
9
|
+
A set of Sensu plugins for monitoring Habitat.
|
10
|
+
|
11
|
+
## Functionality
|
12
|
+
|
13
|
+
This gem includes a plugin for monitoring Habitat services' health check statuses via a supervisor API.
|
14
|
+
|
15
|
+
## Files
|
16
|
+
|
17
|
+
* bin/check-habitat-service-health.rb
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
***check-habitat-service-health.rb***
|
22
|
+
|
23
|
+
With only default options, the `check-habitat-service-health.rb` script assumes a Habitat supervisor on `127.0.0.1:9631`, iterates over all services running under that supervisor, and returns a CRITICAL result for any services with a failing health check.
|
24
|
+
|
25
|
+
```shell
|
26
|
+
check-habitat-service-health.rb
|
27
|
+
```
|
28
|
+
|
29
|
+
If the Habitat supervisor is on another host:
|
30
|
+
|
31
|
+
```shell
|
32
|
+
> check-habitat-service-health.rb -H 192.168.0.4
|
33
|
+
> check-habitat-service-health.rb --host 192.168.0.4
|
34
|
+
```
|
35
|
+
|
36
|
+
If the Habitat supervisor is on another port:
|
37
|
+
|
38
|
+
```shell
|
39
|
+
> check-habitat-service-health.rb -P 4242
|
40
|
+
> check-habitat-service-health.rb --port 4242
|
41
|
+
```
|
42
|
+
|
43
|
+
To check only a particular set of services running under the Habitat supervisor:
|
44
|
+
|
45
|
+
```shell
|
46
|
+
> check-habitat-service-health.rb -s service1.default,service2.default
|
47
|
+
> check-habitat-service-health.rb --services service1.default,service2.default
|
48
|
+
```
|
49
|
+
|
50
|
+
## Installation
|
51
|
+
|
52
|
+
[Installation and Setup](http://sensu-plugins.io/docs/installation_instructions.html)
|
@@ -0,0 +1,205 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: false
|
3
|
+
|
4
|
+
#
|
5
|
+
# check-habitat-service-health.rb
|
6
|
+
#
|
7
|
+
# DESCRIPTION:
|
8
|
+
# This check queries a Habitat supervisor's API to monitor the health status
|
9
|
+
# of its servies.
|
10
|
+
#
|
11
|
+
# OUTPUT:
|
12
|
+
# plain text
|
13
|
+
#
|
14
|
+
# PLATFORMS:
|
15
|
+
# Linux
|
16
|
+
#
|
17
|
+
# DEPENDENCIES:
|
18
|
+
# gem: sensu-plugin
|
19
|
+
#
|
20
|
+
# USAGE:
|
21
|
+
#
|
22
|
+
# Query a Habitat supervisor on 127.0.0.1:9631 and check all running services:
|
23
|
+
#
|
24
|
+
# check-habitat-service-health.rb
|
25
|
+
#
|
26
|
+
# Query a Habitat supervisor on a non-default host and/or port:
|
27
|
+
#
|
28
|
+
#
|
29
|
+
# > check-habitat-service-health.rb -H 192.168.0.4
|
30
|
+
# > check-habitat-service-health.rb --host 192.168.0.4
|
31
|
+
# > check-habitat-service-health.rb -P 4242
|
32
|
+
# > check-habitat-service-health.rb --port 4242
|
33
|
+
# > check-habitat-service-health.rb -H 1.2.3.4 -P 5678
|
34
|
+
#
|
35
|
+
# Check a specific set of services instead of all running ones:
|
36
|
+
#
|
37
|
+
# > check-habitat-service-health.rb -s svc1.default,svc2.default
|
38
|
+
# > check-habitat-service-health.rb --services svc1.default,svc2.default
|
39
|
+
#
|
40
|
+
# NOTES:
|
41
|
+
#
|
42
|
+
# LICENSE:
|
43
|
+
# Copyright 2018, Tyler Technologies <sysadmin@socrata.com>
|
44
|
+
#
|
45
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
46
|
+
# for details.
|
47
|
+
#
|
48
|
+
|
49
|
+
require 'net/http'
|
50
|
+
require_relative '../lib/sensu_plugins_habitat/check/base'
|
51
|
+
|
52
|
+
#
|
53
|
+
# Check Habitat service health.
|
54
|
+
#
|
55
|
+
class CheckHabitatServiceHealth < SensuPluginsHabitat::Check::Base
|
56
|
+
option :services,
|
57
|
+
short: '-s COMMA,SEPARATED,SERVICE,LIST',
|
58
|
+
long: '--services COMMA,SEPARATED,SERVICE,LIST',
|
59
|
+
description: 'Check specific services instead of all running ones'
|
60
|
+
|
61
|
+
#
|
62
|
+
# - If any monitored services are not OK, print their status strings.
|
63
|
+
# - Print a summary line tallying the number of services in each status.
|
64
|
+
# - Exit with the worst status of the services checked; i.e., if at least one
|
65
|
+
# service is currently CRITICAL, exit as CRITICAL.
|
66
|
+
#
|
67
|
+
def run
|
68
|
+
puts results_str unless results_str.empty?
|
69
|
+
stat = %i[critical warning unknown].find { |s| !results[s].empty? } || :ok
|
70
|
+
send(stat, summary_str)
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Construct a check result body that lists the output of every service that
|
75
|
+
# isn't in an OK state, to be joined with the summary string for the complete
|
76
|
+
# check output.
|
77
|
+
#
|
78
|
+
# @return [String] a long string of all the non-ok service statuses
|
79
|
+
#
|
80
|
+
def results_str
|
81
|
+
%i[unknown warning critical].map do |stat|
|
82
|
+
results[stat].map { |r| "#{stat.upcase}: #{r}" }
|
83
|
+
end.flatten.compact.join("\n")
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Construct a summary line to display at the end of the check output,
|
88
|
+
# tallying how many services there are of each result status.
|
89
|
+
#
|
90
|
+
# @return [String] a summary status of all the service statuses
|
91
|
+
#
|
92
|
+
def summary_str
|
93
|
+
"Results: #{results[:critical].size} critical, " \
|
94
|
+
"#{results[:warning].size} warning, " \
|
95
|
+
"#{results[:unknown].size} unknown, #{results[:ok].size} ok"
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
# Turn every health check result into a status string and group them by
|
100
|
+
# result status, structured as:
|
101
|
+
#
|
102
|
+
# {
|
103
|
+
# ok: [
|
104
|
+
# 'service_name.service_group: stdout: "output"; stderr: "output"'
|
105
|
+
# ],
|
106
|
+
# warning: [],
|
107
|
+
# critical: [],
|
108
|
+
# unknown: []
|
109
|
+
# }
|
110
|
+
#
|
111
|
+
# @return [Hash] the health check data organized by status
|
112
|
+
#
|
113
|
+
def results
|
114
|
+
@results ||= %i[unknown ok warning critical]
|
115
|
+
.each_with_object({}) do |stat, hsh|
|
116
|
+
data = health_statuses.select { |h| h[:status] == stat.to_s.upcase }
|
117
|
+
hsh[stat] = data.map do |d|
|
118
|
+
"#{d[:service]}: stdout: \"#{d[:stdout].strip}\"; " \
|
119
|
+
"stderr: \"#{d[:stderr].strip}\""
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
#
|
125
|
+
# Fetch, save, and return the health check data for every service that we're
|
126
|
+
# supposed to be monitoring, structued as:
|
127
|
+
#
|
128
|
+
# [
|
129
|
+
# {
|
130
|
+
# service: 'service_name.service_group',
|
131
|
+
# status: 'health_check_status',
|
132
|
+
# stdout: 'health_check_stdout',
|
133
|
+
# stderr: 'health_check_stderr'
|
134
|
+
# }
|
135
|
+
# ]
|
136
|
+
#
|
137
|
+
# Note that empty outputs in stdout or stderr are returned as empty strings,
|
138
|
+
# not nil/null values.
|
139
|
+
#
|
140
|
+
# @return [Array<Hash>] an array of service health check data
|
141
|
+
#
|
142
|
+
def health_statuses
|
143
|
+
@health_statuses ||= services.map do |svc|
|
144
|
+
{ service: svc }.merge(health_of_service(svc))
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
#
|
149
|
+
# Fetch and return the health of a given service from the supervisor API. If
|
150
|
+
# a service is not found (404, not running at all), consider it a critical
|
151
|
+
# status.
|
152
|
+
#
|
153
|
+
# The supervisor API returns the following HTTP responses for check results:
|
154
|
+
#
|
155
|
+
# * OK => 200 => Net::HTTPOK
|
156
|
+
# * WARNING => 200 => Net::HTTPOK
|
157
|
+
# * CRITICAL => 503 => Net::HTTPServiceUnavailable
|
158
|
+
# * UNKNOWN => 500 => Net::HTTPInternalServerError
|
159
|
+
# * Not running => 404 => Net::HTTPNotFound
|
160
|
+
#
|
161
|
+
# @param service [String] 'svc_name.svc_group'
|
162
|
+
# @return [Hash] the parsed JSON from that service's /health endpoint
|
163
|
+
#
|
164
|
+
def health_of_service(service)
|
165
|
+
resp = hab_get("/services/#{service.tr('.', '/')}/health")
|
166
|
+
|
167
|
+
if resp.is_a?(Net::HTTPNotFound)
|
168
|
+
{ status: 'CRITICAL', stdout: '', stderr: 'Service is not running' }
|
169
|
+
else
|
170
|
+
JSON.parse(resp.body, symbolize_names: true)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
#
|
175
|
+
# Return an array of the services we should be monitoring, either fed in via
|
176
|
+
# config[:services] or fetched from the supervisor API.
|
177
|
+
|
178
|
+
#
|
179
|
+
# @return [Array<String>] an array of the services to be monitored
|
180
|
+
#
|
181
|
+
def services
|
182
|
+
@services ||= if config[:services]
|
183
|
+
config[:services].split(',')
|
184
|
+
else
|
185
|
+
hab_get_services
|
186
|
+
end.sort
|
187
|
+
end
|
188
|
+
|
189
|
+
# Fetch and parse the /services endpoint from the supervisor API. If it can't
|
190
|
+
# be fetched for whatever reason, go CRITICAL immediately.
|
191
|
+
#
|
192
|
+
# @return [Array<String>] an array of service names.groups
|
193
|
+
# @raise [CRITICAL] if the services can't be fetched
|
194
|
+
#
|
195
|
+
def hab_get_services
|
196
|
+
resp = hab_get('/services')
|
197
|
+
|
198
|
+
if resp.is_a?(Net::HTTPOK)
|
199
|
+
JSON.parse(resp.body).map { |svc| svc['service_group'] }
|
200
|
+
else
|
201
|
+
critical('Failed to fetch /services from the supervisor ' \
|
202
|
+
"API: #{resp.code}")
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
#
|
4
|
+
# sensu_plugins_habitat/check/base.rb
|
5
|
+
#
|
6
|
+
# DESCRIPTION:
|
7
|
+
# This class defines some of the common config options and helper methods for
|
8
|
+
# Habitat plugins to use.
|
9
|
+
#
|
10
|
+
# OUTPUT:
|
11
|
+
# N/A
|
12
|
+
#
|
13
|
+
# PLATFORMS:
|
14
|
+
# Linux
|
15
|
+
#
|
16
|
+
# DEPENDENCIES:
|
17
|
+
# gem: sensu-plugin
|
18
|
+
# gem: rest-client
|
19
|
+
#
|
20
|
+
# USAGE:
|
21
|
+
# Import this file and create subclasses of the included plugin class:
|
22
|
+
#
|
23
|
+
# require 'sensu_plugins_habitat/check/base'
|
24
|
+
# class CheckHabitatTest < SensuPluginsHabitat::Check::Base
|
25
|
+
# ...
|
26
|
+
#
|
27
|
+
# NOTES:
|
28
|
+
#
|
29
|
+
# LICENSE:
|
30
|
+
# Copyright 2018, Tyler Technologies <sysadmin@socrata.com>
|
31
|
+
#
|
32
|
+
# Released under the same terms as Sensu (the MIT license); see LICENSE
|
33
|
+
# for details.
|
34
|
+
#
|
35
|
+
|
36
|
+
require 'json'
|
37
|
+
require 'net/http'
|
38
|
+
require 'openssl'
|
39
|
+
require 'sensu-plugin/check/cli'
|
40
|
+
require 'uri'
|
41
|
+
|
42
|
+
module SensuPluginsHabitat
|
43
|
+
#
|
44
|
+
# Habitat shared base plugin.
|
45
|
+
#
|
46
|
+
class Check
|
47
|
+
# A base class with some common options that the actual plugins can inherit
|
48
|
+
# from.
|
49
|
+
class Base < Sensu::Plugin::Check::CLI
|
50
|
+
option :host,
|
51
|
+
short: '-H HOST',
|
52
|
+
long: '--host HOST',
|
53
|
+
description: 'Host the Habitat supervisor is listening on on',
|
54
|
+
default: '127.0.0.1'
|
55
|
+
|
56
|
+
option :port,
|
57
|
+
short: '-P PORT',
|
58
|
+
long: '--port PORT',
|
59
|
+
description: 'Port the Habitat supervisor is listening on',
|
60
|
+
proc: proc(&:to_i),
|
61
|
+
default: 9631
|
62
|
+
|
63
|
+
option :protocol,
|
64
|
+
short: '-p PROTOCOL',
|
65
|
+
long: '--protocol PROTOCOL',
|
66
|
+
description: 'Switch to HTTPS if supervisor is SSL-ified',
|
67
|
+
default: 'http'
|
68
|
+
|
69
|
+
option :insecure,
|
70
|
+
description: 'Set this flag to disable SSL verification',
|
71
|
+
short: '-i',
|
72
|
+
long: '--insecure',
|
73
|
+
boolean: true,
|
74
|
+
default: false
|
75
|
+
|
76
|
+
option :capath,
|
77
|
+
description: 'Absolute path to an alternative CA file',
|
78
|
+
short: '-c CAPATH',
|
79
|
+
long: '--capath CAPATH'
|
80
|
+
|
81
|
+
option :timeout,
|
82
|
+
description: 'Connection will time out after this many seconds',
|
83
|
+
short: '-t TIMEOUT_IN_SECONDS',
|
84
|
+
long: '--timeout TIMEOUT_IN_SECONDS',
|
85
|
+
proc: proc(&:to_i),
|
86
|
+
default: 5
|
87
|
+
|
88
|
+
#
|
89
|
+
# This should never be run, but Sensu complains if we don't define a run
|
90
|
+
# method with an exit.
|
91
|
+
#
|
92
|
+
def run
|
93
|
+
exit 0
|
94
|
+
end
|
95
|
+
|
96
|
+
#
|
97
|
+
# Fetch and return a given endpoint from the Habitat supervisor API.
|
98
|
+
#
|
99
|
+
# @param endpoint [String] an API endpoint
|
100
|
+
# @return [Net::HTTPResponse]
|
101
|
+
#
|
102
|
+
def hab_get(endpoint)
|
103
|
+
server = "#{config[:protocol]}://#{config[:host]}:#{config[:port]}"
|
104
|
+
get(File.join(server, endpoint))
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# Use net/http to do a GET on a URL and return the response object. If
|
109
|
+
# the connection is refused or times out, consider it an automatic
|
110
|
+
# CRITICAL, since the check presumably won't be able to proceed.
|
111
|
+
#
|
112
|
+
# @param url [String] the full URL to GET
|
113
|
+
# @return [Net::HTTPResponse] the HTTP response object for processing
|
114
|
+
# raise [CRITICAL] if the connection fails
|
115
|
+
#
|
116
|
+
def get(url)
|
117
|
+
uri = URI(url)
|
118
|
+
|
119
|
+
resp = Net::HTTP.start(*http_params_for(uri)).get(uri)
|
120
|
+
|
121
|
+
resp.is_a?(Net::HTTPRedirection) ? get(resp.header['location']) : resp
|
122
|
+
rescue Errno::ECONNREFUSED, Net::OpenTimeout => e
|
123
|
+
critical("Connection to the supervisor API failed: #{e.message}")
|
124
|
+
end
|
125
|
+
|
126
|
+
#
|
127
|
+
# Assemble the array of params for Net::HTTP.start, according to the
|
128
|
+
# check config and URI object being retrieved.
|
129
|
+
#
|
130
|
+
# @param uri [URI] the URI object being fetched
|
131
|
+
# @return [Array] the array of params for Net::HTTP.start
|
132
|
+
#
|
133
|
+
def http_params_for(uri)
|
134
|
+
conn_opts = {
|
135
|
+
use_ssl: uri.scheme == 'https',
|
136
|
+
open_timeout: config[:timeout],
|
137
|
+
read_timeout: config[:timeout],
|
138
|
+
verify_mode: (OpenSSL::SSL::VERIFY_NONE if config[:insecure]),
|
139
|
+
ca_file: config[:capath]
|
140
|
+
}.compact
|
141
|
+
|
142
|
+
[uri.host, uri.port, conn_opts]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
module SensuPluginsHabitat
|
4
|
+
# The version of this Sensu plugin.
|
5
|
+
module Version
|
6
|
+
# The major version.
|
7
|
+
MAJOR = 0
|
8
|
+
# The minor version.
|
9
|
+
MINOR = 1
|
10
|
+
# The patch version.
|
11
|
+
PATCH = 0
|
12
|
+
# Concat them into a version string
|
13
|
+
VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,217 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sensu-plugins-habitat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tyler Technologies
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-10-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sensu-plugin
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.2'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.2'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: bundler
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.16'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.16'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: github-markup
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: pry
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.11'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0.11'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rake
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '12.3'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '12.3'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: redcarpet
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '3.4'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '3.4'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rspec
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.8'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '3.8'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rubocop
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0.59'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0.59'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: simplecov
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0.16'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0.16'
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: simplecov-console
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "~>"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0.4'
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - "~>"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0.4'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: yard
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0.9'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - "~>"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0.9'
|
173
|
+
description: This plugin monitors services under a Habitat supervisor
|
174
|
+
email: "<sysadmin@socrata.com>"
|
175
|
+
executables:
|
176
|
+
- check-habitat-service-health.rb
|
177
|
+
extensions: []
|
178
|
+
extra_rdoc_files: []
|
179
|
+
files:
|
180
|
+
- CHANGELOG.md
|
181
|
+
- LICENSE
|
182
|
+
- README.md
|
183
|
+
- bin/check-habitat-service-health.rb
|
184
|
+
- lib/sensu_plugins_habitat.rb
|
185
|
+
- lib/sensu_plugins_habitat/check/base.rb
|
186
|
+
- lib/sensu_plugins_habitat/version.rb
|
187
|
+
homepage: https://github.com/socrata-platform/sensu-plugins-habitat
|
188
|
+
licenses:
|
189
|
+
- MIT
|
190
|
+
metadata:
|
191
|
+
maintainer: tyler-technologies
|
192
|
+
development_status: active
|
193
|
+
production_status: unstable - testing recommended
|
194
|
+
release_draft: 'false'
|
195
|
+
release_prerelease: 'false'
|
196
|
+
post_install_message: You can use the embedded Ruby by setting EMBEDDED_RUBY=true
|
197
|
+
in /etc/default/sensu
|
198
|
+
rdoc_options: []
|
199
|
+
require_paths:
|
200
|
+
- lib
|
201
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: 2.3.0
|
206
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: '0'
|
211
|
+
requirements: []
|
212
|
+
rubyforge_project:
|
213
|
+
rubygems_version: 2.7.7
|
214
|
+
signing_key:
|
215
|
+
specification_version: 4
|
216
|
+
summary: Sensu plugins for monitoring Habitat services
|
217
|
+
test_files: []
|