table mode with triggers stats, #141

This commit is contained in:
Alexander Zobnin
2017-10-22 19:01:46 +03:00
parent 6c64f21b1a
commit 1f5e261d4a
22 changed files with 224 additions and 98 deletions

View File

@@ -1,4 +1,4 @@
"use strict";
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
@@ -25,3 +25,5 @@ var SHOW_OK_EVENTS = exports.SHOW_OK_EVENTS = 1;
// Data point
var DATAPOINT_VALUE = exports.DATAPOINT_VALUE = 0;
var DATAPOINT_TS = exports.DATAPOINT_TS = 1;
var TRIGGER_SEVERITY = exports.TRIGGER_SEVERITY = [{ val: 0, text: 'Not classified' }, { val: 1, text: 'Information' }, { val: 2, text: 'Warning' }, { val: 3, text: 'Average' }, { val: 4, text: 'High' }, { val: 5, text: 'Disaster' }];

View File

@@ -457,7 +457,7 @@ var ZabbixAPIDatasource = function () {
if (hosts.length) {
var hostids = _lodash2.default.map(hosts, 'hostid');
var appids = _lodash2.default.map(apps, 'applicationid');
return _this7.zabbix.getHostAlerts(hostids, appids, target.minSeverity, target.options.countTriggers, timeFrom, timeTo).then(function (triggers) {
return _this7.zabbix.getHostAlerts(hostids, appids, target.minSeverity, target.countTriggers, timeFrom, timeTo).then(function (triggers) {
return _responseHandler2.default.handleTriggersResponse(triggers, timeRange);
});
} else {

View File

@@ -72,7 +72,7 @@ var ZabbixQueryController = exports.ZabbixQueryController = function (_QueryCtrl
_this.slaPropertyList = [{ name: "Status", property: "status" }, { name: "SLA", property: "sla" }, { name: "OK time", property: "okTime" }, { name: "Problem time", property: "problemTime" }, { name: "Down time", property: "downtimeTime" }];
_this.triggerSeverity = [{ val: 0, text: 'Not classified' }, { val: 1, text: 'Information' }, { val: 2, text: 'Warning' }, { val: 3, text: 'Average' }, { val: 4, text: 'High' }, { val: 5, text: 'Disaster' }];
_this.triggerSeverity = c.TRIGGER_SEVERITY;
// Map functions for bs-typeahead
_this.getGroupNames = _lodash2.default.bind(_this.getMetricNames, _this, 'groupList');
@@ -114,9 +114,9 @@ var ZabbixQueryController = exports.ZabbixQueryController = function (_QueryCtrl
'item': { 'filter': "" },
'functions': [],
'minSeverity': 3,
'countTriggers': true,
'options': {
'showDisabledItems': false,
'countTriggers': true
'showDisabledItems': false
}
};
_lodash2.default.defaults(target, targetDefaults);
@@ -345,8 +345,7 @@ var ZabbixQueryController = exports.ZabbixQueryController = function (_QueryCtrl
key: 'renderQueryOptionsText',
value: function renderQueryOptionsText() {
var optionsMap = {
showDisabledItems: "Show disabled items",
countTriggers: "Count Triggers"
showDisabledItems: "Show disabled items"
};
var options = [];
_lodash2.default.forOwn(this.target.options, function (value, key) {

View File

@@ -8,8 +8,20 @@ var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _table_model = require('app/core/table_model');
var _table_model2 = _interopRequireDefault(_table_model);
var _constants = require('./constants');
var c = _interopRequireWildcard(_constants);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
/**
* Convert Zabbix API history.get response to Grafana format
*
@@ -113,13 +125,45 @@ function handleTriggersResponse(triggers, timeRange) {
if (_lodash2.default.isNumber(triggers)) {
return {
target: "triggers count",
datapoints: [[triggers, timeRange[1]]]
datapoints: [[triggers, timeRange[1] * 1000]]
};
} else {
return triggers;
var stats = getTriggerStats(triggers);
var table = new _table_model2.default();
table.addColumn({ text: 'Host group' });
_lodash2.default.each(_lodash2.default.orderBy(c.TRIGGER_SEVERITY, ['val'], ['desc']), function (severity) {
table.addColumn({ text: severity.text });
});
_lodash2.default.each(stats, function (severity_stats, group) {
var row = _lodash2.default.map(_lodash2.default.orderBy(_lodash2.default.toPairs(severity_stats), function (s) {
return s[0];
}, ['desc']), function (s) {
return s[1];
});
row = _lodash2.default.concat.apply(_lodash2.default, [[group]].concat(_toConsumableArray(row)));
table.rows.push(row);
});
return table;
}
}
function getTriggerStats(triggers) {
var groups = _lodash2.default.uniq(_lodash2.default.flattenDeep(_lodash2.default.map(triggers, function (trigger) {
return _lodash2.default.map(trigger.groups, 'name');
})));
// let severity = _.map(c.TRIGGER_SEVERITY, 'text');
var stats = {};
_lodash2.default.each(groups, function (group) {
stats[group] = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 }; // severity:count
});
_lodash2.default.each(triggers, function (trigger) {
_lodash2.default.each(trigger.groups, function (group) {
stats[group.name][trigger.priority]++;
});
});
return stats;
}
function convertHistoryPoint(point) {
// Value must be a number for properly work
return [Number(point.value), point.clock * 1000 + Math.round(point.ns / 1000000)];

View File

@@ -498,7 +498,9 @@ function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {
expandComment: true,
monitored: true,
skipDependent: true,
selectLastEvent: 'extend'
selectLastEvent: 'extend',
selectGroups: 'extend',
selectHosts: ['host', 'name']
};
if (count) {