sensu-plugins-snmptrap-extension 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b9ade74acbf2e688353c1fbe51c10fb310d33993
4
+ data.tar.gz: 183bbd5e5cdb31f9a0af9ed1a1f22344da3b5eeb
5
+ SHA512:
6
+ metadata.gz: 1bd4fb7ba9941e00a1deadcd5d6b10232824a87b7156b684702a85aaffc55471ca0fb34be1cb1bc038587b0d3b6959b28db88232f253af6c564897f719b7b47f
7
+ data.tar.gz: 686ece3016f49c2e329ee4988f84b2831d1cbccf1c06452cff74ab96197ac8acf7e2e692767494c3940ddbecc39f1da9b306bb71782c4eb79e3b24d011fd29ae
data/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ #Change Log
2
+ This project adheres to [Semantic Versioning](http://semver.org/).
3
+
4
+ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
5
+
6
+ ## Unreleased
7
+ ### Added
8
+ - Rake, gemspecs and basic core test code
9
+ - This CHANGELOG
10
+ - Travis configuration for test building
11
+
12
+ ### Changed
13
+ - Moved script to bin sub-directory as part of refactor to adhere to sensu-plugin conventions
14
+
15
+
16
+ ## 0.0.1 - 2015-05-20
17
+ ### Added
18
+ - initial release
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 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,96 @@
1
+ # Sensu SNMP Trap Extension
2
+
3
+ Creates an SNMP trap listening to all incoming traps on the configured interface and triggers events into sensu as JIT events when specifying the source of the event.
4
+
5
+ [![Build Status](https://travis-ci.org/warmfusion/sensu-extension-snmptrap.svg)](https://travis-ci.org/warmfusion/sensu-extension-snmptrap)
6
+
7
+ ## TODO
8
+
9
+ Also able to run as a 'polling' service in either Check or Metrics mode where values can be directly compared against expectations (eg value > 10)
10
+ or where values are sent to Sensu as metrics values for charting or other purposes.
11
+
12
+
13
+ ## Configuration
14
+
15
+ The SNMPTrap configuration is defined in a json file inside conf.d/extensions (or anywhere sensu consumes configuration)
16
+ and includes a traps configuration element that describes:
17
+
18
+ * An array of traps that the extension will monitor for events (from any host) which includes
19
+ * `trap_oid` - the identity of the trap
20
+ * `trap` - A hash of key/value pairs that can be used as template values in the event
21
+ * `event` - The template event to send to Sensu, including {template} variables for customisation based on the message
22
+
23
+
24
+ ### Templating
25
+
26
+ Any value defined in `trap` that contains an OID that is included in the incoming trap can be used as part of any element of the
27
+ event being sent to Sensu. This includes handlers, names (Only AlphaNumeric allow), status etc etc.
28
+
29
+ Simply wrap your template in braces and it will be automatically replaced during processing. See the heartbeatrate in the example
30
+ below.
31
+
32
+ > Note: The 'source' and 'hostname' variables are automatically provided to you. Hostname contains the FQDN name of the server (or the IP if it
33
+ > can't get resolved) and 'source' contains the IP address (with no lookups)
34
+
35
+ ### Basic Extension Configuration
36
+
37
+
38
+ {
39
+ "snmp": {
40
+
41
+ }
42
+ }
43
+
44
+ ### Trap Configuration
45
+
46
+ Each SNMP Trap is configured in its own configuration file. This lets you easily create configuration through Puppet/Chef etc without
47
+ having to manipulate the same configuration file.
48
+
49
+ Simply create a uniquely named json file in `/etc/sensu/traps.d` containing the definition of the trap(s) you wish to capture and
50
+ act upon.
51
+
52
+
53
+ [
54
+ {
55
+ "trap_oid": "1.3.6.1.4.1.8072.2.3.0.1",
56
+ "trap": {
57
+ "heartbeatrate": "1.3.6.1.4.1.8072.2.3.2.1"
58
+ },
59
+ "event": {
60
+ "name": "snmp-trap-{hostname}",
61
+ "status": 1,
62
+ "output": "Heartbeat Rate {heartbeatrate}",
63
+ "handler": "default"
64
+ }
65
+ },
66
+ ...
67
+ ]
68
+
69
+ The JSON file is an array of trap definitions containing:
70
+
71
+ * trap_oid
72
+ * Definition: (String) The OID to monitor for events on
73
+ * trap
74
+ * Definition: (Array) Key/Value pairs representing named variables (key) against the OID values of the message elements (value)
75
+ which can then be used as template values in the event section
76
+ * event
77
+ * Definition: (Hash) The event to trigger if the SNMP trap is recieved - Accepts any value that will then get sent to sensu
78
+ as a normal check event - this includes handlers, subdues, or custom key/value pairs as you require.
79
+ * name
80
+ * Definition: (String) The name of the sensu check that is sent to the sensu-client - ALPHANUMERIC and should be fairly unique (Required)
81
+ * status
82
+ * Definition: (Numeric) The numeric status of the status (0-OK, 1-Warning, 2-Critical, 3-Unknown) (Required)
83
+ * output
84
+ * Definition: (String) The message to send to the sensu client (Required)
85
+ * handler
86
+ * Definition: (String) The handler that the sensu-server should use to process this event (Optional)
87
+
88
+
89
+ ## Appendix
90
+
91
+ Handy Test script:
92
+
93
+ snmptrap -v 2c -c public localhost:1062 "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification netSnmpExampleHeartbeatRate i 123456
94
+
95
+
96
+ Released under the same terms as Sensu (the MIT license).
@@ -0,0 +1,239 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # extension-snmptrap.rb
4
+ #
5
+ # DESCRIPTION:
6
+ # Handles incoming SNMP Traps and emits sensu events
7
+ # Creates an SNMP trap listening to all incoming traps on any interface and triggers events into sensu as JIT clients specifying the source of the event.
8
+ #
9
+ # Also able to run as a 'polling' service in either Check or Metrics mode
10
+ # where values can be directly compared against expectations (eg value > 10)
11
+ # or where values are sent to Sensu as metrics values for charting or
12
+ # other purposes.
13
+ #
14
+ # {
15
+ # "snmp": { }
16
+ # }
17
+ #
18
+ # OUTPUT:
19
+ # N/A - Extension submits multiple events of different types based on snmp configuration
20
+ #
21
+ # PLATFORMS:
22
+ # Linux
23
+ #
24
+ # DEPENDENCIES:
25
+ # gem: snmp
26
+ #
27
+ # USAGE:
28
+ # Traps are configured in /etc/sensu/traps.d directory, one json file containing one or more trap configurations
29
+ # as described in the README.md that accompanies this script.
30
+ #
31
+ # NOTES:
32
+ # No special notes. This should be fairly straight forward.
33
+ #
34
+ # LICENSE:
35
+ # Toby Jackson <toby@warmfusion.co.uk>
36
+ # Peter Daugavietis <pdaugavietis@gmail.com>
37
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
38
+ # for details.
39
+ #
40
+ #
41
+ # ##############################
42
+ # Handy Test script:
43
+ # snmptrap -v 2c -c public localhost:1062 "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification netSnmpExampleHeartbeatRate i 123456
44
+ #
45
+ # Useful SNMP browser to help find things:
46
+ # http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=1.3.6.1.2.1.1.5
47
+ #
48
+ # http://www.net-snmp.org/docs/mibs/ucdavis.html#laTable
49
+ # Load Average Last Minute - .1.3.6.1.4.1.2021.10.1.3.1
50
+ #
51
+ require 'net/http'
52
+ require 'snmp'
53
+ require 'json'
54
+ include SNMP
55
+
56
+ module Sensu
57
+ module Extension
58
+ class SNMPTrapHandler < Check
59
+ # assume the /etc/sensu/extensions folder as location for relative
60
+ data_path = File.expand_path(File.dirname(__FILE__) + '/../mibs')
61
+
62
+ DEFAULT_MIB_PATH = nil
63
+ if File.exist?(data_path)
64
+ DEFAULT_MIB_PATH = data_path
65
+ else
66
+ @logger.info "Could not find default MIB directory, tried:\n #{data_path}"
67
+ end
68
+
69
+ def name
70
+ 'SnmpTrapHandler'
71
+ end
72
+
73
+ def description
74
+ 'SNMP Extension that handles/traps SNMP events'
75
+ end
76
+
77
+ def options
78
+ return @options if @options
79
+ @options = {
80
+ bind: '0.0.0.0',
81
+ port: 1062,
82
+ community: 'public',
83
+ handler: 'default',
84
+ send_interval: 60,
85
+ trapdefs_dir: '/etc/sensu/traps.d',
86
+ mibs_dir: '/etc/sensu/mibs'
87
+ }
88
+ @options.merge!(@settings[:snmp]) if @settings[:snmp].is_a?(Hash)
89
+ @options
90
+ end
91
+
92
+ def definition
93
+ {
94
+ type: 'extension',
95
+ name: name,
96
+ publish: false # Don't run this extension as a check
97
+ }
98
+ end
99
+
100
+ def post_init
101
+ # Setup SNMPTrap
102
+ @logger.debug "Loading SNMPTrap definitions from #{options[:trapdefs_dir]}"
103
+ @trapdefs = []
104
+ Dir.glob(options[:trapdefs_dir] + '/*.json') do |file|
105
+ # do something with the file here
106
+ @logger.info file
107
+ @trapdefs.concat Array(JSON.parse(File.read(file)))
108
+ end
109
+
110
+ @logger.debug @trapdefs.to_json
111
+
112
+ @mibs = []
113
+ Dir.glob(options[:mibs_dir] + '/*.yaml') do |file|
114
+ # do something with the file here
115
+ @logger.debug "Reading MIB configuration from #{File.basename(file, '.yaml')}"
116
+ @mibs << File.basename(file, '.yaml')
117
+ end
118
+ @logger.debug @mibs.to_json
119
+
120
+ start_trap_listener
121
+ end
122
+
123
+ def run(_data = nil, _options = {}, &callback)
124
+ @logger.warn('SNMP Trap: Run called as a check - this is not supported')
125
+ output = 'SNMPHandler extension should not be called as a standalone check'
126
+ callback.call(output, 3)
127
+ end
128
+
129
+ def start_trap_listener
130
+ @logger.info('Starting SNMP Trap listener...')
131
+
132
+ SNMP::TrapListener.new(Host: options[:bind], Port: options[:port]) do |manager|
133
+ # Need patched Gem to allow the following functions/lookups
134
+ # Need to copy the MIBs from somewhere to the Gem location needed (or fix the importing mechanism too)
135
+
136
+ # If the following MIB code is used, SNMPTrap hangs up and stops working... dont know why - possibly
137
+ # an implicit .join() somewhere locking things up ?
138
+ # SNMP::MIB.import_modules(@mibs)
139
+ # manager.load_modules(@mibs, DEFAULT_MIB_PATH)
140
+ # @mib = manager.mib
141
+
142
+ manager.on_trap_v1 do |trap|
143
+ @logger.info('v1-Trap caught')
144
+ @logger.info trap.to_json
145
+ end
146
+
147
+ manager.on_trap_v2c do |trap|
148
+ @logger.info('v2-Trap caught')
149
+ @logger.info(trap.to_json)
150
+
151
+ processed = false
152
+ @trapdefs.each do |trapdef|
153
+ if !trapdef['trap_oid'].nil?
154
+ trapdef_oid = SNMP::ObjectId.new(trapdef['trap_oid'])
155
+ else
156
+ trapdef_oid = SNMP::ObjectId.new(@mib.oid(trapdef[:trap_name]))
157
+ end
158
+ @logger.debug 'trapdef ' + trapdef_oid.inspect
159
+ @logger.debug 'trap ' + trap.trap_oid.inspect
160
+ # only accept configured traps
161
+ if trap.trap_oid == trapdef_oid
162
+ @logger.info "Processing known v2 trap #{trap.trap_oid}"
163
+ process_v2c_trap trap, trapdef
164
+ processed = true
165
+ break
166
+ end
167
+ @logger.debug "Ignoring unrecognised trap: #{trap.trap_oid}" unless processed
168
+ end
169
+ end
170
+
171
+ @logger.info("SNMP Trap listener has started on #{options[:bind]}:#{options[:port]}")
172
+ end
173
+ end
174
+
175
+ private
176
+
177
+ # Doesn't appear to be possible to ping Sensu directly for async event triggering
178
+ # even though we're inside Sensu right now...
179
+ def publish_check_result(check)
180
+ # a little risky: we're assuming Sensu-Client is listening on Localhost:3030
181
+ # for submitted results : https://sensuapp.org/docs/latest/clients#client-socket-input
182
+ @logger.info "Sending SNMP check event: #{check.to_json}"
183
+
184
+ host = settings[:client][:bind] ||= '127.0.0.1'
185
+ port = settings[:client][:port] ||= '3030'
186
+ t = TCPSocket.new host, port
187
+ t.write(check.to_json + "\n")
188
+ end
189
+
190
+ def process_v2c_trap(trap, trapdef)
191
+ hostname = trap.source_ip
192
+ begin
193
+ hostname = Resolv.getname(trap.source_ip)
194
+ rescue Resolv::ResolvError
195
+ @logger.debug("Unable to resolve name for #{trap.source_ip}")
196
+ end
197
+
198
+ fields = {}
199
+ fields[:source] = trap.source_ip
200
+ fields[:hostname] = hostname
201
+
202
+ @logger.debug('Checking trap definition for key/value template pairs')
203
+ Array(trapdef['trap']).each do |key, value|
204
+ begin
205
+ value = SNMP::ObjectId.new(value)
206
+ rescue
207
+ value = SNMP::ObjectId.new(@mib.oid(value))
208
+ end
209
+
210
+ @logger.debug key.inspect + ', ' + value.inspect
211
+ @logger.debug trap.varbind_list.inspect
212
+ val = trap.varbind_list.find { |vb| vb.name == value }
213
+ if val.nil?
214
+ @logger.warn("trap.#{key} has OID(#{value}) that was not found in incoming trap - Check your configuration")
215
+ end
216
+ @logger.debug("Discovered value of #{key} is '#{val}'")
217
+ fields[key] = val.value unless val.nil?
218
+ end
219
+
220
+ @logger.debug("Template fields are: #{fields.inspect}")
221
+
222
+ # Replace any {template} values in the event with the value of
223
+ # snmp values defined in the traps configuration
224
+ fields.each do |key, value|
225
+ trapdef['event'].each do |k, v|
226
+ @logger.debug("Looking for #{key} in #{trapdef['event'][k]}")
227
+ begin
228
+ trapdef['event'][k] = v.gsub("{#{key}}", value.to_s.gsub('/', '-'))
229
+ rescue
230
+ trapdef['event'][k] = v
231
+ end
232
+ end
233
+ end
234
+ @logger.debug trapdef['event']
235
+ publish_check_result trapdef['event']
236
+ end
237
+ end
238
+ end
239
+ end
@@ -0,0 +1 @@
1
+ require 'sensu-plugins-snmptrap-extension/version'
@@ -0,0 +1,9 @@
1
+ module SensuPluginsSnmptrapExtension
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 1
5
+ PATCH = 0
6
+
7
+ VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,241 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sensu-plugins-snmptrap-extension
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Toby Jackson <toby@warmfusion.co.uk>
8
+ - Peter Daugavietis <pdaugavietis@gmail.com>
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain:
12
+ - certs/sensu-plugins.pem
13
+ date: 2016-06-04 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: snmp
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.2.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '='
27
+ - !ruby/object:Gem::Version
28
+ version: 1.2.0
29
+ - !ruby/object:Gem::Dependency
30
+ name: sensu-plugin
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '='
34
+ - !ruby/object:Gem::Version
35
+ version: 1.2.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '='
41
+ - !ruby/object:Gem::Version
42
+ version: 1.2.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: net
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: json
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: bundler
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.7'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ~>
83
+ - !ruby/object:Gem::Version
84
+ version: '1.7'
85
+ - !ruby/object:Gem::Dependency
86
+ name: codeclimate-test-reporter
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: '0.4'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: '0.4'
99
+ - !ruby/object:Gem::Dependency
100
+ name: github-markup
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ~>
104
+ - !ruby/object:Gem::Version
105
+ version: '1.3'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: '1.3'
113
+ - !ruby/object:Gem::Dependency
114
+ name: pry
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ~>
118
+ - !ruby/object:Gem::Version
119
+ version: '0.10'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: '0.10'
127
+ - !ruby/object:Gem::Dependency
128
+ name: rake
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '10.0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ~>
139
+ - !ruby/object:Gem::Version
140
+ version: '10.0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: rspec
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ~>
146
+ - !ruby/object:Gem::Version
147
+ version: '3.1'
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ~>
153
+ - !ruby/object:Gem::Version
154
+ version: '3.1'
155
+ - !ruby/object:Gem::Dependency
156
+ name: rubocop
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - '='
160
+ - !ruby/object:Gem::Version
161
+ version: 0.32.1
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - '='
167
+ - !ruby/object:Gem::Version
168
+ version: 0.32.1
169
+ - !ruby/object:Gem::Dependency
170
+ name: redcarpet
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ~>
174
+ - !ruby/object:Gem::Version
175
+ version: '3.2'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ~>
181
+ - !ruby/object:Gem::Version
182
+ version: '3.2'
183
+ - !ruby/object:Gem::Dependency
184
+ name: yard
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: '0.8'
190
+ type: :development
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ~>
195
+ - !ruby/object:Gem::Version
196
+ version: '0.8'
197
+ description: Sensu extension for trapping SNMP events and reemiting as templated events
198
+ email: <toby@warmfusion.co.uk>
199
+ executables:
200
+ - extension-snmptrap.rb
201
+ extensions: []
202
+ extra_rdoc_files: []
203
+ files:
204
+ - bin/extension-snmptrap.rb
205
+ - lib/sensu-plugins-snmptrap-extension/version.rb
206
+ - lib/sensu-plugins-snmptrap-extension.rb
207
+ - LICENSE
208
+ - README.md
209
+ - CHANGELOG.md
210
+ homepage: https://github.com/warmfusion/sensu-sensu-extension-snmptrap
211
+ licenses:
212
+ - MIT
213
+ metadata:
214
+ maintainer: '@warmfusion'
215
+ development_status: active
216
+ production_status: unstable - testing recommended
217
+ release_draft: 'false'
218
+ release_prerelease: 'false'
219
+ post_install_message: You can use the embedded Ruby by setting EMBEDDED_RUBY=true
220
+ in /etc/default/sensu
221
+ rdoc_options: []
222
+ require_paths:
223
+ - lib
224
+ required_ruby_version: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - '>='
227
+ - !ruby/object:Gem::Version
228
+ version: 1.9.3
229
+ required_rubygems_version: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - '>='
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ requirements: []
235
+ rubyforge_project:
236
+ rubygems_version: 2.0.14.1
237
+ signing_key:
238
+ specification_version: 4
239
+ summary: Sensu extension to capture SNMP trap events
240
+ test_files: []
241
+ has_rdoc: