From 8c00ed86be233550db4b461e247653613fcbdadb Mon Sep 17 00:00:00 2001 From: Ankit Panchal <apanchal@gitlab.com> Date: Mon, 26 Jun 2023 14:11:45 +0000 Subject: [PATCH] Add Gitlab Internal Events to Frontend to unify RedisHLL/Snowplow Changelog: added --- app/assets/javascripts/tracking/constants.js | 4 +++ app/assets/javascripts/tracking/index.js | 2 ++ .../javascripts/tracking/internal_events.js | 36 +++++++++++++++++++ .../components/devops_adoption_app.vue | 25 +++---------- .../components/devops_adoption_app_spec.js | 5 +-- 5 files changed, 49 insertions(+), 23 deletions(-) create mode 100644 app/assets/javascripts/tracking/internal_events.js diff --git a/app/assets/javascripts/tracking/constants.js b/app/assets/javascripts/tracking/constants.js index 968e866eeddf4..0e440750fdb77 100644 --- a/app/assets/javascripts/tracking/constants.js +++ b/app/assets/javascripts/tracking/constants.js @@ -25,3 +25,7 @@ export const URLS_CACHE_STORAGE_KEY = 'gl-snowplow-pseudonymized-urls'; export const REFERRER_TTL = 24 * 60 * 60 * 1000; export const GOOGLE_ANALYTICS_ID_COOKIE_NAME = '_ga'; + +export const GITLAB_INTERNAL_EVENT_CATEGORY = 'InternalEventTracking'; + +export const SERVICE_PING_SCHEMA = 'iglu:com.gitlab/gitlab_service_ping/jsonschema/1-0-0'; diff --git a/app/assets/javascripts/tracking/index.js b/app/assets/javascripts/tracking/index.js index 472ce3c5bbf41..6494838abac05 100644 --- a/app/assets/javascripts/tracking/index.js +++ b/app/assets/javascripts/tracking/index.js @@ -2,8 +2,10 @@ import { getAllExperimentContexts } from '~/experimentation/utils'; import { DEFAULT_SNOWPLOW_OPTIONS } from './constants'; import getStandardContext from './get_standard_context'; import Tracking from './tracking'; +import InternalEvents from './internal_events'; export { Tracking as default }; +export { InternalEvents }; /** * Tracker initialization as defined in: diff --git a/app/assets/javascripts/tracking/internal_events.js b/app/assets/javascripts/tracking/internal_events.js new file mode 100644 index 0000000000000..a69f192f52041 --- /dev/null +++ b/app/assets/javascripts/tracking/internal_events.js @@ -0,0 +1,36 @@ +import API from '~/api'; + +import Tracking from './tracking'; +import { GITLAB_INTERNAL_EVENT_CATEGORY, SERVICE_PING_SCHEMA } from './constants'; + +const InternalEvents = { + /** + * Returns an implementation of this class in the form of + * a Vue mixin. + * + * @param {Object} opts - default options for all events + * @returns {Object} + */ + mixin(opts = {}) { + return { + mixins: [Tracking.mixin(opts)], + methods: { + track_event(event) { + API.trackRedisHllUserEvent(event); + this.track(event, { + context: { + schema: SERVICE_PING_SCHEMA, + data: { + event_name: event, + data_source: 'redis_hll', + }, + }, + category: GITLAB_INTERNAL_EVENT_CATEGORY, + }); + }, + }, + }; + }, +}; + +export default InternalEvents; diff --git a/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_app.vue b/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_app.vue index 5feba44bebb0e..4dc6e12c187e4 100644 --- a/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_app.vue +++ b/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_app.vue @@ -2,10 +2,9 @@ import { GlAlert, GlTabs, GlTab } from '@gitlab/ui'; import * as Sentry from '@sentry/browser'; import DevopsScore from '~/analytics/devops_reports/components/devops_score.vue'; -import API from '~/api'; import dateformat from '~/lib/dateformat'; import { mergeUrlParams, updateHistory, getParameterValues } from '~/lib/utils/url_utility'; -import Tracking from '~/tracking'; +import { InternalEvents } from '~/tracking'; import { I18N_GROUPS_QUERY_ERROR, I18N_ENABLED_NAMESPACE_QUERY_ERROR, @@ -39,7 +38,7 @@ export default { GlTabs, GlTab, }, - mixins: [Tracking.mixin()], + mixins: [InternalEvents.mixin()], inject: { isGroup: { default: false, @@ -262,33 +261,17 @@ export default { }, trackDevopsScoreTabClick() { if (!this.devopsScoreTabClicked) { - API.trackRedisHllUserEvent(this.$options.trackDevopsScoreTabClickEvent); - this.trackSnowplowEvent(this.$options.trackDevopsScoreTabClickEvent); - + this.track_event(this.$options.trackDevopsScoreTabClickEvent); this.devopsScoreTabClicked = true; } }, trackDevopsTabClick() { if (!this.adoptionTabClicked) { - API.trackRedisHllUserEvent(this.$options.trackDevopsTabClickEvent); - this.trackSnowplowEvent(this.$options.trackDevopsTabClickEvent); - + this.track_event(this.$options.trackDevopsTabClickEvent); this.adoptionTabClicked = true; } }, - trackSnowplowEvent(event) { - this.track('click_tab', { - label: 'redis_hll_counters.analytics.analytics_total_unique_counts_monthly', - context: { - schema: 'iglu:com.gitlab/gitlab_service_ping/jsonschema/1-0-0', - data: { - event_name: event, - data_source: 'redis_hll', - }, - }, - }); - }, trackCardSelected(card) { const index = this.$options.devopsAdoptionTableConfiguration.findIndex( ({ key }) => card.key === key, diff --git a/ee/spec/frontend/analytics/devops_reports/devops_adoption/components/devops_adoption_app_spec.js b/ee/spec/frontend/analytics/devops_reports/devops_adoption/components/devops_adoption_app_spec.js index 327e185026b5e..cc6108e3230a1 100644 --- a/ee/spec/frontend/analytics/devops_reports/devops_adoption/components/devops_adoption_app_spec.js +++ b/ee/spec/frontend/analytics/devops_reports/devops_adoption/components/devops_adoption_app_spec.js @@ -24,6 +24,7 @@ import { mockTracking } from 'helpers/tracking_helper'; import DevopsScore from '~/analytics/devops_reports/components/devops_score.vue'; import API from '~/api'; import { groupNodes, devopsAdoptionNamespaceData } from '../mock_data'; +import { GITLAB_INTERNAL_EVENT_CATEGORY } from '../../../../../../../app/assets/javascripts/tracking/constants'; jest.mock('ee/analytics/devops_reports/devops_adoption/utils/cache_updates', () => ({ addEnabledNamespacesToCache: jest.fn(), @@ -374,8 +375,8 @@ describe('DevopsAdoptionApp', () => { wrapper.findByTestId(testId).vm.$emit('click'); expect(API.trackRedisHllUserEvent).toHaveBeenCalledWith(event); - expect(trackingSpy).toHaveBeenCalledWith(undefined, 'click_tab', { - label: 'redis_hll_counters.analytics.analytics_total_unique_counts_monthly', + expect(trackingSpy).toHaveBeenCalledWith(GITLAB_INTERNAL_EVENT_CATEGORY, event, { + category: GITLAB_INTERNAL_EVENT_CATEGORY, context: { schema: 'iglu:com.gitlab/gitlab_service_ping/jsonschema/1-0-0', data: { -- GitLab