lib/fnordmetric/web/reactor.rb in fnordmetric-1.0.1 vs lib/fnordmetric/web/reactor.rb in fnordmetric-1.2.0

- old
+ new

@@ -20,15 +20,27 @@ return false unless ns = @namespaces[event["namespace"].to_sym] messages << discover(ns) if event["type"] == "discover_request" 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.flatten.compact + messages << gauge_list(ns, event) if event["type"] == "gauge_list_request" + + messages.flatten.compact.map do |m| + m["namespace"] = event["namespace"]; m + end end def widget(namespace, event) - "FnordMetric::#{event["klass"]}".constantize.execute(namespace, event) # FIXPAUL + klass = if event["klass"] == "generic" && event["cmd"] == "values_for" + FnordMetric::NumbersWidget + elsif event["klass"] == "generic" && event["cmd"] == "values_at" + FnordMetric::TimeseriesWidget + else + "FnordMetric::#{event["klass"]}".constantize + end + + klass.execute(namespace, event) end def gauge(namespace, event) return false unless gauge = namespace.gauges[event["gauge"].to_sym] @@ -38,10 +50,12 @@ :payload => gauge.render_to_event(namespace, event) } end def discover(namespace) + namespace.ready!(@redis) + [namespace.dashboards.map do |dash_key, dash| { "type" => "discover_response", "gauge_key" => dash_key, "view" => "dashboard", "group" => dash.group } end, namespace.gauges.map do |gauge_key, gauge| @@ -79,9 +93,25 @@ { :type => "active_users_response", :sessions => sessions, :events => events.map(&:to_json), :types => types + } + end + + def gauge_list(namespace, event) + namespace.ready!(@redis) + + gauges = namespace.gauges.map do |name, gauge| + { + "key" => gauge.name, + "title" => gauge.title + } + end + + { + :type => "gauge_list_response", + :gauges => gauges } end end