Permalink
Browse files

add a new ruby_example.rb file with a library for ruby. heavily inspi…

…red by python_example.py.
  • Loading branch information...
1 parent 82f64c1 commit 209e3687dcbc2c97be2b916c73eb59f5d8a04c64 @iseff iseff committed with kastner Feb 27, 2011
Showing with 97 additions and 0 deletions.
  1. +97 −0 ruby_example.rb
View
@@ -0,0 +1,97 @@
+require 'socket'
+require 'yaml'
+
+# ruby_example.rb
+
+# Ian Sefferman <iseff@iseff.com>
+# 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.