Skip to content

Instantly share code, notes, and snippets.

@pburkholder
Created February 24, 2014 17:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save pburkholder/9193206 to your computer and use it in GitHub Desktop.
Save pburkholder/9193206 to your computer and use it in GitHub Desktop.
#! /usr/bin/env ruby
require 'json'
require 'date'
require 'optparse'
require 'pp'
require 'net/http'
config_file = nil
debug = false
OptionParser.new do |opts|
opts.on("-c", "--config-file CONFIG") do |d|
config_file = d
end
opts.on("-D", "--debug") do |d|
debug = true
end
end.parse!
config = JSON.parse(File.read(config_file))
unless ( %r(^/) =~ config['credentials_file'] ) then
cred_file = File.expand_path( "../#{config['credentials_file']}" , __FILE__ )
else
cred_file = config['credentials_file']
end
credentials = JSON.parse(File.read(cred_file))
def fetch_queues( host, port, username, password, vhost)
http = Net::HTTP.new host, port
req = Net::HTTP::Get.new "/api/queues/#{vhost}?columns=name,idle_since"
req.basic_auth username, password
http.request(req).body
end
def parse_result(input, idle_minutes=10)
cutoff_time = DateTime.now() - Rational(( idle_minutes * 60.0)/86400 )
counter = Hash.new(0)
result = JSON.parse(input)
result.each do |queue|
idle_since =
if (
queue['name'] =~ /^online/ and
( queue['idle_since'].nil? or ( DateTime.parse(queue['idle_since']) > cutoff_time ) )
)
counter[queue['name']] += 1
end
end
counter.length
end
def send_event ( message, carbon_server, carbon_port, debug=false )
require 'socket'
if debug then
puts message
else
s = TCPSocket.new carbon_server, carbon_port
s.puts message
s.close
end
end
message = Array.new()
config['rabbitapi'].each do |api|
host = api['host']
port = api['port']
idle_minutes = api['idle_minutes']
user = credentials[api['name']].split(':')[0]
pass = credentials[api['name']].split(':')[1]
api['envs'].each do |env|
vhost = "frontend-#{env}"
key = "zensey.#{env}.users.online.#{idle_minutes}m"
#p host, port, user, pass, vhost
queues_result = fetch_queues host, port, user, pass, vhost
metric = parse_result(queues_result, idle_minutes)
message << sprintf("%s %s %d\n", key, metric, Time.new().to_i)
end
end
send_event message, config['carbon_server'], config['carbon_port'], debug
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment