2009-05-21 22:34:44 +02:00
|
|
|
#!/usr/bin/env ruby
|
|
|
|
# by Helder Ribeiro 2009
|
|
|
|
#
|
|
|
|
# Plugin to monitor delayed_jobs' queue size
|
|
|
|
# Gives updates with number of jobs that haven't been started yet
|
|
|
|
# plus the ones that failed and are still rescheduled for another run
|
|
|
|
#
|
|
|
|
# Parameters supported:
|
|
|
|
#
|
|
|
|
# config
|
|
|
|
|
|
|
|
require 'rubygems'
|
|
|
|
require 'mysql'
|
|
|
|
require 'yaml'
|
|
|
|
|
|
|
|
class Grapher
|
|
|
|
|
|
|
|
def initialize(db_conf)
|
|
|
|
@db_conf = db_conf
|
|
|
|
end
|
|
|
|
|
|
|
|
def config
|
|
|
|
puts <<-END_CONFIG
|
|
|
|
graph_title Delayed_Jobs Queue Size
|
|
|
|
graph_args -l 0
|
|
|
|
graph_vlabel jobs to be run
|
|
|
|
jobs.label jobs
|
|
|
|
jobs.type GAUGE
|
|
|
|
END_CONFIG
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_data
|
|
|
|
mysql = Mysql.new(@db_conf['host'] || 'localhost',
|
2018-08-02 02:03:42 +02:00
|
|
|
@db_conf['username'] || 'root', @db_conf['password'],
|
2009-05-21 22:34:44 +02:00
|
|
|
@db_conf['database'], @db_conf['port'],
|
|
|
|
@db_conf['socket'])
|
|
|
|
result = mysql.query("SELECT count(*) FROM delayed_jobs WHERE \
|
|
|
|
first_started_at IS NULL OR run_at > NOW()")
|
|
|
|
value = result.fetch_hash.values.first
|
|
|
|
puts "jobs.value #{value}"
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
if __FILE__ == $0
|
|
|
|
|
|
|
|
environment = ENV['RAILS_ENV'] || 'production'
|
|
|
|
db_conf = YAML.load(File.read(ENV['DATABASE_YML']))[environment]
|
|
|
|
grapher = Grapher.new(db_conf)
|
|
|
|
|
|
|
|
case ARGV.first
|
|
|
|
when 'config'
|
|
|
|
grapher.config
|
|
|
|
else
|
|
|
|
grapher.get_data
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|