From c5453041acce64235e9991da6b36fb9aea6671bc Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Tue, 23 Apr 2019 19:53:38 +0300 Subject: [PATCH] triggers mode: filter results by group, fix #709 --- src/datasource-zabbix/datasource.js | 12 ++++++++---- src/datasource-zabbix/responseHandler.js | 13 ++++++++----- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/datasource-zabbix/datasource.js b/src/datasource-zabbix/datasource.js index 3f2ac58..8dae24d 100644 --- a/src/datasource-zabbix/datasource.js +++ b/src/datasource-zabbix/datasource.js @@ -330,7 +330,7 @@ export class ZabbixDatasource { queryTriggersData(target, timeRange) { let [timeFrom, timeTo] = timeRange; return this.zabbix.getHostsFromTarget(target) - .then((results) => { + .then(results => { let [hosts, apps] = results; if (hosts.length) { let hostids = _.map(hosts, 'hostid'); @@ -342,9 +342,13 @@ export class ZabbixDatasource { timeFrom: timeFrom, timeTo: timeTo }; - return this.zabbix.getHostAlerts(hostids, appids, options) - .then((triggers) => { - return responseHandler.handleTriggersResponse(triggers, timeRange); + const groupFilter = target.group.filter; + return Promise.all([ + this.zabbix.getHostAlerts(hostids, appids, options), + this.zabbix.getGroups(groupFilter) + ]) + .then(([triggers, groups]) => { + return responseHandler.handleTriggersResponse(triggers, groups, timeRange); }); } else { return Promise.resolve([]); diff --git a/src/datasource-zabbix/responseHandler.js b/src/datasource-zabbix/responseHandler.js index d25e282..d6f1347 100644 --- a/src/datasource-zabbix/responseHandler.js +++ b/src/datasource-zabbix/responseHandler.js @@ -143,7 +143,7 @@ function handleSLAResponse(itservice, slaProperty, slaObject) { } } -function handleTriggersResponse(triggers, timeRange) { +function handleTriggersResponse(triggers, groups, timeRange) { if (_.isNumber(triggers)) { return { target: "triggers count", @@ -152,16 +152,19 @@ function handleTriggersResponse(triggers, timeRange) { ] }; } else { - let stats = getTriggerStats(triggers); + const stats = getTriggerStats(triggers); + const groupNames = _.map(groups, 'name'); let table = new TableModel(); table.addColumn({text: 'Host group'}); _.each(_.orderBy(c.TRIGGER_SEVERITY, ['val'], ['desc']), (severity) => { table.addColumn({text: severity.text}); }); _.each(stats, (severity_stats, group) => { - let row = _.map(_.orderBy(_.toPairs(severity_stats), (s) => s[0], ['desc']), (s) => s[1]); - row = _.concat([group], ...row); - table.rows.push(row); + if (_.includes(groupNames, group)) { + let row = _.map(_.orderBy(_.toPairs(severity_stats), (s) => s[0], ['desc']), (s) => s[1]); + row = _.concat([group], ...row); + table.rows.push(row); + } }); return table; }