class MetricCollect::Backend::Statsd

Attributes

params[RW]

Public Class Methods

new(name) click to toggle source
# File lib/backend/statsd.rb, line 23
def initialize(name)
  @params = Hash.new
  @params[:name] = name
  @params[:value] = nil
  @params[:key] = "metric_collect"
  @params[:type] = :gauge
end

Public Instance Methods

method_missing(method_symbol, *args, &block) click to toggle source
# File lib/backend/statsd.rb, line 31
def method_missing(method_symbol, *args, &block)
  @params[method_symbol]
end
process_metric(config) click to toggle source
# File lib/backend/statsd.rb, line 37
def process_metric(config)
  @config = config.params
  name = @params[:name]
  value = @params[:value]
  key = @params[:key]
  type = @params[:type]

  case type
  when :counter
    counters("#{key}.#{name}", value)
  when :timer
    timers("#{key}.#{name}", value)
  when :gauge
    gauges("#{key}.#{name}", value)
  when :set
    sets("#{key}.#{name}", value)
  else
    MetricCollect::Log.fatal("#{type.to_s} is not a valid statsd type!")
  end
end

Private Instance Methods

counters(stats, value, sample_rate=1) click to toggle source
# File lib/backend/statsd.rb, line 63
def counters(stats, value, sample_rate=1)
  update_stats(stats, value, sample_rate)
end
gauges(stats, value, sample_rate=1) click to toggle source
# File lib/backend/statsd.rb, line 67
def gauges(stats, value, sample_rate=1)
  update_stats(stats, value, sample_rate, 'g')
end
send(data, sample_rate=1) click to toggle source
# File lib/backend/statsd.rb, line 86
def send(data, sample_rate=1)
  begin
    host = @config[:statsd_server]
    port = @config[:statsd_port]

    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
sets(stats, value, sample_rate=1) click to toggle source
# File lib/backend/statsd.rb, line 71
def sets(stats, value, sample_rate=1)
  update_stats(stats, value, sample_rate, 's')
end
timers(stats, time, sample_rate=1) click to toggle source
# File lib/backend/statsd.rb, line 59
def timers(stats, time, sample_rate=1)
  update_stats(stats, time, sample_rate, 'ms')
end
update_stats(stats, delta=1, sample_rate=1, metric='c') click to toggle source
# File lib/backend/statsd.rb, line 75
def 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

  send(data, sample_rate)
end