From 198110e2af3e00045b78bc84740fa2cb6f29b549 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Sat, 8 Dec 2018 17:56:31 +0300 Subject: [PATCH] problem panels: get problem actions --- .../zabbix_api/zabbixAPIConnector.js | 10 +++ src/datasource-zabbix/zabbix/zabbix.js | 5 +- src/panel-triggers/components/Problems.tsx | 2 +- src/panel-triggers/triggers_panel_ctrl.js | 63 ++++++++++++------- 4 files changed, 53 insertions(+), 27 deletions(-) diff --git a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js index adefea1..8acb6c8 100644 --- a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js +++ b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js @@ -398,6 +398,16 @@ export class ZabbixAPIConnector { }); } + getEventAlerts(eventids) { + const params = { + eventids: eventids, + output: 'extend', + selectUsers: true, + }; + + return this.request('alert.get', params); + } + getAlerts(itemids, timeFrom, timeTo) { var params = { output: 'extend', diff --git a/src/datasource-zabbix/zabbix/zabbix.js b/src/datasource-zabbix/zabbix/zabbix.js index 3920cd3..ead0087 100644 --- a/src/datasource-zabbix/zabbix/zabbix.js +++ b/src/datasource-zabbix/zabbix/zabbix.js @@ -8,7 +8,8 @@ import { ZabbixNotImplemented } from './connectors/dbConnector'; const REQUESTS_TO_PROXYFY = [ 'getHistory', 'getTrend', 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs', - 'getEvents', 'getAlerts', 'getHostAlerts', 'getAcknowledges', 'getITService', 'getSLA', 'getVersion', 'getProxies' + 'getEvents', 'getAlerts', 'getHostAlerts', 'getAcknowledges', 'getITService', 'getSLA', 'getVersion', 'getProxies', + 'getEventAlerts' ]; const REQUESTS_TO_CACHE = [ @@ -17,7 +18,7 @@ const REQUESTS_TO_CACHE = [ const REQUESTS_TO_BIND = [ 'getHistory', 'getTrend', 'getMacros', 'getItemsByIDs', 'getEvents', 'getAlerts', 'getHostAlerts', - 'getAcknowledges', 'getITService', 'getVersion', 'login', 'acknowledgeEvent', 'getProxies' + 'getAcknowledges', 'getITService', 'getVersion', 'login', 'acknowledgeEvent', 'getProxies', 'getEventAlerts' ]; export class Zabbix { diff --git a/src/panel-triggers/components/Problems.tsx b/src/panel-triggers/components/Problems.tsx index accc23f..3854f44 100644 --- a/src/panel-triggers/components/Problems.tsx +++ b/src/panel-triggers/components/Problems.tsx @@ -82,7 +82,7 @@ export class ProblemList extends PureComponent { proxies = _.keyBy(sourceProxies, 'proxyid'); - return this.getAcknowledges(triggers, ds); + const eventids = _.compact(triggers.map(trigger => { + return trigger.lastEvent.eventid; + })); + return Promise.all([ + this.datasources[ds].zabbix.getAcknowledges(eventids), + this.datasources[ds].zabbix.getEventAlerts(eventids), + Promise.resolve(triggers) + ]); + }) + .then(([events, alerts, triggers]) => { + this.addAcknowledges(events, triggers); + this.addEventAlerts(alerts, triggers); + return triggers; }) .then(triggers => this.setMaintenanceStatus(triggers)) .then(triggers => this.filterTriggersPre(triggers, ds)) @@ -245,32 +257,23 @@ export class TriggerPanelCtrl extends PanelCtrl { .then(results => _.flatten(results)); } - getAcknowledges(triggerList, ds) { - // Request acknowledges for trigger - var eventids = _.map(triggerList, trigger => { - return trigger.lastEvent.eventid; - }); - - return this.datasources[ds].zabbix.getAcknowledges(eventids) - .then(events => { - - // Map events to triggers - _.each(triggerList, trigger => { - var event = _.find(events, event => { - return event.eventid === trigger.lastEvent.eventid; - }); - - if (event) { - trigger.acknowledges = _.map(event.acknowledges, this.formatAcknowledge.bind(this)); - } - - if (!trigger.lastEvent.eventid) { - trigger.lastEvent = null; - } + addAcknowledges(events, triggers) { + // Map events to triggers + _.each(triggers, trigger => { + var event = _.find(events, event => { + return event.eventid === trigger.lastEvent.eventid; }); - return triggerList; + if (event) { + trigger.acknowledges = _.map(event.acknowledges, this.formatAcknowledge.bind(this)); + } + + if (!trigger.lastEvent.eventid) { + trigger.lastEvent = null; + } }); + + return triggers; } formatAcknowledge(ack) { @@ -288,6 +291,18 @@ export class TriggerPanelCtrl extends PanelCtrl { return ack; } + addEventAlerts(alerts, triggers) { + alerts.forEach(alert => { + const trigger = _.find(triggers, t => { + return t.lastEvent && alert.eventid === t.lastEvent.eventid; + }); + if (trigger) { + trigger.alerts = trigger.alerts ? trigger.alerts.concat(alert) : [alert]; + } + }); + return triggers; + } + filterTriggersPre(triggerList, ds) { // Filter triggers by description let triggerFilter = this.panel.targets[ds].trigger.filter;