bin/check-beanstalk-statistic.rb
#! /usr/bin/env ruby
#
# check-beanstalk-statistic
#
# DESCRIPTION:
# #YELLOW
#
# OUTPUT:
# plain-text
#
# PLATFORMS:
# Linux
#
# DEPENDENCIES:
# gem: beanstalk-client
# gem: sensu-plugin
#
# USAGE:
# #YELLOW
#
# NOTES:
#
# LICENSE:
# Copyright S. Zachariah Sprackett <zac@sprackett.com>
# Released under the same terms as Sensu (the MIT license); see LICENSE
# for details.
#
require 'sensu-plugin/check/cli'
require 'beanstalk-client'
#
# Check beanstalk Statistics
#
class CheckBeanstalkStatistic < Sensu::Plugin::Check::CLI
option :host,
short: '-H HOST',
default: 'localhost'
option :port,
short: '-p PORT',
default: '11300'
option :tube,
short: '-t TUBE'
option :stat,
short: '-s STAT'
option :crit_high,
short: '-c CRIT_HIGH_THRESHOLD',
proc: proc(&:to_i),
default: false
option :warn_high,
short: '-w WARN_HIGH_THRESHOLD',
proc: proc(&:to_i),
default: false
option :crit_low,
short: '-C CRIT_LOW_THRESHOLD',
proc: proc(&:to_i),
default: 0
option :warn_low,
short: '-W WARN_LOW_THRESHOLD',
proc: proc(&:to_i),
default: 0
def run
begin
beanstalk = Beanstalk::Connection.new(
"#{config[:host]}:#{config[:port]}"
)
rescue StandardError => e
critical "Failed to connect: (#{e})"
end
if config[:tube]
begin
stats = beanstalk.stats_tube(config[:tube])
rescue Beanstalk::NotFoundError
warning "Tube #{config[:tube]} not found"
end
else
stats = beanstalk.stats
end
unknown "#{config[:stat]} doesn't exist" unless stats.key?(config[:stat])
s = stats[config[:stat]].to_i
if config[:crit_high] && s > config[:crit_high]
critical "Too many #{config[:stat]} #{config[:crit_high]} (#{s} found)"
elsif config[:warn_high] && s > config[:warn_high]
warning "Too many #{config[:stat]} #{config[:warn_high]} jobs (#{s} found)"
elsif s < config[:crit_low]
warning "Not enough #{config[:stat]} #{config[:crit_low]} jobs (#{s} found)"
elsif s < config[:warn_low]
warning "Not enough #{config[:stat]} #{config[:warn_low]} (#{s} found)"
else
ok "#{s} #{config[:stat]} found."
end
end
end