Commit d50d836e authored by Alper Akgun's avatar Alper Akgun

Merge branch '325290-add-a-generic-feature-flag-for-tracking-using-redis-hll' into 'master'

Add a global feature flag for tracking using Redis HLL [RUN ALL RSPEC] [RUN AS-IF-FOSS]

See merge request gitlab-org/gitlab!56970
parents d3d72aa0 4cf203d1
---
name: redis_hll_tracking
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56970
rollout_issue_url:
milestone: '13.11'
type: ops
group: group::product intelligence
default_enabled: true
......@@ -711,6 +711,8 @@ module Gitlab
end
def redis_hll_counters
return {} unless Feature.enabled?(:redis_hll_tracking, type: :ops, default_enabled: :yaml)
{ redis_hll_counters: ::Gitlab::UsageDataCounters::HLLRedisCounter.unique_events_data }
end
......
......@@ -157,7 +157,7 @@ module Gitlab
def feature_enabled?(event)
return true if event[:feature_flag].blank?
Feature.enabled?(event[:feature_flag], default_enabled: :yaml)
Feature.enabled?(event[:feature_flag], default_enabled: :yaml) && Feature.enabled?(:redis_hll_tracking, type: :ops, default_enabled: :yaml)
end
# Allow to add totals for events that are in the same redis slot, category and have the same aggregation level
......
......@@ -93,7 +93,25 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
end
describe '.track_event' do
context 'with feature flag set' do
context 'with redis_hll_tracking' do
it 'tracks the event when feature enabled' do
stub_feature_flags(redis_hll_tracking: true)
expect(Gitlab::Redis::HLL).to receive(:add)
described_class.track_event(weekly_event, values: 1)
end
it 'does not track the event with feature flag disabled' do
stub_feature_flags(redis_hll_tracking: false)
expect(Gitlab::Redis::HLL).not_to receive(:add)
described_class.track_event(weekly_event, values: 1)
end
end
context 'with event feature flag set' do
it 'tracks the event when feature enabled' do
stub_feature_flags(feature => true)
......@@ -111,7 +129,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
end
end
context 'with no feature flag set' do
context 'with no event feature flag set' do
it 'tracks the event' do
expect(Gitlab::Redis::HLL).to receive(:add)
......
......@@ -1361,21 +1361,33 @@ RSpec.describe Gitlab::UsageData, :aggregate_failures do
%w[source_code ci_secrets_management incident_management_alerts snippets terraform]
end
it 'has all known_events' do
expect(subject).to have_key(:redis_hll_counters)
context 'with redis_hll_tracking feature enabled' do
it 'has all known_events' do
stub_feature_flags(redis_hll_tracking: true)
expect(subject[:redis_hll_counters].keys).to match_array(categories)
expect(subject).to have_key(:redis_hll_counters)
categories.each do |category|
keys = ::Gitlab::UsageDataCounters::HLLRedisCounter.events_for_category(category)
expect(subject[:redis_hll_counters].keys).to match_array(categories)
metrics = keys.map { |key| "#{key}_weekly" } + keys.map { |key| "#{key}_monthly" }
categories.each do |category|
keys = ::Gitlab::UsageDataCounters::HLLRedisCounter.events_for_category(category)
if ineligible_total_categories.exclude?(category)
metrics.append("#{category}_total_unique_counts_weekly", "#{category}_total_unique_counts_monthly")
metrics = keys.map { |key| "#{key}_weekly" } + keys.map { |key| "#{key}_monthly" }
if ineligible_total_categories.exclude?(category)
metrics.append("#{category}_total_unique_counts_weekly", "#{category}_total_unique_counts_monthly")
end
expect(subject[:redis_hll_counters][category].keys).to match_array(metrics)
end
end
end
context 'with redis_hll_tracking disabled' do
it 'does not have redis_hll_tracking key' do
stub_feature_flags(redis_hll_tracking: false)
expect(subject[:redis_hll_counters][category].keys).to match_array(metrics)
expect(subject).not_to have_key(:redis_hll_counters)
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment