nrpeclient 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/nrpeclient/check_nrpe.rb +55 -0
- data/lib/nrpeclient/nrpe_packet.rb +72 -0
- data/lib/nrpeclient/version.rb +3 -0
- data/lib/nrpeclient.rb +12 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ab49d729af428aba15faf582f9199e262aed5dad
|
4
|
+
data.tar.gz: aece18a112691a3013d3e50c84a6e8efe5f9ae54
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9a2a5d18014fc29fd878e4482e9ef3b151420a1513191e5835863ed2ecba597e8a83d77f74a5f57c5dbeb9dd10470ec35569c43f52500d10e65294fdf2bedfc9
|
7
|
+
data.tar.gz: c0bed2e6de18e40a5145a27f2fb9a021ea09a9ac4b9adf5643a52ebc10fb3fbc76fe2bca6141de0bedf0ad135052d30730c3d9159b8c44b81b0aca5f28cbadd9
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'openssl'
|
3
|
+
|
4
|
+
module Nrpeclient
|
5
|
+
class CheckNrpe
|
6
|
+
DEFAULT_OPTIONS = {
|
7
|
+
:host => '0.0.0.0',
|
8
|
+
:port => '5666',
|
9
|
+
:ssl => false
|
10
|
+
}
|
11
|
+
|
12
|
+
|
13
|
+
def initialize(options={})
|
14
|
+
@options = DEFAULT_OPTIONS.merge(options)
|
15
|
+
if @options[:ssl]
|
16
|
+
@ssl = {}
|
17
|
+
@ssl.context = OpenSSL::SSL::SSLContext.new :SSLv23
|
18
|
+
@ssl.context.ciphers = 'ADH'
|
19
|
+
@ssl.context.cert = OpenSSL::X509::Certificate.new(File.open("certificate.crt"))
|
20
|
+
@ssl.context.key = OpenSSL::PKey::RSA.new(File.open("certificate.key"))
|
21
|
+
@ssl.context.version = :SSLv23
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def send(message)
|
26
|
+
query = Nrpeclient::NrpePacket.new
|
27
|
+
query.packet_type = :query
|
28
|
+
query.buffer = message
|
29
|
+
query.result_code = Nrpeclient::STATUS_UNKNOWN
|
30
|
+
begin
|
31
|
+
socket = TCPSocket.open(@options[:host], @options[:port])
|
32
|
+
if @options[:ssl]
|
33
|
+
socket = OpenSSL::SSL::SSLSocket.new(socket, @ssl.context)
|
34
|
+
socket.sync_close = true
|
35
|
+
socket.connect
|
36
|
+
end
|
37
|
+
|
38
|
+
socket.write(query.to_bytes)
|
39
|
+
response = Nrpeclient::NrpePacket.read(socket)
|
40
|
+
socket.close
|
41
|
+
return response
|
42
|
+
rescue Errno::ETIMEDOUT
|
43
|
+
raise 'NRPE request timed out'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def send_command(command, *args)
|
48
|
+
message = command
|
49
|
+
args.each do |arg|
|
50
|
+
message += '!' + arg
|
51
|
+
end
|
52
|
+
return self.send(message)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'zlib'
|
2
|
+
|
3
|
+
module Nrpeclient
|
4
|
+
class NrpePacket
|
5
|
+
NRPE_PACKET_VERSION_3 = 3
|
6
|
+
NRPE_PACKET_VERSION_2 = 2
|
7
|
+
NRPE_PACKET_VERSION_1 = 1
|
8
|
+
|
9
|
+
QUERY_PACKET = 1
|
10
|
+
RESPONSE_PACKET = 2
|
11
|
+
|
12
|
+
MAX_PACKETBUFFER_LENGTH = 1024
|
13
|
+
|
14
|
+
MAX_PACKET_SIZE = 12 + 1024
|
15
|
+
|
16
|
+
attr_accessor :packet_version, :crc32, :result_code, :buffer
|
17
|
+
|
18
|
+
def initialize(unpacked=nil)
|
19
|
+
@packet_version = NRPE_PACKET_VERSION_2
|
20
|
+
@random = 1
|
21
|
+
|
22
|
+
if unpacked
|
23
|
+
@packet_version = unpacked[0]
|
24
|
+
@packet_type = unpacked[1]
|
25
|
+
@crc32 = unpacked[2]
|
26
|
+
@result_code = unpacked[3]
|
27
|
+
@buffer = unpacked[4]
|
28
|
+
@random = unpacked[5]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def packet_type
|
33
|
+
case @packet_type
|
34
|
+
when QUERY_PACKET then :query
|
35
|
+
when RESPONSE_PACKET then :response
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def packet_type=(type)
|
40
|
+
case type
|
41
|
+
when :query then @packet_type = QUERY_PACKET
|
42
|
+
when :response then @packet_type = RESPONSE_PACKET
|
43
|
+
else
|
44
|
+
raise "Invalid packet type"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def calculate_crc32
|
49
|
+
Zlib::crc32(self.to_bytes(0))
|
50
|
+
end
|
51
|
+
|
52
|
+
def validate_crc32
|
53
|
+
raise 'Invalid CRC32' unless @crc32 == self.calculate_crc32
|
54
|
+
end
|
55
|
+
|
56
|
+
def strip_buffer
|
57
|
+
self.buffer = self.buffer.lstrip.rstrip
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_bytes(use_crc32=self.calculate_crc32)
|
61
|
+
[ @packet_version, @packet_type, use_crc32, @result_code, @buffer, @random].pack("nnNna#{MAX_PACKETBUFFER_LENGTH}n")
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.read(io)
|
65
|
+
bytes = io.read(MAX_PACKET_SIZE)
|
66
|
+
values = bytes.unpack("nnNnA#{MAX_PACKETBUFFER_LENGTH}n")
|
67
|
+
packet = self.new(values)
|
68
|
+
packet.validate_crc32
|
69
|
+
packet
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/nrpeclient.rb
ADDED
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nrpeclient
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Arun Scaria
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Executed the command passed at the remote machine where NRPE daemon is
|
56
|
+
running.
|
57
|
+
email:
|
58
|
+
- arunscaria91@gmail.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- lib/nrpeclient.rb
|
64
|
+
- lib/nrpeclient/check_nrpe.rb
|
65
|
+
- lib/nrpeclient/nrpe_packet.rb
|
66
|
+
- lib/nrpeclient/version.rb
|
67
|
+
homepage: https://github.com/scaria/nrpeclient
|
68
|
+
licenses:
|
69
|
+
- MIT
|
70
|
+
metadata:
|
71
|
+
allowed_push_host: https://rubygems.org
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.4.7
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Ruby version of check_nrpe command from Nagios core
|
92
|
+
test_files: []
|