send_nsca 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +13 -13
- data/lib/send_nsca/send_nsca.rb +41 -15
- metadata +40 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f05428eb0570a98321e631347f93ee1927f545a4
|
4
|
+
data.tar.gz: 3bba7c1bf1f80e23f37805a348a2f20afcc5979f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7214d9f2457918600222aed23ab84c5dd0fa6aba729a86eedf9a8ed2d5c8b86c8335891a3d1d2bd8896e3864c516aab5c53b173b19607eabd3964a5278660006
|
7
|
+
data.tar.gz: 783bed9d44a430ad0359b541b35cf583fe13346804252827b81339177dbdd6178185ccf504069217396c83041ea1036b4048ad45295d2dc818e15b47866b27e3
|
data/Rakefile
CHANGED
@@ -4,21 +4,21 @@ require 'rake'
|
|
4
4
|
begin
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name =
|
8
|
-
gem.summary =
|
9
|
-
gem.description =
|
10
|
-
gem.email =
|
11
|
-
gem.homepage =
|
12
|
-
gem.authors = [
|
13
|
-
gem.
|
14
|
-
gem.
|
15
|
-
gem.
|
16
|
-
gem.
|
17
|
-
# gem is a Gem::Specification... see http://
|
7
|
+
gem.name = 'send_nsca'
|
8
|
+
gem.summary = 'A ruby gem for sending passive alerts to Nagios through NSCA.'
|
9
|
+
gem.description = 'A pure ruby implementation of the send_nsca program for sending passive alerts to Nagios through NSCA.'
|
10
|
+
gem.email = 'kbedell@gmail.com'
|
11
|
+
gem.homepage = 'http://github.com/kevinzen/send_nsca'
|
12
|
+
gem.authors = ['kevinzen', 'kyrremann']
|
13
|
+
gem.require_path = 'lib'
|
14
|
+
gem.files = %w(History.txt install.rb MIT-LICENSE.txt README.rdoc Rakefile) + Dir['lib/**/*'] + Dir['spec/**/*']
|
15
|
+
gem.test_files = Dir['spec/**/*']
|
16
|
+
gem.licenses = ['MIT']
|
17
|
+
# gem is a Gem::Specification... see http://docs.seattlerb.org/rubygems/Gem/Specification.html for additional settings
|
18
18
|
end
|
19
19
|
Jeweler::GemcutterTasks.new
|
20
20
|
rescue LoadError
|
21
|
-
puts
|
21
|
+
puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
|
22
22
|
end
|
23
23
|
|
24
24
|
|
@@ -26,7 +26,7 @@ require 'rspec/core/rake_task'
|
|
26
26
|
|
27
27
|
task :default => [:spec]
|
28
28
|
|
29
|
-
desc
|
29
|
+
desc 'Run the specs.'
|
30
30
|
RSpec::Core::RakeTask.new do |spec|
|
31
31
|
spec.pattern = 'spec/**/*_spec.rb'
|
32
32
|
end
|
data/lib/send_nsca/send_nsca.rb
CHANGED
@@ -4,18 +4,22 @@ module SendNsca
|
|
4
4
|
STATUS_WARNING = 1
|
5
5
|
STATUS_CRITICAL = 2
|
6
6
|
|
7
|
+
NONE = 0
|
8
|
+
XOR = 1
|
9
|
+
|
7
10
|
class NscaConnection
|
8
11
|
|
9
12
|
require 'socket' # Sockets are in standard library
|
10
13
|
|
11
14
|
# todo: replace timeout with a better method of handling communication timeouts.
|
12
15
|
require 'timeout'
|
16
|
+
attr_accessor :nscatimeout
|
13
17
|
|
14
18
|
# params for connecting to the nsca/nagios server
|
15
19
|
attr_accessor :nscahost
|
16
20
|
attr_accessor :port
|
17
21
|
|
18
|
-
#
|
22
|
+
# connection status and error if one found
|
19
23
|
attr_reader :connected
|
20
24
|
attr_reader :error
|
21
25
|
|
@@ -30,6 +34,9 @@ module SendNsca
|
|
30
34
|
attr_accessor :timestamp_hex
|
31
35
|
attr_accessor :timestamp
|
32
36
|
|
37
|
+
# encryption_mode
|
38
|
+
attr_accessor :encryption_mode
|
39
|
+
|
33
40
|
# status data to send to nagios
|
34
41
|
# Currently all 4 are required, meaning we only support 'service' passive checkins.
|
35
42
|
# todo: add host checkins
|
@@ -38,6 +45,9 @@ module SendNsca
|
|
38
45
|
attr_accessor :return_code
|
39
46
|
attr_accessor :status
|
40
47
|
|
48
|
+
# debug
|
49
|
+
attr_accessor :debug
|
50
|
+
|
41
51
|
# for sending to nsca
|
42
52
|
attr_accessor :crc
|
43
53
|
PACKET_VERSION = 3
|
@@ -46,7 +56,6 @@ module SendNsca
|
|
46
56
|
CRC_TABLE = [ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d]
|
47
57
|
|
48
58
|
def initialize(args)
|
49
|
-
|
50
59
|
# connecting to nagios
|
51
60
|
@nscahost = args[:nscahost]
|
52
61
|
@port = args[:port]
|
@@ -56,12 +65,14 @@ module SendNsca
|
|
56
65
|
@status = args[:status]
|
57
66
|
@connected = false
|
58
67
|
@password = args[:password] || ''
|
59
|
-
|
68
|
+
@timeout = args[:nscatimeout] || 1
|
69
|
+
@encryption_mode = args[:encryption_mode] || SendNsca::XOR
|
70
|
+
@debug = args[:debug] || false
|
60
71
|
end
|
61
72
|
|
62
73
|
def connect_and_get_keys
|
63
74
|
begin
|
64
|
-
timeout(
|
75
|
+
timeout(@timeout) do # the server has @timeout second(s) to answer
|
65
76
|
@tcp_client = TCPSocket.open(@nscahost, @port)
|
66
77
|
@connected = true
|
67
78
|
@xor_key_and_timestamp = @tcp_client.recv(132)
|
@@ -69,8 +80,8 @@ module SendNsca
|
|
69
80
|
rescue
|
70
81
|
@connected = false
|
71
82
|
@error = "send_ncsa - error connecting to nsca/nagios: #{$!}"
|
72
|
-
puts
|
73
|
-
@tcp_client.try(:close)
|
83
|
+
puts @error
|
84
|
+
@tcp_client.try(:close) unless @tcp_client.nil?
|
74
85
|
raise # re-raise same exception
|
75
86
|
end
|
76
87
|
timestamp_for_logging
|
@@ -109,16 +120,31 @@ module SendNsca
|
|
109
120
|
@crc = SendNsca::NscaConnection.crc32(string_to_send_without_crc)
|
110
121
|
nsca_params = [PACKET_VERSION, @crc, @timestring, @return_code, @hostname, @service, @status ]
|
111
122
|
string_to_send_with_crc = nsca_params.pack(PACK_STRING)
|
112
|
-
|
113
|
-
#puts("DEBUG: PACKET_VERSION = #{PACKET_VERSION},\n @crc = #{@crc},\n @timestring = #{@timestring},\n @timestamp_hex = #{Time.at(timestamp_hex)},\n @return_code #{@return_code},\n @hostname = #{@hostname},\n @service = #{@service},\n @status = #{@status}\n")
|
114
|
-
#puts "string_to_send_with_crc = #{string_to_send_with_crc.length}"
|
115
|
-
#puts "string_to_send_with_crc = #{string_to_send_with_crc.unpack('H*')}"
|
116
|
-
|
117
|
-
encrypted_string_to_send = SendNsca::NscaConnection.xor(@xor_key, string_to_send_with_crc, @password)
|
118
|
-
#puts "encrypted_string_to_send = #{encrypted_string_to_send.length}"
|
119
|
-
#puts "encrypted_string_to_send = #{encrypted_string_to_send.unpack('H*')}"
|
120
123
|
|
121
|
-
@
|
124
|
+
if @debug
|
125
|
+
puts %{DEBUG: PACKET_VERSION = #{PACKET_VERSION}
|
126
|
+
@crc = #{@crc}
|
127
|
+
@timestring = #{@timestring}
|
128
|
+
@timestamp_hex = #{Time.at(timestamp_hex)}
|
129
|
+
@return_code #{@return_code}
|
130
|
+
@hostname = #{@hostname}
|
131
|
+
@service = #{@service}
|
132
|
+
@status = #{@status}}
|
133
|
+
puts "string_to_send_with_crc = #{string_to_send_with_crc.length}"
|
134
|
+
puts "string_to_send_with_crc = #{string_to_send_with_crc.unpack('H*')}"
|
135
|
+
end
|
136
|
+
|
137
|
+
if @encryption_mode == SendNsca::NONE
|
138
|
+
string_to_send = string_to_send_with_crc
|
139
|
+
else
|
140
|
+
string_to_send = SendNsca::NscaConnection.xor(@xor_key, string_to_send_with_crc, @password)
|
141
|
+
if @debug
|
142
|
+
puts "encrypted_string_to_send = #{string_to_send.length}"
|
143
|
+
puts "encrypted_string_to_send = #{string_to_send.unpack('H*')}"
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
@tcp_client.send(string_to_send, 0)
|
122
148
|
@tcp_client.close
|
123
149
|
end
|
124
150
|
|
metadata
CHANGED
@@ -1,29 +1,58 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: send_nsca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kevinzen
|
8
|
+
- kyrremann
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: jeweler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: send_nsca
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
13
42
|
- !ruby/object:Gem::Dependency
|
14
43
|
name: rspec
|
15
44
|
requirement: !ruby/object:Gem::Requirement
|
16
45
|
requirements:
|
17
46
|
- - ">="
|
18
47
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
48
|
+
version: 1.2.9
|
20
49
|
type: :development
|
21
50
|
prerelease: false
|
22
51
|
version_requirements: !ruby/object:Gem::Requirement
|
23
52
|
requirements:
|
24
53
|
- - ">="
|
25
54
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
55
|
+
version: 1.2.9
|
27
56
|
description: A pure ruby implementation of the send_nsca program for sending passive
|
28
57
|
alerts to Nagios through NSCA.
|
29
58
|
email: kbedell@gmail.com
|
@@ -41,11 +70,11 @@ files:
|
|
41
70
|
- spec/spec.opts
|
42
71
|
- spec/spec_helper.rb
|
43
72
|
homepage: http://github.com/kevinzen/send_nsca
|
44
|
-
licenses:
|
73
|
+
licenses:
|
74
|
+
- MIT
|
45
75
|
metadata: {}
|
46
76
|
post_install_message:
|
47
|
-
rdoc_options:
|
48
|
-
- "--charset=UTF-8"
|
77
|
+
rdoc_options: []
|
49
78
|
require_paths:
|
50
79
|
- lib
|
51
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -60,12 +89,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
89
|
version: '0'
|
61
90
|
requirements: []
|
62
91
|
rubyforge_project:
|
63
|
-
rubygems_version: 2.
|
92
|
+
rubygems_version: 2.4.5
|
64
93
|
signing_key:
|
65
|
-
specification_version:
|
66
|
-
summary: A
|
67
|
-
to Nagios through NSCA.
|
94
|
+
specification_version: 4
|
95
|
+
summary: A ruby gem for sending passive alerts to Nagios through NSCA.
|
68
96
|
test_files:
|
69
97
|
- spec/send_nsca_spec.rb
|
70
|
-
- spec/spec.opts
|
71
98
|
- spec/spec_helper.rb
|
99
|
+
- spec/spec.opts
|