Sha256: 3fc525f74d6083e88108e28d284b8062f3cbfd26d379f3ae4cad03ff064331cf

Contents?: true

Size: 1.15 KB

Versions: 12

Compression:

Stored size: 1.15 KB

Contents

class FnordMetric::ToplistGauge < FnordMetric::Gauge

  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

  def execute(cmd, context, *args)
    return observe(context, args.first) if cmd == :observe
    FnordMetric.error("gauge '#{name}': unknown command: #{cmd}")
  end

  def renderable?
    true
  end

private

  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

  def top_k
    (@opts[:top_k] || 1000).to_i
  end

end

Version data entries

12 entries across 12 versions & 3 rubygems

Version Path
johnf-fnordmetric-1.2.10 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.2.9 lib/fnordmetric/gauges/toplist_gauge.rb
johnf-fnordmetric-1.2.7 lib/fnordmetric/gauges/toplist_gauge.rb
bp-fnordmetric-1.2.7 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.2.7 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.2.6 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.2.4 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.2.1 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.2.0 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.0.1 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-1.0.0 lib/fnordmetric/gauges/toplist_gauge.rb
fnordmetric-0.9.7 lib/fnordmetric/gauges/toplist_gauge.rb