From f85522ed3019407e884afdb86b0d995759f55abc Mon Sep 17 00:00:00 2001
From: Paul W <19602001-paintedbicycle-gitlab@users.noreply.gitlab.com>
Date: Mon, 24 Jun 2024 23:09:10 +0000
Subject: [PATCH] Add tracking and metrics to admin jobs page

---
 .../admin/jobs_table/admin_jobs_table_app.vue |  7 +++++-
 .../ci/admin/jobs_table/constants.js          |  1 +
 config/events/view_admin_jobs_pageload.yml    | 16 ++++++++++++++
 ..._from_view_admin_jobs_pageload_monthly.yml | 22 +++++++++++++++++++
 ...total_view_admin_jobs_pageload_monthly.yml | 21 ++++++++++++++++++
 ...d_from_view_admin_jobs_pageload_weekly.yml | 22 +++++++++++++++++++
 ..._total_view_admin_jobs_pageload_weekly.yml | 21 ++++++++++++++++++
 .../jobs_table/admin_job_table_app_spec.js    | 12 ++++++++++
 8 files changed, 121 insertions(+), 1 deletion(-)
 create mode 100644 config/events/view_admin_jobs_pageload.yml
 create mode 100644 config/metrics/counts_28d/count_distinct_user_id_from_view_admin_jobs_pageload_monthly.yml
 create mode 100644 config/metrics/counts_28d/count_total_view_admin_jobs_pageload_monthly.yml
 create mode 100644 config/metrics/counts_7d/count_distinct_user_id_from_view_admin_jobs_pageload_weekly.yml
 create mode 100644 config/metrics/counts_7d/count_total_view_admin_jobs_pageload_weekly.yml

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 55ff647e25f37..61a619580c11c 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 015749a2f593d..9b09bfe7a559b 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 0000000000000..6f5ff1c969bf4
--- /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 0000000000000..680a6bda917e6
--- /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 0000000000000..9f71e252c2e63
--- /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 0000000000000..a04e779611308
--- /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 0000000000000..b88101e2916d9
--- /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 d14b78d2f4dce..0c7af8bebc44d 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();
-- 
GitLab