show maintenance icon for triggers, closes #299

This commit is contained in:
Alexander Zobnin
2017-12-14 12:44:49 +03:00
parent 3685be7f40
commit 11ad51d5dc
20 changed files with 118 additions and 52 deletions

View File

@@ -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) {

View File

@@ -25,6 +25,7 @@ export function migratePanelSchema(panel) {
delete panel.ageField;
delete panel.infoField;
delete panel.scroll;
delete panel.hideHostsInMaintenance;
}
return panel;

View File

@@ -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>

View File

@@ -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>

View File

@@ -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,

View File

@@ -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;

View File

@@ -69,6 +69,10 @@
}
}
.zbx-maintenance-icon {
color: $orange;
}
@keyframes zabbix-triggers-panel {
100% {