/
check_stomp.rb
executable file
·111 lines (98 loc) · 3.28 KB
/
check_stomp.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env ruby
require 'stomp'
require 'getoptlong'
#--------------------------------------------------------------
opts = GetoptLong.new(
[ '--host', '-H', GetoptLong::REQUIRED_ARGUMENT],
[ '--login', '-l', GetoptLong::REQUIRED_ARGUMENT],
[ '--password', '-p', GetoptLong::REQUIRED_ARGUMENT],
[ '--port', '-P', GetoptLong::REQUIRED_ARGUMENT],
[ '--queue', '-q', GetoptLong::REQUIRED_ARGUMENT],
[ '--queue-suffix', '-s', GetoptLong::NO_ARGUMENT],
[ '--debug', '-d', GetoptLong::NO_ARGUMENT],
[ '--help', '-h', GetoptLong::NO_ARGUMENT]
)
#--------------------------------------------------------------
server="localhost"
login="nagios"
password="zomgsecret"
port=6163
debugmode=false
CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789#!*$£^"
queue = "/queue/nagios"
#--------------------------------------------------------------
opts.each do |opt, arg|
case opt
when '--help'
puts <<-EOF
check_stomp.rb [OPTIONS/PARAMS]
-h, --help:
show help
--login x, -l x
=> sets login for stomp connection
--password y, -p y
=> sets password for stomp connection
--port 6163, -P 6163
=> sets remote port for stomp connection
--queue z, -q z
=> sets queue name for stomp connection
--queue-suffix z, -s
=> append _hostname to queue name
--host host.domain.tld, -H host.domain.tld
=> sets remote host for stomp connection
--debug, -d
=> enables debug mode for stomp probe
EOF
exit
when '--host'
server = arg
when '--login'
login = arg
when '--password'
password = arg
when '--port'
port = arg.to_i
when '--queue'
queue = arg
when '--queue-suffix'
queue = queue+"_"+server
when '--debug'
debugmode = true
end
end
def rnd_string(length=8)
rslt=""
srand()
length.times {
rslt << CHARS[rand(CHARS.size)]
}
rslt
end
#--------------------------------------------------------------
puts "Connecting to stomp server" if debugmode
producer = Stomp::Connection.new(login, password, server, port, true, :timeout => 5)
message = rnd_string(50)
puts "Sending stomp message to queue:" + queue if debugmode
producer.send(queue,message)
puts "Message sent: "+message if debugmode
producer.disconnect
puts "Disconnecting from stomp server" if debugmode
#--------------------------------------------------------------
puts "Re-connecting to stomp server" if debugmode
consumer = Stomp::Connection.open(login, password, server, port, true, :timeout =>5)
puts "Subscribing to queue:" + queue if debugmode
message_test = ""
consumer.subscribe(queue)
print "Receiving nagios queue messages" if debugmode
message_test = consumer.receive.body.chomp
puts "Received message: "+ message_test if debugmode
puts "Disconnecting from stomp server" if debugmode
consumer.disconnect
#--------------------------------------------------------------
if message == message_test
puts("OK: message was delivered & received|host=#{server} / message was #{message}")
exit 0
else
puts("CRITICAL: could not deliver/received message !|host=#{server} / #{message} was expected, received #{message_test}")
exit 1
end