Page 1 of 1
Ruby require 'gem' issues
Posted: Thu Oct 26, 2017 12:12 pm
by bellrd07
When I write a check in Ruby and must require or load a gem the require statement returns true or false which causes nagios to ignore the rest of the script. Is there a way to get around this as it is causing nagios to exit with warning status and not read any of the actual output?
Any tips would be appreciated.
Re: Ruby require 'gem' issues
Posted: Thu Oct 26, 2017 2:04 pm
by dwhitfield
I'm not sure how you would execute this in your instance, but it is possible to write ruby plugins without require or load statements, such as the one below:
Code: Select all
#!/usr/bin/ruby
###################################################
# Written by Florian Seidel
# v 0.2
###################################################
# Get Error Level, 255 is good
#First Command-Line Argument should be the IP of the IMM
IMM_IP = ARGV[0]
SNMPv1_community = ARGV[1]
# Getting Error Level
# 255 = Normal, 0 = Critical, 2 = Non-critical Error, 4 = System-level Error
error_level=`snmpget -v 1 -c #{SNMPv1_community} #{IMM_IP} .1.3.6.1.4.1.2.3.51.3.1.4.1.0 -O q -O v`
#What is the Problem?!
case error_level.chomp.to_i
when 255
puts "WLC Hardware Status: OK"
puts `snmpwalk -v1 -c #{SNMPv1_community} #{IMM_IP} .1.3.6.1.4.1.2.3.51.3.1.4.2.1.3 -O q -O v`
exit 0
when 0
puts "WLC Hardware Status: Critical"
puts `snmpwalk -v1 -c #{SNMPv1_community} #{IMM_IP} .1.3.6.1.4.1.2.3.51.3.1.4.2.1.3 -O q -O v`
exit 2
when 2
puts "WLC Hardware Status: Warning"
puts `snmpwalk -v1 -c #{SNMPv1_community} #{IMM_IP} .1.3.6.1.4.1.2.3.51.3.1.4.2.1.3 -O q -O v`
exit 1
when 4
puts "WLC Hardware Status: "
puts `snmpwalk -v1 -c #{SNMPv1_community} #{IMM_IP} .1.3.6.1.4.1.2.3.51.3.1.4.2.1.3 -O q -O v`
exit 2
else
puts "Unknown"
puts `snmpwalk -v1 -c #{SNMPv1_community} #{IMM_IP} .1.3.6.1.4.1.2.3.51.3.1.4.2.1.3 -O q -O v`
exit 3
end
Re: Ruby require 'gem' issues
Posted: Thu Oct 26, 2017 2:18 pm
by bellrd07
I am requiring the mysql2 gem. How would I run the script without requiring that gem? This is my simplified code. However, Nagios gets the return value from require 'mysql2' and ignores the rest of the output.
Code: Select all
#!/usr/bin/env ruby
require 'mysql2'
client = Mysql2::Client.new(:host => "host", :username => "dbuser", :password => 'dbpw', :database => 'db')
items = client.query('SELECT vj.jobid, vj.accno, vj.fee, count(vd.docid), sum(vd.pages)
FROM vpo_jobs AS vj
left join vpo_documents AS vd ON (vd.jobid = vj.jobid)
WHERE vj.datesubmitted >= "2017-10-17" AND vj.datesubmitted < "2017-10-18"
GROUP BY vj.accno')
results = Array.new
graph = Array.new
items.each do |h|
results.push("#{h['accno'].upcase} Fee:#{h['fee']} Envelopes:#{h['count(vd.docid)']} Pages:#{h['sum(vd.pages)']}")
graph.push("#{h['accno'].upcase} envelopes = #{h['count(vd.docid)']} #{h['accno'].upcase} pages = #{h['sum(vd.pages)']}")
end
graph = graph.join(" ").strip
results = results.join("; ").strip
puts "#{results} | #{graph}"
exit 0
Re: Ruby require 'gem' issues
Posted: Thu Oct 26, 2017 2:28 pm
by mcapra
Here's a very popular AWS plugin written in Ruby:
https://exchange.nagios.org/directory/P ... us/details
Glancing at the source, you may notice that the actual execution of things exists in a begin end block:
Code: Select all
begin
opts = {
:removes => [ "Amazon", "AWS", "(Ireland)" ],
:services => [ "Elastic Compute Cloud", "Simple Storage Service" ],
:region => "EU_block",
}
check = Nagios::AWS::DashboardCheck.new(opts)
exit check.run()
rescue => e
warn e.message
warn e.backtrace.join("\n")
exit Nagios::EXIT_UNKNOWN
end
You might try something like that.
Re: Ruby require 'gem' issues
Posted: Thu Oct 26, 2017 2:53 pm
by dwhitfield
Thanks
@mcapra! OP, did you have any additional questions?