diff --git a/app/assets/javascripts/ci/admin/jobs_table/admin_jobs_table_app.vue b/app/assets/javascripts/ci/admin/jobs_table/admin_jobs_table_app.vue index 55ff647e25f374839f28f2bf19db4830b8d6c95e..61a619580c11cc3bb1f45ddfd01066d1223c22a7 100644 --- a/app/assets/javascripts/ci/admin/jobs_table/admin_jobs_table_app.vue +++ b/app/assets/javascripts/ci/admin/jobs_table/admin_jobs_table_app.vue @@ -7,6 +7,7 @@ import JobsTableTabs from '~/ci/jobs_page/components/jobs_table_tabs.vue'; import JobsFilteredSearch from '~/ci/common/private/jobs_filtered_search/app.vue'; import JobsTableEmptyState from '~/ci/jobs_page/components/jobs_table_empty_state.vue'; import { createAlert } from '~/alert'; +import { InternalEvents } from '~/tracking'; import { TOKEN_TYPE_STATUS, TOKEN_TYPE_JOBS_RUNNER_TYPE, @@ -19,6 +20,7 @@ import { JOBS_FETCH_ERROR_MSG, LOADING_ARIA_LABEL, CANCELABLE_JOBS_ERROR_MSG, + VIEW_ADMIN_JOBS_PAGELOAD, } from './constants'; import JobsSkeletonLoader from './components/jobs_skeleton_loader.vue'; import GetAllJobs from './graphql/queries/get_all_jobs.query.graphql'; @@ -44,7 +46,7 @@ export default { GlIntersectionObserver, GlLoadingIcon, }, - mixins: [glFeatureFlagsMixin()], + mixins: [glFeatureFlagsMixin(), InternalEvents.mixin()], inject: { jobStatuses: { default: null, @@ -155,6 +157,9 @@ export default { this.count = newCount; }, }, + mounted() { + this.trackEvent(VIEW_ADMIN_JOBS_PAGELOAD); + }, methods: { updateHistoryAndFetchCount(filterParams = {}) { this.$apollo.queries.jobsCount.refetch(filterParams); diff --git a/app/assets/javascripts/ci/admin/jobs_table/constants.js b/app/assets/javascripts/ci/admin/jobs_table/constants.js index 015749a2f593d7431593a241e3117fd76c4b02e3..9b09bfe7a559b8a39f4d24661db0cab12047d0b5 100644 --- a/app/assets/javascripts/ci/admin/jobs_table/constants.js +++ b/app/assets/javascripts/ci/admin/jobs_table/constants.js @@ -30,3 +30,4 @@ export const DEFAULT_FIELDS_ADMIN = [ ]; export const RAW_TEXT_WARNING_ADMIN = RAW_TEXT_WARNING; +export const VIEW_ADMIN_JOBS_PAGELOAD = 'view_admin_jobs_pageload'; diff --git a/config/events/view_admin_jobs_pageload.yml b/config/events/view_admin_jobs_pageload.yml new file mode 100644 index 0000000000000000000000000000000000000000..6f5ff1c969bf4951119d0d3fec2ed807b53f81b3 --- /dev/null +++ b/config/events/view_admin_jobs_pageload.yml @@ -0,0 +1,16 @@ +--- +description: Tracks pageviews for the admin jobs page +internal_events: true +action: view_admin_jobs_pageload +identifiers: +- user +product_group: personal_productivity +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156814 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/metrics/counts_28d/count_distinct_user_id_from_view_admin_jobs_pageload_monthly.yml b/config/metrics/counts_28d/count_distinct_user_id_from_view_admin_jobs_pageload_monthly.yml new file mode 100644 index 0000000000000000000000000000000000000000..680a6bda917e6341618d504c54b55db534756ea1 --- /dev/null +++ b/config/metrics/counts_28d/count_distinct_user_id_from_view_admin_jobs_pageload_monthly.yml @@ -0,0 +1,22 @@ +--- +key_path: redis_hll_counters.count_distinct_user_id_from_view_admin_jobs_pageload_monthly +description: Monthly count of unique users who visit the admin jobs page +product_group: personal_productivity +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156814 +time_frame: 28d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: view_admin_jobs_pageload + unique: user.id diff --git a/config/metrics/counts_28d/count_total_view_admin_jobs_pageload_monthly.yml b/config/metrics/counts_28d/count_total_view_admin_jobs_pageload_monthly.yml new file mode 100644 index 0000000000000000000000000000000000000000..9f71e252c2e63397b1c96715abe7fefcf6a97471 --- /dev/null +++ b/config/metrics/counts_28d/count_total_view_admin_jobs_pageload_monthly.yml @@ -0,0 +1,21 @@ +--- +key_path: counts.count_total_view_admin_jobs_pageload_monthly +description: Monthly count of total users who visit the admin jobs page +product_group: personal_productivity +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156814 +time_frame: 28d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: view_admin_jobs_pageload diff --git a/config/metrics/counts_7d/count_distinct_user_id_from_view_admin_jobs_pageload_weekly.yml b/config/metrics/counts_7d/count_distinct_user_id_from_view_admin_jobs_pageload_weekly.yml new file mode 100644 index 0000000000000000000000000000000000000000..a04e77961130807da7fd5e60d4454750afa91c7e --- /dev/null +++ b/config/metrics/counts_7d/count_distinct_user_id_from_view_admin_jobs_pageload_weekly.yml @@ -0,0 +1,22 @@ +--- +key_path: redis_hll_counters.count_distinct_user_id_from_view_admin_jobs_pageload_weekly +description: Weekly count of unique users who visit the admin jobs page +product_group: personal_productivity +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156814 +time_frame: 7d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: view_admin_jobs_pageload + unique: user.id diff --git a/config/metrics/counts_7d/count_total_view_admin_jobs_pageload_weekly.yml b/config/metrics/counts_7d/count_total_view_admin_jobs_pageload_weekly.yml new file mode 100644 index 0000000000000000000000000000000000000000..b88101e2916d97e738c58791ee76630b79bf96d8 --- /dev/null +++ b/config/metrics/counts_7d/count_total_view_admin_jobs_pageload_weekly.yml @@ -0,0 +1,21 @@ +--- +key_path: counts.count_total_view_admin_jobs_pageload_weekly +description: Weekly count of total users who visit the admin jobs page +product_group: personal_productivity +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.2' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156814 +time_frame: 7d +data_source: internal_events +data_category: optional +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +events: +- name: view_admin_jobs_pageload diff --git a/spec/frontend/ci/admin/jobs_table/admin_job_table_app_spec.js b/spec/frontend/ci/admin/jobs_table/admin_job_table_app_spec.js index d14b78d2f4dcee95a879baca7c0466107f00f4f4..0c7af8bebc44dff83617b199c868252ccf4ca225 100644 --- a/spec/frontend/ci/admin/jobs_table/admin_job_table_app_spec.js +++ b/spec/frontend/ci/admin/jobs_table/admin_job_table_app_spec.js @@ -16,12 +16,14 @@ import { createAlert } from '~/alert'; import { TEST_HOST } from 'spec/test_constants'; import JobsFilteredSearch from '~/ci/common/private/jobs_filtered_search/app.vue'; import * as urlUtils from '~/lib/utils/url_utility'; +import { useMockInternalEventsTracking } from 'helpers/tracking_internal_events_helper'; import { JOBS_FETCH_ERROR_MSG, CANCELABLE_JOBS_ERROR_MSG, LOADING_ARIA_LABEL, RAW_TEXT_WARNING_ADMIN, JOBS_COUNT_ERROR_MESSAGE, + VIEW_ADMIN_JOBS_PAGELOAD, } from '~/ci/admin/jobs_table/constants'; import { TOKEN_TYPE_JOBS_RUNNER_TYPE } from '~/vue_shared/components/filtered_search_bar/constants'; import { @@ -96,6 +98,16 @@ describe('Job table app', () => { }); }; + describe('on page load', () => { + const { bindInternalEventDocument } = useMockInternalEventsTracking(); + + it('tracks view_admin_jobs_pageload event', () => { + createComponent(); + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); + expect(trackEventSpy).toHaveBeenCalledWith(VIEW_ADMIN_JOBS_PAGELOAD, {}, undefined); + }); + }); + describe('loading state', () => { it('should display skeleton loader when loading', () => { createComponent();