class MerryGoRound::Query
Attributes
granularity[RW]
keys[RW]
max[RW]
min[RW]
Public Class Methods
new(params = {})
click to toggle source
# File lib/merry_go_round/query.rb, line 7 def initialize(params = {}) self.granularity = params[:granularity] || :hour self.keys = [params[:keys]].flatten.compact parse_max(params) parse_min(params) end
Public Instance Methods
execute()
click to toggle source
# File lib/merry_go_round/query.rb, line 14 def execute query = MerryGoRound::Aggregation if keys && keys.length > 0 query = query.where('key in (?)', keys) end query = query.where('granularity = ? and timestamp >= ? and timestamp <= ?', granularity, min, max) query = query.order('key, timestamp') records = query.all keys = records.map(&:key).uniq results = keys.inject({}) do |out, current_key| out[current_key] = records.select{|record| record.key == current_key }.map do |item| { id: item.id, parent_id: item.parent_id, timestamp: item.timestamp, value: item.value, granularity: item.granularity } end out end { results: results, query: self.as_json } end
Private Instance Methods
parse_max(params)
click to toggle source
# File lib/merry_go_round/query.rb, line 47 def parse_max(params) max = Time.at((params[:max] || Time.now).to_i).utc # remove seconds self.max = max - max.sec end
parse_min(params)
click to toggle source
# File lib/merry_go_round/query.rb, line 53 def parse_min(params) if params[:min] min = Time.at(params[:min].to_i).utc else current_granularity = MerryGoRound.granularities.index(granularity) unless less_granularity = MerryGoRound.granularities[current_granularity + 1] less_granularity = query.granularity end min = Time.now.utc - seconds(less_granularity) end # remove seconds self.min = min - min.sec end