class PulseMeter::DygraphsVisualize::Widgets::Timeline
Constants
- DEFAULT_TIMESPAN
Public Class Methods
new(opts)
click to toggle source
Calls superclass method
PulseMeter::DygraphsVisualize::Widget::new
# File lib/pulse_meter/dygraphs_visualize/widgets/timeline.rb, line 12 def initialize(opts) super opts[:timespan] ||= DEFAULT_TIMESPAN end
Public Instance Methods
data(options = {})
click to toggle source
Calls superclass method
PulseMeter::DygraphsVisualize::Widget#data
# File lib/pulse_meter/dygraphs_visualize/widgets/timeline.rb, line 17 def data(options = {}) from, till = get_interval_borders(options) super().merge({ values_title: values_label, series: series_data(from, till), timespan: timespan, interval: interval }) end
Protected Instance Methods
ensure_equal_intervals!()
click to toggle source
# File lib/pulse_meter/dygraphs_visualize/widgets/timeline.rb, line 82 def ensure_equal_intervals! intervals = [] sensors.each do |s| unless s.type < PulseMeter::Sensor::Timeline raise NotATimelinedSensorInWidget, "sensor `#{s.name}' is not timelined" end intervals << s.interval end unless intervals.all?{|i| i == intervals.first} interval_notice = sensors.map{|s| "#{s.name}: #{s.interval}"}.join(', ') raise DifferentSensorIntervalsInWidget, "Sensors with different intervals in a single widget: #{interval_notice}" end end
get_interval_borders(options)
click to toggle source
# File lib/pulse_meter/dygraphs_visualize/widgets/timeline.rb, line 29 def get_interval_borders(options) from = if options[:start_time] && (options[:start_time] > 0) Time.at options[:start_time] else tspan = options[:timespan] || timespan Time.now - tspan end till = if options[:end_time] && (options[:end_time] > 0) Time.at options[:end_time] else Time.now end [from, till] end
interval()
click to toggle source
# File lib/pulse_meter/dygraphs_visualize/widgets/timeline.rb, line 97 def interval if sensors.empty? nil else sensors.first.interval end end
series_data(from, till)
click to toggle source
# File lib/pulse_meter/dygraphs_visualize/widgets/timeline.rb, line 45 def series_data(from, till) ensure_equal_intervals! sensor_datas = sensors.map{ |s| data = s.timeline_data(from, till, show_last_point) keys = @opts.fetch(:filter_keys, []).map(&:to_s) if keys.any? data.select { |d| keys.include?(d[:name]) } else data end } rows = [] titles = [] series_options = [] datas = [] sensor_datas.each do |sensor_data| sensor_data.each do |tl| titles << tl[:name] series_options << {color: PulseMeter::DygraphsVisualize::SeriesColor.new(tl).color} datas << tl[:data] end end unless datas.empty? first = datas.shift first.each_with_index do |tl_data, row_num| rows << datas.each_with_object([tl_data[:x], tl_data[:y]]) do |data_col, row| row << data_col[row_num][:y] end end end { titles: titles, rows: rows, options: series_options } end