diff --git a/app/services/users/activity_service.rb b/app/services/users/activity_service.rb index 20594bec28d52df8aa4e1eceb643ae74c7e913d1..4978f778870b6c7f1876b0226dfeb61d3dd0daba 100644 --- a/app/services/users/activity_service.rb +++ b/app/services/users/activity_service.rb @@ -34,6 +34,8 @@ def record_activity return unless lease.try_obtain @user.update_attribute(:last_activity_on, today) + + Gitlab::UsageDataCounters::HLLRedisCounter.track_event('unique_active_user', values: @user.id) end end end diff --git a/config/metrics/counts_28d/20220525231314_unique_monthly_active_users.yml b/config/metrics/counts_28d/20220525231314_unique_monthly_active_users.yml index b66e9d1180402cf64ff205645391cf63afa0d115..a4042763c46b4cddfbebdae587d488b06171d50d 100644 --- a/config/metrics/counts_28d/20220525231314_unique_monthly_active_users.yml +++ b/config/metrics/counts_28d/20220525231314_unique_monthly_active_users.yml @@ -7,9 +7,10 @@ product_section: dev product_stage: manage product_group: manage value_type: number -status: active +status: removed milestone: "15.1" -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/88631 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/88631/ +removed_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/90468/ time_frame: 28d data_source: database data_category: optional diff --git a/config/metrics/counts_28d/20220621085114_unque_active_users_monthly.yml b/config/metrics/counts_28d/20220621085114_unque_active_users_monthly.yml new file mode 100644 index 0000000000000000000000000000000000000000..e3da930b8d991bfdeec9a6b581513724aa209cd2 --- /dev/null +++ b/config/metrics/counts_28d/20220621085114_unque_active_users_monthly.yml @@ -0,0 +1,24 @@ +--- +key_path: redis_hll_counters.manage.unque_active_users_monthly +description: Users that have a last_activity_on date within the past 28 days +product_section: dev +product_stage: manage +product_group: manage +value_type: number +status: active +milestone: "15.2" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/90468/ +time_frame: 28d +data_source: redis_hll +data_category: optional +instrumentation_class: RedisHLLMetric +options: + events: + - unique_active_user +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate diff --git a/ee/spec/requests/api/audit_events_spec.rb b/ee/spec/requests/api/audit_events_spec.rb index d84be6ab315a295c7f3e1b85dba30e818dda8940..262db96f6bfaf7a4010212105b2e70846b22aef1 100644 --- a/ee/spec/requests/api/audit_events_spec.rb +++ b/ee/spec/requests/api/audit_events_spec.rb @@ -28,7 +28,9 @@ it 'tracks 3 separate events' do expect(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event).exactly(3).times .with('a_compliance_audit_events_api', values: current_user.id) - + # user activity tracking is also recorded + expect(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event) + .with('unique_active_user', values: current_user.id) subject end diff --git a/lib/gitlab/usage/metrics/instrumentations/unique_active_users_metric.rb b/lib/gitlab/usage/metrics/instrumentations/unique_active_users_metric.rb deleted file mode 100644 index 9da30db05dd7aa67d172f3dc2e31521822c7f815..0000000000000000000000000000000000000000 --- a/lib/gitlab/usage/metrics/instrumentations/unique_active_users_metric.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Usage - module Metrics - module Instrumentations - class UniqueActiveUsersMetric < DatabaseMetric - operation :count - relation { ::User.active } - - metric_options do - { - batch_size: 10_000 - } - end - - def time_constraints - case time_frame - when '28d' - monthly_time_range_db_params(column: :last_activity_on) - else - super - end - end - end - end - end - end -end diff --git a/lib/gitlab/usage_data_counters/known_events/common.yml b/lib/gitlab/usage_data_counters/known_events/common.yml index 0dcbaf59c9c2a51102a20278e1cfec51dfc04894..43ae8cc7f6de677c308c5faa1cf92faf9dc71999 100644 --- a/lib/gitlab/usage_data_counters/known_events/common.yml +++ b/lib/gitlab/usage_data_counters/known_events/common.yml @@ -390,3 +390,8 @@ category: growth redis_slot: users aggregation: weekly +# Manage +- name: unique_active_user + category: manage + aggregation: weekly + expiry: 42 diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/unique_active_users_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/unique_active_users_metric_spec.rb deleted file mode 100644 index 8a0ce61de74dc424960b9138fc56143265c73b89..0000000000000000000000000000000000000000 --- a/spec/lib/gitlab/usage/metrics/instrumentations/unique_active_users_metric_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::Usage::Metrics::Instrumentations::UniqueActiveUsersMetric do - let_it_be(:user1) { create(:user, last_activity_on: 1.day.ago) } - let_it_be(:user2) { create(:user, last_activity_on: 5.days.ago) } - let_it_be(:user3) { create(:user, last_activity_on: 50.days.ago) } - let_it_be(:user4) { create(:user) } - let_it_be(:user5) { create(:user, user_type: 1, last_activity_on: 5.days.ago ) } # support bot - let_it_be(:user6) { create(:user, state: 'blocked') } - - context '28d' do - let(:start) { 30.days.ago.to_date.to_s } - let(:finish) { 2.days.ago.to_date.to_s } - let(:expected_value) { 1 } - let(:expected_query) do - "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND " \ - "(\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users\".\"last_activity_on\" " \ - "BETWEEN '#{start}' AND '#{finish}'" - end - - it_behaves_like 'a correct instrumented metric value and query', { time_frame: '28d' } - end - - context 'all' do - let(:expected_value) { 4 } - - it_behaves_like 'a correct instrumented metric value', { time_frame: 'all' } - end -end 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 8e242c579a61094dd32e114a101e80d011a4dd2c..badea47ab3b1cd82d73a016562d297b7fe019bcd 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 @@ -128,7 +128,8 @@ def not_instrumented_aggregate(category) 'growth', 'work_items', 'ci_users', - 'error_tracking' + 'error_tracking', + 'manage' ) end end diff --git a/spec/services/users/activity_service_spec.rb b/spec/services/users/activity_service_spec.rb index 092c5cd3e5e240daf05408a611202c9e4e40dfdf..47a4b943d8313e081ce4b2acd8c634a8d49c172b 100644 --- a/spec/services/users/activity_service_spec.rb +++ b/spec/services/users/activity_service_spec.rb @@ -34,6 +34,13 @@ subject.execute end + + it 'tracks RedisHLL event' do + expect(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event) + .with('unique_active_user', values: user.id) + + subject.execute + end end context 'when a bad object is passed' do