nrpeclient 0.1.1
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 +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: []
|