Add method ServiceUsageMetrics.get_date_range

Minimal implementation of `ServiceUsageMetrics.get_date_range`, with
a test.
pull/11809/head
Rafa de la Torre 8 years ago
parent 6ffb98c742
commit 8f6a360a5c

@ -39,6 +39,23 @@ module CartoDB
total
end
def get_date_range(service, metric, date_from, date_to)
check_valid_data(service, metric)
total = 0
values = {}
(date_from..date_to).each do |date|
year_month_key = date_year_month(date)
if values[year_month_key].nil?
key_prefix = @orgname.nil? ? user_key_prefix(service, metric, date) : org_key_prefix(service, metric, date)
values[year_month_key] = @redis.zrange(key_prefix, 0, -1, with_scores: true).to_h
end
total += values[year_month_key][date_day(date)]
end
total
end
protected
def check_valid_data(_service, _metric)

@ -68,4 +68,23 @@ describe CartoDB::ServiceUsageMetrics do
@usage_metrics.get(:dummy_service, :dummy_metric).should eq 0
end
end
describe :get_date_range do
before(:each) do
@redis_mock = MockRedis.new
@usage_metrics = CartoDB::ServiceUsageMetrics.new('rtorre', 'team', @redis_mock)
@usage_metrics.stubs(:check_valid_data)
end
it 'gets a sum of the zscores stored in a given date range' do
@redis_mock.zincrby('org:team:dummy_service:dummy_metric:201703', _amount=1, _day='20')
@redis_mock.zincrby('org:team:dummy_service:dummy_metric:201703', _amount=2, _day='21')
@redis_mock.zincrby('org:team:dummy_service:dummy_metric:201703', _amount=3, _day='22')
@usage_metrics.get_date_range('dummy_service',
'dummy_metric',
Date.new(2017, 03, 20),
Date.new(2017, 03, 22)).should eq 6
end
end
end

Loading…
Cancel
Save