Triggers Panel: refactor.
This commit is contained in:
2
dist/panel-triggers/module.html
vendored
2
dist/panel-triggers/module.html
vendored
@@ -35,7 +35,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="trigger in ctrl.currentPage">
|
||||
<tr ng-repeat="trigger in ctrl.triggerList">
|
||||
|
||||
<td ng-if="ctrl.panel.hostField">
|
||||
<div>
|
||||
|
||||
261
dist/panel-triggers/module.js
vendored
261
dist/panel-triggers/module.js
vendored
@@ -3,7 +3,7 @@
|
||||
System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'app/plugins/sdk', './editor', './ack-tooltip.directive', './css/panel_triggers.css!'], function (_export, _context) {
|
||||
"use strict";
|
||||
|
||||
var _, $, moment, utils, MetricsPanelCtrl, triggerPanelEditor, _createClass, _get, defaultSeverity, panelDefaults, triggerStatusMap, defaultTimeFormat, TriggerPanelCtrl;
|
||||
var _, $, moment, utils, PanelCtrl, triggerPanelEditor, _createClass, defaultSeverity, panelDefaults, triggerStatusMap, defaultTimeFormat, TriggerPanelCtrl;
|
||||
|
||||
function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
@@ -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);
|
||||
@@ -57,7 +57,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
}, function (_datasourceZabbixUtils) {
|
||||
utils = _datasourceZabbixUtils;
|
||||
}, function (_appPluginsSdk) {
|
||||
MetricsPanelCtrl = _appPluginsSdk.MetricsPanelCtrl;
|
||||
PanelCtrl = _appPluginsSdk.PanelCtrl;
|
||||
}, function (_editor) {
|
||||
triggerPanelEditor = _editor.triggerPanelEditor;
|
||||
}, function (_ackTooltipDirective) {}, function (_cssPanel_triggersCss) {}],
|
||||
@@ -80,31 +80,6 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
};
|
||||
}();
|
||||
|
||||
_get = function get(object, property, receiver) {
|
||||
if (object === null) object = Function.prototype;
|
||||
var desc = Object.getOwnPropertyDescriptor(object, property);
|
||||
|
||||
if (desc === undefined) {
|
||||
var parent = Object.getPrototypeOf(object);
|
||||
|
||||
if (parent === null) {
|
||||
return undefined;
|
||||
} else {
|
||||
return get(parent, property, receiver);
|
||||
}
|
||||
} else if ("value" in desc) {
|
||||
return desc.value;
|
||||
} else {
|
||||
var getter = desc.get;
|
||||
|
||||
if (getter === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return getter.call(receiver);
|
||||
}
|
||||
};
|
||||
|
||||
defaultSeverity = [{ priority: 0, severity: 'Not classified', color: '#B7DBAB', show: true }, { priority: 1, severity: 'Information', color: '#82B5D8', show: true }, { priority: 2, severity: 'Warning', color: '#E5AC0E', show: true }, { priority: 3, severity: 'Average', color: '#C15C17', show: true }, { priority: 4, severity: 'High', color: '#BF1B00', show: true }, { priority: 5, severity: 'Disaster', color: '#890F02', show: true }];
|
||||
panelDefaults = {
|
||||
datasource: null,
|
||||
@@ -136,8 +111,8 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
};
|
||||
defaultTimeFormat = "DD MMM YYYY HH:mm:ss";
|
||||
|
||||
_export('PanelCtrl', _export('TriggerPanelCtrl', TriggerPanelCtrl = function (_MetricsPanelCtrl) {
|
||||
_inherits(TriggerPanelCtrl, _MetricsPanelCtrl);
|
||||
_export('PanelCtrl', _export('TriggerPanelCtrl', TriggerPanelCtrl = function (_PanelCtrl) {
|
||||
_inherits(TriggerPanelCtrl, _PanelCtrl);
|
||||
|
||||
/** @ngInject */
|
||||
function TriggerPanelCtrl($scope, $injector, $element, datasourceSrv, templateSrv, contextSrv) {
|
||||
@@ -160,6 +135,11 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
|
||||
_this.triggerList = [];
|
||||
_this.currentPage = [];
|
||||
|
||||
_this.events.on('init-edit-mode', _this.onInitEditMode.bind(_this));
|
||||
_this.events.on('render', _this.onRender.bind(_this));
|
||||
_this.events.on('refresh', _this.onRender.bind(_this));
|
||||
|
||||
_this.refreshData();
|
||||
return _this;
|
||||
}
|
||||
@@ -171,15 +151,10 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
|
||||
|
||||
_createClass(TriggerPanelCtrl, [{
|
||||
key: 'onInitMetricsPanelEditMode',
|
||||
value: function onInitMetricsPanelEditMode() {
|
||||
key: 'onInitEditMode',
|
||||
value: function onInitEditMode() {
|
||||
this.addEditorTab('Options', triggerPanelEditor, 2);
|
||||
}
|
||||
}, {
|
||||
key: 'refresh',
|
||||
value: function refresh() {
|
||||
this.onMetricsPanelRefresh();
|
||||
}
|
||||
}, {
|
||||
key: 'onMetricsPanelRefresh',
|
||||
value: function onMetricsPanelRefresh() {
|
||||
@@ -191,22 +166,37 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
this.refreshData();
|
||||
}
|
||||
}, {
|
||||
key: 'refreshData',
|
||||
value: function refreshData() {
|
||||
key: 'onRender',
|
||||
value: function onRender() {
|
||||
var _this2 = this;
|
||||
|
||||
// clear loading/error state
|
||||
delete this.error;
|
||||
this.loading = true;
|
||||
this.setTimeQueryStart();
|
||||
|
||||
var self = this;
|
||||
return this.refreshData().then(function (triggerList) {
|
||||
// Limit triggers number
|
||||
_this2.triggerList = triggerList.slice(0, _this2.panel.limit);
|
||||
|
||||
// Notify panel that request is finished
|
||||
_this2.loading = false;
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'refreshData',
|
||||
value: function refreshData() {
|
||||
return this.getTriggers().then(this.getAcknowledges.bind(this)).then(this.filterTriggers.bind(this));
|
||||
}
|
||||
}, {
|
||||
key: 'getTriggers',
|
||||
value: function getTriggers() {
|
||||
var _this3 = this;
|
||||
|
||||
// Load datasource
|
||||
return this.datasourceSrv.get(this.panel.datasource).then(function (datasource) {
|
||||
var zabbix = datasource.zabbix;
|
||||
var showEvents = self.panel.showEvents.value;
|
||||
var triggerFilter = self.panel.triggers;
|
||||
_this3.zabbix = zabbix;
|
||||
var showEvents = _this3.panel.showEvents.value;
|
||||
var triggerFilter = _this3.panel.triggers;
|
||||
|
||||
// Replace template variables
|
||||
var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter);
|
||||
@@ -215,17 +205,99 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
|
||||
var getTriggers = zabbix.getTriggers(groupFilter, hostFilter, appFilter, showEvents);
|
||||
return getTriggers.then(function (triggers) {
|
||||
return _.map(triggers, function (trigger) {
|
||||
return _.map(triggers, _this3.formatTrigger.bind(_this3));
|
||||
});
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'getAcknowledges',
|
||||
value: function getAcknowledges(triggerList) {
|
||||
var _this4 = this;
|
||||
|
||||
// Request acknowledges for trigger
|
||||
var eventids = _.map(triggerList, function (trigger) {
|
||||
return trigger.lastEvent.eventid;
|
||||
});
|
||||
|
||||
return this.zabbix.getAcknowledges(eventids).then(function (events) {
|
||||
|
||||
// Map events to triggers
|
||||
_.each(triggerList, function (trigger) {
|
||||
var event = _.find(events, function (event) {
|
||||
return event.eventid === trigger.lastEvent.eventid;
|
||||
});
|
||||
|
||||
if (event) {
|
||||
trigger.acknowledges = _.map(event.acknowledges, function (ack) {
|
||||
var timestamp = moment.unix(ack.clock);
|
||||
if (_this4.panel.customLastChangeFormat) {
|
||||
ack.time = timestamp.format(_this4.panel.lastChangeFormat);
|
||||
} else {
|
||||
ack.time = timestamp.format(_this4.defaultTimeFormat);
|
||||
}
|
||||
ack.user = ack.alias + ' (' + ack.name + ' ' + ack.surname + ')';
|
||||
return ack;
|
||||
});
|
||||
|
||||
// Mark acknowledged triggers with different color
|
||||
if (_this4.panel.markAckEvents && trigger.acknowledges.length) {
|
||||
trigger.color = _this4.panel.ackEventColor;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return triggerList;
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'filterTriggers',
|
||||
value: function filterTriggers(triggerList) {
|
||||
var _this5 = this;
|
||||
|
||||
// Filter triggers by description
|
||||
var triggerFilter = this.panel.triggers.trigger.filter;
|
||||
if (triggerFilter) {
|
||||
triggerList = _filterTriggers(triggerList, triggerFilter);
|
||||
}
|
||||
|
||||
// Filter acknowledged triggers
|
||||
if (this.panel.showTriggers === 'unacknowledged') {
|
||||
triggerList = _.filter(triggerList, function (trigger) {
|
||||
return !trigger.acknowledges;
|
||||
});
|
||||
} else if (this.panel.showTriggers === 'acknowledged') {
|
||||
triggerList = _.filter(triggerList, 'acknowledges');
|
||||
} else {
|
||||
triggerList = triggerList;
|
||||
}
|
||||
|
||||
// Filter triggers by severity
|
||||
triggerList = _.filter(triggerList, function (trigger) {
|
||||
return _this5.panel.triggerSeverity[trigger.priority].show;
|
||||
});
|
||||
|
||||
// Sort triggers
|
||||
if (this.panel.sortTriggersBy.value === 'priority') {
|
||||
triggerList = _.sortBy(triggerList, 'priority').reverse();
|
||||
} else {
|
||||
triggerList = _.sortBy(triggerList, 'lastchangeUnix').reverse();
|
||||
}
|
||||
|
||||
return triggerList;
|
||||
}
|
||||
}, {
|
||||
key: 'formatTrigger',
|
||||
value: function formatTrigger(trigger) {
|
||||
var triggerObj = trigger;
|
||||
|
||||
// Format last change and age
|
||||
trigger.lastchangeUnix = Number(trigger.lastchange);
|
||||
var timestamp = moment.unix(trigger.lastchangeUnix);
|
||||
if (self.panel.customLastChangeFormat) {
|
||||
if (this.panel.customLastChangeFormat) {
|
||||
// User defined format
|
||||
triggerObj.lastchange = timestamp.format(self.panel.lastChangeFormat);
|
||||
triggerObj.lastchange = timestamp.format(this.panel.lastChangeFormat);
|
||||
} else {
|
||||
triggerObj.lastchange = timestamp.format(self.defaultTimeFormat);
|
||||
triggerObj.lastchange = timestamp.format(this.defaultTimeFormat);
|
||||
}
|
||||
triggerObj.age = timestamp.fromNow(true);
|
||||
|
||||
@@ -238,90 +310,14 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
// Set color
|
||||
if (trigger.value === '1') {
|
||||
// Problem state
|
||||
triggerObj.color = self.panel.triggerSeverity[trigger.priority].color;
|
||||
triggerObj.color = this.panel.triggerSeverity[trigger.priority].color;
|
||||
} else {
|
||||
// OK state
|
||||
triggerObj.color = self.panel.okEventColor;
|
||||
triggerObj.color = this.panel.okEventColor;
|
||||
}
|
||||
|
||||
triggerObj.severity = self.panel.triggerSeverity[trigger.priority].severity;
|
||||
triggerObj.severity = this.panel.triggerSeverity[trigger.priority].severity;
|
||||
return triggerObj;
|
||||
});
|
||||
}).then(function (triggerList) {
|
||||
|
||||
// Request acknowledges for trigger
|
||||
var eventids = _.map(triggerList, function (trigger) {
|
||||
return trigger.lastEvent.eventid;
|
||||
});
|
||||
|
||||
return zabbix.getAcknowledges(eventids).then(function (events) {
|
||||
|
||||
// Map events to triggers
|
||||
_.each(triggerList, function (trigger) {
|
||||
var event = _.find(events, function (event) {
|
||||
return event.eventid === trigger.lastEvent.eventid;
|
||||
});
|
||||
|
||||
if (event) {
|
||||
trigger.acknowledges = _.map(event.acknowledges, function (ack) {
|
||||
var timestamp = moment.unix(ack.clock);
|
||||
if (self.panel.customLastChangeFormat) {
|
||||
ack.time = timestamp.format(self.panel.lastChangeFormat);
|
||||
} else {
|
||||
ack.time = timestamp.format(self.defaultTimeFormat);
|
||||
}
|
||||
ack.user = ack.alias + ' (' + ack.name + ' ' + ack.surname + ')';
|
||||
return ack;
|
||||
});
|
||||
|
||||
// Mark acknowledged triggers with different color
|
||||
if (self.panel.markAckEvents && trigger.acknowledges.length) {
|
||||
trigger.color = self.panel.ackEventColor;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Filter triggers by description
|
||||
var triggerFilter = self.panel.triggers.trigger.filter;
|
||||
if (triggerFilter) {
|
||||
triggerList = filterTriggers(triggerList, triggerFilter);
|
||||
}
|
||||
|
||||
// Filter acknowledged triggers
|
||||
if (self.panel.showTriggers === 'unacknowledged') {
|
||||
triggerList = _.filter(triggerList, function (trigger) {
|
||||
return !trigger.acknowledges;
|
||||
});
|
||||
} else if (self.panel.showTriggers === 'acknowledged') {
|
||||
triggerList = _.filter(triggerList, 'acknowledges');
|
||||
} else {
|
||||
triggerList = triggerList;
|
||||
}
|
||||
|
||||
// Filter triggers by severity
|
||||
triggerList = _.filter(triggerList, function (trigger) {
|
||||
return self.panel.triggerSeverity[trigger.priority].show;
|
||||
});
|
||||
|
||||
// Sort triggers
|
||||
if (self.panel.sortTriggersBy.value === 'priority') {
|
||||
triggerList = _.sortBy(triggerList, 'priority').reverse();
|
||||
} else {
|
||||
triggerList = _.sortBy(triggerList, 'lastchangeUnix').reverse();
|
||||
}
|
||||
|
||||
// Limit triggers number
|
||||
self.triggerList = triggerList.slice(0, self.panel.limit);
|
||||
|
||||
// Notify panel that request is finished
|
||||
self.setTimeQueryEnd();
|
||||
self.loading = false;
|
||||
|
||||
_this2.panel.triggerList = _this2.triggerList;
|
||||
_this2.render();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'switchComment',
|
||||
@@ -331,7 +327,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
}, {
|
||||
key: 'acknowledgeTrigger',
|
||||
value: function acknowledgeTrigger(trigger, message) {
|
||||
var _this3 = this;
|
||||
var _this6 = this;
|
||||
|
||||
var eventid = trigger.lastEvent.eventid;
|
||||
var grafana_user = this.contextSrv.user.name;
|
||||
@@ -339,15 +335,10 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
return this.datasourceSrv.get(this.panel.datasource).then(function (datasource) {
|
||||
var zabbixAPI = datasource.zabbix.zabbixAPI;
|
||||
return zabbixAPI.acknowledgeEvent(eventid, ack_message).then(function () {
|
||||
_this3.refresh();
|
||||
_this6.refresh();
|
||||
});
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'render',
|
||||
value: function render() {
|
||||
return _get(TriggerPanelCtrl.prototype.__proto__ || Object.getPrototypeOf(TriggerPanelCtrl.prototype), 'render', this).call(this, this.triggerList);
|
||||
}
|
||||
}, {
|
||||
key: 'link',
|
||||
value: function link(scope, elem, attrs, ctrl) {
|
||||
@@ -436,7 +427,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
}]);
|
||||
|
||||
return TriggerPanelCtrl;
|
||||
}(MetricsPanelCtrl)));
|
||||
}(PanelCtrl)));
|
||||
|
||||
TriggerPanelCtrl.templateUrl = 'panel-triggers/module.html';
|
||||
_export('TriggerPanelCtrl', TriggerPanelCtrl);
|
||||
|
||||
2
dist/panel-triggers/module.js.map
vendored
2
dist/panel-triggers/module.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -35,7 +35,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="trigger in ctrl.currentPage">
|
||||
<tr ng-repeat="trigger in ctrl.triggerList">
|
||||
|
||||
<td ng-if="ctrl.panel.hostField">
|
||||
<div>
|
||||
|
||||
@@ -15,7 +15,7 @@ import _ from 'lodash';
|
||||
import $ from 'jquery';
|
||||
import moment from 'moment';
|
||||
import * as utils from '../datasource-zabbix/utils';
|
||||
import {MetricsPanelCtrl} from 'app/plugins/sdk';
|
||||
import {PanelCtrl} from 'app/plugins/sdk';
|
||||
import {triggerPanelEditor} from './editor';
|
||||
import './ack-tooltip.directive';
|
||||
import './css/panel_triggers.css!';
|
||||
@@ -61,7 +61,7 @@ var triggerStatusMap = {
|
||||
|
||||
var defaultTimeFormat = "DD MMM YYYY HH:mm:ss";
|
||||
|
||||
class TriggerPanelCtrl extends MetricsPanelCtrl {
|
||||
class TriggerPanelCtrl extends PanelCtrl {
|
||||
|
||||
/** @ngInject */
|
||||
constructor($scope, $injector, $element, datasourceSrv, templateSrv, contextSrv) {
|
||||
@@ -81,6 +81,11 @@ class TriggerPanelCtrl extends MetricsPanelCtrl {
|
||||
|
||||
this.triggerList = [];
|
||||
this.currentPage = [];
|
||||
|
||||
this.events.on('init-edit-mode', this.onInitEditMode.bind(this));
|
||||
this.events.on('render', this.onRender.bind(this));
|
||||
this.events.on('refresh', this.onRender.bind(this));
|
||||
|
||||
this.refreshData();
|
||||
}
|
||||
|
||||
@@ -88,14 +93,10 @@ class TriggerPanelCtrl extends MetricsPanelCtrl {
|
||||
* Override onInitMetricsPanelEditMode() method from MetricsPanelCtrl.
|
||||
* We don't need metric editor from Metrics Panel.
|
||||
*/
|
||||
onInitMetricsPanelEditMode() {
|
||||
onInitEditMode() {
|
||||
this.addEditorTab('Options', triggerPanelEditor, 2);
|
||||
}
|
||||
|
||||
refresh() {
|
||||
this.onMetricsPanelRefresh();
|
||||
}
|
||||
|
||||
onMetricsPanelRefresh() {
|
||||
// ignore fetching data if another panel is in fullscreen
|
||||
if (this.otherPanelInFullscreenMode()) { return; }
|
||||
@@ -103,20 +104,34 @@ class TriggerPanelCtrl extends MetricsPanelCtrl {
|
||||
this.refreshData();
|
||||
}
|
||||
|
||||
refreshData() {
|
||||
onRender() {
|
||||
// clear loading/error state
|
||||
delete this.error;
|
||||
this.loading = true;
|
||||
this.setTimeQueryStart();
|
||||
|
||||
var self = this;
|
||||
return this.refreshData()
|
||||
.then(triggerList => {
|
||||
// Limit triggers number
|
||||
this.triggerList = triggerList.slice(0, this.panel.limit);
|
||||
|
||||
// Load datasource
|
||||
// Notify panel that request is finished
|
||||
this.loading = false;
|
||||
});
|
||||
}
|
||||
|
||||
refreshData() {
|
||||
return this.getTriggers()
|
||||
.then(this.getAcknowledges.bind(this))
|
||||
.then(this.filterTriggers.bind(this));
|
||||
}
|
||||
|
||||
getTriggers() {
|
||||
return this.datasourceSrv.get(this.panel.datasource)
|
||||
.then(datasource => {
|
||||
var zabbix = datasource.zabbix;
|
||||
var showEvents = self.panel.showEvents.value;
|
||||
var triggerFilter = self.panel.triggers;
|
||||
this.zabbix = zabbix;
|
||||
var showEvents = this.panel.showEvents.value;
|
||||
var triggerFilter = this.panel.triggers;
|
||||
|
||||
// Replace template variables
|
||||
var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter);
|
||||
@@ -125,17 +140,93 @@ class TriggerPanelCtrl extends MetricsPanelCtrl {
|
||||
|
||||
var getTriggers = zabbix.getTriggers(groupFilter, hostFilter, appFilter, showEvents);
|
||||
return getTriggers.then(triggers => {
|
||||
return _.map(triggers, trigger => {
|
||||
return _.map(triggers, this.formatTrigger.bind(this));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
getAcknowledges(triggerList) {
|
||||
// Request acknowledges for trigger
|
||||
var eventids = _.map(triggerList, trigger => {
|
||||
return trigger.lastEvent.eventid;
|
||||
});
|
||||
|
||||
return this.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, ack => {
|
||||
let timestamp = moment.unix(ack.clock);
|
||||
if (this.panel.customLastChangeFormat) {
|
||||
ack.time = timestamp.format(this.panel.lastChangeFormat);
|
||||
} else {
|
||||
ack.time = timestamp.format(this.defaultTimeFormat);
|
||||
}
|
||||
ack.user = ack.alias + ' (' + ack.name + ' ' + ack.surname + ')';
|
||||
return ack;
|
||||
});
|
||||
|
||||
// Mark acknowledged triggers with different color
|
||||
if (this.panel.markAckEvents && trigger.acknowledges.length) {
|
||||
trigger.color = this.panel.ackEventColor;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return triggerList;
|
||||
});
|
||||
}
|
||||
|
||||
filterTriggers(triggerList) {
|
||||
// Filter triggers by description
|
||||
var triggerFilter = this.panel.triggers.trigger.filter;
|
||||
if (triggerFilter) {
|
||||
triggerList = filterTriggers(triggerList, triggerFilter);
|
||||
}
|
||||
|
||||
// Filter acknowledged triggers
|
||||
if (this.panel.showTriggers === 'unacknowledged') {
|
||||
triggerList = _.filter(triggerList, trigger => {
|
||||
return !trigger.acknowledges;
|
||||
});
|
||||
} else if (this.panel.showTriggers === 'acknowledged') {
|
||||
triggerList = _.filter(triggerList, 'acknowledges');
|
||||
} else {
|
||||
triggerList = triggerList;
|
||||
}
|
||||
|
||||
// Filter triggers by severity
|
||||
triggerList = _.filter(triggerList, trigger => {
|
||||
return this.panel.triggerSeverity[trigger.priority].show;
|
||||
});
|
||||
|
||||
// Sort triggers
|
||||
if (this.panel.sortTriggersBy.value === 'priority') {
|
||||
triggerList = _.sortBy(triggerList, 'priority').reverse();
|
||||
} else {
|
||||
triggerList = _.sortBy(triggerList, 'lastchangeUnix').reverse();
|
||||
}
|
||||
|
||||
return triggerList;
|
||||
}
|
||||
|
||||
formatTrigger(trigger) {
|
||||
let triggerObj = trigger;
|
||||
|
||||
// Format last change and age
|
||||
trigger.lastchangeUnix = Number(trigger.lastchange);
|
||||
let timestamp = moment.unix(trigger.lastchangeUnix);
|
||||
if (self.panel.customLastChangeFormat) {
|
||||
if (this.panel.customLastChangeFormat) {
|
||||
// User defined format
|
||||
triggerObj.lastchange = timestamp.format(self.panel.lastChangeFormat);
|
||||
triggerObj.lastchange = timestamp.format(this.panel.lastChangeFormat);
|
||||
} else {
|
||||
triggerObj.lastchange = timestamp.format(self.defaultTimeFormat);
|
||||
triggerObj.lastchange = timestamp.format(this.defaultTimeFormat);
|
||||
}
|
||||
triggerObj.age = timestamp.fromNow(true);
|
||||
|
||||
@@ -148,92 +239,14 @@ class TriggerPanelCtrl extends MetricsPanelCtrl {
|
||||
// Set color
|
||||
if (trigger.value === '1') {
|
||||
// Problem state
|
||||
triggerObj.color = self.panel.triggerSeverity[trigger.priority].color;
|
||||
triggerObj.color = this.panel.triggerSeverity[trigger.priority].color;
|
||||
} else {
|
||||
// OK state
|
||||
triggerObj.color = self.panel.okEventColor;
|
||||
triggerObj.color = this.panel.okEventColor;
|
||||
}
|
||||
|
||||
triggerObj.severity = self.panel.triggerSeverity[trigger.priority].severity;
|
||||
triggerObj.severity = this.panel.triggerSeverity[trigger.priority].severity;
|
||||
return triggerObj;
|
||||
});
|
||||
})
|
||||
.then(triggerList => {
|
||||
|
||||
// Request acknowledges for trigger
|
||||
var eventids = _.map(triggerList, trigger => {
|
||||
return trigger.lastEvent.eventid;
|
||||
});
|
||||
|
||||
return 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, ack => {
|
||||
let timestamp = moment.unix(ack.clock);
|
||||
if (self.panel.customLastChangeFormat) {
|
||||
ack.time = timestamp.format(self.panel.lastChangeFormat);
|
||||
} else {
|
||||
ack.time = timestamp.format(self.defaultTimeFormat);
|
||||
}
|
||||
ack.user = ack.alias + ' (' + ack.name + ' ' + ack.surname + ')';
|
||||
return ack;
|
||||
});
|
||||
|
||||
// Mark acknowledged triggers with different color
|
||||
if (self.panel.markAckEvents && trigger.acknowledges.length) {
|
||||
trigger.color = self.panel.ackEventColor;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Filter triggers by description
|
||||
var triggerFilter = self.panel.triggers.trigger.filter;
|
||||
if (triggerFilter) {
|
||||
triggerList = filterTriggers(triggerList, triggerFilter);
|
||||
}
|
||||
|
||||
// Filter acknowledged triggers
|
||||
if (self.panel.showTriggers === 'unacknowledged') {
|
||||
triggerList = _.filter(triggerList, trigger => {
|
||||
return !trigger.acknowledges;
|
||||
});
|
||||
} else if (self.panel.showTriggers === 'acknowledged') {
|
||||
triggerList = _.filter(triggerList, 'acknowledges');
|
||||
} else {
|
||||
triggerList = triggerList;
|
||||
}
|
||||
|
||||
// Filter triggers by severity
|
||||
triggerList = _.filter(triggerList, trigger => {
|
||||
return self.panel.triggerSeverity[trigger.priority].show;
|
||||
});
|
||||
|
||||
// Sort triggers
|
||||
if (self.panel.sortTriggersBy.value === 'priority') {
|
||||
triggerList = _.sortBy(triggerList, 'priority').reverse();
|
||||
} else {
|
||||
triggerList = _.sortBy(triggerList, 'lastchangeUnix').reverse();
|
||||
}
|
||||
|
||||
// Limit triggers number
|
||||
self.triggerList = triggerList.slice(0, self.panel.limit);
|
||||
|
||||
// Notify panel that request is finished
|
||||
self.setTimeQueryEnd();
|
||||
self.loading = false;
|
||||
|
||||
this.panel.triggerList = this.triggerList;
|
||||
this.render();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
switchComment(trigger) {
|
||||
@@ -254,10 +267,6 @@ class TriggerPanelCtrl extends MetricsPanelCtrl {
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
return super.render(this.triggerList);
|
||||
}
|
||||
|
||||
link(scope, elem, attrs, ctrl) {
|
||||
var data;
|
||||
var panel = ctrl.panel;
|
||||
|
||||
Reference in New Issue
Block a user