show maintenance icon for triggers, closes #299
This commit is contained in:
@@ -342,7 +342,7 @@ function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {
|
||||
}
|
||||
|
||||
getTriggers(groupids, hostids, applicationids, options) {
|
||||
let {showTriggers, hideHostsInMaintenance, timeFrom, timeTo} = options;
|
||||
let {showTriggers, maintenance, timeFrom, timeTo} = options;
|
||||
|
||||
let params = {
|
||||
output: 'extend',
|
||||
@@ -359,7 +359,7 @@ function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {
|
||||
value: 1
|
||||
},
|
||||
selectGroups: ['name'],
|
||||
selectHosts: ['name', 'host'],
|
||||
selectHosts: ['name', 'host', 'maintenance_status'],
|
||||
selectItems: ['name', 'key_', 'lastvalue'],
|
||||
selectLastEvent: 'extend'
|
||||
};
|
||||
@@ -368,8 +368,8 @@ function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {
|
||||
params.filter.value = showTriggers;
|
||||
}
|
||||
|
||||
if (hideHostsInMaintenance) {
|
||||
params.maintenance = false;
|
||||
if (maintenance) {
|
||||
params.maintenance = true;
|
||||
}
|
||||
|
||||
if (timeFrom || timeTo) {
|
||||
|
||||
@@ -25,6 +25,7 @@ export function migratePanelSchema(panel) {
|
||||
delete panel.ageField;
|
||||
delete panel.infoField;
|
||||
delete panel.scroll;
|
||||
delete panel.hideHostsInMaintenance;
|
||||
}
|
||||
|
||||
return panel;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<p class="alert-list-title">
|
||||
{{trigger.description}}
|
||||
<span class="zabbix-hostname" ng-if="ctrl.panel.hostField || ctrl.panel.hostTechNameField">
|
||||
<i ng-if="trigger.maintenance" class="fa fa-wrench zbx-maintenance-icon"></i>
|
||||
{{ ctrl.formatHostName(trigger) }}
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
<h5 class="section-heading">Options</h5>
|
||||
<gf-form-switch class="gf-form"
|
||||
label-class="width-15"
|
||||
label="Hide hosts in maintenance"
|
||||
checked="ctrl.panel.hideHostsInMaintenance"
|
||||
on-change="ctrl.refresh()">
|
||||
label="Show hosts in maintenance"
|
||||
checked="ctrl.panel.hostsInMaintenance"
|
||||
on-change="ctrl.render()">
|
||||
</gf-form-switch>
|
||||
<div class="gf-form">
|
||||
<label class="gf-form-label width-8">Acknowledged</label>
|
||||
|
||||
@@ -54,13 +54,15 @@ describe('Triggers Panel schema migration', () => {
|
||||
statusField: false,
|
||||
severityField: false,
|
||||
descriptionField: true,
|
||||
hideHostsInMaintenance: false,
|
||||
hostsInMaintenance: true,
|
||||
showTriggers: 'all triggers',
|
||||
sortTriggersBy: { text: 'last change', value: 'lastchange' },
|
||||
showEvents: { text: 'Problems', value: '1' },
|
||||
limit: 10,
|
||||
fontSize: '100%',
|
||||
pageSize: 10,
|
||||
highlightNewEvents: true,
|
||||
highlightNewerThan: '1h',
|
||||
customLastChangeFormat: false,
|
||||
lastChangeFormat: "",
|
||||
triggerSeverity: DEFAULT_SEVERITY,
|
||||
@@ -86,13 +88,15 @@ describe('Triggers Panel schema migration', () => {
|
||||
statusField: true,
|
||||
severityField: true,
|
||||
descriptionField: true,
|
||||
hideHostsInMaintenance: false,
|
||||
hostsInMaintenance: true,
|
||||
showTriggers: 'all triggers',
|
||||
sortTriggersBy: { text: 'last change', value: 'lastchange' },
|
||||
showEvents: { text: 'Problems', value: '1' },
|
||||
limit: 100,
|
||||
fontSize: '100%',
|
||||
pageSize: 10,
|
||||
highlightNewEvents: true,
|
||||
highlightNewerThan: '1h',
|
||||
customLastChangeFormat: false,
|
||||
lastChangeFormat: "",
|
||||
triggerSeverity: DEFAULT_SEVERITY,
|
||||
|
||||
@@ -38,7 +38,7 @@ export const PANEL_DEFAULTS = {
|
||||
severityField: true,
|
||||
descriptionField: true,
|
||||
// Options
|
||||
hideHostsInMaintenance: false,
|
||||
hostsInMaintenance: true,
|
||||
showTriggers: 'all triggers',
|
||||
sortTriggersBy: { text: 'last change', value: 'lastchange' },
|
||||
showEvents: { text: 'Problems', value: '1' },
|
||||
@@ -171,16 +171,16 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
}
|
||||
|
||||
render(zabbixTriggers) {
|
||||
let triggers = zabbixTriggers || this.triggerList;
|
||||
let triggers = _.cloneDeep(zabbixTriggers || this.triggerListUnfiltered);
|
||||
this.triggerListUnfiltered = _.cloneDeep(triggers);
|
||||
|
||||
if (zabbixTriggers) {
|
||||
triggers = _.map(triggers, this.formatTrigger.bind(this));
|
||||
} else {
|
||||
triggers = _.map(triggers, this.updateTriggerFormat.bind(this));
|
||||
}
|
||||
triggers = _.map(triggers, this.formatTrigger.bind(this));
|
||||
triggers = this.filterTriggersPost(triggers);
|
||||
triggers = this.sortTriggers(triggers);
|
||||
|
||||
// Limit triggers number
|
||||
triggers = triggers.slice(0, this.panel.limit);
|
||||
|
||||
this.triggerList = triggers;
|
||||
this.getCurrentTriggersPage();
|
||||
|
||||
@@ -196,7 +196,6 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
var zabbix = datasource.zabbix;
|
||||
var showEvents = this.panel.showEvents.value;
|
||||
var triggerFilter = this.panel.targets[ds];
|
||||
var hideHostsInMaintenance = this.panel.hideHostsInMaintenance;
|
||||
|
||||
// Replace template variables
|
||||
var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter);
|
||||
@@ -204,15 +203,16 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
var appFilter = datasource.replaceTemplateVars(triggerFilter.application.filter);
|
||||
|
||||
let triggersOptions = {
|
||||
showTriggers: showEvents,
|
||||
hideHostsInMaintenance: hideHostsInMaintenance
|
||||
showTriggers: showEvents
|
||||
};
|
||||
|
||||
return zabbix.getTriggers(groupFilter, hostFilter, appFilter, triggersOptions);
|
||||
}).then((triggers) => {
|
||||
return this.getAcknowledges(triggers, ds);
|
||||
}).then((triggers) => {
|
||||
return this.filterTriggers(triggers, ds);
|
||||
return this.setMaintenanceStatus(triggers);
|
||||
}).then((triggers) => {
|
||||
return this.filterTriggersPre(triggers, ds);
|
||||
}).then((triggers) => {
|
||||
return this.addTriggerDataSource(triggers, ds);
|
||||
});
|
||||
@@ -259,7 +259,7 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
});
|
||||
}
|
||||
|
||||
filterTriggers(triggerList, ds) {
|
||||
filterTriggersPre(triggerList, ds) {
|
||||
// Filter triggers by description
|
||||
var triggerFilter = this.panel.targets[ds].trigger.filter;
|
||||
triggerFilter = this.datasources[ds].replaceTemplateVars(triggerFilter);
|
||||
@@ -267,6 +267,12 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
triggerList = filterTriggers(triggerList, triggerFilter);
|
||||
}
|
||||
|
||||
return triggerList;
|
||||
}
|
||||
|
||||
filterTriggersPost(triggers) {
|
||||
let triggerList = _.cloneDeep(triggers);
|
||||
|
||||
// Filter acknowledged triggers
|
||||
if (this.panel.showTriggers === 'unacknowledged') {
|
||||
triggerList = _.filter(triggerList, trigger => {
|
||||
@@ -278,6 +284,11 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
triggerList = triggerList;
|
||||
}
|
||||
|
||||
// Filter by maintenance status
|
||||
if (!this.panel.hostsInMaintenance) {
|
||||
triggerList = _.filter(triggerList, (trigger) => trigger.maintenance === false);
|
||||
}
|
||||
|
||||
// Filter triggers by severity
|
||||
triggerList = _.filter(triggerList, trigger => {
|
||||
return this.panel.triggerSeverity[trigger.priority].show;
|
||||
@@ -286,6 +297,14 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
return triggerList;
|
||||
}
|
||||
|
||||
setMaintenanceStatus(triggers) {
|
||||
_.each(triggers, (trigger) => {
|
||||
let maintenance_status = _.some(trigger.hosts, (host) => host.maintenance_status === '1');
|
||||
trigger.maintenance = maintenance_status;
|
||||
});
|
||||
return triggers;
|
||||
}
|
||||
|
||||
addTriggerDataSource(triggers, ds) {
|
||||
_.each(triggers, (trigger) => {
|
||||
trigger.datasource = ds;
|
||||
|
||||
@@ -69,6 +69,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.zbx-maintenance-icon {
|
||||
color: $orange;
|
||||
}
|
||||
|
||||
|
||||
@keyframes zabbix-triggers-panel {
|
||||
100% {
|
||||
|
||||
Reference in New Issue
Block a user