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 +7 -0
- data/CHANGELOG.md +18 -0
- data/LICENSE +22 -0
- data/README.md +96 -0
- data/bin/extension-snmptrap.rb +239 -0
- data/lib/sensu-plugins-snmptrap-extension.rb +1 -0
- data/lib/sensu-plugins-snmptrap-extension/version.rb +9 -0
- metadata +241 -0
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'
|
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:
|