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

gauge-explorer: WIP

parent 91bfa803
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -2,7 +2,9 @@ class FnordMetric::Namespace
  
  attr_reader :handlers, :gauges, :opts, :key, :dashboards, :flags

  @@opts = [:event, :gauge, :widget, :set_title, :hide_active_users, :hide_overview, :dashboard]
  @@opts = [:event, :gauge, :widget, :set_title, :hide_active_users, :hide_overview,
            :hide_gauge_explorer, :dashboard]

  @@multi_gauges = [:timeseries_gauge, :toplist_gauge, :distribution_gauge]

  def initialize(key, opts)
@@ -12,6 +14,7 @@ class FnordMetric::Namespace
    @flags = Hash.new
    @title = key
    @active_users_available = true
    @gauge_explorer_available = true
    @opts = opts
    @key = key
  end
@@ -78,7 +81,11 @@ class FnordMetric::Namespace
  end

  def active_users_available
    @active_users_available
    !!@active_users_available
  end

  def gauge_explorer_available
    !!@active_users_available
  end

  def dashboards(name=nil, opts = {})
@@ -107,6 +114,10 @@ class FnordMetric::Namespace
    @flags[:hide_active_users] = true
  end

  def opt_hide_gauge_explorer
    @flags[:hide_gauge_explorer] = true
  end

  def opt_hide_overview
    @flags[:hide_overview] = true
  end
+15 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ private
    messages << widget(ns, event) if event["type"] == "widget_request"
    messages << gauge(ns, event) if event["type"] == "render_request"
    messages << active_users(ns, event) if event["type"] == "active_users_request"
    messages << gauge_list(ns, event) if event["type"] == "gauge_list_request"

    messages.flatten.compact.map do |m|
      m["namespace"] = event["namespace"]; m
@@ -95,4 +96,18 @@ private
    }
  end

  def gauge_list(namespace, event)
    gauges = namespace.gauges.map do |name, gauge|
      {
        "key" => gauge.name,
        "title" => gauge.title
      }
    end

    {
      :type   => "gauge_list_response",
      :gauges => gauges
    }
  end

