Commit 8c7551ed authored by Paul Asmuth's avatar Paul Asmuth
Browse files

bar widget working with legacy dsl :)

parent f69f1aff
Loading
Loading
Loading
Loading
+28 −10
Original line number Diff line number Diff line
class FnordMetric::BarsWidget  < FnordMetric::Widget

  def self.execute(namespace, event)
    resp = if event["cmd"] == "values_for"
      {
        :cmd => :values_for,
        :values => execute_values_for(namespace.gauges[event["gauge"].to_sym], event["until"])
      }
    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 => gauges.map(&:name),
      :gauge_titles => gauge_titles,
      :gauge => gauges.first.name,
      :title => gauges.first.title,
      :autoupdate => (@opts[:autoupdate] || 60),
      :order_by => (@opts[:order_by] || 'value'),
      :plot_style => (@opts[:plot_style] || 'vertical'),
      :async_chart => true,
      :color => FnordMetric::COLORS.last,
      :tick => tick
    )
  end

  def gauge_titles
    {}.tap do |_hash|
      gauges.each do |gauge|
        _hash.merge!(gauge.name => gauge.title)
      end
    end
  end

  def has_tick?
    false
  end
+9 −163
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ FnordMetric.widgets.barsWidget = function(){
          .addClass('container')
          .css({
            height: opts.height,
            margin: '20px 23px 25px 23px',
            margin: '10px 23px 25px 23px',
          })
      );
      
@@ -107,10 +107,11 @@ FnordMetric.widgets.barsWidget = function(){

    function announce(evt){
      if(evt.widget_key == opts.widget_key){
        if((evt.class == "widget_response") && (evt.cmd == "values_at")){
        if((evt.class == "widget_response") && (evt.cmd == "values_for")){
          running_request = false;
          $(opts.elem).css('opacity', 1); 
          updateSeriesData(evt.gauges);
          values = evt.values;
          renderChart();
        }
      }
    }
@@ -118,38 +119,15 @@ FnordMetric.widgets.barsWidget = function(){
    function requestValuesAsync(){
      FnordMetric.publish({
        "type": "widget_request",
        "klass": "TimeseriesWidget",
        "gauges": opts.gauges,
        "cmd": "values_at",
        "tick": opts.tick, 
        "klass": "BarsWidget",
        "gauge": opts.gauge,
        "cmd": "values_for",
        "since": opts.start_timestamp,
        "until": opts.end_timestamp,
        "widget_key": opts.widget_key
      })
    }

    function updateSeriesData(dgauges){
      // gconfig.series = [];

      // for(var ind = 0; ind < dgauges.length; ind++){
        
      //   gconfig.series.push({
      //     name: dgauges[ind].key,
      //     color: opts.series[ind].color,
      //     data: []
      //   });
        
      //   for(_time in dgauges[ind].vals){
      //     gconfig.series[ind].data.push(
      //       { x: parseInt(_time), y: parseInt(dgauges[ind].vals[_time] || 0) }
      //     );
      //   }

      // }

      // renderChart();
    }

    function updateChart(first_time, silent){
      if(!silent){ $(opts.elem).css('opacity', 0.5); }    
      updateRange();
@@ -158,7 +136,6 @@ FnordMetric.widgets.barsWidget = function(){
    }

    function redrawDatepicker(){
      // dateFormat('%d.%m.%y %H:%M', parseInt(opts.start_timestamp)*1000) +
      $('.datepicker', opts.elem).html(
        opts.start_timestamp +
        '&nbsp;&dash;&nbsp;' +
@@ -173,7 +150,7 @@ FnordMetric.widgets.barsWidget = function(){

      if(!opts.start_timestamp || !opts.end_timestamp || !!force){
        opts.end_timestamp = parseInt(new Date().getTime() / 1000);
        opts.start_timestamp = opts.end_timestamp - (opts.tick * xticks);
        opts.start_timestamp = opts.end_timestamp - opts.tick;
      }
    }

@@ -195,134 +172,3 @@ FnordMetric.widgets.barsWidget = function(){

};
/*
FnordMetric.widgets.barsWidget = function(){

  function render(opts){

    var widget_uid = FnordMetric.util.getNextWidgetUID();
    var chart=false;
    var max_y=0;

    function redraw(first_time, silent){
      if(!silent){ $(opts.elem).css('opacity', 0.5); }
      max_y=0;

      var gauge = opts.gauges[0];
      var _url = FnordMetric.p + '/' + FnordMetric.currentNamespace +'/gauge/'+gauge;
      if(opts.tick){ _url += ("?tick=" + opts.tick); }

      $.ajax({
        url: _url,
        success: redrawGauge(first_time, gauge)
      });
    }

    function redrawGauge(first_time, gauge){
      return (function(json){
        var raw_data = JSON.parse(json);
        var series_data = [];
        var series_type;
        var label_data = [];

        if(opts.plot_style == 'horizontal'){
          series_type = 'bar';
        } else {
          series_type = 'column';
        }

        if(opts.order_by == 'field'){
          raw_data.values.sort(function(a,b){
            if(a[0] == b[0]){
              return 0;
            }else if(a[0] > b[0]){
              return 1;
            } else {
              return -1;
            }
          });
        }

        for(p in raw_data.values){
          label_data.push(raw_data.values[p][0]||'?');
          series_data.push(parseInt(raw_data.values[p][1]||0));
          //max_y = Math.max(max_y, raw_data[p]);
        }

        chart = new Highcharts.Chart({
          chart: {
            renderTo: 'container-'+widget_uid,
            defaultSeriesType: series_type,
            height: 270
          },
          title: { text: '' },
          xAxis: {
           categories: label_data
          },
          yAxis: {
            title: { text: '' }
          },
          legend: {
            layout: 'horizontal',
            align: 'top',
            verticalAlign: 'top',
            x: -5,
            y: -3,
            margin: 25,
            borderWidth: 0
          },
          plotOptions: {
            column: {
              animation: first_time,
            }
          },
          series: [
            {
              name: opts.gauge_titles[gauge],
              data: series_data
            }
          ]
        });

        //chart.redraw();
        $(opts.elem).css('opacity', 1);
      });
    }

    function drawLayout(){
      $(opts.elem).append( $('<div></div>').attr('class', 'headbar').append(
        $('<div></div>').attr('class', 'button mr').append($('<span></span>').html('refresh')).click(
          function(){ redraw(); }
        )
      ).append(
        $('<h2></h2>').html(opts.title)
      ) ).append(
        $('<div></div>').attr('id', 'container-'+widget_uid).css({
          height: 256,
          marginBottom: 20,
          overflow: 'hidden'
        })
      );
    }

    drawLayout();
    redraw(true);

    if(opts.autoupdate){
      var autoupdate_interval = window.setInterval(function(){
        redraw(false, true);
      }, opts.autoupdate*1000);

      $('body').bind('fm_dashboard_close', function(){
        window.clearInterval(autoupdate_interval);
      });
    }

  }

  return {
    render: render
  };

};
*/
 No newline at end of file
+1 −2
Original line number Diff line number Diff line
@@ -14,11 +14,10 @@ FnordMetric.views.dashboardView = (function(dashboard_name){
          [dashboard_name, "/dashboard/"+dashboard_name]
        ],
        buttons: [
          ["Export Data", function(){ alert(23); }]
          ["New Dashboard", function(){ alert('here be dragons'); }]
        ]
      });


      $.ajax({
        url: FnordMetric.p + '/' + FnordMetric.currentNamespace+'/dashboard/'+dashboard_name,
        success: function(resp, status){