diff --git a/app/services/projects/update_pages_service.rb b/app/services/projects/update_pages_service.rb index 96cb9425c2500a1ee0320f5f12b299c5b2ff1289..ee2d9ddfef665a5207757ac1ae21922c1188ea94 100644 --- a/app/services/projects/update_pages_service.rb +++ b/app/services/projects/update_pages_service.rb @@ -2,6 +2,7 @@ module Projects class UpdatePagesService < BaseService + include Gitlab::InternalEventsTracking include Gitlab::Utils::StrongMemoize # old deployment can be cached by pages daemon @@ -33,6 +34,22 @@ def execute break error('The uploaded artifact size does not match the expected value') unless deployment break error(deployment_validations.errors.first.full_message) unless deployment_validations.valid? + track_internal_event( + 'create_pages_deployment', + project: project, + namespace: project.namespace, + user: build.user + ) + + if deployment.path_prefix.present? + track_internal_event( + 'create_pages_extra_deployment', + project: project, + namespace: project.namespace, + user: build.user + ) + end + deactive_old_deployments(deployment) success end diff --git a/config/events/create_pages_deployment.yml b/config/events/create_pages_deployment.yml new file mode 100644 index 0000000000000000000000000000000000000000..d375c35a4aeaa217f70db81cceb936b613384e84 --- /dev/null +++ b/config/events/create_pages_deployment.yml @@ -0,0 +1,18 @@ +--- +description: GitLab Pages deployment created +internal_events: true +action: create_pages_deployment +identifiers: +- project +- namespace +- user +product_group: knowledge +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_deployment_monthly.yml b/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_deployment_monthly.yml new file mode 100644 index 0000000000000000000000000000000000000000..6063f68dd9be0b8088047edbd860bf9ac4fd6c7e --- /dev/null +++ b/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_deployment_monthly.yml @@ -0,0 +1,22 @@ +--- +key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_deployment_monthly +description: Monthly count of unique projects where a Pages deployment was created +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 28d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: create_pages_deployment + unique: project.id diff --git a/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_deployment_monthly.yml b/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_deployment_monthly.yml new file mode 100644 index 0000000000000000000000000000000000000000..90d5fac153582939e2332ba9b29b322b44b9d232 --- /dev/null +++ b/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_deployment_monthly.yml @@ -0,0 +1,22 @@ +--- +key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_deployment_monthly +description: Monthly count of unique users who created a Pages deployment +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 28d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: create_pages_deployment + unique: user.id diff --git a/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_deployment_weekly.yml b/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_deployment_weekly.yml new file mode 100644 index 0000000000000000000000000000000000000000..93e5f5f92f0170a52d1f0f46a961b33fc1ac7549 --- /dev/null +++ b/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_deployment_weekly.yml @@ -0,0 +1,22 @@ +--- +key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_deployment_weekly +description: Weekly count of unique projects where a Pages deployment was created +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 7d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: create_pages_deployment + unique: project.id diff --git a/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_deployment_weekly.yml b/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_deployment_weekly.yml new file mode 100644 index 0000000000000000000000000000000000000000..c994603fec8ea1a9ec44dd35f00168eed59415c0 --- /dev/null +++ b/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_deployment_weekly.yml @@ -0,0 +1,22 @@ +--- +key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_deployment_weekly +description: Weekly count of unique users who created a Pages deployment +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 7d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: create_pages_deployment + unique: user.id diff --git a/config/metrics/counts_all/count_total_create_pages_deployment.yml b/config/metrics/counts_all/count_total_create_pages_deployment.yml new file mode 100644 index 0000000000000000000000000000000000000000..6206231924bcffb86762aaad383b0b252dfe948d --- /dev/null +++ b/config/metrics/counts_all/count_total_create_pages_deployment.yml @@ -0,0 +1,21 @@ +--- +key_path: counts.count_total_create_pages_deployment +description: Total count of Pages deployments created +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: all +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: create_pages_deployment diff --git a/ee/config/events/create_pages_extra_deployment.yml b/ee/config/events/create_pages_extra_deployment.yml new file mode 100644 index 0000000000000000000000000000000000000000..c34d7158bfdc06d84833b87f2341f8cb15c07516 --- /dev/null +++ b/ee/config/events/create_pages_extra_deployment.yml @@ -0,0 +1,16 @@ +--- +description: Gitlab Pages extra deployments created +internal_events: true +action: create_pages_extra_deployment +identifiers: +- project +- namespace +- user +product_group: knowledge +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +distributions: +- ee +tiers: +- premium +- ultimate diff --git a/ee/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_extra_deployment_monthly.yml b/ee/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_extra_deployment_monthly.yml new file mode 100644 index 0000000000000000000000000000000000000000..ce118bc30f2c0cad373b34601ca9684d6a74291f --- /dev/null +++ b/ee/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_extra_deployment_monthly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_extra_deployment_monthly +description: Monthly count of unique projects where a Pages extra deployment was created +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 28d +data_source: internal_events +data_category: optional +distribution: +- ee +tier: +- premium +- ultimate +events: +- name: create_pages_extra_deployment + unique: project.id diff --git a/ee/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_extra_deployment_monthly.yml b/ee/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_extra_deployment_monthly.yml new file mode 100644 index 0000000000000000000000000000000000000000..1aa8dcd81fb106f81f0104ea0ee4fa0e03af5365 --- /dev/null +++ b/ee/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_extra_deployment_monthly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_extra_deployment_monthly +description: Monthly count of unique users who created a Gitlab Pages extra deployment +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 28d +data_source: internal_events +data_category: optional +distribution: +- ee +tier: +- premium +- ultimate +events: +- name: create_pages_extra_deployment + unique: user.id diff --git a/ee/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_extra_deployment_weekly.yml b/ee/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_extra_deployment_weekly.yml new file mode 100644 index 0000000000000000000000000000000000000000..e0edc93634477ca09bc2ac20b525409d7f4705f5 --- /dev/null +++ b/ee/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_extra_deployment_weekly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_extra_deployment_weekly +description: Weekly count of unique projects where a Pages extra deployment was created +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 7d +data_source: internal_events +data_category: optional +distribution: +- ee +tier: +- premium +- ultimate +events: +- name: create_pages_extra_deployment + unique: project.id diff --git a/ee/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_extra_deployment_weekly.yml b/ee/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_extra_deployment_weekly.yml new file mode 100644 index 0000000000000000000000000000000000000000..4ae61844974f58379e4528ac9d14c85780c8d94e --- /dev/null +++ b/ee/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_extra_deployment_weekly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_extra_deployment_weekly +description: Weekly count of unique users who created a Gitlab Pages multiple deployment +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: 7d +data_source: internal_events +data_category: optional +distribution: +- ee +tier: +- premium +- ultimate +events: +- name: create_pages_extra_deployment + unique: user.id diff --git a/ee/config/metrics/counts_all/count_total_create_pages_extra_deployment.yml b/ee/config/metrics/counts_all/count_total_create_pages_extra_deployment.yml new file mode 100644 index 0000000000000000000000000000000000000000..7c940300a622bc857aa64d41e95902804248ea3c --- /dev/null +++ b/ee/config/metrics/counts_all/count_total_create_pages_extra_deployment.yml @@ -0,0 +1,19 @@ +--- +key_path: counts.count_total_create_pages_extra_deployment +description: Total count of Pages extra deployments created +product_group: knowledge +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474 +time_frame: all +data_source: internal_events +data_category: optional +distribution: +- ee +tier: +- premium +- ultimate +events: +- name: create_pages_extra_deployment diff --git a/ee/spec/services/ee/projects/update_pages_service_spec.rb b/ee/spec/services/ee/projects/update_pages_service_spec.rb index b5a3471e32bd0c843e1411de1ed856b73610b068..9730b02651c96793bed27507244a0a1bbe7e5a6b 100644 --- a/ee/spec/services/ee/projects/update_pages_service_spec.rb +++ b/ee/spec/services/ee/projects/update_pages_service_spec.rb @@ -4,10 +4,11 @@ RSpec.describe Projects::UpdatePagesService, feature_category: :pages do let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } let(:path_prefix) { nil } let(:build_options) { { pages: { path_prefix: path_prefix } } } - let(:build) { create(:ci_build, :pages, project: project, options: build_options) } + let(:build) { create(:ci_build, :pages, project: project, user: user, options: build_options) } subject(:service) { described_class.new(project, build) } @@ -34,6 +35,12 @@ expect { expect(service.execute).to include(status: :error) } .not_to change { project.pages_deployments.count } end + + it_behaves_like 'internal event not tracked' do + let(:event) { 'create_pages_extra_deployment' } + + subject(:track_event) { service.execute } + end end context 'and pages_multiple_versions is enabled for project' do @@ -50,6 +57,14 @@ expect(project.pages_deployments.last.path_prefix).to eq('path-prefix') end + + it_behaves_like 'internal event tracking' do + let(:event) { 'create_pages_extra_deployment' } + let(:category) { 'Projects::UpdatePagesService' } + let(:namespace) { project.namespace } + + subject(:track_event) { service.execute } + end end end end diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb index b5d1276988f97072e0ff16b71f188aa4208df217..6712c12fab633824b7ae4cfd2b6cac18c1817ecf 100644 --- a/spec/services/projects/update_pages_service_spec.rb +++ b/spec/services/projects/update_pages_service_spec.rb @@ -160,6 +160,14 @@ .by(1) end + it_behaves_like 'internal event tracking' do + let(:event) { 'create_pages_deployment' } + let(:category) { 'Projects::UpdatePagesService' } + let(:namespace) { project.namespace } + + subject(:track_event) { service.execute } + end + context 'when archive does not have pages directory' do let(:file) { empty_file } let(:metadata_filename) { empty_metadata_filename } diff --git a/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb b/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb index 9fd8a28943fe99545c7ddbfe98ed947cfbbb9183..2c5333ef4acac81a82b423488d165edc17d1aa74 100644 --- a/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb +++ b/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb @@ -19,6 +19,9 @@ matching_rules = definition.event_selection_rules.map do |event_selection_rule| next unless event_selection_rule.name == event + # Only include unique metrics if the unique_identifier_name is present in the spec + next if event_selection_rule.unique_identifier_name && !try(event_selection_rule.unique_identifier_name) + event_selection_rule.filter.all? do |property_name, value| try(property_name) == value end