Sha256: f273a472a196339085245cbff42d53c8d1dc3651ce31b69368affd357ae4f18e
Contents?: true
Size: 1.82 KB
Versions: 1
Compression:
Stored size: 1.82 KB
Contents
require 'socket' require 'resolv' class Statsd Version = '0.0.7' class << self attr_accessor :host, :port def host_ip_addr @host_ip_addr ||= Resolv.getaddress(host) end def host=(h) @host_ip_addr = nil @host = h end # +stat+ to log timing for # +time+ is the time to log in ms def timing(stat, time = nil, sample_rate = 1) if block_given? start_time = Time.now.to_f yield time = ((Time.now.to_f - start_time) * 1000).floor end send_stats("#{stat}:#{time}|ms", sample_rate) end def gauge(stat, value, sample_rate = 1) send_stats("#{stat}:#{value}|g", sample_rate) end # +stats+ can be a string or an array of strings def increment(stats, sample_rate = 1) update_counter stats, 1, sample_rate end # +stats+ can be a string or an array of strings def decrement(stats, sample_rate = 1) update_counter stats, -1, sample_rate end # +stats+ can be a string or array of strings def update_counter(stats, delta = 1, sample_rate = 1) stats = Array(stats) send_stats(stats.map { |s| "#{s}:#{delta}|c" }, sample_rate) end private def send_stats(data, sample_rate = 1) data = Array(data) sampled_data = [] # Apply sample rate if less than one if sample_rate < 1 data.each do |d| if rand <= sample_rate sampled_data << "#{d}@#{sample_rate}" end end data = sampled_data end return if data.empty? raise "host and port must be set" unless host && port begin sock = UDPSocket.new data.each do |d| sock.send(d, 0, host_ip_addr, port) end rescue # silent but deadly ensure sock.close end true end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
statsd-client-0.0.7 | lib/statsd.rb |