From 4373ef86670ebe5816ea76e0fba175b2e817b2cc Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Tue, 1 Aug 2023 17:41:25 +0200 Subject: [PATCH] Add tags filter to triggers query --- src/datasource/datasource.ts | 13 +++++++++++++ .../connectors/zabbix_api/zabbixAPIConnector.ts | 7 ++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/datasource/datasource.ts b/src/datasource/datasource.ts index 84dba1e..ac36fc1 100644 --- a/src/datasource/datasource.ts +++ b/src/datasource/datasource.ts @@ -542,6 +542,19 @@ export class ZabbixDatasource extends DataSourceApi h.hostid); const appids = apps?.map((a) => a.applicationid); const options = getTriggersOptions(target, timeRange); + + const tagsFilter = this.replaceTemplateVars(target.tags?.filter, request.scopedVars); + // replaceTemplateVars() builds regex-like string, so we should trim it. + const tagsFilterStr = tagsFilter.replace('/^', '').replace('$/', ''); + const tags = utils.parseTags(tagsFilterStr); + tags.forEach((tag) => { + // Zabbix uses {"tag": "", "value": "", "operator": ""} format, where 1 means Equal + tag.operator = 1; + }); + if (tags && tags.length) { + options.tags = tags; + } + const alerts = await this.zabbix.getHostAlerts(hostids, appids, options); return responseHandler.handleTriggersResponse(alerts, groups, timeRange, target); } diff --git a/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts b/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts index 38c7c79..6eb22c4 100644 --- a/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts +++ b/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts @@ -715,7 +715,7 @@ export class ZabbixAPIConnector { } async getHostAlerts(hostids, applicationids, options): Promise { - const { minSeverity, acknowledged, count, timeFrom, timeTo } = options; + const { minSeverity, acknowledged, tags, count, timeFrom, timeTo } = options; const params: any = { output: 'extend', hostids: hostids, @@ -747,6 +747,11 @@ export class ZabbixAPIConnector { params.lastChangeTill = timeTo; } + if (tags) { + params.tags = tags; + params.evaltype = 0; + } + let triggers = await this.request('trigger.get', params); if (!count || acknowledged === 1) { triggers = filterTriggersByAcknowledge(triggers, acknowledged);