track executed queries and panel clicks

This commit is contained in:
Gareth Dawson
2023-09-13 12:30:58 +01:00
parent fe55c450bd
commit fd616b6446
3 changed files with 78 additions and 1 deletions

View File

@@ -26,6 +26,7 @@ import {
toDataFrame, toDataFrame,
} from '@grafana/data'; } from '@grafana/data';
import { AnnotationQueryEditor } from './components/AnnotationQueryEditor'; import { AnnotationQueryEditor } from './components/AnnotationQueryEditor';
import { trackRequest } from './tracking';
export class ZabbixDatasource extends DataSourceApi<ZabbixMetricsQuery, ZabbixDSOptions> { export class ZabbixDatasource extends DataSourceApi<ZabbixMetricsQuery, ZabbixDSOptions> {
name: string; name: string;
@@ -113,6 +114,8 @@ export class ZabbixDatasource extends DataSourceApi<ZabbixMetricsQuery, ZabbixDS
* @return {Object} Grafana metrics object with timeseries data for each target. * @return {Object} Grafana metrics object with timeseries data for each target.
*/ */
query(request: DataQueryRequest<ZabbixMetricsQuery>) { query(request: DataQueryRequest<ZabbixMetricsQuery>) {
trackRequest(request);
// Migrate old targets // Migrate old targets
const requestTargets = request.targets.map((t) => { const requestTargets = request.targets.map((t) => {
// Prevent changes of original object // Prevent changes of original object

View File

@@ -0,0 +1,65 @@
import { DataQueryRequest } from '@grafana/data';
import { ZabbixMetricsQuery } from './types';
import { reportInteraction } from '@grafana/runtime';
export const trackRequest = (request: DataQueryRequest<ZabbixMetricsQuery>): 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);
});
};

View File

@@ -14,6 +14,7 @@ import { ProblemDTO, ZBXAlert, ZBXEvent, ZBXTag } from '../../../datasource/type
import { APIExecuteScriptResponse, ZBXScript } from '../../../datasource/zabbix/connectors/zabbix_api/types'; import { APIExecuteScriptResponse, ZBXScript } from '../../../datasource/zabbix/connectors/zabbix_api/types';
import { AckCell } from './AckCell'; import { AckCell } from './AckCell';
import { DataSourceRef, TimeRange } from '@grafana/data'; import { DataSourceRef, TimeRange } from '@grafana/data';
import { reportInteraction } from '@grafana/runtime';
export interface ProblemListProps { export interface ProblemListProps {
problems: ProblemDTO[]; problems: ProblemDTO[];
@@ -77,6 +78,8 @@ export default class ProblemList extends PureComponent<ProblemListProps, Problem
}; };
handleExpandedChange = (expanded: any, event: any) => { handleExpandedChange = (expanded: any, event: any) => {
reportInteraction('grafana_zabbix_panel_row_expanded', {});
const { problems, pageSize } = this.props; const { problems, pageSize } = this.props;
const { page } = this.state; const { page } = this.state;
const expandedProblems = {}; const expandedProblems = {};
@@ -259,7 +262,13 @@ export default class ProblemList extends PureComponent<ProblemListProps, Problem
)} )}
expanded={this.getExpandedPage(this.state.page)} expanded={this.getExpandedPage(this.state.page)}
onExpandedChange={this.handleExpandedChange} onExpandedChange={this.handleExpandedChange}
onPageChange={(page) => this.setState({ page })} onPageChange={(page) => {
reportInteraction('grafana_zabbix_panel_page_change', {
action: page > this.state.page ? 'next' : 'prev',
});
this.setState({ page });
}}
onPageSizeChange={this.handlePageSizeChange} onPageSizeChange={this.handlePageSizeChange}
onResizedChange={this.handleResizedChange} onResizedChange={this.handleResizedChange}
/> />