Commit 4b397820 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

basic number widget working again :)

parent c57196e8
Loading
Loading
Loading
Loading
+33 −15
Original line number Diff line number Diff line
@@ -24,7 +24,12 @@ module FnordMetric
  end

  def self.namespaces
    @@namespaces
    {}.tap do |_namespaces|
      @@namespaces.each do |key, block|
        _namespaces[key] = FnordMetric::Namespace.new(key, options.clone)
        _namespaces[key].instance_eval(&block)
      end
    end
  end

  def self.backend
@@ -119,15 +124,38 @@ module FnordMetric
end



require "fnordmetric/remote_gauge"
require "fnordmetric/multi_gauge"
require "fnordmetric/event_handler"
require "fnordmetric/namespace"
require "fnordmetric/session"
require "fnordmetric/gauge_calculations"
require "fnordmetric/gauge_modifiers"
require "fnordmetric/gauge"
require "fnordmetric/context"

require "fnordmetric/web/web"
require "fnordmetric/web/app"
require "fnordmetric/web/websocket"
require "fnordmetric/web/reactor"
require "fnordmetric/web/event"
require "fnordmetric/web/dashboard"







require "fnordmetric/logger"



require "fnordmetric/remote_gauge"
require "fnordmetric/multi_gauge"
require "fnordmetric/event_handler"





require "fnordmetric/backends/redis_backend"
require "fnordmetric/backends/memory_backend"

@@ -148,16 +176,6 @@ require "fnordmetric/widgets/numbers_widget"
require "fnordmetric/widgets/realtime_value_widget"


require "fnordmetric/web/web"
require "fnordmetric/web/namespace"
require "fnordmetric/web/app"
require "fnordmetric/web/websocket"
require "fnordmetric/web/event"
require "fnordmetric/web/dashboard"
require "fnordmetric/web/session"

require "fnordmetric/logger"


 # require "fnordmetric/context"

+1 −6
Original line number Diff line number Diff line
@@ -43,14 +43,9 @@ class FnordMetric::App < Sinatra::Base
  set :views, ::File.expand_path('../../../../web/haml', __FILE__)

  def initialize(opts)
    @namespaces = FnordMetric.namespaces.clone
    @namespaces = FnordMetric.namespaces
    @redis = Redis.connect(:url => opts[:redis_url])
    @opts = opts
    namespaces.each do |key, block|
      @namespaces[key] = FnordMetric::Namespace.new(key, opts.clone)
      @namespaces[key].instance_eval(&block)
      @namespaces[key].ready!(@redis.clone)
    end
    super(nil)
  end

+13 −0
Original line number Diff line number Diff line
class FnordMetric::Reactor

  def initialize
    @namespaces = FnordMetric.namespaces
  end

  def execute(event)
  	return false unless event["type"] == "widget_request"
  	return false unless @namespaces.keys.include?(event["namespace"].to_sym)
  	"FnordMetric::#{event["klass"]}".constantize.execute(@namespaces[event["namespace"].to_sym], event) # FIXPAUL
  end

end
 No newline at end of file
+4 −17
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ class FnordMetric::WebSocket
    }.merge(opts)

    @backend = FnordMetric.backend
    @reactor = FnordMetric::Reactor.new

    @uuid = "websocket-#{get_uuid}"

@@ -24,18 +25,6 @@ private
    EventMachine::WebSocket.start(@opts) do |socket|
      socket.onopen do

        subscribed_channles = []

        @backend.subscribe do |message| 
          if message["_sender"] != @uuid &&
            (message["_class"] == "widget_response" ||
             message["_class"] == "widget_push" ||
             message["_class"] == "discover_response" ||
             message["_class"] == "render_response")
            socket.send(message.to_json)
          end
        end
        
        socket.onmessage do |message|
          puts "received: #{message}"
          begin
@@ -45,12 +34,10 @@ private
          else
            message["_eid"] ||= get_uuid
            message["_sender"] = @uuid
            @backend.publish(message)
            if msg = @reactor.execute(message) # FIXPAUL
              socket.send(msg.to_json)
            end
          end

        socket.onclose do
          @backend.hangup
        end

      end
+36 −0
Original line number Diff line number Diff line
class FnordMetric::NumbersWidget < FnordMetric::Widget

  def self.execute(namespace, event)
    puts "XEAFFFFH -> #{namespace.gauges.has_key?(event["gauge"].to_sym)} - #{event}"

    resp = if event["cmd"] == "values_for"
      execute_values_for(namespace.gauges[event["gauge"].to_sym], event) 
    end

    return false unless resp

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

  def self.execute_values_for(gauge, event)
    _t = Time.now.to_i

    puts "FUUUU #{gauge.inspect}"

    values = {}.tap do |out|
      out["#{gauge.name}-now"]  = { 
        :value => gauge.value_at(_t),
        :desc  => "$formatTimeRangePre(#{gauge.tick}, 0)"
      }
      out["#{gauge.name}-last"]  = { 
        :value => gauge.value_at(_t-gauge.tick),
        :desc  => "$formatTimeRangePre(#{gauge.tick}, -1)"
      }
    end

    { "cmd" => "values_for", 
      "series" => gauge.name, 
      "values" => values }
  end

  def data
    super.merge(
      :series => gauges.map(&:name),
Loading