diff --git a/src/datasource-zabbix/zabbix/zabbix.js b/src/datasource-zabbix/zabbix/zabbix.js index fef9e83..3920cd3 100644 --- a/src/datasource-zabbix/zabbix/zabbix.js +++ b/src/datasource-zabbix/zabbix/zabbix.js @@ -243,7 +243,7 @@ export class Zabbix { /** * Build query - convert target filters to array of Zabbix items */ - getTriggers(groupFilter, hostFilter, appFilter, options) { + getTriggers(groupFilter, hostFilter, appFilter, options, proxyFilter) { let promises = [ this.getGroups(groupFilter), this.getHosts(groupFilter, hostFilter), @@ -252,9 +252,7 @@ export class Zabbix { return Promise.all(promises) .then(results => { - let filteredGroups = results[0]; - let filteredHosts = results[1]; - let filteredApps = results[2]; + let [filteredGroups, filteredHosts, filteredApps] = results; let query = {}; if (appFilter) { @@ -268,8 +266,36 @@ export class Zabbix { } return query; - }).then(query => { - return this.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options); + }) + .then(query => this.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options)) + .then(triggers => this.filterTriggersByProxy(triggers, proxyFilter)); + } + + filterTriggersByProxy(triggers, proxyFilter) { + return this.getFilteredProxies(proxyFilter) + .then(proxies => { + if (proxyFilter && proxyFilter !== '/.*/' && triggers) { + const proxy_ids = proxies.map(proxy => proxy.proxyid); + triggers = triggers.filter(trigger => { + let filtered = false; + for(let i = 0; i < trigger.hosts.length; i++) { + const host = trigger.hosts[i]; + if (proxy_ids.includes(host.proxy_hostid)) { + filtered = true; + } + } + return filtered; + }); + } + return triggers; + }); + } + + getFilteredProxies(proxyFilter) { + return this.zabbixAPI.getProxies() + .then(proxies => { + proxies.forEach(proxy => proxy.name = proxy.host); + return findByFilter(proxies, proxyFilter); }); } diff --git a/src/panel-triggers/migrations.js b/src/panel-triggers/migrations.js index ec54371..8242c0c 100644 --- a/src/panel-triggers/migrations.js +++ b/src/panel-triggers/migrations.js @@ -2,7 +2,7 @@ import _ from 'lodash'; import {DEFAULT_TARGET} from './triggers_panel_ctrl'; // Actual schema version -export const CURRENT_SCHEMA_VERSION = 4; +export const CURRENT_SCHEMA_VERSION = 5; export function migratePanelSchema(panel) { if (isEmptyPanel(panel)) { @@ -31,7 +31,7 @@ export function migratePanelSchema(panel) { delete panel.hideHostsInMaintenance; } - if (schemaVersion < 4) { + if (schemaVersion < 5) { if (panel.targets && !_.isEmpty(panel.targets)) { _.each(panel.targets, (target) => { _.defaultsDeep(target, DEFAULT_TARGET); diff --git a/src/panel-triggers/partials/triggers_tab.html b/src/panel-triggers/partials/triggers_tab.html index 8af4f09..0f5da2e 100644 --- a/src/panel-triggers/partials/triggers_tab.html +++ b/src/panel-triggers/partials/triggers_tab.html @@ -19,7 +19,7 @@