added label grouping to Key and Summary classes

This commit is contained in:
2011-03-04 17:39:12 +00:00
parent 15904e8a94
commit f8dfb034af
4 changed files with 85 additions and 7 deletions

View File

@@ -39,10 +39,20 @@ module Redistat
@label.hash
end
def label_groups
@label.groups
end
def label=(input)
@label = (input.instance_of?(Redistat::Label)) ? input : Label.create(input, @options)
end
def groups
@groups ||= label_groups.map do |label_name|
self.class.new(@scope, label_name, self.date, @options)
end
end
def to_s(depth = nil)
depth ||= @options[:depth]
key = self.prefix

View File

@@ -4,18 +4,30 @@ module Redistat
def self.update_all(key, stats = {}, depth_limit = nil, connection_ref = nil, enable_grouping = nil)
stats ||= {}
enable_grouping = true if enable_grouping.nil?
stats = inject_group_summaries(stats) if enable_grouping
depth_limit ||= key.depth
return nil if stats.size == 0
depth_limit ||= key.depth
enable_grouping = true if enable_grouping.nil?
if enable_grouping
stats = inject_group_summaries(stats)
key.groups.each { |k|
update_key(k, stats, depth_limit, connection_ref)
}
else
update_key(key, stats, depth_limit, connection_ref)
end
end
private
def self.update_key(key, stats, depth_limit, connection_ref)
Date::DEPTHS.each do |depth|
update(key, stats, depth, connection_ref)
break if depth == depth_limit
end
end
private
def self.update(key, stats, depth, connection_ref = nil)
stats.each do |field, value|
db(connection_ref).hincrby key.to_s(depth), field, value