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 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
+ [![Build Status](https://img.shields.io/travis/com/socrata-platform/sensu-plugins-habitat.svg)][travis]
4
+ [![Gem Version](https://img.shields.io/gem/v/sensu-plugins-habitat.svg)][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
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: false
2
+
3
+ require 'sensu_plugins_habitat/check/base'
4
+ require 'sensu_plugins_habitat/version'
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: []