class FnordMetric::ToplistGauge

Public Instance Methods

execute(cmd, context, *args) click to toggle source
# File lib/fnordmetric/gauges/toplist_gauge.rb, line 21
def execute(cmd, context, *args)
  return observe(context, args.first) if cmd == :observe
  FnordMetric.error("gauge '#{name}': unknown command: #{cmd}")
end
render(namespace, event) click to toggle source
# File lib/fnordmetric/gauges/toplist_gauge.rb, line 3
def render(namespace, event)
  @interval = parse_interval(event["interval"])

  @toplist = FnordMetric::Toplist.new
  @all_ticks = ticks_in(@interval, tick, 1)

  @all_ticks.each do |_tick|
    field_values_at(_tick, :limit => top_k, :append => :toplist).each do |*args|
      item, count = args.flatten[0..1] # what the fnord... ~paul
      @toplist.incr_item(_tick, item, count)
    end
  end

  @toplist.total = @all_ticks.inject(0){ |s,t| s + sync_redis.get(tick_key(t, :total)).to_i }

  render_page(:toplist_gauge)
end
renderable?() click to toggle source
# File lib/fnordmetric/gauges/toplist_gauge.rb, line 26
def renderable?
  true
end

Private Instance Methods

observe(ctx, item) click to toggle source
# File lib/fnordmetric/gauges/toplist_gauge.rb, line 32
def observe(ctx, item)
  at = ctx.send(:time)
  ctx.redis_exec :zincrby, tick_key(at, :toplist), 1, item
  ctx.redis_exec :incrby, tick_key(at, :total), 1
  ctx.redis_exec :zremrangebyrank, tick_key(at, :toplist), 0, -top_k
  ctx.redis_exec :expire, tick_key(at, :toplist), retention
end
top_k() click to toggle source
# File lib/fnordmetric/gauges/toplist_gauge.rb, line 40
def top_k
  (@opts[:top_k] || 1000).to_i
end