Commit 32025673 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

basic timeline rendering kind-of working

parent cd981054
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -56,7 +56,11 @@ class FnordMetric::Gauge
  end

  def add_redis(_redis)
    @opts[:redis] = _redis
    @redis = _redis
  end

  def redis
    @redis || @opts[:redis]
  end

  def ticks_in(r)
+0 −4
Original line number Diff line number Diff line
@@ -69,8 +69,4 @@ module FnordMetric::GaugeCalculations
    (redis.get(tick_key(time, :count))||0).to_i
  end

  def redis
    @opts[:redis]
  end

end
 No newline at end of file
+1 −4
Original line number Diff line number Diff line
@@ -27,13 +27,10 @@ class FnordMetric::MultiGauge < FnordMetric::RemoteGauge
    @opts[:redis] = _redis
  end

  def react(event)
    render! if event["_class"] == "render_request"
  end

  def render
    {
      :title => title,
      :gauge_key => name,
      :template => "--- not yet implemented ---",
      :widgets => {}
    }
+35 −6
Original line number Diff line number Diff line
@@ -24,6 +24,29 @@ class FnordMetric::NumericGauge < FnordMetric::MultiGauge
    end
  end

  def react(event)
    render! if event["_class"] == "render_request"
    process!(event) if event["_class"] == "request"
  end

  def process!(event)
    resp = if event["widget"] == "total_timeline"
      event.merge(
        :values => Hash[series_count_gauges.map do |_skey, _series|
          gauge = fetch_gauge(_series[event["tick"].to_i])
          vals = gauge.values_at(event["ticks"]) rescue {}
          [_skey, vals]
        end]
      )
    end

    if resp
      resp.merge!("_class" => "response")
      resp.delete("ticks")
      respond(resp)
    end
  end

  def incr(*args)
    ctx = args.delete_at(0)

@@ -56,22 +79,28 @@ class FnordMetric::NumericGauge < FnordMetric::MultiGauge
    super.merge(
      :template => render_template(:numeric_gauge),
      :widgets => {
        :total_timeline => FnordMetric::TimelineWidget.new(
        :total_timeline => {
          :width => 100,
          :klass => "TimelineWidget",
          :title => "Totals",
          :multi_tick => true,
          :render_target => ".numgauge_widget_total_timeline",
          :ticks => @opts[:ticks],
          :_gauges => @opts[:series].map{ |s| "#{name}++count-#{s}" },
          :_gauge_titles => Hash[@opts[:series].map{ |s| ["#{name}++count-#{s}", s] }],
          :series => @opts[:series],
          :series_titles => Hash[@opts[:series].map{|s| [s, s]}],
          :include_current => true,
          :channel => name,
          :widget_key => "total_timeline",
          :height => 350
        ).data,
        }
      }
    )
  end

  def fetch_gauge(series, tick)
    if series.starts_with?("count-")
  def fetch_gauge(series, tick = nil)
    if series.is_a?(FnordMetric::Gauge)
      series
    elsif series.starts_with?("count-")
      series_count_gauges[series[6..-1].to_sym][tick]
    end.tap do |gauge|
      gauge.try(:add_redis, @opts[:redis])

proto.md

0 → 100644
+15 −0
Original line number Diff line number Diff line



render a gauge (request):

  { "_class":"render_request", "_channel":"$GAUGE_NAME" }


render a response (request):

  { "_class":"render_response", "_channel":"$GAUGE_NAME", "payload": "$PAYLOAD" }



  {"_class"=>"request", "_channel"=>"number_of_searches", "cmd"=>"get", "tick"=>86400, "ticks"=>[1336435200, ...], "widget"=>"total_timeline" }
Loading