From 711c504b39737ebe757591235fdd96e372dd05c5 Mon Sep 17 00:00:00 2001 From: Yaelle Chaudy <42030685+yaelleC@users.noreply.github.com> Date: Tue, 30 Aug 2022 09:55:40 +0200 Subject: [PATCH] Azure Monitor: Updated `grafana_ds_azuremonitor_dashboard_loaded` event, replaced array of queries for stats (#54286) * Replaced array of queries for stats * Added ds_version prop * Added ds_version to tests * Extracted event name to tracking file * Extracted event to tracking file * Removed ds_version - useless for core plugin * Addressed comments * Added note to event documentation --- .../module.test.ts | 17 ++++---- .../module.ts | 42 +++++++++++++++---- .../tracking.ts | 37 ++++++++++++++++ 3 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 public/app/plugins/datasource/grafana-azure-monitor-datasource/tracking.ts diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.test.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.test.ts index ec3d0b3bc90..77e58de0f0b 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.test.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.test.ts @@ -17,8 +17,10 @@ jest.mock('@grafana/runtime', () => { grafanaVersion: 'v9.0.0', queries: { 'grafana-azure-monitor-datasource': [ - { queryType: 'Azure Monitor', hide: true }, - { queryType: 'Azure Resource Graph', hide: false }, + { queryType: 'Azure Monitor', hide: false }, + { queryType: 'Azure Log Analytics', hide: false }, + { queryType: 'Azure Resource Graph', hide: true }, + { queryType: 'Azure Monitor', hide: false }, ], }, }) @@ -35,11 +37,12 @@ describe('queriesOnInitDashboard', () => { dashboard_id: 'dashboard123', grafana_version: 'v9.0.0', org_id: 1, - user_id: 2, - queries: [ - { query_type: 'Azure Monitor', hidden: true }, - { query_type: 'Azure Resource Graph', hidden: false }, - ], + azure_monitor_queries: 2, + azure_log_analytics_queries: 1, + azure_resource_graph_queries: 0, + azure_monitor_queries_hidden: 0, + azure_log_analytics_queries_hidden: 0, + azure_resource_graph_queries_hidden: 1, }); }); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.ts index a477fa96f8c..9c3642aad27 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/module.ts @@ -1,11 +1,12 @@ import { DataSourcePlugin, DashboardLoadedEvent } from '@grafana/data'; -import { reportInteraction, getAppEvents } from '@grafana/runtime'; +import { getAppEvents } from '@grafana/runtime'; import { ConfigEditor } from './components/ConfigEditor'; import AzureMonitorQueryEditor from './components/QueryEditor'; import Datasource from './datasource'; import pluginJson from './plugin.json'; -import { AzureMonitorQuery, AzureDataSourceJsonData } from './types'; +import { trackAzureMonitorDashboardLoaded } from './tracking'; +import { AzureMonitorQuery, AzureDataSourceJsonData, AzureQueryType } from './types'; export const plugin = new DataSourcePlugin(Datasource) .setConfigEditor(ConfigEditor) @@ -16,16 +17,41 @@ getAppEvents().subscribe>( DashboardLoadedEvent, ({ payload: { dashboardId, orgId, userId, grafanaVersion, queries } }) => { const azureQueries = queries[pluginJson.id]; + let stats = { + [AzureQueryType.AzureMonitor]: { + hidden: 0, + visible: 0, + }, + [AzureQueryType.LogAnalytics]: { + hidden: 0, + visible: 0, + }, + [AzureQueryType.AzureResourceGraph]: { + hidden: 0, + visible: 0, + }, + }; + azureQueries.forEach((query) => { + if ( + query.queryType === AzureQueryType.AzureMonitor || + query.queryType === AzureQueryType.LogAnalytics || + query.queryType === AzureQueryType.AzureResourceGraph + ) { + stats[query.queryType][query.hide ? 'hidden' : 'visible']++; + } + }); + if (azureQueries && azureQueries.length > 0) { - reportInteraction('grafana_ds_azuremonitor_dashboard_loaded', { + trackAzureMonitorDashboardLoaded({ grafana_version: grafanaVersion, dashboard_id: dashboardId, org_id: orgId, - user_id: userId, - queries: azureQueries.map((query: AzureMonitorQuery) => ({ - hidden: !!query.hide, - query_type: query.queryType, - })), + azure_monitor_queries: stats[AzureQueryType.AzureMonitor].visible, + azure_log_analytics_queries: stats[AzureQueryType.LogAnalytics].visible, + azure_resource_graph_queries: stats[AzureQueryType.AzureResourceGraph].visible, + azure_monitor_queries_hidden: stats[AzureQueryType.AzureMonitor].hidden, + azure_log_analytics_queries_hidden: stats[AzureQueryType.LogAnalytics].hidden, + azure_resource_graph_queries_hidden: stats[AzureQueryType.AzureResourceGraph].hidden, }); } } diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/tracking.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/tracking.ts new file mode 100644 index 00000000000..49d2899977b --- /dev/null +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/tracking.ts @@ -0,0 +1,37 @@ +import { reportInteraction } from '@grafana/runtime'; + +/** + * Loaded the first time a dashboard containing azure queries is loaded (not on every render) + * Note: The queries used here are the ones pre-migration and pre-filterQuery + * + * This allows answering questions about: + * - the adoption of the three query types (Azure Monitor, Azure Logs Analytics and Azure Resource Graph) + * - stats about number of azure dashboards loaded, number of users + * - stats about the grafana and plugins versions used by our users + * + * Dashboard: https://ops.grafana.net/d/Ad0pti0N/data-sources-adoption-tracking?orgId=1 + * Changelog: + * - v9.1.0 : list of queries logged + * - v9.1.2 : list removed in favour of stats, user_id removed + */ +export const trackAzureMonitorDashboardLoaded = (props: AzureMonitorDashboardLoadedProps) => { + reportInteraction('grafana_ds_azuremonitor_dashboard_loaded', props); +}; + +export type AzureMonitorDashboardLoadedProps = { + grafana_version?: string; + dashboard_id: string; + org_id?: number; + /** number of non hidden queries of type Azure Monitor if any */ + azure_monitor_queries: number; + /** number of non hidden queries of type Azure Logs Analytics if any */ + azure_log_analytics_queries: number; + /** number of non hidden queries of type Azure Resource Graph if any */ + azure_resource_graph_queries: number; + /** number of hidden queries (not executed) of type Azure Monitor if any */ + azure_monitor_queries_hidden: number; + /** number of hidden queries (not executed) of type Azure Logs Analytics if any */ + azure_log_analytics_queries_hidden: number; + /** number of hidden queries (not executed) of type Azure Resource Graph if any */ + azure_resource_graph_queries_hidden: number; +};