59 lines
1.3 KiB
Plaintext
59 lines
1.3 KiB
Plaintext
|
#!/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',
|
||
|
@db_conf['username'] || 'root', @db_conf['password'],
|
||
|
@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
|