nrpeclient 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: []