end
+60 −0
Original line number Diff line number Diff line
@@ -753,3 +753,63 @@ input.input.lopen{
.widget_histogram_bars rect:hover {
  opacity: 0.9;
}

.ge_controlpanel {
  margin-top:45px;
  height:65px;
  padding:20px;
}

.ge_controlpanel label{
  font-weight:bold;
  display:block;
  margin-bottom:5px;
}

.ui-autocomplete.ui-menu{
  background:#fff;
  border: 1px solid #bbb;
  border-radius:3px;
  box-shadow: 2px 0 4px rgba(0,0,0,.2);
  float:left;
  padding:0 0 0 0;
}

.ui-autocomplete.ui-menu li {
  list-style-type:none;
  line-height:30px;
  font-size:110%;
  padding-left:10px;
  border-top:1px solid #fff;
  border-bottom:1px solid #efefef;
}

.ui-autocomplete.ui-menu li:hover {
  color:#fff;
  cursor:pointer;

  background: #7bb2ff; /* Old browsers */
  background: -moz-linear-gradient(top, #7bb2ff 0%, #609ff8 44%, #4089ee 100%);
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7bb2ff), color-stop(44%,#609ff8), color-stop(100%,#4089ee)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #7bb2ff 0%,#609ff8 44%,#4089ee 100%);
  background: -o-linear-gradient(top, #7bb2ff 0%,#609ff8 44%,#4089ee 100%);
  background: -ms-linear-gradient(top, #7bb2ff 0%,#609ff8 44%,#4089ee 100%);
  background: linear-gradient(top, #7bb2ff 0%,#609ff8 44%,#4089ee 100%);

  border-top:1px solid #5F94DE;
  border-bottom:1px solid #4E7DBF;
}

.ge_controlpanel .ui-helper-hidden-accessible {
  display: none;
}

.ge_controlpanel .ui-combobox-input {
  height:35px;
  line-height:35px;
  padding: 0 10px;
  width:400px;
  border-radius:3px;
  border:1px solid #bbb;
  box-shadow: 0 0 2px #ddd inset;
}
+2 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
    %script{:src => "/vendor/jquery-1.6.2.min.js", :type => "text/javascript"}
    %script{:src => "/vendor/jquery-ui.min.js", :type => "text/javascript"}
    %script{:src => "/vendor/jquery.maskedinput.js", :type => "text/javascript"}
    %script{:src => "/vendor/jquery.combobox.js", :type => "text/javascript"}
    %script{:src => "/js/d3.fnordmetric.js", :type => "text/javascript"}
    %script{:src => "/js/rickshaw.fnordmetric.js", :type => "text/javascript"}
    %script{:src => "/js/fnordmetric.js", :type => "text/javascript"}
@@ -22,6 +23,7 @@
    %script{:src => "/js/fnordmetric.gauge_view.js", :type => "text/javascript"}
    %script{:src => "/js/fnordmetric.dashboard_view.js", :type => "text/javascript"}
    %script{:src => "/js/fnordmetric.session_view.js", :type => "text/javascript"}
    %script{:src => "/js/fnordmetric.gauge_explorer.js", :type => "text/javascript"}
    %link{:href => "/vendor/font-awesome/css/font-awesome.css", :rel => "stylesheet", :type => "text/css"}
    %link{:href => "/fnordmetric-ui.css", :rel => "stylesheet", :type => "text/css"}
    %link{:href => "/fnordmetric.css", :rel => "stylesheet", :type => "text/css"}
+112 −0
Original line number Diff line number Diff line
FnordMetric.views.gaugeExplorer = (function(){

  var elem, widget, gauge_list;
  var currentGauge;

  function load(_elem){
    elem = _elem;

    elem.html('<div class="navbar"></div><div class="ge_controlpanel">' +
     '<label>Select a Gauge</label><select class="ge_gauge_picker"></select>' +
     '</div><div class="widget_viewport"></div>');

    FnordMetric.ui.navbar($('.navbar', elem), {
      breadcrumb: [
        ["Gauge Explorer", "#gauge_explorer"],
      ],
      buttons: [
        ["<i class='icon-refresh'></i>Refresh", function(){ load(elem); }]
      ],
      datepicker: true
    });

    currentGauge = {
      key: "useronline_total",
      title: "Fnord"
    };

    render();
    requestGaugeInfoAsync();
  };

  function render() {
    console.log(currentGauge);
    $(".widget_viewport", elem).html('');
    widget = FnordMetric.widgets.timeseriesWidget();

    var gauges = [currentGauge.key];
    var series = [{
      "color": "#00ff00",
      "data": [{x:0, y:0}],
      name: currentGauge.key,
      title: currentGauge.title
    }];

    widget.render({
      elem: $(".widget_viewport", elem),
      async_chart: true,
      start_timestamp: ((new Date()).getTime() - 3600),
      end_timestamp: ((new Date()).getTime()),
      include_current: true,
      width: 100,
      height: (window.innerHeight - 400),
      gauges: gauges,
      series: series,
      default_cardinal: false,
      default_style: "line",
      autoupdate: 10,
      tick: 10,
      widget_key: "gauge_explorer"
    });
  }

  function resize(_width, _height){
    render();
  };

  function announce(evt){
    if (evt.type == "widget_response" && widget)
      widget.announce(evt);

    if (evt.type == "gauge_list_response"){
      $('.ge_gauge_picker', elem).html();
      gauge_list = {};

      $(evt.gauges).each(function(n, gauge){
        var gauge_title = gauge.title + ' [' + gauge.key + ']';

        gauge_list[gauge.key] = {
          "key": gauge.key, 
          "title": gauge.title
        };

        $('.ge_gauge_picker', elem).append(
          '<option value=' + gauge.key + '>' + gauge_title + '</option>');
      });

      $('.ge_gauge_picker', elem)
        .bind('value_changed', function(){
          currentGauge = gauge_list[$(this).val()];
          render();
        })
        .combobox();
    }
  }

  function requestGaugeInfoAsync() {
    FnordMetric.publish({
      "type": "gauge_list_request"
    });
  }

  function close(){
  };

  return {
    load: load,
    resize: resize,
    announce: announce,
    close: close
  };

});
Loading