Commit 7f98a891 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

fixing the legacy toplist widget (wip)

parent 1d215b93
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@ TODO
- namespace picker in sidebar
- fix session view
- split up fnordmetric.namespace block into multiple files
- proper cmdline output (status?)

- distgauge: render std. deviation
- timeseries-gauge: overview series weights
- timeseries-gauge: punchcards
+27 −1
Original line number Diff line number Diff line
class FnordMetric::ToplistWidget < FnordMetric::Widget

  def self.execute(namespace, event)
    resp = if event["cmd"] == "values_for"
      {
        :cmd => :values_for,
        :gauge => event["gauge"],
        :values => execute_values_for(namespace.gauges[event["gauge"].to_sym], Time.now.to_i)
      }
    end

    return false unless resp

    resp.merge(
      :class => "widget_response",
      :widget_key => event["widget_key"]
    )
  end

  def self.execute_values_for(gauge, time)
    gauge.field_values_at(time).sort do |a,b|
      a.first.to_i <=> b.first.to_i
    end.map do |a|
      [a.first, a.second.to_i]
    end
  end

  def data
    super.merge(
      :gauges => data_gauges,
@@ -7,6 +32,7 @@ class FnordMetric::ToplistWidget < FnordMetric::Widget
      :render_target => @opts[:render_target],
      :ticks => @opts[:ticks],
      :click_callback => @opts[:click_callback],
      :async_chart => true,
      :tick => tick
    ).tap do |dat|
      dat.merge!(
+67 −37
Original line number Diff line number Diff line
@@ -17,11 +17,9 @@ FnordMetric.widgets.toplistWidget = function(){
      'marginBottom': 20,
      'overflow': 'hidden'
    }).append(
      $('<div class="toplist_inner"></div>')
      $('<div class="toplist_inner ui_toplist"></div>')
    );

    return this;

    if(!opts.ticks){
      var first = true;
      for(k in opts.gauges){
@@ -45,6 +43,7 @@ FnordMetric.widgets.toplistWidget = function(){
      loadGauge(opts.gauges[0], true);
    }

    /*
    if(opts.autoupdate){
      var secs = parseInt(opts.autoupdate);
      if(secs > 0){
@@ -59,16 +58,43 @@ FnordMetric.widgets.toplistWidget = function(){
      }
    };

  */

  }

  function requestValuesAsync(){
    FnordMetric.publish({
      "type": "widget_request",
      "klass": "ToplistWidget",
      "gauges": opts.gauges,
      "cmd": "values_for",
      "since": opts.start_timestamp,
      "until": opts.end_timestamp,
      "tick": opts.tick,
      "widget_key": opts.widget_key
    })
  }

  function loadGauge(gkey, silent){
      if(!gkey){ gkey = current_gauge; }
    if(!gkey)
      gkey = current_gauge;

    current_gauge = gkey;
      if(!silent){ $('.toplist_inner', opts.elem).addClass('loading'); }

    if(!silent)
        $('.toplist_inner', opts.elem).addClass('loading');

    var _url = FnordMetric.p + '/' + FnordMetric.currentNamespace + '/gauge/' + gkey;
    if(opts.tick){ _url += ("?tick=" + opts.tick); }
      $.get(_url, function(_resp){
        var resp = JSON.parse(_resp);
        renderGauge(gkey, resp);
      })

    FnordMetric.publish({
      "type": "widget_request",
      "klass": "ToplistWidget",
      "gauge": current_gauge,
      "cmd": "values_for",
      "tick": opts.tick,
      "widget_key": opts.widget_key
    });
  }

  function renderGauge(gkey, gdata){
@@ -87,18 +113,22 @@ FnordMetric.widgets.toplistWidget = function(){
        $('.title', _item).html(gdata.values[n][0]);  
      }


      $('.value', _item).html(FnordMetric.util.formatGaugeValue(gkey, parseInt(gdata.values[n][1])));
      $('.percent', _item).html(_perc.toFixed(1) + '%');
      _elem.append(_item);
    });
  }

  }
  function announce(evt){

    if((evt.widget_key == opts.widget_key) && ((evt.class == "widget_response") && (evt.cmd == "values_for")))
        renderGauge(evt.gauge, evt);

  }

  return {
    render: render
    render: render,
    announce: announce
  };

};