class FnordMetric::Widget attr_accessor :report def initialize(options={}) @options = options add_report(@options[:report]) if @options[:report] end def title @options[:title] end def metrics [@options[:metrics]].flatten.map{ |m| m.is_a?(FnordMetric::Metric) ? m : FnordMetric.metrics.fetch(m) } end def tick @options[:tick] || 1.day end def range @options[:range] || default_range end def range_to_i (range.first.to_i..range.last.to_i) end def ticks range_to_i.step(tick.to_i).map{ |ts| (Time.at(ts)..Time.at(ts+tick.to_i)) }.compact end def default_range(now=Time.now) if tick.to_i == 1.day.to_i now = now+1.day te = Time.utc(now.year, now.month, now.day) (te-30.days)..(te-1.second) elsif tick.to_i == 1.hour.to_i te = Time.utc(now.year, now.month, now.day, now.hour) (te-24.hours)..(te-1.second) else (now-(tick*30))..now end end def add_report(report) @report = report end def data { :title => @options[:title] } end def data_json data.to_json.gsub('"', '\'') end def include_current? !(@options[:current] == false) end def render(elem_id) %Q{ <script type='text/javascript'> FnordMetric.render('#{elem_id}', #{data_json}); </script> } end end