Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb')
-rw-r--r--spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb156
1 files changed, 82 insertions, 74 deletions
diff --git a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb
index b6a60c09d3d..b8eddc0ca7f 100644
--- a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb
+++ b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb
@@ -24,6 +24,8 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
describe '.categories' do
it 'gets all unique category names' do
expect(described_class.categories).to contain_exactly(
+ 'deploy_token_packages',
+ 'user_packages',
'compliance',
'analytics',
'ide_edit',
@@ -34,18 +36,10 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
'testing',
'issues_edit',
'ci_secrets_management',
- 'maven_packages',
- 'npm_packages',
- 'conan_packages',
- 'nuget_packages',
- 'pypi_packages',
- 'composer_packages',
- 'generic_packages',
- 'golang_packages',
- 'debian_packages',
- 'container_packages',
- 'tag_packages',
- 'snippets'
+ 'snippets',
+ 'code_review',
+ 'terraform',
+ 'ci_templates'
)
end
end
@@ -95,7 +89,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
it 'does not track the event' do
stub_application_setting(usage_ping_enabled: false)
- described_class.track_event(entity1, weekly_event, Date.current)
+ described_class.track_event(weekly_event, values: entity1, time: Date.current)
expect(Gitlab::Redis::HLL).not_to receive(:add)
end
@@ -109,20 +103,27 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
it 'tracks event when using symbol' do
expect(Gitlab::Redis::HLL).to receive(:add)
- described_class.track_event(entity1, :g_analytics_contribution)
+ described_class.track_event(:g_analytics_contribution, values: entity1)
+ end
+
+ it 'tracks events with multiple values' do
+ values = [entity1, entity2]
+ expect(Gitlab::Redis::HLL).to receive(:add).with(key: /g_{analytics}_contribution/, value: values, expiry: 84.days)
+
+ described_class.track_event(:g_analytics_contribution, values: values)
end
it "raise error if metrics don't have same aggregation" do
- expect { described_class.track_event(entity1, different_aggregation, Date.current) }.to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownAggregation)
+ expect { described_class.track_event(different_aggregation, values: entity1, time: Date.current) }.to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownAggregation)
end
it 'raise error if metrics of unknown aggregation' do
- expect { described_class.track_event(entity1, 'unknown', Date.current) }.to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownEvent)
+ expect { described_class.track_event('unknown', values: entity1, time: Date.current) }.to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownEvent)
end
context 'for weekly events' do
it 'sets the keys in Redis to expire automatically after the given expiry time' do
- described_class.track_event(entity1, "g_analytics_contribution")
+ described_class.track_event("g_analytics_contribution", values: entity1)
Gitlab::Redis::SharedState.with do |redis|
keys = redis.scan_each(match: "g_{analytics}_contribution-*").to_a
@@ -135,7 +136,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
end
it 'sets the keys in Redis to expire automatically after 6 weeks by default' do
- described_class.track_event(entity1, "g_compliance_dashboard")
+ described_class.track_event("g_compliance_dashboard", values: entity1)
Gitlab::Redis::SharedState.with do |redis|
keys = redis.scan_each(match: "g_{compliance}_dashboard-*").to_a
@@ -150,7 +151,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
context 'for daily events' do
it 'sets the keys in Redis to expire after the given expiry time' do
- described_class.track_event(entity1, "g_analytics_search")
+ described_class.track_event("g_analytics_search", values: entity1)
Gitlab::Redis::SharedState.with do |redis|
keys = redis.scan_each(match: "*-g_{analytics}_search").to_a
@@ -163,7 +164,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
end
it 'sets the keys in Redis to expire after 29 days by default' do
- described_class.track_event(entity1, "no_slot")
+ described_class.track_event("no_slot", values: entity1)
Gitlab::Redis::SharedState.with do |redis|
keys = redis.scan_each(match: "*-{no_slot}").to_a
@@ -180,12 +181,19 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
describe '.track_event_in_context' do
context 'with valid contex' do
- it 'increments conext event counte' do
+ it 'increments context event counter' do
expect(Gitlab::Redis::HLL).to receive(:add) do |kwargs|
expect(kwargs[:key]).to match(/^#{default_context}\_.*/)
end
- described_class.track_event_in_context(entity1, context_event, default_context)
+ described_class.track_event_in_context(context_event, values: entity1, context: default_context)
+ end
+
+ it 'tracks events with multiple values' do
+ values = [entity1, entity2]
+ expect(Gitlab::Redis::HLL).to receive(:add).with(key: /g_{analytics}_contribution/, value: values, expiry: 84.days)
+
+ described_class.track_event_in_context(:g_analytics_contribution, values: values, context: default_context)
end
end
@@ -193,7 +201,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
it 'does not increment a counter' do
expect(Gitlab::Redis::HLL).not_to receive(:add)
- described_class.track_event_in_context(entity1, context_event, '')
+ described_class.track_event_in_context(context_event, values: entity1, context: '')
end
end
@@ -201,7 +209,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
it 'does not increment a counter' do
expect(Gitlab::Redis::HLL).not_to receive(:add)
- described_class.track_event_in_context(entity1, context_event, invalid_context)
+ described_class.track_event_in_context(context_event, values: entity1, context: invalid_context)
end
end
end
@@ -209,35 +217,35 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
describe '.unique_events' do
before do
# events in current week, should not be counted as week is not complete
- described_class.track_event(entity1, weekly_event, Date.current)
- described_class.track_event(entity2, weekly_event, Date.current)
+ described_class.track_event(weekly_event, values: entity1, time: Date.current)
+ described_class.track_event(weekly_event, values: entity2, time: Date.current)
# Events last week
- described_class.track_event(entity1, weekly_event, 2.days.ago)
- described_class.track_event(entity1, weekly_event, 2.days.ago)
- described_class.track_event(entity1, no_slot, 2.days.ago)
+ described_class.track_event(weekly_event, values: entity1, time: 2.days.ago)
+ described_class.track_event(weekly_event, values: entity1, time: 2.days.ago)
+ described_class.track_event(no_slot, values: entity1, time: 2.days.ago)
# Events 2 weeks ago
- described_class.track_event(entity1, weekly_event, 2.weeks.ago)
+ described_class.track_event(weekly_event, values: entity1, time: 2.weeks.ago)
# Events 4 weeks ago
- described_class.track_event(entity3, weekly_event, 4.weeks.ago)
- described_class.track_event(entity4, weekly_event, 29.days.ago)
+ described_class.track_event(weekly_event, values: entity3, time: 4.weeks.ago)
+ described_class.track_event(weekly_event, values: entity4, time: 29.days.ago)
# events in current day should be counted in daily aggregation
- described_class.track_event(entity1, daily_event, Date.current)
- described_class.track_event(entity2, daily_event, Date.current)
+ described_class.track_event(daily_event, values: entity1, time: Date.current)
+ described_class.track_event(daily_event, values: entity2, time: Date.current)
# Events last week
- described_class.track_event(entity1, daily_event, 2.days.ago)
- described_class.track_event(entity1, daily_event, 2.days.ago)
+ described_class.track_event(daily_event, values: entity1, time: 2.days.ago)
+ described_class.track_event(daily_event, values: entity1, time: 2.days.ago)
# Events 2 weeks ago
- described_class.track_event(entity1, daily_event, 14.days.ago)
+ described_class.track_event(daily_event, values: entity1, time: 14.days.ago)
# Events 4 weeks ago
- described_class.track_event(entity3, daily_event, 28.days.ago)
- described_class.track_event(entity4, daily_event, 29.days.ago)
+ described_class.track_event(daily_event, values: entity3, time: 28.days.ago)
+ described_class.track_event(daily_event, values: entity4, time: 29.days.ago)
end
it 'raise error if metrics are not in the same slot' do
@@ -345,10 +353,10 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
allow(described_class).to receive(:known_events).and_return(known_events)
allow(described_class).to receive(:categories).and_return(%w(category1 category2))
- described_class.track_event_in_context([entity1, entity3], 'event_name_1', default_context, 2.days.ago)
- described_class.track_event_in_context(entity3, 'event_name_1', default_context, 2.days.ago)
- described_class.track_event_in_context(entity3, 'event_name_1', invalid_context, 2.days.ago)
- described_class.track_event_in_context([entity1, entity2], 'event_name_2', '', 2.weeks.ago)
+ described_class.track_event_in_context('event_name_1', values: [entity1, entity3], context: default_context, time: 2.days.ago)
+ described_class.track_event_in_context('event_name_1', values: entity3, context: default_context, time: 2.days.ago)
+ described_class.track_event_in_context('event_name_1', values: entity3, context: invalid_context, time: 2.days.ago)
+ described_class.track_event_in_context('event_name_2', values: [entity1, entity2], context: '', time: 2.weeks.ago)
end
subject(:unique_events) { described_class.unique_events(event_names: event_names, start_date: 4.weeks.ago, end_date: Date.current, context: context) }
@@ -386,13 +394,13 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
allow(described_class).to receive(:known_events).and_return(known_events)
allow(described_class).to receive(:categories).and_return(%w(category1 category2))
- described_class.track_event(entity1, 'event1_slot', 2.days.ago)
- described_class.track_event(entity2, 'event2_slot', 2.days.ago)
- described_class.track_event(entity3, 'event2_slot', 2.weeks.ago)
+ described_class.track_event('event1_slot', values: entity1, time: 2.days.ago)
+ described_class.track_event('event2_slot', values: entity2, time: 2.days.ago)
+ described_class.track_event('event2_slot', values: entity3, time: 2.weeks.ago)
# events in different slots
- described_class.track_event(entity2, 'event3', 2.days.ago)
- described_class.track_event(entity2, 'event4', 2.days.ago)
+ described_class.track_event('event3', values: entity2, time: 2.days.ago)
+ described_class.track_event('event4', values: entity2, time: 2.days.ago)
end
it 'returns the number of unique events for all known events' do
@@ -516,23 +524,23 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
subject(:aggregated_metrics_data) { described_class.aggregated_metrics_weekly_data }
before do
- described_class.track_event(entity1, 'event1_slot', 2.days.ago)
- described_class.track_event(entity2, 'event1_slot', 2.days.ago)
- described_class.track_event(entity3, 'event1_slot', 2.days.ago)
- described_class.track_event(entity1, 'event2_slot', 2.days.ago)
- described_class.track_event(entity2, 'event2_slot', 3.days.ago)
- described_class.track_event(entity3, 'event2_slot', 3.days.ago)
- described_class.track_event(entity1, 'event3_slot', 3.days.ago)
- described_class.track_event(entity2, 'event3_slot', 3.days.ago)
- described_class.track_event(entity2, 'event5_slot', 3.days.ago)
+ described_class.track_event('event1_slot', values: entity1, time: 2.days.ago)
+ described_class.track_event('event1_slot', values: entity2, time: 2.days.ago)
+ described_class.track_event('event1_slot', values: entity3, time: 2.days.ago)
+ described_class.track_event('event2_slot', values: entity1, time: 2.days.ago)
+ described_class.track_event('event2_slot', values: entity2, time: 3.days.ago)
+ described_class.track_event('event2_slot', values: entity3, time: 3.days.ago)
+ described_class.track_event('event3_slot', values: entity1, time: 3.days.ago)
+ described_class.track_event('event3_slot', values: entity2, time: 3.days.ago)
+ described_class.track_event('event5_slot', values: entity2, time: 3.days.ago)
# events out of time scope
- described_class.track_event(entity3, 'event2_slot', 8.days.ago)
+ described_class.track_event('event2_slot', values: entity3, time: 8.days.ago)
# events in different slots
- described_class.track_event(entity1, 'event4', 2.days.ago)
- described_class.track_event(entity2, 'event4', 2.days.ago)
- described_class.track_event(entity4, 'event4', 2.days.ago)
+ described_class.track_event('event4', values: entity1, time: 2.days.ago)
+ described_class.track_event('event4', values: entity2, time: 2.days.ago)
+ described_class.track_event('event4', values: entity4, time: 2.days.ago)
end
it_behaves_like 'aggregated_metrics_data'
@@ -543,23 +551,23 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
it_behaves_like 'aggregated_metrics_data' do
before do
- described_class.track_event(entity1, 'event1_slot', 2.days.ago)
- described_class.track_event(entity2, 'event1_slot', 2.days.ago)
- described_class.track_event(entity3, 'event1_slot', 2.days.ago)
- described_class.track_event(entity1, 'event2_slot', 2.days.ago)
- described_class.track_event(entity2, 'event2_slot', 3.days.ago)
- described_class.track_event(entity3, 'event2_slot', 3.days.ago)
- described_class.track_event(entity1, 'event3_slot', 3.days.ago)
- described_class.track_event(entity2, 'event3_slot', 10.days.ago)
- described_class.track_event(entity2, 'event5_slot', 4.weeks.ago.advance(days: 1))
+ described_class.track_event('event1_slot', values: entity1, time: 2.days.ago)
+ described_class.track_event('event1_slot', values: entity2, time: 2.days.ago)
+ described_class.track_event('event1_slot', values: entity3, time: 2.days.ago)
+ described_class.track_event('event2_slot', values: entity1, time: 2.days.ago)
+ described_class.track_event('event2_slot', values: entity2, time: 3.days.ago)
+ described_class.track_event('event2_slot', values: entity3, time: 3.days.ago)
+ described_class.track_event('event3_slot', values: entity1, time: 3.days.ago)
+ described_class.track_event('event3_slot', values: entity2, time: 10.days.ago)
+ described_class.track_event('event5_slot', values: entity2, time: 4.weeks.ago.advance(days: 1))
# events out of time scope
- described_class.track_event(entity1, 'event5_slot', 4.weeks.ago.advance(days: -1))
+ described_class.track_event('event5_slot', values: entity1, time: 4.weeks.ago.advance(days: -1))
# events in different slots
- described_class.track_event(entity1, 'event4', 2.days.ago)
- described_class.track_event(entity2, 'event4', 2.days.ago)
- described_class.track_event(entity4, 'event4', 2.days.ago)
+ described_class.track_event('event4', values: entity1, time: 2.days.ago)
+ described_class.track_event('event4', values: entity2, time: 2.days.ago)
+ described_class.track_event('event4', values: entity4, time: 2.days.ago)
end
end