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}`); }