From 28665a869b443800b7242fd47b1730e25997dc49 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Fri, 22 Apr 2022 10:46:16 +0200 Subject: [PATCH] Prometheus: Add report interaction for editor modes (#47940) * Prometheus: Add report interaction for editor modes * Add new query * Fix test * Update public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx * Add app to feature tracking * Update --- .../components/PromQueryEditorSelector.test.tsx | 7 +++++++ .../components/PromQueryEditorSelector.tsx | 14 +++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx index b2b64c7f516..e754eafebbd 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx @@ -18,6 +18,13 @@ jest.mock('../../components/monaco-query-field/MonacoQueryFieldWrapper', () => { }; }); +jest.mock('@grafana/runtime', () => { + return { + ...jest.requireActual('@grafana/runtime'), + reportInteraction: jest.fn(), + }; +}); + const defaultQuery = { refId: 'A', expr: 'metric{label1="foo", label2="bar"}', diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx index e58615f536d..7261e2d8ae4 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx @@ -1,5 +1,6 @@ import React, { SyntheticEvent, useCallback, useEffect, useState } from 'react'; import { LoadingState } from '@grafana/data'; +import { reportInteraction } from '@grafana/runtime'; import { EditorHeader, EditorRows, FlexItem, InlineSelect, Space } from '@grafana/experimental'; import { Button, ConfirmModal } from '@grafana/ui'; import { PromQueryEditorProps } from '../../components/types'; @@ -17,15 +18,22 @@ import { PromQuery } from '../../types'; import { FeedbackLink } from '../shared/FeedbackLink'; export const PromQueryEditorSelector = React.memo((props) => { - const { onChange, onRunQuery, data } = props; + const { onChange, onRunQuery, data, app } = props; const [parseModalOpen, setParseModalOpen] = useState(false); const [dataIsStale, setDataIsStale] = useState(false); - const query = getQueryWithDefaults(props.query, props.app); + const query = getQueryWithDefaults(props.query, app); const editorMode = query.editorMode!; const onEditorModeChange = useCallback( (newMetricEditorMode: QueryEditorMode) => { + reportInteraction('user_grafana_prometheus_editor_mode_clicked', { + newEditor: newMetricEditorMode, + previousEditor: query.editorMode ?? '', + newQuery: !query.expr, + app: app ?? '', + }); + if (newMetricEditorMode === QueryEditorMode.Builder) { const result = buildVisualQueryFromString(query.expr || ''); // If there are errors, give user a chance to decide if they want to go to builder as that can loose some data. @@ -36,7 +44,7 @@ export const PromQueryEditorSelector = React.memo((props) } changeEditorMode(query, newMetricEditorMode, onChange); }, - [onChange, query] + [onChange, query, app] ); useEffect(() => {