class Blackbeard::MetricData::Unique
Constants
- DEFAULT_SEGMENT
Public Instance Methods
add(uid, amount = nil, segment = DEFAULT_SEGMENT)
click to toggle source
# File lib/blackbeard/metric_data/unique.rb, line 8 def add(uid, amount = nil, segment = DEFAULT_SEGMENT) add_at(tz.now, uid, amount, segment) end
add_at(time, uid, amount = nil, segment = DEFAULT_SEGMENT)
click to toggle source
# File lib/blackbeard/metric_data/unique.rb, line 12 def add_at(time, uid, amount = nil, segment = DEFAULT_SEGMENT) #TODO: unsure time is in proper timezone key = key_for_hour(time) segment_key = segment_key(key, segment) db.set_add_member(hours_set_key, key) db.set_add_member(key, segment_key) db.set_add_member(segment_key, uid) #TODO: if not today, blow away rollup keys end
result_for_hour(time)
click to toggle source
# File lib/blackbeard/metric_data/unique.rb, line 23 def result_for_hour(time) key = key_for_hour(time) segment_keys = db.set_members(key) result = {} segment_keys.each do |segment_key| segment = segment_key.split(/::/).last result[segment] = db.set_count(segment_key) end result end
segment_key(key, segment)
click to toggle source
# File lib/blackbeard/metric_data/unique.rb, line 34 def segment_key(key, segment) "#{key}::#{segment}" end
Private Instance Methods
merge_results(keys)
click to toggle source
# File lib/blackbeard/metric_data/unique.rb, line 40 def merge_results(keys) segments = {} keys.each do |key| segment_keys = db.set_members(key) segment_keys.each do |segment_key| segment = segment_key.split(/::/).last segments[segment] ||= [] segments[segment].push(segment_key) end end merged_results = {} segments.each do |segment, segment_keys| merged_results[segment] = db.set_union_count(segment_keys) end merged_results end