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/specs/datasource.spec.ts b/src/datasource/specs/datasource.spec.ts index 149980f..ed79238 100644 --- a/src/datasource/specs/datasource.spec.ts +++ b/src/datasource/specs/datasource.spec.ts @@ -15,6 +15,7 @@ jest.mock( getTemplateSrv: () => ({ replace: jest.fn().mockImplementation((query) => query), }), + reportInteraction: jest.fn(), }), { virtual: true } ); diff --git a/src/datasource/tracking.ts b/src/datasource/tracking.ts new file mode 100644 index 0000000..de061ab --- /dev/null +++ b/src/datasource/tracking.ts @@ -0,0 +1,46 @@ +import { DataQueryRequest } from '@grafana/data'; +import { ZabbixMetricsQuery } from './types'; +import { reportInteraction } from '@grafana/runtime'; +import { + MODE_ITEMID, + MODE_ITSERVICE, + MODE_MACROS, + MODE_METRICS, + MODE_PROBLEMS, + MODE_TEXT, + MODE_TRIGGERS, +} from './constants'; + +export const trackRequest = (request: DataQueryRequest): void => { + request.targets.forEach((target) => { + const properties: any = { + app: request.app, + }; + + switch (target.queryType) { + case MODE_METRICS: + properties.queryType = 'Metrics'; + break; + case MODE_ITSERVICE: + properties.queryType = 'Services'; + break; + case MODE_TEXT: + properties.queryType = 'Text'; + break; + case MODE_ITEMID: + properties.queryType = 'Item Id'; + break; + case MODE_TRIGGERS: + properties.queryType = 'Triggers'; + break; + case MODE_PROBLEMS: + properties.queryType = 'Problems'; + break; + case MODE_MACROS: + properties.queryType = 'Macros'; + 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} />