Commit 7406e136 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

more widget api and dummy gauge

parent 7a8c73f0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ require "fnordmetric/acceptors/acceptor"
require "fnordmetric/acceptors/tcp_acceptor"
require "fnordmetric/acceptors/udp_acceptor"

require "fnordmetric/gauges/dummy_gauge"
require "fnordmetric/gauges/numeric_gauge"

require "fnordmetric/widgets/widget"
+22 −0
Original line number Diff line number Diff line
class FnordMetric::DummyGauge < FnordMetric::MultiGauge

  def initialize(opts)   
    super(opts)

    ticks  = [1.day, 1.hour] 
    series = [:fnord, :bar, :fu]

    my_widget = timeline_widget(
      :tab => "Overview",
      :title => "Totals",
      :ticks => ticks,
      :series => series,
      :height => 350
    )

    my_widget.on(:values_at) do |_series, _ticks, _tick|
      Hash[_ticks.map{ |_t| [_t, 23 + rand(5)] }]
    end
  end

end
 No newline at end of file
+3 −26
Original line number Diff line number Diff line
class FnordMetric::NumericGauge < FnordMetric::MultiGauge

  def initialize(opts)   
    @cmds = [:incr]
    
    super(opts)

    if !opts[:series].is_a?(Array) || opts[:series].size == 0
      raise "numeric_gauge #{opts[:key]}: missing option series"
    end

    if !opts[:ticks].is_a?(Array) || opts[:ticks].size == 0
      raise "numeric_gauge #{opts[:key]}: missing option ticks"
    end

    opts[:series] = opts[:series].map(&:to_sym)

    if opts[:ticks].any?{ |t| !t.is_a?(Fixnum) }
      raise "numeric_gauge #{opts[:key]}: these are not numbers: #{opts[:ticks].inspect}"
    end

    if opts[:series].size != opts[:series].uniq.size
      raise "numeric_gauge #{opts[:key]}: series are not unique"
    end

    validate_series!
    validate_ticks!

    @overview_timeline = timeline_widget(
      :tab => "Overview",
      :title => "Totals",
      :render_target => ".viewport_inner",
      :ticks => @opts[:ticks],
      :series => @opts[:series],
      :series_titles => Hash[@opts[:series].map{|s| [s, s]}],
      :include_current => true,
      :height => 350
    )

@@ -39,11 +19,8 @@ class FnordMetric::NumericGauge < FnordMetric::MultiGauge
      Hash[_ticks.map{ |_t| [_t, 23] }]
    end


  end



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

+22 −2
Original line number Diff line number Diff line
@@ -45,8 +45,6 @@ private
  end

  def render_widget!(ev)
    puts ev.inspect

    if @widgets.has_key?(ev["widget_key"])
      respond(@widgets[ev["widget_key"]].react(ev).merge(
        :_class => "widget_response",
@@ -72,4 +70,26 @@ private
    end
  end

  def validate_series!
    if !@opts[:series].is_a?(Array) || @opts[:series].size == 0
      raise "#{@opts[:key]}: missing option series"
    end

    if @opts[:series].size != @opts[:series].uniq.size
      raise "#{@opts[:key]}: series are not unique"
    end

    @opts[:series] = @opts[:series].map(&:to_sym)
  end

  def validate_ticks!
    if !@opts[:ticks].is_a?(Array) || @opts[:ticks].size == 0
      raise "#{@opts[:key]}: missing option ticks"
    end

    if @opts[:ticks].any?{ |t| !t.is_a?(Fixnum) }
      raise "#{@opts[:key]}: these are not numbers: #{@opts[:ticks].inspect}"
    end
  end

end
 No newline at end of file
+7 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ class FnordMetric::TimelineWidget < FnordMetric::Widget

    {
      :tick => ev["tick"],
      :cmd => "series_data",
      :cmd => "values_at",
      :values => Hash[@opts[:series].map{ |skey|
        vals =  call_handler(:values_at, skey, ev["ticks"], ev["tick"]) 
        ev["ticks"].each{ |_tick| vals[_tick.to_i] ||= 0 }
@@ -17,4 +17,10 @@ class FnordMetric::TimelineWidget < FnordMetric::Widget
    }
  end  

  def opts
    super.tap do |o|
      o[:series_titles] ||= Hash[o[:series].map{|s| [s, s]}]
    end
  end

end
 No newline at end of file
Loading