diff options
Diffstat (limited to 'spec/migrations/20230317004428_migrate_daily_redis_hll_events_to_weekly_aggregation_spec.rb')
-rw-r--r-- | spec/migrations/20230317004428_migrate_daily_redis_hll_events_to_weekly_aggregation_spec.rb | 43 |
1 files changed, 10 insertions, 33 deletions
diff --git a/spec/migrations/20230317004428_migrate_daily_redis_hll_events_to_weekly_aggregation_spec.rb b/spec/migrations/20230317004428_migrate_daily_redis_hll_events_to_weekly_aggregation_spec.rb index 86787273fbc..21cdb6afa24 100644 --- a/spec/migrations/20230317004428_migrate_daily_redis_hll_events_to_weekly_aggregation_spec.rb +++ b/spec/migrations/20230317004428_migrate_daily_redis_hll_events_to_weekly_aggregation_spec.rb @@ -25,10 +25,11 @@ RSpec.describe MigrateDailyRedisHllEventsToWeeklyAggregation, :migration, :clean end context 'with weekly aggregation' do - let(:event) { { aggregation: 'weekly', name: 'wiki_action' } } + let(:date_formatted) { date.strftime('%G-%V') } + let(:event) { { aggregation: 'weekly', name: 'weekly_action' } } it 'returns correct key' do - existing_key = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, event, date) + existing_key = "{hll_counters}_weekly_action-#{date_formatted}" expect(described_class.new.redis_key(event, date, event[:aggregation])).to eq(existing_key) end @@ -36,7 +37,7 @@ RSpec.describe MigrateDailyRedisHllEventsToWeeklyAggregation, :migration, :clean end context 'with weekly events' do - let(:events) { [{ aggregation: 'weekly', name: 'wiki_action' }] } + let(:events) { [{ aggregation: 'weekly', name: 'weekly_action' }] } before do allow(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:known_events).and_return(events) @@ -53,47 +54,23 @@ RSpec.describe MigrateDailyRedisHllEventsToWeeklyAggregation, :migration, :clean end context 'with daily events' do - let(:daily_expiry) { Gitlab::UsageDataCounters::HLLRedisCounter::DEFAULT_DAILY_KEY_EXPIRY_LENGTH } + let(:daily_expiry) { 29.days } let(:weekly_expiry) { Gitlab::UsageDataCounters::HLLRedisCounter::DEFAULT_WEEKLY_KEY_EXPIRY_LENGTH } - it 'doesnt override events from migrated keys (code deployed before migration)' do - events = [{ aggregation: 'daily', name: 'users_viewing_analytics' }, - { aggregation: 'weekly', name: 'users_viewing_analytics' }] - allow(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:known_events).and_return(events) - - day = (Date.today - 1.week).beginning_of_week - daily_event = events.first - key_daily1 = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, daily_event, day) - Gitlab::Redis::HLL.add(key: key_daily1, value: 1, expiry: daily_expiry) - key_daily2 = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, daily_event, day + 2.days) - Gitlab::Redis::HLL.add(key: key_daily2, value: 2, expiry: daily_expiry) - key_daily3 = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, daily_event, day + 5.days) - Gitlab::Redis::HLL.add(key: key_daily3, value: 3, expiry: daily_expiry) - - # the same event but with weekly aggregation and pre-Redis migration - weekly_event = events.second - key_weekly = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, weekly_event, day + 5.days) - Gitlab::Redis::HLL.add(key: key_weekly, value: 3, expiry: weekly_expiry) - - migrate! - - expect(Gitlab::Redis::HLL.count(keys: key_weekly)).to eq(3) - end - it 'migrates with correct parameters', :aggregate_failures do - events = [{ aggregation: 'daily', name: 'users_viewing_analytics_group_devops_adoption' }] + events = [{ aggregation: 'daily', name: 'g_project_management_epic_blocked_removed' }] allow(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:known_events).and_return(events) event = events.first.dup.tap { |e| e[:aggregation] = 'weekly' } # For every day in the last 30 days, add a value to the daily key with daily expiry (including today) 31.times do |i| - key = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, event, Date.today - i.days) + key = described_class.new.send(:redis_key, event, Date.today - i.days, :weekly) Gitlab::Redis::HLL.add(key: key, value: i, expiry: daily_expiry) end migrate! - new_key = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, event, Date.today) + new_key = described_class.new.send(:redis_key, event, Date.today, :weekly) # for the current week we should have value eq to the day of the week (ie. 1 for Monday, 2 for Tuesday, etc.) first_week_days = Date.today.cwday expect(Gitlab::Redis::HLL.count(keys: new_key)).to eq(first_week_days) @@ -102,7 +79,7 @@ RSpec.describe MigrateDailyRedisHllEventsToWeeklyAggregation, :migration, :clean full_weeks = (31 - first_week_days) / 7 # for the next full weeks we should have value eq to 7 (ie. 7 days in a week) (1..full_weeks).each do |i| - new_key = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, event, Date.today - i.weeks) + new_key = described_class.new.send(:redis_key, event, Date.today - i.weeks, :weekly) expect(Gitlab::Redis::HLL.count(keys: new_key)).to eq(7) expect(with_redis { |r| r.ttl(new_key) }).to be_within(600).of(weekly_expiry) end @@ -111,7 +88,7 @@ RSpec.describe MigrateDailyRedisHllEventsToWeeklyAggregation, :migration, :clean last_week_days = 31 - ((full_weeks * 7) + first_week_days) unless last_week_days.zero? last_week = full_weeks + 1 - new_key = Gitlab::UsageDataCounters::HLLRedisCounter.send(:redis_key, event, Date.today - last_week.weeks) + new_key = described_class.new.send(:redis_key, event, Date.today - last_week.weeks, :weekly) expect(Gitlab::Redis::HLL.count(keys: new_key)).to eq(last_week_days) expect(with_redis { |r| r.ttl(new_key) }).to be_within(600).of(weekly_expiry) end |