lib/fnordmetric/namespace.rb in fnordmetric-0.7.5 vs lib/fnordmetric/namespace.rb in fnordmetric-0.9.7
- old
+ new
@@ -1,52 +1,57 @@
class FnordMetric::Namespace
- attr_reader :handlers, :gauges, :opts, :key, :dashboards
+ attr_reader :handlers, :gauges, :opts, :key, :dashboards, :flags
- @@opts = [:event, :gauge, :widget, :set_title, :active_users_available]
+ @@opts = [:event, :gauge, :widget, :set_title, :hide_active_users, :hide_overview]
+ @@multi_gauges = [:timeseries_gauge, :toplist_gauge, :distribution_gauge]
- def initialize(key, opts)
+ def initialize(key, opts)
@gauges = Hash.new
@dashboards = Hash.new
@handlers = Hash.new
+ @flags = Hash.new
@title = key
@active_users_available = true
@opts = opts
- @key = key
+ @key = key
end
def ready!(redis)
@redis = redis
- @gauges.map{ |k,g| g.add_redis(@redis) }
self
end
- def announce(event)
+ def announce(event)
announce_to_timeline(event)
announce_to_typelist(event)
-
+
if event[:_session]
event[:_session_key] = announce_to_session(event).session_key
end
- [
+ res = [
@handlers[event[:_type].to_s],
@handlers["*"]
- ].flatten.compact.each do |context|
- context.call(event, @redis)
+ ].flatten.compact.each do |context|
+ context.call(event, @redis)
+ end.size
+
+ if res == 0
+ FnordMetric.error("no handler for event-type: #{event[:_type]}")
end
self
end
def announce_to_session(event)
FnordMetric::Session.create(@opts.clone.merge(
- :namespace_key => @key,
+ :namespace_key => @key,
:namespace_prefix => key_prefix,
:redis => @redis,
:event => event
- ))
+ ))
end
def announce_to_timeline(event)
timeline_key = key_prefix(:timeline)
@redis.zadd(timeline_key, event[:_time], event[:_eid])
@@ -63,19 +68,19 @@
end
def token
@key
end
-
+
def title
@title
end
-
+
def active_users_available
@active_users_available
end
-
+
def dashboards(name=nil)
return @dashboards unless name
dash = FnordMetric::Dashboard.new(:title => name)
@dashboards[dash.token.to_s] ||= dash
end
@@ -89,35 +94,47 @@
return FnordMetric::Event.by_type(opts.delete(:type), extend_opts(opts)) if _ids == :by_type
return FnordMetric::Event.by_session_key(opts.delete(:session_key), extend_opts(opts)) if _ids == :by_session_key
end
def method_missing(m, *args, &block)
+ return send(:opt_multigauge, *args.unshift(m), &block) if @@multi_gauges.include?(m)
raise "unknown option: #{m}" unless @@opts.include?(m)
send(:"opt_#{m}", *args, &block)
end
- def hide_active_users
- @active_users_available = false
+ def opt_hide_active_users
+ @flags[:hide_active_users] = true
end
-
- def set_title(key)
- @title = key
+
+ def opt_hide_overview
+ @flags[:hide_overview] = true
end
-
+
+ def opt_set_title(title)
+ @title = title
+ end
+
def opt_event(event_type, opts={}, &block)
opts.merge!(:redis => @redis, :gauges => @gauges)
FnordMetric::Context.new(opts, block).tap do |context|
@handlers[event_type.to_s] ||= []
@handlers[event_type.to_s] << context
- end
+ end
end
def opt_gauge(gauge_key, opts={})
opts.merge!(:key => gauge_key, :key_prefix => key_prefix)
- @gauges[gauge_key] ||= FnordMetric::Gauge.new(opts)
+ klass = "FnordMetric::#{(opts[:type] || "").to_s.camelize}Gauge".constantize
+ @gauges[gauge_key] ||= klass.new(opts)
end
+ def opt_multigauge(gauge_type, gauge_key, opts={})
+ opts.merge!(:key => gauge_key, :key_prefix => key_prefix)
+ klass = "FnordMetric::#{gauge_type.to_s.camelize}"
+ @gauges[gauge_key] ||= klass.constantize.new(opts)
+ end
+
def opt_widget(dashboard, widget)
widget = build_widget(widget) if widget.is_a?(Hash)
dashboards(dashboard).add_widget(widget)
end
@@ -131,8 +148,15 @@
opts.merge(
:namespace_prefix => key_prefix,
:redis_prefix => @opts[:redis_prefix],
:redis => @redis
)
+ end
+
+ def to_json
+ flags.merge(
+ :token => token,
+ :title => title
+ ).to_json
end
end