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 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
@@ -0,0 +1,3 @@
1
+ module Nrpeclient
2
+ VERSION = "0.1.1"
3
+ end
data/lib/nrpeclient.rb ADDED
@@ -0,0 +1,12 @@
1
+ require "nrpeclient/version"
2
+
3
+
4
+ module Nrpeclient
5
+ STATUS_OK = 0
6
+ STATUS_WARNING = 1
7
+ STATUS_CRITICAL = 2
8
+ STATUS_UNKNOWN = 3
9
+ end
10
+
11
+ require 'nrpeclient/check_nrpe'
12
+ require 'nrpeclient/nrpe_packet'
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: []