From fd616b64460a862338893accd135e0f5d7109752 Mon Sep 17 00:00:00 2001 From: Gareth Dawson Date: Wed, 13 Sep 2023 12:30:58 +0100 Subject: [PATCH] track executed queries and panel clicks --- src/datasource/datasource.ts | 3 + src/datasource/tracking.ts | 65 +++++++++++++++++++ .../components/Problems/Problems.tsx | 11 +++- 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/datasource/tracking.ts diff --git a/src/datasource/datasource.ts b/src/datasource/datasource.ts index ac36fc1..1a79231 100644 --- a/src/datasource/datasource.ts +++ b/src/datasource/datasource.ts @@ -26,6 +26,7 @@ import { toDataFrame, } from '@grafana/data'; import { AnnotationQueryEditor } from './components/AnnotationQueryEditor'; +import { trackRequest } from './tracking'; export class ZabbixDatasource extends DataSourceApi { name: string; @@ -113,6 +114,8 @@ export class ZabbixDatasource extends DataSourceApi) { + trackRequest(request); + // Migrate old targets const requestTargets = request.targets.map((t) => { // Prevent changes of original object diff --git a/src/datasource/tracking.ts b/src/datasource/tracking.ts new file mode 100644 index 0000000..1fe71de --- /dev/null +++ b/src/datasource/tracking.ts @@ -0,0 +1,65 @@ +import { DataQueryRequest } from '@grafana/data'; +import { ZabbixMetricsQuery } from './types'; +import { reportInteraction } from '@grafana/runtime'; + +export const trackRequest = (request: DataQueryRequest): void => { + request.targets.forEach((target) => { + const properties: any = { + app: request.app, + }; + + switch (target.queryType) { + case '0': + case '1': + case '3': + if (target.queryType === '0') { + properties.queryType = 'Metrics'; + } else if (target.queryType === '1') { + properties.queryType = 'Services'; + } else if (target.queryType === '3') { + properties.queryType = 'Item Id'; + } + properties.trends = target.options.useTrends; + properties.showDisabledItems = target.options.showDisabledItems; + properties.useZabbixValueMapping = target.options.useZabbixValueMapping; + properties.disableDataAlignment = target.options.disableDataAlignment; + break; + case '2': + properties.queryType = 'Text'; + properties.showDisabledItems = target.options.showDisabledItems; + break; + case '4': + properties.queryType = 'Triggers'; + + if (target.options.acknowledged === 0) { + properties.acknowledged = 'unacknowledged'; + } else if (target.options.acknowledged === 1) { + properties.acknowledged = 'acknowledged'; + } else if (target.options.acknowledged === 2) { + properties.acknowledged = 'all triggers'; + } + + properties.useTimeRange = target.options.useTimeRange ?? false; + break; + case '5': + properties.queryType = 'Problems'; + + if (target.options.acknowledged === 0) { + properties.acknowledged = 'unacknowledged'; + } else if (target.options.acknowledged === 1) { + properties.acknowledged = 'acknowledged'; + } else if (target.options.acknowledged === 2) { + properties.acknowledged = 'all triggers'; + } + + properties.sortProblems = target.options.sortProblems; + properties.useTimeRange = target.options.useTimeRange; + properties.hostsInMaintenance = target.options.hostsInMaintenance; + properties.hostProxy = target.options.hostProxy; + properties.limit = target.options.limit; + break; + } + + reportInteraction('grafana_zabbix_query_executed', properties); + }); +}; diff --git a/src/panel-triggers/components/Problems/Problems.tsx b/src/panel-triggers/components/Problems/Problems.tsx index 6cc30ab..eff1c88 100644 --- a/src/panel-triggers/components/Problems/Problems.tsx +++ b/src/panel-triggers/components/Problems/Problems.tsx @@ -14,6 +14,7 @@ import { ProblemDTO, ZBXAlert, ZBXEvent, ZBXTag } from '../../../datasource/type import { APIExecuteScriptResponse, ZBXScript } from '../../../datasource/zabbix/connectors/zabbix_api/types'; import { AckCell } from './AckCell'; import { DataSourceRef, TimeRange } from '@grafana/data'; +import { reportInteraction } from '@grafana/runtime'; export interface ProblemListProps { problems: ProblemDTO[]; @@ -77,6 +78,8 @@ export default class ProblemList extends PureComponent { + reportInteraction('grafana_zabbix_panel_row_expanded', {}); + const { problems, pageSize } = this.props; const { page } = this.state; const expandedProblems = {}; @@ -259,7 +262,13 @@ export default class ProblemList extends PureComponent this.setState({ page })} + onPageChange={(page) => { + reportInteraction('grafana_zabbix_panel_page_change', { + action: page > this.state.page ? 'next' : 'prev', + }); + + this.setState({ page }); + }} onPageSizeChange={this.handlePageSizeChange} onResizedChange={this.handleResizedChange} />