track executed queries and panel clicks
This commit is contained in:
@@ -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
|
||||||
|
|||||||
65
src/datasource/tracking.ts
Normal file
65
src/datasource/tracking.ts
Normal 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);
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user