show maintenance icon for triggers, closes #299
This commit is contained in:
1
dist/panel-triggers/migrations.js
vendored
1
dist/panel-triggers/migrations.js
vendored
@@ -28,6 +28,7 @@ System.register([], function (_export, _context) {
|
||||
delete panel.ageField;
|
||||
delete panel.infoField;
|
||||
delete panel.scroll;
|
||||
delete panel.hideHostsInMaintenance;
|
||||
}
|
||||
|
||||
return panel;
|
||||
|
||||
2
dist/panel-triggers/migrations.js.map
vendored
2
dist/panel-triggers/migrations.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/panel-triggers/migrations.js"],"names":["migratePanelSchema","panel","isEmptyPanel","schemaVersion","getSchemaVersion","CURRENT_SCHEMA_VERSION","datasources","datasource","targets","triggers","lastChangeField","ageField","infoField","scroll"],"mappings":";;;;;;AAGO,WAASA,kBAAT,CAA4BC,KAA5B,EAAmC;AACxC,QAAIC,aAAaD,KAAb,CAAJ,EAAyB;AACvB,aAAOA,KAAP;AACD;;AAED,QAAME,gBAAgBC,iBAAiBH,KAAjB,CAAtB;AACAA,UAAME,aAAN,GAAsBE,sBAAtB;;AAEA,QAAIF,gBAAgB,CAApB,EAAuB;AACrBF,YAAMK,WAAN,GAAoB,CAACL,MAAMM,UAAP,CAApB;AACAN,YAAMO,OAAN,GAAgB,EAAhB;AACAP,YAAMO,OAAN,CAAcP,MAAMK,WAAN,CAAkB,CAAlB,CAAd,IAAsCL,MAAMQ,QAA5C;;AAEA;AACA,aAAOR,MAAMQ,QAAb;AACA,aAAOR,MAAMM,UAAb;AACD;;AAED,QAAIJ,gBAAgB,CAApB,EAAuB;AACrB;AACA,aAAOF,MAAMS,eAAb;AACA,aAAOT,MAAMU,QAAb;AACA,aAAOV,MAAMW,SAAb;AACA,aAAOX,MAAMY,MAAb;AACD;;AAED,WAAOZ,KAAP;AACD;;gCA3BeD,kB;;AA6BhB,WAASI,gBAAT,CAA0BH,KAA1B,EAAiC;AAC/B,WAAOA,MAAME,aAAN,IAAuB,CAA9B;AACD;;AAED,WAASD,YAAT,CAAsBD,KAAtB,EAA6B;AAC3B,WAAO,CAACA,MAAMM,UAAP,IAAqB,CAACN,MAAMK,WAA5B,IAA2C,CAACL,MAAMQ,QAAlD,IAA8D,CAACR,MAAMO,OAA5E;AACD;;;;AArCKH,4B,GAAyB,C","file":"migrations.js","sourcesContent":["// Actual schema version\nconst CURRENT_SCHEMA_VERSION = 3;\n\nexport function migratePanelSchema(panel) {\n if (isEmptyPanel(panel)) {\n return panel;\n }\n\n const schemaVersion = getSchemaVersion(panel);\n panel.schemaVersion = CURRENT_SCHEMA_VERSION;\n\n if (schemaVersion < 2) {\n panel.datasources = [panel.datasource];\n panel.targets = {};\n panel.targets[panel.datasources[0]] = panel.triggers;\n\n // delete old props\n delete panel.triggers;\n delete panel.datasource;\n }\n\n if (schemaVersion < 3) {\n // delete old props\n delete panel.lastChangeField;\n delete panel.ageField;\n delete panel.infoField;\n delete panel.scroll;\n }\n\n return panel;\n}\n\nfunction getSchemaVersion(panel) {\n return panel.schemaVersion || 1;\n}\n\nfunction isEmptyPanel(panel) {\n return !panel.datasource && !panel.datasources && !panel.triggers && !panel.targets;\n}\n"]}
|
||||
{"version":3,"sources":["../../src/panel-triggers/migrations.js"],"names":["migratePanelSchema","panel","isEmptyPanel","schemaVersion","getSchemaVersion","CURRENT_SCHEMA_VERSION","datasources","datasource","targets","triggers","lastChangeField","ageField","infoField","scroll","hideHostsInMaintenance"],"mappings":";;;;;;AAGO,WAASA,kBAAT,CAA4BC,KAA5B,EAAmC;AACxC,QAAIC,aAAaD,KAAb,CAAJ,EAAyB;AACvB,aAAOA,KAAP;AACD;;AAED,QAAME,gBAAgBC,iBAAiBH,KAAjB,CAAtB;AACAA,UAAME,aAAN,GAAsBE,sBAAtB;;AAEA,QAAIF,gBAAgB,CAApB,EAAuB;AACrBF,YAAMK,WAAN,GAAoB,CAACL,MAAMM,UAAP,CAApB;AACAN,YAAMO,OAAN,GAAgB,EAAhB;AACAP,YAAMO,OAAN,CAAcP,MAAMK,WAAN,CAAkB,CAAlB,CAAd,IAAsCL,MAAMQ,QAA5C;;AAEA;AACA,aAAOR,MAAMQ,QAAb;AACA,aAAOR,MAAMM,UAAb;AACD;;AAED,QAAIJ,gBAAgB,CAApB,EAAuB;AACrB;AACA,aAAOF,MAAMS,eAAb;AACA,aAAOT,MAAMU,QAAb;AACA,aAAOV,MAAMW,SAAb;AACA,aAAOX,MAAMY,MAAb;AACA,aAAOZ,MAAMa,sBAAb;AACD;;AAED,WAAOb,KAAP;AACD;;gCA5BeD,kB;;AA8BhB,WAASI,gBAAT,CAA0BH,KAA1B,EAAiC;AAC/B,WAAOA,MAAME,aAAN,IAAuB,CAA9B;AACD;;AAED,WAASD,YAAT,CAAsBD,KAAtB,EAA6B;AAC3B,WAAO,CAACA,MAAMM,UAAP,IAAqB,CAACN,MAAMK,WAA5B,IAA2C,CAACL,MAAMQ,QAAlD,IAA8D,CAACR,MAAMO,OAA5E;AACD;;;;AAtCKH,4B,GAAyB,C","file":"migrations.js","sourcesContent":["// Actual schema version\nconst CURRENT_SCHEMA_VERSION = 3;\n\nexport function migratePanelSchema(panel) {\n if (isEmptyPanel(panel)) {\n return panel;\n }\n\n const schemaVersion = getSchemaVersion(panel);\n panel.schemaVersion = CURRENT_SCHEMA_VERSION;\n\n if (schemaVersion < 2) {\n panel.datasources = [panel.datasource];\n panel.targets = {};\n panel.targets[panel.datasources[0]] = panel.triggers;\n\n // delete old props\n delete panel.triggers;\n delete panel.datasource;\n }\n\n if (schemaVersion < 3) {\n // delete old props\n delete panel.lastChangeField;\n delete panel.ageField;\n delete panel.infoField;\n delete panel.scroll;\n delete panel.hideHostsInMaintenance;\n }\n\n return panel;\n}\n\nfunction getSchemaVersion(panel) {\n return panel.schemaVersion || 1;\n}\n\nfunction isEmptyPanel(panel) {\n return !panel.datasource && !panel.datasources && !panel.triggers && !panel.targets;\n}\n"]}
|
||||
1
dist/panel-triggers/partials/module.html
vendored
1
dist/panel-triggers/partials/module.html
vendored
@@ -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>
|
||||
|
||||
8
dist/panel-triggers/specs/migrations.spec.js
vendored
8
dist/panel-triggers/specs/migrations.spec.js
vendored
@@ -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,
|
||||
|
||||
59
dist/panel-triggers/triggers_panel_ctrl.js
vendored
59
dist/panel-triggers/triggers_panel_ctrl.js
vendored
@@ -35,7 +35,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
|
||||
}
|
||||
|
||||
function _filterTriggers(triggers, triggerFilter) {
|
||||
function filterTriggers(triggers, triggerFilter) {
|
||||
if (utils.isRegex(triggerFilter)) {
|
||||
return _.filter(triggers, function (trigger) {
|
||||
return utils.buildRegex(triggerFilter).test(trigger.description);
|
||||
@@ -136,7 +136,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
severityField: true,
|
||||
descriptionField: true,
|
||||
// Options
|
||||
hideHostsInMaintenance: false,
|
||||
hostsInMaintenance: true,
|
||||
showTriggers: 'all triggers',
|
||||
sortTriggersBy: { text: 'last change', value: 'lastchange' },
|
||||
showEvents: { text: 'Problems', value: '1' },
|
||||
@@ -289,16 +289,16 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
value: function render(zabbixTriggers) {
|
||||
var _this4 = this;
|
||||
|
||||
var triggers = zabbixTriggers || this.triggerList;
|
||||
var 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();
|
||||
|
||||
@@ -316,7 +316,6 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
var zabbix = datasource.zabbix;
|
||||
var showEvents = _this5.panel.showEvents.value;
|
||||
var triggerFilter = _this5.panel.targets[ds];
|
||||
var hideHostsInMaintenance = _this5.panel.hideHostsInMaintenance;
|
||||
|
||||
// Replace template variables
|
||||
var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter);
|
||||
@@ -324,15 +323,16 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
var appFilter = datasource.replaceTemplateVars(triggerFilter.application.filter);
|
||||
|
||||
var triggersOptions = {
|
||||
showTriggers: showEvents,
|
||||
hideHostsInMaintenance: hideHostsInMaintenance
|
||||
showTriggers: showEvents
|
||||
};
|
||||
|
||||
return zabbix.getTriggers(groupFilter, hostFilter, appFilter, triggersOptions);
|
||||
}).then(function (triggers) {
|
||||
return _this5.getAcknowledges(triggers, ds);
|
||||
}).then(function (triggers) {
|
||||
return _this5.filterTriggers(triggers, ds);
|
||||
return _this5.setMaintenanceStatus(triggers);
|
||||
}).then(function (triggers) {
|
||||
return _this5.filterTriggersPre(triggers, ds);
|
||||
}).then(function (triggers) {
|
||||
return _this5.addTriggerDataSource(triggers, ds);
|
||||
});
|
||||
@@ -382,17 +382,24 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'filterTriggers',
|
||||
value: function filterTriggers(triggerList, ds) {
|
||||
var _this7 = this;
|
||||
|
||||
key: 'filterTriggersPre',
|
||||
value: function filterTriggersPre(triggerList, ds) {
|
||||
// Filter triggers by description
|
||||
var triggerFilter = this.panel.targets[ds].trigger.filter;
|
||||
triggerFilter = this.datasources[ds].replaceTemplateVars(triggerFilter);
|
||||
if (triggerFilter) {
|
||||
triggerList = _filterTriggers(triggerList, triggerFilter);
|
||||
triggerList = filterTriggers(triggerList, triggerFilter);
|
||||
}
|
||||
|
||||
return triggerList;
|
||||
}
|
||||
}, {
|
||||
key: 'filterTriggersPost',
|
||||
value: function filterTriggersPost(triggers) {
|
||||
var _this7 = this;
|
||||
|
||||
var triggerList = _.cloneDeep(triggers);
|
||||
|
||||
// Filter acknowledged triggers
|
||||
if (this.panel.showTriggers === 'unacknowledged') {
|
||||
triggerList = _.filter(triggerList, function (trigger) {
|
||||
@@ -404,6 +411,13 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
triggerList = triggerList;
|
||||
}
|
||||
|
||||
// Filter by maintenance status
|
||||
if (!this.panel.hostsInMaintenance) {
|
||||
triggerList = _.filter(triggerList, function (trigger) {
|
||||
return trigger.maintenance === false;
|
||||
});
|
||||
}
|
||||
|
||||
// Filter triggers by severity
|
||||
triggerList = _.filter(triggerList, function (trigger) {
|
||||
return _this7.panel.triggerSeverity[trigger.priority].show;
|
||||
@@ -411,6 +425,17 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
|
||||
return triggerList;
|
||||
}
|
||||
}, {
|
||||
key: 'setMaintenanceStatus',
|
||||
value: function setMaintenanceStatus(triggers) {
|
||||
_.each(triggers, function (trigger) {
|
||||
var maintenance_status = _.some(trigger.hosts, function (host) {
|
||||
return host.maintenance_status === '1';
|
||||
});
|
||||
trigger.maintenance = maintenance_status;
|
||||
});
|
||||
return triggers;
|
||||
}
|
||||
}, {
|
||||
key: 'addTriggerDataSource',
|
||||
value: function addTriggerDataSource(triggers, ds) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user