Skip to content

Commit

Permalink
add a new ruby_example.rb file with a library for ruby. heavily inspi…
Browse files Browse the repository at this point in the history
…red by python_example.py.
  • Loading branch information
iseff authored and kastner committed Feb 12, 2012
1 parent 82f64c1 commit 209e368
Showing 1 changed file with 97 additions and 0 deletions.
97 changes: 97 additions & 0 deletions ruby_example.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
require 'socket'
require 'yaml'

# ruby_example.rb

# Ian Sefferman <[email protected]>
# http://www.iseff.com

# If this is running in a Rails environment, will pick up config/statsd.yml.
# config/statsd.yml should look like:
# production:
# host: statsd.domain.com
# port: 8125
# development:
# host: localhost
# port: 8125

# If this file is not running in Rails environment, will pick up ./statsd.yml
# ./statsd.yml should look like:
# host: localhost
# port: 8125

# If neither of these files are present, it will default to localhost:8125

# Sends statistics to the stats daemon over UDP
class Statsd

def self.timing(stats, time, sample_rate=1)
Statsd.update_stats(stats, time, sample_rate, 'ms')
end

def self.increment(stats, sample_rate=1)
Statsd.update_stats(stats, 1, sample_rate)
end

def self.decrement(stats, sample_rate=1)
Statsd.update_stats(stats, -1, sample_rate)
end

def self.update_stats(stats, delta=1, sample_rate=1, metric='c')
stats = [stats].flatten

data = {}
stats.each do |stat|
data[stat] = "%s|%s" % [delta, metric]
end

Statsd.send(data, sample_rate)
end

def self.send(data, sample_rate=1)
begin
host = config["host"] || "localhost"
port = config["port"] || "8125"

sampled_data = {}
if sample_rate < 1
if rand <= sample_rate
data.each_pair do |stat, val|
sampled_data[stat] = "%s|@%s" % [val, sample_rate]
end
end
else
sampled_data = data
end

udp = UDPSocket.new
sampled_data.each_pair do |stat, val|
send_data = "%s:%s" % [stat, val]
udp.send send_data, 0, host, port
end
rescue => e
puts e.message
end
end

@@config = {}
def self.config
return @@config if @@config
begin
config_path = File.join(File.dir(__FILE__), "statsd.yml")
# for Rails environments, check Rails.root/config/statsd.yml
if defined? Rails
config_path = File.join(Rails.root, "config", "statsd.yml")
@@config = open(config_path) { |f| YAML.load(f) }
@@config = @@config[Rails.env]
else
@@config = open(config_path) { |f| YAML.load(f) }
end
rescue => e
puts "config: #{e.message}"
@@config = {}
end

@@config
end
end

0 comments on commit 209e368

Please sign in to comment.