From e93c150406741deaddd87b9a755f1da5957799a8 Mon Sep 17 00:00:00 2001 From: Dominik Prokop Date: Thu, 4 Jan 2024 07:34:15 -0800 Subject: [PATCH] DashboardScene: Enable scene tracking information (#79963) * DashboardScene: Enable scene tracking information alt * tests update * Review * Revert "tests update" This reverts commit 43f894236a5a807b18e9474563662d270e985cb3. * nit --- .../serialization/transformSaveModelToScene.ts | 18 +++++++++++++++++- .../dashboard-scene/utils/interactions.ts | 14 +++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts index 77ee443707a..41b76ad3f73 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts @@ -29,6 +29,7 @@ import { UserActionEvent, } from '@grafana/scenes'; import { DashboardModel, PanelModel } from 'app/features/dashboard/state'; +import { trackDashboardLoaded } from 'app/features/dashboard/utils/tracking'; import { DashboardDTO } from 'app/types'; import { AlertStatesDataLayer } from '../scene/AlertStatesDataLayer'; @@ -67,7 +68,10 @@ export function transformSaveModelToScene(rsp: DashboardDTO): DashboardScene { autoMigrateOldPanels: false, }); - return createDashboardSceneFromDashboardModel(oldModel); + const scene = createDashboardSceneFromDashboardModel(oldModel); + scene.state.$behaviors?.push(registerDashboardSceneTracking(oldModel, rsp.dashboard.version)); + + return scene; } export function createSceneObjectsForPanels(oldPanels: PanelModel[]): SceneGridItemLike[] { @@ -480,6 +484,18 @@ const getLimitedDescriptionReporter = () => { }; }; +function registerDashboardSceneTracking(model: DashboardModel, version?: number) { + return () => { + const unsetDashboardInteractionsScenesContext = DashboardInteractions.setScenesContext(); + + trackDashboardLoaded(model, version); + + return () => { + unsetDashboardInteractionsScenesContext(); + }; + }; +} + function registerPanelInteractionsReporter(scene: DashboardScene) { const descriptionReporter = getLimitedDescriptionReporter(); diff --git a/public/app/features/dashboard-scene/utils/interactions.ts b/public/app/features/dashboard-scene/utils/interactions.ts index 97abdf3d473..d96ecd166e2 100644 --- a/public/app/features/dashboard-scene/utils/interactions.ts +++ b/public/app/features/dashboard-scene/utils/interactions.ts @@ -1,6 +1,8 @@ import { reportInteraction } from '@grafana/runtime'; import { InspectTab } from 'app/features/inspector/types'; +let isScenesContextSet = false; + export const DashboardInteractions = { // Dashboard interactions: dashboardInitialized: (properties?: Record) => { @@ -137,11 +139,21 @@ export const DashboardInteractions = { toolbarAddClick: () => { reportDashboardInteraction('toolbar_actions_clicked', { item: 'add' }); }, + + setScenesContext: () => { + isScenesContextSet = true; + + return () => { + isScenesContextSet = false; + }; + }, }; const reportDashboardInteraction: typeof reportInteraction = (name, properties) => { + const meta = isScenesContextSet ? { scenesView: true } : {}; + if (properties) { - reportInteraction(`dashboards_${name}`, properties); + reportInteraction(`dashboards_${name}`, { ...properties, ...meta }); } else { reportInteraction(`dashboards_${name}`); }