-
diff --git a/dist/datasource-zabbix/query.controller.js b/dist/datasource-zabbix/query.controller.js
index 17e65a4..87ad8f9 100644
--- a/dist/datasource-zabbix/query.controller.js
+++ b/dist/datasource-zabbix/query.controller.js
@@ -1,9 +1,9 @@
'use strict';
-System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils', './metricFunctions', './migrations', './add-metric-function.directive', './metric-function-editor.directive', './css/query-editor.css!'], function (_export, _context) {
+System.register(['app/plugins/sdk', 'lodash', './constants', './utils', './metricFunctions', './migrations', './add-metric-function.directive', './metric-function-editor.directive', './css/query-editor.css!'], function (_export, _context) {
"use strict";
- var QueryCtrl, angular, _, c, utils, metricFunctions, migrations, _createClass, ZabbixQueryController;
+ var QueryCtrl, _, c, utils, metricFunctions, migrations, _createClass, ZabbixQueryController;
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
@@ -38,8 +38,6 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
return {
setters: [function (_appPluginsSdk) {
QueryCtrl = _appPluginsSdk.QueryCtrl;
- }, function (_angular) {
- angular = _angular.default;
}, function (_lodash) {
_ = _lodash.default;
}, function (_constants) {
@@ -85,17 +83,24 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
_this.replaceTemplateVars = _this.datasource.replaceTemplateVars;
_this.templateSrv = templateSrv;
- _this.editorModes = {
- 0: { value: 'num', text: 'Metrics', mode: c.MODE_METRICS },
- 1: { value: 'itservice', text: 'IT Services', mode: c.MODE_ITSERVICE },
- 2: { value: 'text', text: 'Text', mode: c.MODE_TEXT }
+ _this.editorModes = [{ value: 'num', text: 'Metrics', mode: c.MODE_METRICS }, { value: 'text', text: 'Text', mode: c.MODE_TEXT }, { value: 'itservice', text: 'IT Services', mode: c.MODE_ITSERVICE }, { value: 'itemid', text: 'Item ID', mode: c.MODE_ITEMID }];
+
+ _this.$scope.editorMode = {
+ METRICS: c.MODE_METRICS,
+ TEXT: c.MODE_TEXT,
+ ITSERVICE: c.MODE_ITSERVICE,
+ ITEMID: c.MODE_ITEMID
};
+ _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" }];
+
// Map functions for bs-typeahead
_this.getGroupNames = _.bind(_this.getMetricNames, _this, 'groupList');
_this.getHostNames = _.bind(_this.getMetricNames, _this, 'hostList', true);
_this.getApplicationNames = _.bind(_this.getMetricNames, _this, 'appList');
_this.getItemNames = _.bind(_this.getMetricNames, _this, 'itemList');
+ _this.getITServices = _.bind(_this.getMetricNames, _this, 'itServiceList');
+ _this.getVariables = _.bind(_this.getTemplateVariables, _this);
// Update metric suggestion when template variable was changed
$rootScope.$on('template-variable-value-updated', function () {
@@ -122,14 +127,14 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
// Load default values
var targetDefaults = {
- mode: c.MODE_METRICS,
- group: { filter: "" },
- host: { filter: "" },
- application: { filter: "" },
- item: { filter: "" },
- functions: [],
- options: {
- showDisabledItems: false
+ 'mode': c.MODE_METRICS,
+ 'group': { 'filter': "" },
+ 'host': { 'filter': "" },
+ 'application': { 'filter': "" },
+ 'item': { 'filter': "" },
+ 'functions': [],
+ 'options': {
+ 'showDisabledItems': false
}
};
_.defaults(target, targetDefaults);
@@ -141,13 +146,10 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
if (target.mode === c.MODE_METRICS || target.mode === c.MODE_TEXT) {
- this.downsampleFunctionList = [{ name: "avg", value: "avg" }, { name: "min", value: "min" }, { name: "max", value: "max" }, { name: "sum", value: "sum" }, { name: "count", value: "count" }];
-
this.initFilters();
} else if (target.mode === c.MODE_ITSERVICE) {
- 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.itserviceList = [{ name: "test" }];
- this.updateITServiceList();
+ _.defaults(target, { slaProperty: { name: "SLA", property: "sla" } });
+ this.suggestITServices();
}
};
@@ -158,7 +160,8 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
_createClass(ZabbixQueryController, [{
key: 'initFilters',
value: function initFilters() {
- var itemtype = this.editorModes[this.target.mode].value;
+ var itemtype = _.find(this.editorModes, { 'mode': this.target.mode });
+ itemtype = itemtype ? itemtype.value : null;
return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps(), this.suggestItems(itemtype)]);
}
}, {
@@ -177,6 +180,13 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
return metrics;
}
+ }, {
+ key: 'getTemplateVariables',
+ value: function getTemplateVariables() {
+ return _.map(this.templateSrv.variables, function (variable) {
+ return '$' + variable.name;
+ });
+ }
}, {
key: 'suggestGroups',
value: function suggestGroups() {
@@ -230,6 +240,16 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
return items;
});
}
+ }, {
+ key: 'suggestITServices',
+ value: function suggestITServices() {
+ var _this6 = this;
+
+ return this.zabbix.getITService().then(function (itservices) {
+ _this6.metric.itServiceList = itservices;
+ return itservices;
+ });
+ }
}, {
key: 'isRegex',
value: function isRegex(str) {
@@ -259,11 +279,11 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
}, {
key: 'isContainsVariables',
value: function isContainsVariables() {
- var _this6 = this;
+ var _this7 = this;
return _.some(['group', 'host', 'application'], function (field) {
- if (_this6.target[field] && _this6.target[field].filter) {
- return utils.isTemplateVariable(_this6.target[field].filter, _this6.templateSrv.variables);
+ if (_this7.target[field] && _this7.target[field].filter) {
+ return utils.isTemplateVariable(_this7.target[field].filter, _this7.templateSrv.variables);
} else {
return false;
}
@@ -356,24 +376,7 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './constants', './utils
value: function switchEditorMode(mode) {
this.target.mode = mode;
this.init();
- }
- }, {
- key: 'updateITServiceList',
- value: function updateITServiceList() {
- var _this7 = this;
-
- this.zabbix.getITService().then(function (iteservices) {
- _this7.itserviceList = [];
- _this7.itserviceList = _this7.itserviceList.concat(iteservices);
- });
- }
- }, {
- key: 'selectITService',
- value: function selectITService() {
- if (!_.isEqual(this.oldTarget, this.target) && _.isEmpty(this.target.errors)) {
- this.oldTarget = angular.copy(this.target);
- this.panelCtrl.refresh();
- }
+ this.targetChanged();
}
}]);
diff --git a/dist/datasource-zabbix/query.controller.js.map b/dist/datasource-zabbix/query.controller.js.map
index a281820..0f74835 100644
--- a/dist/datasource-zabbix/query.controller.js.map
+++ b/dist/datasource-zabbix/query.controller.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/datasource-zabbix/query.controller.js"],"names":["QueryCtrl","angular","_","c","utils","metricFunctions","migrations","ZabbixQueryController","$scope","$injector","$rootScope","$sce","templateSrv","zabbix","datasource","replaceTemplateVars","editorModes","value","text","mode","MODE_METRICS","MODE_ITSERVICE","MODE_TEXT","getGroupNames","bind","getMetricNames","getHostNames","getApplicationNames","getItemNames","$on","onVariableChange","onTargetBlur","init","target","migrate","scopeDefaults","metric","oldTarget","cloneDeep","queryOptionsText","renderQueryOptionsText","defaults","targetDefaults","group","filter","host","application","item","functions","options","showDisabledItems","map","func","createFuncInstance","def","params","downsampleFunctionList","name","initFilters","slaPropertyList","property","itserviceList","updateITServiceList","itemtype","Promise","all","suggestGroups","suggestHosts","suggestApps","suggestItems","metricList","addAllValue","metrics","uniq","forEach","variables","unshift","variable","getAllGroups","then","groupList","groups","groupFilter","getAllHosts","hostList","hosts","hostFilter","getAllApps","appList","apps","appFilter","getAllItems","itemList","items","str","isRegex","isTemplateVariable","newTarget","isEqual","targetChanged","isContainsVariables","some","field","parseTarget","panelCtrl","refresh","funcDef","newFunc","added","push","moveAliasFuncLast","length","without","aliasFunc","find","showQueryOptions","optionsMap","forOwn","key","join","getITService","iteservices","concat","isEmpty","errors","copy","templateUrl"],"mappings":"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","file":"query.controller.js","sourcesContent":["import {QueryCtrl} from 'app/plugins/sdk';\nimport angular from 'angular';\nimport _ from 'lodash';\nimport * as c from './constants';\nimport * as utils from './utils';\nimport * as metricFunctions from './metricFunctions';\nimport * as migrations from './migrations';\n\nimport './add-metric-function.directive';\nimport './metric-function-editor.directive';\n\nimport './css/query-editor.css!';\n\nexport class ZabbixQueryController extends QueryCtrl {\n\n // ZabbixQueryCtrl constructor\n constructor($scope, $injector, $rootScope, $sce, templateSrv) {\n super($scope, $injector);\n this.zabbix = this.datasource.zabbix;\n\n // Use custom format for template variables\n this.replaceTemplateVars = this.datasource.replaceTemplateVars;\n this.templateSrv = templateSrv;\n\n this.editorModes = {\n 0: {value: 'num', text: 'Metrics', mode: c.MODE_METRICS},\n 1: {value: 'itservice', text: 'IT Services', mode: c.MODE_ITSERVICE},\n 2: {value: 'text', text: 'Text', mode: c.MODE_TEXT}\n };\n\n // Map functions for bs-typeahead\n this.getGroupNames = _.bind(this.getMetricNames, this, 'groupList');\n this.getHostNames = _.bind(this.getMetricNames, this, 'hostList', true);\n this.getApplicationNames = _.bind(this.getMetricNames, this, 'appList');\n this.getItemNames = _.bind(this.getMetricNames, this, 'itemList');\n\n // Update metric suggestion when template variable was changed\n $rootScope.$on('template-variable-value-updated', () => this.onVariableChange());\n\n // Update metrics when item selected from dropdown\n $scope.$on('typeahead-updated', () => {\n this.onTargetBlur();\n });\n\n this.init = function() {\n var target = this.target;\n\n // Migrate old targets\n target = migrations.migrate(target);\n\n var scopeDefaults = {\n metric: {},\n oldTarget: _.cloneDeep(this.target),\n queryOptionsText: this.renderQueryOptionsText()\n };\n _.defaults(this, scopeDefaults);\n\n // Load default values\n var targetDefaults = {\n mode: c.MODE_METRICS,\n group: { filter: \"\" },\n host: { filter: \"\" },\n application: { filter: \"\" },\n item: { filter: \"\" },\n functions: [],\n options: {\n showDisabledItems: false\n }\n };\n _.defaults(target, targetDefaults);\n\n // Create function instances from saved JSON\n target.functions = _.map(target.functions, function(func) {\n return metricFunctions.createFuncInstance(func.def, func.params);\n });\n\n if (target.mode === c.MODE_METRICS ||\n target.mode === c.MODE_TEXT) {\n\n this.downsampleFunctionList = [\n {name: \"avg\", value: \"avg\"},\n {name: \"min\", value: \"min\"},\n {name: \"max\", value: \"max\"},\n {name: \"sum\", value: \"sum\"},\n {name: \"count\", value: \"count\"}\n ];\n\n this.initFilters();\n }\n else if (target.mode === c.MODE_ITSERVICE) {\n this.slaPropertyList = [\n {name: \"Status\", property: \"status\"},\n {name: \"SLA\", property: \"sla\"},\n {name: \"OK time\", property: \"okTime\"},\n {name: \"Problem time\", property: \"problemTime\"},\n {name: \"Down time\", property: \"downtimeTime\"}\n ];\n this.itserviceList = [{name: \"test\"}];\n this.updateITServiceList();\n }\n };\n\n this.init();\n }\n\n initFilters() {\n let itemtype = this.editorModes[this.target.mode].value;\n return Promise.all([\n this.suggestGroups(),\n this.suggestHosts(),\n this.suggestApps(),\n this.suggestItems(itemtype)\n ]);\n }\n\n // Get list of metric names for bs-typeahead directive\n getMetricNames(metricList, addAllValue) {\n let metrics = _.uniq(_.map(this.metric[metricList], 'name'));\n\n // Add template variables\n _.forEach(this.templateSrv.variables, variable => {\n metrics.unshift('$' + variable.name);\n });\n\n if (addAllValue) {\n metrics.unshift('/.*/');\n }\n\n return metrics;\n }\n\n suggestGroups() {\n return this.zabbix.getAllGroups()\n .then(groups => {\n this.metric.groupList = groups;\n return groups;\n });\n }\n\n suggestHosts() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n return this.zabbix.getAllHosts(groupFilter)\n .then(hosts => {\n this.metric.hostList = hosts;\n return hosts;\n });\n }\n\n suggestApps() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n return this.zabbix.getAllApps(groupFilter, hostFilter)\n .then(apps => {\n this.metric.appList = apps;\n return apps;\n });\n }\n\n suggestItems(itemtype = 'num') {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n let appFilter = this.replaceTemplateVars(this.target.application.filter);\n let options = {\n itemtype: itemtype,\n showDisabledItems: this.target.options.showDisabledItems\n };\n\n return this.zabbix\n .getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => {\n this.metric.itemList = items;\n return items;\n });\n }\n\n isRegex(str) {\n return utils.isRegex(str);\n }\n\n isVariable(str) {\n return utils.isTemplateVariable(str, this.templateSrv.variables);\n }\n\n onTargetBlur() {\n var newTarget = _.cloneDeep(this.target);\n if (!_.isEqual(this.oldTarget, this.target)) {\n this.oldTarget = newTarget;\n this.targetChanged();\n }\n }\n\n onVariableChange() {\n if (this.isContainsVariables()) {\n this.targetChanged();\n }\n }\n\n /**\n * Check query for template variables\n */\n isContainsVariables() {\n return _.some(['group', 'host', 'application'], field => {\n if (this.target[field] && this.target[field].filter) {\n return utils.isTemplateVariable(this.target[field].filter, this.templateSrv.variables);\n } else {\n return false;\n }\n });\n }\n\n parseTarget() {\n // Parse target\n }\n\n // Validate target and set validation info\n validateTarget() {\n // validate\n }\n\n targetChanged() {\n this.initFilters();\n this.parseTarget();\n this.panelCtrl.refresh();\n }\n\n addFunction(funcDef) {\n var newFunc = metricFunctions.createFuncInstance(funcDef);\n newFunc.added = true;\n this.target.functions.push(newFunc);\n\n this.moveAliasFuncLast();\n\n if (newFunc.params.length && newFunc.added ||\n newFunc.def.params.length === 0) {\n this.targetChanged();\n }\n }\n\n removeFunction(func) {\n this.target.functions = _.without(this.target.functions, func);\n this.targetChanged();\n }\n\n moveAliasFuncLast() {\n var aliasFunc = _.find(this.target.functions, function(func) {\n return func.def.name === 'alias' ||\n func.def.name === 'aliasByNode' ||\n func.def.name === 'aliasByMetric';\n });\n\n if (aliasFunc) {\n this.target.functions = _.without(this.target.functions, aliasFunc);\n this.target.functions.push(aliasFunc);\n }\n }\n\n toggleQueryOptions() {\n this.showQueryOptions = !this.showQueryOptions;\n }\n\n onQueryOptionChange() {\n this.queryOptionsText = this.renderQueryOptionsText();\n this.onTargetBlur();\n }\n\n renderQueryOptionsText() {\n var optionsMap = {\n showDisabledItems: \"Show disabled items\"\n };\n var options = [];\n _.forOwn(this.target.options, (value, key) => {\n if (value) {\n if (value === true) {\n // Show only option name (if enabled) for boolean options\n options.push(optionsMap[key]);\n } else {\n // Show \"option = value\" for another options\n options.push(optionsMap[key] + \" = \" + value);\n }\n }\n });\n return \"Options: \" + options.join(', ');\n }\n\n /**\n * Switch query editor to specified mode.\n * Modes:\n * 0 - items\n * 1 - IT services\n * 2 - Text metrics\n */\n switchEditorMode(mode) {\n this.target.mode = mode;\n this.init();\n }\n\n /////////////////\n // IT Services //\n /////////////////\n\n /**\n * Update list of IT services\n */\n updateITServiceList() {\n this.zabbix.getITService().then((iteservices) => {\n this.itserviceList = [];\n this.itserviceList = this.itserviceList.concat(iteservices);\n });\n }\n\n /**\n * Call when IT service is selected.\n */\n selectITService() {\n if (!_.isEqual(this.oldTarget, this.target) && _.isEmpty(this.target.errors)) {\n this.oldTarget = angular.copy(this.target);\n this.panelCtrl.refresh();\n }\n }\n}\n\n// Set templateUrl as static property\nZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html';\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../src/datasource-zabbix/query.controller.js"],"names":["QueryCtrl","_","c","utils","metricFunctions","migrations","ZabbixQueryController","$scope","$injector","$rootScope","$sce","templateSrv","zabbix","datasource","replaceTemplateVars","editorModes","value","text","mode","MODE_METRICS","MODE_TEXT","MODE_ITSERVICE","MODE_ITEMID","editorMode","METRICS","TEXT","ITSERVICE","ITEMID","slaPropertyList","name","property","getGroupNames","bind","getMetricNames","getHostNames","getApplicationNames","getItemNames","getITServices","getVariables","getTemplateVariables","$on","onVariableChange","onTargetBlur","init","target","migrate","scopeDefaults","metric","oldTarget","cloneDeep","queryOptionsText","renderQueryOptionsText","defaults","targetDefaults","functions","map","func","createFuncInstance","def","params","initFilters","slaProperty","suggestITServices","itemtype","find","Promise","all","suggestGroups","suggestHosts","suggestApps","suggestItems","metricList","addAllValue","metrics","uniq","forEach","variables","unshift","variable","getAllGroups","then","groupList","groups","groupFilter","group","filter","getAllHosts","hostList","hosts","hostFilter","host","getAllApps","appList","apps","appFilter","application","options","showDisabledItems","getAllItems","itemList","items","getITService","itServiceList","itservices","str","isRegex","isTemplateVariable","newTarget","isEqual","targetChanged","isContainsVariables","some","field","parseTarget","panelCtrl","refresh","funcDef","newFunc","added","push","moveAliasFuncLast","length","without","aliasFunc","showQueryOptions","optionsMap","forOwn","key","join","templateUrl"],"mappings":"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","file":"query.controller.js","sourcesContent":["import {QueryCtrl} from 'app/plugins/sdk';\nimport _ from 'lodash';\nimport * as c from './constants';\nimport * as utils from './utils';\nimport * as metricFunctions from './metricFunctions';\nimport * as migrations from './migrations';\n\nimport './add-metric-function.directive';\nimport './metric-function-editor.directive';\n\nimport './css/query-editor.css!';\n\nexport class ZabbixQueryController extends QueryCtrl {\n\n // ZabbixQueryCtrl constructor\n constructor($scope, $injector, $rootScope, $sce, templateSrv) {\n super($scope, $injector);\n this.zabbix = this.datasource.zabbix;\n\n // Use custom format for template variables\n this.replaceTemplateVars = this.datasource.replaceTemplateVars;\n this.templateSrv = templateSrv;\n\n this.editorModes = [\n {value: 'num', text: 'Metrics', mode: c.MODE_METRICS},\n {value: 'text', text: 'Text', mode: c.MODE_TEXT},\n {value: 'itservice', text: 'IT Services', mode: c.MODE_ITSERVICE},\n {value: 'itemid', text: 'Item ID', mode: c.MODE_ITEMID}\n ];\n\n this.$scope.editorMode = {\n METRICS: c.MODE_METRICS,\n TEXT: c.MODE_TEXT,\n ITSERVICE: c.MODE_ITSERVICE,\n ITEMID: c.MODE_ITEMID\n };\n\n this.slaPropertyList = [\n {name: \"Status\", property: \"status\"},\n {name: \"SLA\", property: \"sla\"},\n {name: \"OK time\", property: \"okTime\"},\n {name: \"Problem time\", property: \"problemTime\"},\n {name: \"Down time\", property: \"downtimeTime\"}\n ];\n\n // Map functions for bs-typeahead\n this.getGroupNames = _.bind(this.getMetricNames, this, 'groupList');\n this.getHostNames = _.bind(this.getMetricNames, this, 'hostList', true);\n this.getApplicationNames = _.bind(this.getMetricNames, this, 'appList');\n this.getItemNames = _.bind(this.getMetricNames, this, 'itemList');\n this.getITServices = _.bind(this.getMetricNames, this, 'itServiceList');\n this.getVariables = _.bind(this.getTemplateVariables, this);\n\n // Update metric suggestion when template variable was changed\n $rootScope.$on('template-variable-value-updated', () => this.onVariableChange());\n\n // Update metrics when item selected from dropdown\n $scope.$on('typeahead-updated', () => {\n this.onTargetBlur();\n });\n\n this.init = function() {\n var target = this.target;\n\n // Migrate old targets\n target = migrations.migrate(target);\n\n var scopeDefaults = {\n metric: {},\n oldTarget: _.cloneDeep(this.target),\n queryOptionsText: this.renderQueryOptionsText()\n };\n _.defaults(this, scopeDefaults);\n\n // Load default values\n var targetDefaults = {\n 'mode': c.MODE_METRICS,\n 'group': { 'filter': \"\" },\n 'host': { 'filter': \"\" },\n 'application': { 'filter': \"\" },\n 'item': { 'filter': \"\" },\n 'functions': [],\n 'options': {\n 'showDisabledItems': false\n }\n };\n _.defaults(target, targetDefaults);\n\n // Create function instances from saved JSON\n target.functions = _.map(target.functions, function(func) {\n return metricFunctions.createFuncInstance(func.def, func.params);\n });\n\n if (target.mode === c.MODE_METRICS ||\n target.mode === c.MODE_TEXT) {\n\n this.initFilters();\n }\n else if (target.mode === c.MODE_ITSERVICE) {\n _.defaults(target, {slaProperty: {name: \"SLA\", property: \"sla\"}});\n this.suggestITServices();\n }\n };\n\n this.init();\n }\n\n initFilters() {\n let itemtype = _.find(this.editorModes, {'mode': this.target.mode});\n itemtype = itemtype ? itemtype.value : null;\n return Promise.all([\n this.suggestGroups(),\n this.suggestHosts(),\n this.suggestApps(),\n this.suggestItems(itemtype)\n ]);\n }\n\n // Get list of metric names for bs-typeahead directive\n getMetricNames(metricList, addAllValue) {\n let metrics = _.uniq(_.map(this.metric[metricList], 'name'));\n\n // Add template variables\n _.forEach(this.templateSrv.variables, variable => {\n metrics.unshift('$' + variable.name);\n });\n\n if (addAllValue) {\n metrics.unshift('/.*/');\n }\n\n return metrics;\n }\n\n getTemplateVariables() {\n return _.map(this.templateSrv.variables, variable => {\n return '$' + variable.name;\n });\n }\n\n suggestGroups() {\n return this.zabbix.getAllGroups()\n .then(groups => {\n this.metric.groupList = groups;\n return groups;\n });\n }\n\n suggestHosts() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n return this.zabbix.getAllHosts(groupFilter)\n .then(hosts => {\n this.metric.hostList = hosts;\n return hosts;\n });\n }\n\n suggestApps() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n return this.zabbix.getAllApps(groupFilter, hostFilter)\n .then(apps => {\n this.metric.appList = apps;\n return apps;\n });\n }\n\n suggestItems(itemtype = 'num') {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n let appFilter = this.replaceTemplateVars(this.target.application.filter);\n let options = {\n itemtype: itemtype,\n showDisabledItems: this.target.options.showDisabledItems\n };\n\n return this.zabbix\n .getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => {\n this.metric.itemList = items;\n return items;\n });\n }\n\n suggestITServices() {\n return this.zabbix.getITService()\n .then(itservices => {\n this.metric.itServiceList = itservices;\n return itservices;\n });\n }\n\n isRegex(str) {\n return utils.isRegex(str);\n }\n\n isVariable(str) {\n return utils.isTemplateVariable(str, this.templateSrv.variables);\n }\n\n onTargetBlur() {\n var newTarget = _.cloneDeep(this.target);\n if (!_.isEqual(this.oldTarget, this.target)) {\n this.oldTarget = newTarget;\n this.targetChanged();\n }\n }\n\n onVariableChange() {\n if (this.isContainsVariables()) {\n this.targetChanged();\n }\n }\n\n /**\n * Check query for template variables\n */\n isContainsVariables() {\n return _.some(['group', 'host', 'application'], field => {\n if (this.target[field] && this.target[field].filter) {\n return utils.isTemplateVariable(this.target[field].filter, this.templateSrv.variables);\n } else {\n return false;\n }\n });\n }\n\n parseTarget() {\n // Parse target\n }\n\n // Validate target and set validation info\n validateTarget() {\n // validate\n }\n\n targetChanged() {\n this.initFilters();\n this.parseTarget();\n this.panelCtrl.refresh();\n }\n\n addFunction(funcDef) {\n var newFunc = metricFunctions.createFuncInstance(funcDef);\n newFunc.added = true;\n this.target.functions.push(newFunc);\n\n this.moveAliasFuncLast();\n\n if (newFunc.params.length && newFunc.added ||\n newFunc.def.params.length === 0) {\n this.targetChanged();\n }\n }\n\n removeFunction(func) {\n this.target.functions = _.without(this.target.functions, func);\n this.targetChanged();\n }\n\n moveAliasFuncLast() {\n var aliasFunc = _.find(this.target.functions, function(func) {\n return func.def.name === 'alias' ||\n func.def.name === 'aliasByNode' ||\n func.def.name === 'aliasByMetric';\n });\n\n if (aliasFunc) {\n this.target.functions = _.without(this.target.functions, aliasFunc);\n this.target.functions.push(aliasFunc);\n }\n }\n\n toggleQueryOptions() {\n this.showQueryOptions = !this.showQueryOptions;\n }\n\n onQueryOptionChange() {\n this.queryOptionsText = this.renderQueryOptionsText();\n this.onTargetBlur();\n }\n\n renderQueryOptionsText() {\n var optionsMap = {\n showDisabledItems: \"Show disabled items\"\n };\n var options = [];\n _.forOwn(this.target.options, (value, key) => {\n if (value) {\n if (value === true) {\n // Show only option name (if enabled) for boolean options\n options.push(optionsMap[key]);\n } else {\n // Show \"option = value\" for another options\n options.push(optionsMap[key] + \" = \" + value);\n }\n }\n });\n return \"Options: \" + options.join(', ');\n }\n\n /**\n * Switch query editor to specified mode.\n * Modes:\n * 0 - items\n * 1 - IT services\n * 2 - Text metrics\n */\n switchEditorMode(mode) {\n this.target.mode = mode;\n this.init();\n this.targetChanged();\n }\n}\n\n// Set templateUrl as static property\nZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html';\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/datasource_specs.js b/dist/datasource-zabbix/specs/datasource_specs.js
index 295f4fd..dec10a2 100644
--- a/dist/datasource-zabbix/specs/datasource_specs.js
+++ b/dist/datasource-zabbix/specs/datasource_specs.js
@@ -15,7 +15,10 @@ describe('ZabbixDatasource', () => {
password: 'zabbix',
trends: true,
trendsFrom: '14d',
- trendsRange: '7d'
+ trendsRange: '7d',
+ dbConnection: {
+ enabled: false
+ }
}
};
ctx.templateSrv = {};
diff --git a/dist/datasource-zabbix/specs/utils_specs.js b/dist/datasource-zabbix/specs/utils_specs.js
index 41ab76c..c540db2 100644
--- a/dist/datasource-zabbix/specs/utils_specs.js
+++ b/dist/datasource-zabbix/specs/utils_specs.js
@@ -88,4 +88,54 @@ describe('Utils', () => {
done();
});
});
+
+ describe('splitTemplateQuery()', () => {
+
+ // Backward compatibility
+ it('should properly split query in old format', (done) => {
+ let test_cases = [
+ {
+ query: `/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/`,
+ expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
+ },
+ {
+ query: `a.b.c.d`,
+ expected: ['a', 'b', 'c', 'd']
+ }
+ ];
+
+ _.each(test_cases, test_case => {
+ let splitQuery = utils.splitTemplateQuery(test_case.query);
+ expect(splitQuery).to.eql(test_case.expected);
+ });
+ done();
+ });
+
+ it('should properly split query', (done) => {
+ let test_cases = [
+ {
+ query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/}`,
+ expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
+ },
+ {
+ query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/}`,
+ expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
+ },
+ {
+ query: `{a}{b}{c}{d}`,
+ expected: ['a', 'b', 'c', 'd']
+ },
+ {
+ query: `{a}{b.c.d}`,
+ expected: ['a', 'b.c.d']
+ }
+ ];
+
+ _.each(test_cases, test_case => {
+ let splitQuery = utils.splitTemplateQuery(test_case.query);
+ expect(splitQuery).to.eql(test_case.expected);
+ });
+ done();
+ });
+ });
});
diff --git a/dist/datasource-zabbix/utils.js b/dist/datasource-zabbix/utils.js
index d634a22..9f370a1 100644
--- a/dist/datasource-zabbix/utils.js
+++ b/dist/datasource-zabbix/utils.js
@@ -28,6 +28,16 @@ System.register(['lodash', 'moment'], function (_export, _context) {
_export('expandItemName', expandItemName);
+ function expandItems(items) {
+ _.forEach(items, function (item) {
+ item.item = item.name;
+ item.name = expandItemName(item.item, item.key_);
+ return item;
+ });
+ return items;
+ }
+ _export('expandItems', expandItems);
+
function splitKeyParams(paramStr) {
var params = [];
var quoted = false;
@@ -56,7 +66,9 @@ System.register(['lodash', 'moment'], function (_export, _context) {
params.push(param);
return params;
- }function containsMacro(itemName) {
+ }
+
+ function containsMacro(itemName) {
return MACRO_PATTERN.test(itemName);
}
@@ -99,7 +111,7 @@ System.register(['lodash', 'moment'], function (_export, _context) {
* {group}{host.com} -> [group, host.com]
*/
function splitTemplateQuery(query) {
- var splitPattern = /{[^{}]*}/g;
+ var splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
var split = void 0;
if (isContainsBraces(query)) {
@@ -117,7 +129,8 @@ System.register(['lodash', 'moment'], function (_export, _context) {
_export('splitTemplateQuery', splitTemplateQuery);
function isContainsBraces(query) {
- return query.includes('{') && query.includes('}');
+ var bracesPattern = /^\{.+\}$/;
+ return bracesPattern.test(query);
}
// Pattern for testing regex
diff --git a/dist/datasource-zabbix/utils.js.map b/dist/datasource-zabbix/utils.js.map
index b0d851e..94c6f0a 100644
--- a/dist/datasource-zabbix/utils.js.map
+++ b/dist/datasource-zabbix/utils.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/datasource-zabbix/utils.js"],"names":["expandItemName","name","key","key_params_str","substring","indexOf","lastIndexOf","key_params","splitKeyParams","i","length","replace","paramStr","params","quoted","in_array","split_symbol","param","_","forEach","symbol","push","containsMacro","itemName","MACRO_PATTERN","test","replaceMacro","item","macros","item_macros","match","host_macros","filter","m","hostid","macro_def","find","macro","value","macro_value","macro_regex","RegExp","escapeMacro","splitTemplateQuery","query","splitPattern","split","isContainsBraces","result","map","trim","part","includes","isRegex","str","regexPattern","isTemplateVariable","templateVariables","variablePattern","variables","variable","buildRegex","matches","pattern","flags","undefined","escapeRegex","parseInterval","interval","intervalPattern","momentInterval","exec","moment","duration","Number","valueOf","parseTimeShiftInterval","formatAcknowledges","acknowledges","formatted_acknowledges","each","ack","timestamp","unix","clock","format","alias","surname","message","concat","convertToZabbixAPIUrl","url","zabbixAPIUrlPattern","trimSlashPattern","callOnce","func","promiseKeeper","Promise","resolve","apply","arguments","then","contains"],"mappings":"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","file":"utils.js","sourcesContent":["import _ from 'lodash';\nimport moment from 'moment';\n\n/**\n * Expand Zabbix item name\n *\n * @param {string} name item name, ie \"CPU $2 time\"\n * @param {string} key item key, ie system.cpu.util[,system,avg1]\n * @return {string} expanded name, ie \"CPU system time\"\n */\nexport function expandItemName(name, key) {\n\n // extract params from key:\n // \"system.cpu.util[,system,avg1]\" --> [\"\", \"system\", \"avg1\"]\n let key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']'));\n let key_params = splitKeyParams(key_params_str);\n\n // replace item parameters\n for (let i = key_params.length; i >= 1; i--) {\n name = name.replace('$' + i, key_params[i - 1]);\n }\n return name;\n}\n\nfunction splitKeyParams(paramStr) {\n let params = [];\n let quoted = false;\n let in_array = false;\n let split_symbol = ',';\n let param = '';\n\n _.forEach(paramStr, symbol => {\n if (symbol === '\"' && in_array) {\n param += symbol;\n } else if (symbol === '\"' && quoted) {\n quoted = false;\n } else if (symbol === '\"' && !quoted) {\n quoted = true;\n } else if (symbol === '[' && !quoted) {\n in_array = true;\n } else if (symbol === ']' && !quoted) {\n in_array = false;\n } else if (symbol === split_symbol && !quoted && !in_array) {\n params.push(param);\n param = '';\n } else {\n param += symbol;\n }\n });\n\n params.push(param);\n return params;\n}\n\nconst MACRO_PATTERN = /{\\$[A-Z0-9_\\.]+}/g;\n\nexport function containsMacro(itemName) {\n return MACRO_PATTERN.test(itemName);\n}\n\nexport function replaceMacro(item, macros) {\n let itemName = item.name;\n let item_macros = itemName.match(MACRO_PATTERN);\n _.forEach(item_macros, macro => {\n let host_macros = _.filter(macros, m => {\n if (m.hostid) {\n return m.hostid === item.hostid;\n } else {\n // Add global macros\n return true;\n }\n });\n\n let macro_def = _.find(host_macros, { macro: macro });\n if (macro_def && macro_def.value) {\n let macro_value = macro_def.value;\n let macro_regex = new RegExp(escapeMacro(macro));\n itemName = itemName.replace(macro_regex, macro_value);\n }\n });\n\n return itemName;\n}\n\nfunction escapeMacro(macro) {\n macro = macro.replace(/\\$/, '\\\\\\$');\n return macro;\n}\n\n/**\n * Split template query to parts of zabbix entities\n * group.host.app.item -> [group, host, app, item]\n * {group}{host.com} -> [group, host.com]\n */\nexport function splitTemplateQuery(query) {\n let splitPattern = /{[^{}]*}/g;\n let split;\n\n if (isContainsBraces(query)) {\n let result = query.match(splitPattern);\n split = _.map(result, part => {\n return _.trim(part, '{}');\n });\n } else {\n split = query.split('.');\n }\n\n return split;\n}\n\nfunction isContainsBraces(query) {\n return query.includes('{') && query.includes('}');\n}\n\n// Pattern for testing regex\nexport const regexPattern = /^\\/(.*)\\/([gmi]*)$/m;\n\nexport function isRegex(str) {\n return regexPattern.test(str);\n}\n\nexport function isTemplateVariable(str, templateVariables) {\n var variablePattern = /^\\$\\w+/;\n if (variablePattern.test(str)) {\n var variables = _.map(templateVariables, variable => {\n return '$' + variable.name;\n });\n return _.includes(variables, str);\n } else {\n return false;\n }\n}\n\nexport function buildRegex(str) {\n var matches = str.match(regexPattern);\n var pattern = matches[1];\n var flags = matches[2] !== \"\" ? matches[2] : undefined;\n return new RegExp(pattern, flags);\n}\n\n// Need for template variables replace\n// From Grafana's templateSrv.js\nexport function escapeRegex(value) {\n return value.replace(/[\\\\^$*+?.()|[\\]{}\\/]/g, '\\\\$&');\n}\n\nexport function parseInterval(interval) {\n var intervalPattern = /(^[\\d]+)(y|M|w|d|h|m|s)/g;\n var momentInterval = intervalPattern.exec(interval);\n return moment.duration(Number(momentInterval[1]), momentInterval[2]).valueOf();\n}\n\nexport function parseTimeShiftInterval(interval) {\n let intervalPattern = /^([\\+\\-]*)([\\d]+)(y|M|w|d|h|m|s)/g;\n let momentInterval = intervalPattern.exec(interval);\n let duration = 0;\n\n if (momentInterval[1] === '+') {\n duration = 0 - moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf();\n } else {\n duration = moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf();\n }\n\n return duration;\n}\n\n/**\n * Format acknowledges.\n *\n * @param {array} acknowledges array of Zabbix acknowledge objects\n * @return {string} HTML-formatted table\n */\nexport function formatAcknowledges(acknowledges) {\n if (acknowledges.length) {\n var formatted_acknowledges = '
Acknowledges:
| Time | '\n + 'User | Comments |
';\n _.each(_.map(acknowledges, function (ack) {\n var timestamp = moment.unix(ack.clock);\n return '| ' + timestamp.format(\"DD MMM YYYY HH:mm:ss\") + ' | ' + ack.alias\n + ' (' + ack.name + ' ' + ack.surname + ')' + ' | ' + ack.message + ' |
';\n }), function (ack) {\n formatted_acknowledges = formatted_acknowledges.concat(ack);\n });\n formatted_acknowledges = formatted_acknowledges.concat('
');\n return formatted_acknowledges;\n } else {\n return '';\n }\n}\n\nexport function convertToZabbixAPIUrl(url) {\n var zabbixAPIUrlPattern = /.*api_jsonrpc.php$/;\n var trimSlashPattern = /(.*?)[\\/]*$/;\n if (url.match(zabbixAPIUrlPattern)) {\n return url;\n } else {\n return url.replace(trimSlashPattern, \"$1\");\n }\n}\n\n/**\n * Wrap function to prevent multiple calls\n * when waiting for result.\n */\nexport function callOnce(func, promiseKeeper) {\n return function() {\n if (!promiseKeeper) {\n promiseKeeper = Promise.resolve(\n func.apply(this, arguments)\n .then(result => {\n promiseKeeper = null;\n return result;\n })\n );\n }\n return promiseKeeper;\n };\n}\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.includes) {\n _.includes = _.contains;\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../src/datasource-zabbix/utils.js"],"names":["expandItemName","name","key","key_params_str","substring","indexOf","lastIndexOf","key_params","splitKeyParams","i","length","replace","expandItems","items","_","forEach","item","key_","paramStr","params","quoted","in_array","split_symbol","param","symbol","push","containsMacro","itemName","MACRO_PATTERN","test","replaceMacro","macros","item_macros","match","host_macros","filter","m","hostid","macro_def","find","macro","value","macro_value","macro_regex","RegExp","escapeMacro","splitTemplateQuery","query","splitPattern","split","isContainsBraces","result","map","trim","part","bracesPattern","isRegex","str","regexPattern","isTemplateVariable","templateVariables","variablePattern","variables","variable","includes","buildRegex","matches","pattern","flags","undefined","escapeRegex","parseInterval","interval","intervalPattern","momentInterval","exec","moment","duration","Number","valueOf","parseTimeShiftInterval","formatAcknowledges","acknowledges","formatted_acknowledges","each","ack","timestamp","unix","clock","format","alias","surname","message","concat","convertToZabbixAPIUrl","url","zabbixAPIUrlPattern","trimSlashPattern","callOnce","func","promiseKeeper","Promise","resolve","apply","arguments","then","contains"],"mappings":"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","file":"utils.js","sourcesContent":["import _ from 'lodash';\nimport moment from 'moment';\n\n/**\n * Expand Zabbix item name\n *\n * @param {string} name item name, ie \"CPU $2 time\"\n * @param {string} key item key, ie system.cpu.util[,system,avg1]\n * @return {string} expanded name, ie \"CPU system time\"\n */\nexport function expandItemName(name, key) {\n\n // extract params from key:\n // \"system.cpu.util[,system,avg1]\" --> [\"\", \"system\", \"avg1\"]\n let key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']'));\n let key_params = splitKeyParams(key_params_str);\n\n // replace item parameters\n for (let i = key_params.length; i >= 1; i--) {\n name = name.replace('$' + i, key_params[i - 1]);\n }\n return name;\n}\n\nexport function expandItems(items) {\n _.forEach(items, item => {\n item.item = item.name;\n item.name = expandItemName(item.item, item.key_);\n return item;\n });\n return items;\n}\n\nfunction splitKeyParams(paramStr) {\n let params = [];\n let quoted = false;\n let in_array = false;\n let split_symbol = ',';\n let param = '';\n\n _.forEach(paramStr, symbol => {\n if (symbol === '\"' && in_array) {\n param += symbol;\n } else if (symbol === '\"' && quoted) {\n quoted = false;\n } else if (symbol === '\"' && !quoted) {\n quoted = true;\n } else if (symbol === '[' && !quoted) {\n in_array = true;\n } else if (symbol === ']' && !quoted) {\n in_array = false;\n } else if (symbol === split_symbol && !quoted && !in_array) {\n params.push(param);\n param = '';\n } else {\n param += symbol;\n }\n });\n\n params.push(param);\n return params;\n}\n\nconst MACRO_PATTERN = /{\\$[A-Z0-9_\\.]+}/g;\n\nexport function containsMacro(itemName) {\n return MACRO_PATTERN.test(itemName);\n}\n\nexport function replaceMacro(item, macros) {\n let itemName = item.name;\n let item_macros = itemName.match(MACRO_PATTERN);\n _.forEach(item_macros, macro => {\n let host_macros = _.filter(macros, m => {\n if (m.hostid) {\n return m.hostid === item.hostid;\n } else {\n // Add global macros\n return true;\n }\n });\n\n let macro_def = _.find(host_macros, { macro: macro });\n if (macro_def && macro_def.value) {\n let macro_value = macro_def.value;\n let macro_regex = new RegExp(escapeMacro(macro));\n itemName = itemName.replace(macro_regex, macro_value);\n }\n });\n\n return itemName;\n}\n\nfunction escapeMacro(macro) {\n macro = macro.replace(/\\$/, '\\\\\\$');\n return macro;\n}\n\n/**\n * Split template query to parts of zabbix entities\n * group.host.app.item -> [group, host, app, item]\n * {group}{host.com} -> [group, host.com]\n */\nexport function splitTemplateQuery(query) {\n let splitPattern = /\\{[^\\{\\}]*\\}|\\{\\/.*\\/\\}/g;\n let split;\n\n if (isContainsBraces(query)) {\n let result = query.match(splitPattern);\n split = _.map(result, part => {\n return _.trim(part, '{}');\n });\n } else {\n split = query.split('.');\n }\n\n return split;\n}\n\nfunction isContainsBraces(query) {\n let bracesPattern = /^\\{.+\\}$/;\n return bracesPattern.test(query);\n}\n\n// Pattern for testing regex\nexport const regexPattern = /^\\/(.*)\\/([gmi]*)$/m;\n\nexport function isRegex(str) {\n return regexPattern.test(str);\n}\n\nexport function isTemplateVariable(str, templateVariables) {\n var variablePattern = /^\\$\\w+/;\n if (variablePattern.test(str)) {\n var variables = _.map(templateVariables, variable => {\n return '$' + variable.name;\n });\n return _.includes(variables, str);\n } else {\n return false;\n }\n}\n\nexport function buildRegex(str) {\n var matches = str.match(regexPattern);\n var pattern = matches[1];\n var flags = matches[2] !== \"\" ? matches[2] : undefined;\n return new RegExp(pattern, flags);\n}\n\n// Need for template variables replace\n// From Grafana's templateSrv.js\nexport function escapeRegex(value) {\n return value.replace(/[\\\\^$*+?.()|[\\]{}\\/]/g, '\\\\$&');\n}\n\nexport function parseInterval(interval) {\n var intervalPattern = /(^[\\d]+)(y|M|w|d|h|m|s)/g;\n var momentInterval = intervalPattern.exec(interval);\n return moment.duration(Number(momentInterval[1]), momentInterval[2]).valueOf();\n}\n\nexport function parseTimeShiftInterval(interval) {\n let intervalPattern = /^([\\+\\-]*)([\\d]+)(y|M|w|d|h|m|s)/g;\n let momentInterval = intervalPattern.exec(interval);\n let duration = 0;\n\n if (momentInterval[1] === '+') {\n duration = 0 - moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf();\n } else {\n duration = moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf();\n }\n\n return duration;\n}\n\n/**\n * Format acknowledges.\n *\n * @param {array} acknowledges array of Zabbix acknowledge objects\n * @return {string} HTML-formatted table\n */\nexport function formatAcknowledges(acknowledges) {\n if (acknowledges.length) {\n var formatted_acknowledges = '
Acknowledges:
| Time | '\n + 'User | Comments |
';\n _.each(_.map(acknowledges, function (ack) {\n var timestamp = moment.unix(ack.clock);\n return '| ' + timestamp.format(\"DD MMM YYYY HH:mm:ss\") + ' | ' + ack.alias\n + ' (' + ack.name + ' ' + ack.surname + ')' + ' | ' + ack.message + ' |
';\n }), function (ack) {\n formatted_acknowledges = formatted_acknowledges.concat(ack);\n });\n formatted_acknowledges = formatted_acknowledges.concat('
');\n return formatted_acknowledges;\n } else {\n return '';\n }\n}\n\nexport function convertToZabbixAPIUrl(url) {\n var zabbixAPIUrlPattern = /.*api_jsonrpc.php$/;\n var trimSlashPattern = /(.*?)[\\/]*$/;\n if (url.match(zabbixAPIUrlPattern)) {\n return url;\n } else {\n return url.replace(trimSlashPattern, \"$1\");\n }\n}\n\n/**\n * Wrap function to prevent multiple calls\n * when waiting for result.\n */\nexport function callOnce(func, promiseKeeper) {\n return function() {\n if (!promiseKeeper) {\n promiseKeeper = Promise.resolve(\n func.apply(this, arguments)\n .then(result => {\n promiseKeeper = null;\n return result;\n })\n );\n }\n return promiseKeeper;\n };\n}\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.includes) {\n _.includes = _.contains;\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix.js b/dist/datasource-zabbix/zabbix.js
index 51e6fd5..fb1cb12 100644
--- a/dist/datasource-zabbix/zabbix.js
+++ b/dist/datasource-zabbix/zabbix.js
@@ -1,6 +1,6 @@
'use strict';
-System.register(['angular', 'lodash', './utils', './zabbixAPI.service.js', './zabbixCachingProxy.service.js'], function (_export, _context) {
+System.register(['angular', 'lodash', './utils', './zabbixAPI.service.js', './zabbixCachingProxy.service.js', './zabbixDBConnector'], function (_export, _context) {
"use strict";
var angular, _, utils, _createClass;
@@ -27,25 +27,44 @@ System.register(['angular', 'lodash', './utils', './zabbixAPI.service.js', './za
// Each Zabbix data source instance should initialize its own API instance.
/** @ngInject */
- function ZabbixFactory(zabbixAPIService, ZabbixCachingProxy) {
+ function ZabbixFactory(zabbixAPIService, ZabbixCachingProxy, ZabbixDBConnector) {
var Zabbix = function () {
- function Zabbix(url, username, password, basicAuth, withCredentials, cacheTTL) {
+ function Zabbix(url, options) {
_classCallCheck(this, Zabbix);
+ var username = options.username,
+ password = options.password,
+ basicAuth = options.basicAuth,
+ withCredentials = options.withCredentials,
+ cacheTTL = options.cacheTTL,
+ enableDirectDBConnection = options.enableDirectDBConnection,
+ sqlDatasourceId = options.sqlDatasourceId;
+
+
// Initialize Zabbix API
var ZabbixAPI = zabbixAPIService;
this.zabbixAPI = new ZabbixAPI(url, username, password, basicAuth, withCredentials);
+ if (enableDirectDBConnection) {
+ this.dbConnector = new ZabbixDBConnector(sqlDatasourceId);
+ }
+
// Initialize caching proxy for requests
var cacheOptions = {
enabled: true,
ttl: cacheTTL
};
- this.cachingProxy = new ZabbixCachingProxy(this.zabbixAPI, cacheOptions);
+ this.cachingProxy = new ZabbixCachingProxy(this.zabbixAPI, this.dbConnector, cacheOptions);
// Proxy methods
this.getHistory = this.cachingProxy.getHistory.bind(this.cachingProxy);
this.getMacros = this.cachingProxy.getMacros.bind(this.cachingProxy);
+ this.getItemsByIDs = this.cachingProxy.getItemsByIDs.bind(this.cachingProxy);
+
+ if (enableDirectDBConnection) {
+ this.getHistoryDB = this.cachingProxy.getHistoryDB.bind(this.cachingProxy);
+ this.getTrendsDB = this.cachingProxy.getTrendsDB.bind(this.cachingProxy);
+ }
this.getTrend = this.zabbixAPI.getTrend.bind(this.zabbixAPI);
this.getEvents = this.zabbixAPI.getEvents.bind(this.zabbixAPI);
@@ -168,6 +187,13 @@ System.register(['angular', 'lodash', './utils', './zabbixAPI.service.js', './za
return filterByQuery(items, itemFilter);
});
}
+ }, {
+ key: 'getITServices',
+ value: function getITServices(itServiceFilter) {
+ return this.cachingProxy.getITServices().then(function (itServices) {
+ return findByFilter(itServices, itServiceFilter);
+ });
+ }
}, {
key: 'getTriggers',
value: function getTriggers(groupFilter, hostFilter, appFilter, options) {
@@ -274,7 +300,7 @@ System.register(['angular', 'lodash', './utils', './zabbixAPI.service.js', './za
_ = _lodash.default;
}, function (_utils) {
utils = _utils;
- }, function (_zabbixAPIServiceJs) {}, function (_zabbixCachingProxyServiceJs) {}],
+ }, function (_zabbixAPIServiceJs) {}, function (_zabbixCachingProxyServiceJs) {}, function (_zabbixDBConnector) {}],
execute: function () {
_createClass = function () {
function defineProperties(target, props) {
diff --git a/dist/datasource-zabbix/zabbix.js.map b/dist/datasource-zabbix/zabbix.js.map
index da87230..54358d9 100644
--- a/dist/datasource-zabbix/zabbix.js.map
+++ b/dist/datasource-zabbix/zabbix.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/datasource-zabbix/zabbix.js"],"names":["ZabbixFactory","zabbixAPIService","ZabbixCachingProxy","Zabbix","url","username","password","basicAuth","withCredentials","cacheTTL","ZabbixAPI","zabbixAPI","cacheOptions","enabled","ttl","cachingProxy","getHistory","bind","getMacros","getTrend","getEvents","getAlerts","getAcknowledges","getITService","getSLA","getVersion","login","target","options","parts","filters","_","map","p","filter","getItems","getGroups","groupFilter","getAllGroups","then","findByFilter","groups","groupids","getHosts","hostFilter","getAllHosts","hosts","hostids","getApps","appFilter","filterByQuery","apps","appFilterEmpty","undefined","itemtype","appids","showDisabledItems","items","expandUserMacro","getHostIds","forEach","utils","containsMacro","item","name","replaceMacro","macros","itemFilter","getAllItems","promises","Promise","all","filteredGroups","results","filteredHosts","filteredApps","query","applicationids","flatten","getTriggers","findByName","list","finded","find","filterByName","filterByRegex","regex","filterPattern","buildRegex","zbx_obj","test","isRegex","hostIds","uniq","angular","module","factory"],"mappings":"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","file":"zabbix.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPI.service.js';\nimport './zabbixCachingProxy.service.js';\n\n// Use factory() instead service() for multiple data sources support.\n// Each Zabbix data source instance should initialize its own API instance.\n\n/** @ngInject */\nfunction ZabbixFactory(zabbixAPIService, ZabbixCachingProxy) {\n\n class Zabbix {\n constructor(url, username, password, basicAuth, withCredentials, cacheTTL) {\n\n // Initialize Zabbix API\n var ZabbixAPI = zabbixAPIService;\n this.zabbixAPI = new ZabbixAPI(url, username, password, basicAuth, withCredentials);\n\n // Initialize caching proxy for requests\n let cacheOptions = {\n enabled: true,\n ttl: cacheTTL\n };\n this.cachingProxy = new ZabbixCachingProxy(this.zabbixAPI, cacheOptions);\n\n // Proxy methods\n this.getHistory = this.cachingProxy.getHistory.bind(this.cachingProxy);\n this.getMacros = this.cachingProxy.getMacros.bind(this.cachingProxy);\n\n this.getTrend = this.zabbixAPI.getTrend.bind(this.zabbixAPI);\n this.getEvents = this.zabbixAPI.getEvents.bind(this.zabbixAPI);\n this.getAlerts = this.zabbixAPI.getAlerts.bind(this.zabbixAPI);\n this.getAcknowledges = this.zabbixAPI.getAcknowledges.bind(this.zabbixAPI);\n this.getITService = this.zabbixAPI.getITService.bind(this.zabbixAPI);\n this.getSLA = this.zabbixAPI.getSLA.bind(this.zabbixAPI);\n this.getVersion = this.zabbixAPI.getVersion.bind(this.zabbixAPI);\n this.login = this.zabbixAPI.login.bind(this.zabbixAPI);\n }\n\n getItemsFromTarget(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n let filters = _.map(parts, p => target[p].filter);\n return this.getItems(...filters, options);\n }\n\n getAllGroups() {\n return this.cachingProxy.getGroups();\n }\n\n getGroups(groupFilter) {\n return this.getAllGroups()\n .then(groups => findByFilter(groups, groupFilter));\n }\n\n /**\n * Get list of host belonging to given groups.\n */\n getAllHosts(groupFilter) {\n return this.getGroups(groupFilter)\n .then(groups => {\n let groupids = _.map(groups, 'groupid');\n return this.cachingProxy.getHosts(groupids);\n });\n }\n\n getHosts(groupFilter, hostFilter) {\n return this.getAllHosts(groupFilter)\n .then(hosts => findByFilter(hosts, hostFilter));\n }\n\n /**\n * Get list of applications belonging to given groups and hosts.\n */\n getAllApps(groupFilter, hostFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n return this.cachingProxy.getApps(hostids);\n });\n }\n\n getApps(groupFilter, hostFilter, appFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n if (appFilter) {\n return this.cachingProxy.getApps(hostids)\n .then(apps => filterByQuery(apps, appFilter));\n } else {\n return {\n appFilterEmpty: true,\n hostids: hostids\n };\n }\n });\n }\n\n getAllItems(groupFilter, hostFilter, appFilter, options = {}) {\n return this.getApps(groupFilter, hostFilter, appFilter)\n .then(apps => {\n if (apps.appFilterEmpty) {\n return this.cachingProxy.getItems(apps.hostids, undefined, options.itemtype);\n } else {\n let appids = _.map(apps, 'applicationid');\n return this.cachingProxy.getItems(undefined, appids, options.itemtype);\n }\n })\n .then(items => {\n if (!options.showDisabledItems) {\n items = _.filter(items, {'status': '0'});\n }\n\n return items;\n })\n .then(this.expandUserMacro.bind(this));\n }\n\n expandUserMacro(items) {\n let hostids = getHostIds(items);\n return this.getMacros(hostids)\n .then(macros => {\n _.forEach(items, item => {\n if (utils.containsMacro(item.name)) {\n item.name = utils.replaceMacro(item, macros);\n }\n });\n return items;\n });\n }\n\n getItems(groupFilter, hostFilter, appFilter, itemFilter, options = {}) {\n return this.getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => filterByQuery(items, itemFilter));\n }\n\n /**\n * Build query - convert target filters to array of Zabbix items\n */\n getTriggers(groupFilter, hostFilter, appFilter, options) {\n let promises = [\n this.getGroups(groupFilter),\n this.getHosts(groupFilter, hostFilter),\n this.getApps(groupFilter, hostFilter, appFilter)\n ];\n\n return Promise.all(promises)\n .then(results => {\n let filteredGroups = results[0];\n let filteredHosts = results[1];\n let filteredApps = results[2];\n let query = {};\n\n if (appFilter) {\n query.applicationids = _.flatten(_.map(filteredApps, 'applicationid'));\n }\n if (hostFilter) {\n query.hostids = _.map(filteredHosts, 'hostid');\n }\n if (groupFilter) {\n query.groupids = _.map(filteredGroups, 'groupid');\n }\n\n return query;\n }).then(query => {\n return this.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options);\n });\n }\n }\n\n return Zabbix;\n}\n\nangular\n .module('grafana.services')\n .factory('Zabbix', ZabbixFactory);\n\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Find group, host, app or item by given name.\n * @param list list of groups, apps or other\n * @param name visible name\n * @return array with finded element or empty array\n */\nfunction findByName(list, name) {\n var finded = _.find(list, {'name': name});\n if (finded) {\n return [finded];\n } else {\n return [];\n }\n}\n\n/**\n * Different hosts can contains applications and items with same name.\n * For this reason use _.filter, which return all elements instead _.find,\n * which return only first finded.\n * @param {[type]} list list of elements\n * @param {[type]} name app name\n * @return {[type]} array with finded element or empty array\n */\nfunction filterByName(list, name) {\n var finded = _.filter(list, {'name': name});\n if (finded) {\n return finded;\n } else {\n return [];\n }\n}\n\nfunction filterByRegex(list, regex) {\n var filterPattern = utils.buildRegex(regex);\n return _.filter(list, function (zbx_obj) {\n return filterPattern.test(zbx_obj.name);\n });\n}\n\nfunction findByFilter(list, filter) {\n if (utils.isRegex(filter)) {\n return filterByRegex(list, filter);\n } else {\n return findByName(list, filter);\n }\n}\n\nfunction filterByQuery(list, filter) {\n if (utils.isRegex(filter)) {\n return filterByRegex(list, filter);\n } else {\n return filterByName(list, filter);\n }\n}\n\nfunction getHostIds(items) {\n let hostIds = _.map(items, item => {\n return _.map(item.hosts, 'hostid');\n });\n return _.uniq(_.flatten(hostIds));\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../src/datasource-zabbix/zabbix.js"],"names":["ZabbixFactory","zabbixAPIService","ZabbixCachingProxy","ZabbixDBConnector","Zabbix","url","options","username","password","basicAuth","withCredentials","cacheTTL","enableDirectDBConnection","sqlDatasourceId","ZabbixAPI","zabbixAPI","dbConnector","cacheOptions","enabled","ttl","cachingProxy","getHistory","bind","getMacros","getItemsByIDs","getHistoryDB","getTrendsDB","getTrend","getEvents","getAlerts","getAcknowledges","getITService","getSLA","getVersion","login","target","parts","filters","_","map","p","filter","getItems","getGroups","groupFilter","getAllGroups","then","findByFilter","groups","groupids","getHosts","hostFilter","getAllHosts","hosts","hostids","getApps","appFilter","filterByQuery","apps","appFilterEmpty","undefined","itemtype","appids","showDisabledItems","items","expandUserMacro","getHostIds","forEach","utils","containsMacro","item","name","replaceMacro","macros","itemFilter","getAllItems","itServiceFilter","getITServices","itServices","promises","Promise","all","filteredGroups","results","filteredHosts","filteredApps","query","applicationids","flatten","getTriggers","findByName","list","finded","find","filterByName","filterByRegex","regex","filterPattern","buildRegex","zbx_obj","test","isRegex","hostIds","uniq","angular","module","factory"],"mappings":"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","file":"zabbix.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPI.service.js';\nimport './zabbixCachingProxy.service.js';\nimport './zabbixDBConnector';\n\n// Use factory() instead service() for multiple data sources support.\n// Each Zabbix data source instance should initialize its own API instance.\n\n/** @ngInject */\nfunction ZabbixFactory(zabbixAPIService, ZabbixCachingProxy, ZabbixDBConnector) {\n\n class Zabbix {\n constructor(url, options) {\n let {\n username, password, basicAuth, withCredentials, cacheTTL,\n enableDirectDBConnection, sqlDatasourceId\n } = options;\n\n // Initialize Zabbix API\n var ZabbixAPI = zabbixAPIService;\n this.zabbixAPI = new ZabbixAPI(url, username, password, basicAuth, withCredentials);\n\n if (enableDirectDBConnection) {\n this.dbConnector = new ZabbixDBConnector(sqlDatasourceId);\n }\n\n // Initialize caching proxy for requests\n let cacheOptions = {\n enabled: true,\n ttl: cacheTTL\n };\n this.cachingProxy = new ZabbixCachingProxy(this.zabbixAPI, this.dbConnector, cacheOptions);\n\n // Proxy methods\n this.getHistory = this.cachingProxy.getHistory.bind(this.cachingProxy);\n this.getMacros = this.cachingProxy.getMacros.bind(this.cachingProxy);\n this.getItemsByIDs = this.cachingProxy.getItemsByIDs.bind(this.cachingProxy);\n\n if (enableDirectDBConnection) {\n this.getHistoryDB = this.cachingProxy.getHistoryDB.bind(this.cachingProxy);\n this.getTrendsDB = this.cachingProxy.getTrendsDB.bind(this.cachingProxy);\n }\n\n this.getTrend = this.zabbixAPI.getTrend.bind(this.zabbixAPI);\n this.getEvents = this.zabbixAPI.getEvents.bind(this.zabbixAPI);\n this.getAlerts = this.zabbixAPI.getAlerts.bind(this.zabbixAPI);\n this.getAcknowledges = this.zabbixAPI.getAcknowledges.bind(this.zabbixAPI);\n this.getITService = this.zabbixAPI.getITService.bind(this.zabbixAPI);\n this.getSLA = this.zabbixAPI.getSLA.bind(this.zabbixAPI);\n this.getVersion = this.zabbixAPI.getVersion.bind(this.zabbixAPI);\n this.login = this.zabbixAPI.login.bind(this.zabbixAPI);\n }\n\n getItemsFromTarget(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n let filters = _.map(parts, p => target[p].filter);\n return this.getItems(...filters, options);\n }\n\n getAllGroups() {\n return this.cachingProxy.getGroups();\n }\n\n getGroups(groupFilter) {\n return this.getAllGroups()\n .then(groups => findByFilter(groups, groupFilter));\n }\n\n /**\n * Get list of host belonging to given groups.\n */\n getAllHosts(groupFilter) {\n return this.getGroups(groupFilter)\n .then(groups => {\n let groupids = _.map(groups, 'groupid');\n return this.cachingProxy.getHosts(groupids);\n });\n }\n\n getHosts(groupFilter, hostFilter) {\n return this.getAllHosts(groupFilter)\n .then(hosts => findByFilter(hosts, hostFilter));\n }\n\n /**\n * Get list of applications belonging to given groups and hosts.\n */\n getAllApps(groupFilter, hostFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n return this.cachingProxy.getApps(hostids);\n });\n }\n\n getApps(groupFilter, hostFilter, appFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n if (appFilter) {\n return this.cachingProxy.getApps(hostids)\n .then(apps => filterByQuery(apps, appFilter));\n } else {\n return {\n appFilterEmpty: true,\n hostids: hostids\n };\n }\n });\n }\n\n getAllItems(groupFilter, hostFilter, appFilter, options = {}) {\n return this.getApps(groupFilter, hostFilter, appFilter)\n .then(apps => {\n if (apps.appFilterEmpty) {\n return this.cachingProxy.getItems(apps.hostids, undefined, options.itemtype);\n } else {\n let appids = _.map(apps, 'applicationid');\n return this.cachingProxy.getItems(undefined, appids, options.itemtype);\n }\n })\n .then(items => {\n if (!options.showDisabledItems) {\n items = _.filter(items, {'status': '0'});\n }\n\n return items;\n })\n .then(this.expandUserMacro.bind(this));\n }\n\n expandUserMacro(items) {\n let hostids = getHostIds(items);\n return this.getMacros(hostids)\n .then(macros => {\n _.forEach(items, item => {\n if (utils.containsMacro(item.name)) {\n item.name = utils.replaceMacro(item, macros);\n }\n });\n return items;\n });\n }\n\n getItems(groupFilter, hostFilter, appFilter, itemFilter, options = {}) {\n return this.getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => filterByQuery(items, itemFilter));\n }\n\n getITServices(itServiceFilter) {\n return this.cachingProxy.getITServices()\n .then(itServices => findByFilter(itServices, itServiceFilter));\n }\n\n /**\n * Build query - convert target filters to array of Zabbix items\n */\n getTriggers(groupFilter, hostFilter, appFilter, options) {\n let promises = [\n this.getGroups(groupFilter),\n this.getHosts(groupFilter, hostFilter),\n this.getApps(groupFilter, hostFilter, appFilter)\n ];\n\n return Promise.all(promises)\n .then(results => {\n let filteredGroups = results[0];\n let filteredHosts = results[1];\n let filteredApps = results[2];\n let query = {};\n\n if (appFilter) {\n query.applicationids = _.flatten(_.map(filteredApps, 'applicationid'));\n }\n if (hostFilter) {\n query.hostids = _.map(filteredHosts, 'hostid');\n }\n if (groupFilter) {\n query.groupids = _.map(filteredGroups, 'groupid');\n }\n\n return query;\n }).then(query => {\n return this.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options);\n });\n }\n }\n\n return Zabbix;\n}\n\nangular\n .module('grafana.services')\n .factory('Zabbix', ZabbixFactory);\n\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Find group, host, app or item by given name.\n * @param list list of groups, apps or other\n * @param name visible name\n * @return array with finded element or empty array\n */\nfunction findByName(list, name) {\n var finded = _.find(list, {'name': name});\n if (finded) {\n return [finded];\n } else {\n return [];\n }\n}\n\n/**\n * Different hosts can contains applications and items with same name.\n * For this reason use _.filter, which return all elements instead _.find,\n * which return only first finded.\n * @param {[type]} list list of elements\n * @param {[type]} name app name\n * @return {[type]} array with finded element or empty array\n */\nfunction filterByName(list, name) {\n var finded = _.filter(list, {'name': name});\n if (finded) {\n return finded;\n } else {\n return [];\n }\n}\n\nfunction filterByRegex(list, regex) {\n var filterPattern = utils.buildRegex(regex);\n return _.filter(list, function (zbx_obj) {\n return filterPattern.test(zbx_obj.name);\n });\n}\n\nfunction findByFilter(list, filter) {\n if (utils.isRegex(filter)) {\n return filterByRegex(list, filter);\n } else {\n return findByName(list, filter);\n }\n}\n\nfunction filterByQuery(list, filter) {\n if (utils.isRegex(filter)) {\n return filterByRegex(list, filter);\n } else {\n return filterByName(list, filter);\n }\n}\n\nfunction getHostIds(items) {\n let hostIds = _.map(items, item => {\n return _.map(item.hosts, 'hostid');\n });\n return _.uniq(_.flatten(hostIds));\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbixAPI.service.js b/dist/datasource-zabbix/zabbixAPI.service.js
index b48bb91..29f7b90 100644
--- a/dist/datasource-zabbix/zabbixAPI.service.js
+++ b/dist/datasource-zabbix/zabbixAPI.service.js
@@ -166,16 +166,19 @@ System.register(['angular', 'lodash', './utils', './zabbixAPICore.service'], fun
params.filter.value_type = [1, 2, 4];
}
- return this.request('item.get', params).then(expandItems);
+ return this.request('item.get', params).then(utils.expandItems);
+ }
+ }, {
+ key: 'getItemsByIDs',
+ value: function getItemsByIDs(itemids) {
+ var params = {
+ itemids: itemids,
+ output: ['name', 'key_', 'value_type', 'hostid', 'status', 'state'],
+ webitems: true,
+ selectHosts: ['hostid', 'name']
+ };
- function expandItems(items) {
- _.forEach(items, function (item) {
- item.item = item.name;
- item.name = utils.expandItemName(item.item, item.key_);
- return item;
- });
- return items;
- }
+ return this.request('item.get', params).then(utils.expandItems);
}
}, {
key: 'getMacros',
diff --git a/dist/datasource-zabbix/zabbixAPI.service.js.map b/dist/datasource-zabbix/zabbixAPI.service.js.map
index 629d0fb..654eab3 100644
--- a/dist/datasource-zabbix/zabbixAPI.service.js.map
+++ b/dist/datasource-zabbix/zabbixAPI.service.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPI.service.js"],"names":["ZabbixAPIServiceFactory","alertSrv","zabbixAPICoreService","ZabbixAPI","api_url","username","password","basicAuth","withCredentials","url","auth","requestOptions","loginPromise","loginErrorCount","maxLoginAttempts","zabbixAPICore","getTrend","getTrend_ZBXNEXT1193","method","params","request","catch","isNotAuthorized","error","data","loginOnce","then","message","statusText","alertAPIError","timeout","set","Promise","resolve","login","getVersion","eventid","eventids","output","sortfield","real_hosts","groupids","hostids","appids","itemtype","webitems","filter","selectHosts","applicationids","value_type","expandItems","items","_","forEach","item","name","utils","expandItemName","key_","globalmacro","itemid","itemids","length","lastvalue","timeFrom","timeTill","grouped_items","groupBy","promises","map","history","sortorder","time_from","time_till","all","flatten","trend","self","serviceids","timeRange","timeTo","intervals","from","to","options","showTriggers","hideHostsInMaintenance","expandDescription","expandData","expandComment","monitored","skipDependent","value","selectGroups","selectItems","selectLastEvent","maintenance","lastChangeSince","lastChangeTill","objectids","showEvents","select_acknowledges","preservekeys","events","event","acknowledges","angular","module","factory"],"mappings":"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","file":"zabbixAPI.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPICore.service';\n\n/** @ngInject */\nfunction ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {\n\n /**\n * Zabbix API Wrapper.\n * Creates Zabbix API instance with given parameters (url, credentials and other).\n * Wraps API calls and provides high-level methods.\n */\n class ZabbixAPI {\n\n constructor(api_url, username, password, basicAuth, withCredentials) {\n this.url = api_url;\n this.username = username;\n this.password = password;\n this.auth = \"\";\n\n this.requestOptions = {\n basicAuth: basicAuth,\n withCredentials: withCredentials\n };\n\n this.loginPromise = null;\n this.loginErrorCount = 0;\n this.maxLoginAttempts = 3;\n\n this.alertSrv = alertSrv;\n this.zabbixAPICore = zabbixAPICoreService;\n\n this.getTrend = this.getTrend_ZBXNEXT1193;\n //getTrend = getTrend_30;\n }\n\n //////////////////////////\n // Core method wrappers //\n //////////////////////////\n\n request(method, params) {\n return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth)\n .catch(error => {\n if (isNotAuthorized(error.data)) {\n // Handle auth errors\n this.loginErrorCount++;\n if (this.loginErrorCount > this.maxLoginAttempts) {\n this.loginErrorCount = 0;\n return null;\n } else {\n return this.loginOnce()\n .then(() => this.request(method, params));\n }\n } else {\n // Handle API errors\n let message = error.data ? error.data : error.statusText;\n this.alertAPIError(message);\n }\n });\n }\n\n alertAPIError(message, timeout = 5000) {\n this.alertSrv.set(\n \"Zabbix API Error\",\n message,\n 'error',\n timeout\n );\n }\n\n /**\n * When API unauthenticated or auth token expired each request produce login()\n * call. But auth token is common to all requests. This function wraps login() method\n * and call it once. If login() already called just wait for it (return its promise).\n * @return login promise\n */\n loginOnce() {\n if (!this.loginPromise) {\n this.loginPromise = Promise.resolve(\n this.login().then(auth => {\n this.auth = auth;\n this.loginPromise = null;\n return auth;\n })\n );\n }\n return this.loginPromise;\n }\n\n /**\n * Get authentication token.\n */\n login() {\n return this.zabbixAPICore.login(this.url, this.username, this.password, this.requestOptions);\n }\n\n /**\n * Get Zabbix API version\n */\n getVersion() {\n return this.zabbixAPICore.getVersion(this.url, this.requestOptions);\n }\n\n ////////////////////////////////\n // Zabbix API method wrappers //\n ////////////////////////////////\n\n acknowledgeEvent(eventid, message) {\n var params = {\n eventids: eventid,\n message: message\n };\n\n return this.request('event.acknowledge', params);\n }\n\n getGroups() {\n var params = {\n output: ['name'],\n sortfield: 'name',\n real_hosts: true\n };\n\n return this.request('hostgroup.get', params);\n }\n\n getHosts(groupids) {\n var params = {\n output: ['name', 'host'],\n sortfield: 'name'\n };\n if (groupids) {\n params.groupids = groupids;\n }\n\n return this.request('host.get', params);\n }\n\n getApps(hostids) {\n var params = {\n output: ['applicationid', 'name'],\n hostids: hostids\n };\n\n return this.request('application.get', params);\n }\n\n /**\n * Get Zabbix items\n * @param {[type]} hostids host ids\n * @param {[type]} appids application ids\n * @param {String} itemtype 'num' or 'text'\n * @return {[type]} array of items\n */\n getItems(hostids, appids, itemtype) {\n var params = {\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n sortfield: 'name',\n webitems: true,\n filter: {},\n selectHosts: [\n 'hostid',\n 'name'\n ]\n };\n if (hostids) {\n params.hostids = hostids;\n }\n if (appids) {\n params.applicationids = appids;\n }\n if (itemtype === 'num') {\n // Return only numeric metrics\n params.filter.value_type = [0, 3];\n }\n if (itemtype === 'text') {\n // Return only text metrics\n params.filter.value_type = [1, 2, 4];\n }\n\n return this.request('item.get', params)\n .then(expandItems);\n\n function expandItems(items) {\n _.forEach(items, item => {\n item.item = item.name;\n item.name = utils.expandItemName(item.item, item.key_);\n return item;\n });\n return items;\n }\n }\n\n getMacros(hostids) {\n var params = {\n output: 'extend',\n hostids: hostids\n };\n\n return this.request('usermacro.get', params);\n }\n\n getGlobalMacros() {\n var params = {\n output: 'extend',\n globalmacro: true\n };\n\n return this.request('usermacro.get', params);\n }\n\n getLastValue(itemid) {\n var params = {\n output: ['lastvalue'],\n itemids: itemid\n };\n return this.request('item.get', params)\n .then(items => items.length ? items[0].lastvalue : null);\n }\n\n /**\n * Perform history query from Zabbix API\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} timeFrom Time in seconds\n * @param {Number} timeTill Time in seconds\n * @return {Array} Array of Zabbix history objects\n */\n getHistory(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n history: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('history.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n /**\n * Perform trends query from Zabbix API\n * Use trends api extension from ZBXNEXT-1193 patch.\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} time_from Time in seconds\n * @param {Number} time_till Time in seconds\n * @return {Array} Array of Zabbix trend objects\n */\n getTrend_ZBXNEXT1193(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n trend: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('trend.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getTrend_30(items, time_from, time_till, value_type) {\n var self = this;\n var itemids = _.map(items, 'itemid');\n\n var params = {\n output: [\"itemid\",\n \"clock\",\n value_type\n ],\n itemids: itemids,\n time_from: time_from\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (time_till) {\n params.time_till = time_till;\n }\n\n return self.request('trend.get', params);\n }\n\n getITService(serviceids) {\n var params = {\n output: 'extend',\n serviceids: serviceids\n };\n return this.request('service.get', params);\n }\n\n getSLA(serviceids, timeRange) {\n let [timeFrom, timeTo] = timeRange;\n var params = {\n serviceids: serviceids,\n intervals: [{\n from: timeFrom,\n to: timeTo\n }]\n };\n return this.request('service.getsla', params);\n }\n\n getTriggers(groupids, hostids, applicationids, options) {\n let {showTriggers, hideHostsInMaintenance, timeFrom, timeTo} = options;\n\n let params = {\n output: 'extend',\n groupids: groupids,\n hostids: hostids,\n applicationids: applicationids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n filter: {\n value: 1\n },\n selectGroups: ['name'],\n selectHosts: ['name', 'host'],\n selectItems: ['name', 'key_', 'lastvalue'],\n selectLastEvent: 'extend'\n };\n\n if (showTriggers) {\n params.filter.value = showTriggers;\n }\n\n if (hideHostsInMaintenance) {\n params.maintenance = false;\n }\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n\n getEvents(objectids, timeFrom, timeTo, showEvents) {\n var params = {\n output: 'extend',\n time_from: timeFrom,\n time_till: timeTo,\n objectids: objectids,\n select_acknowledges: 'extend',\n selectHosts: 'extend',\n value: showEvents\n };\n\n return this.request('event.get', params);\n }\n\n getAcknowledges(eventids) {\n var params = {\n output: 'extend',\n eventids: eventids,\n preservekeys: true,\n select_acknowledges: 'extend',\n sortfield: 'clock',\n sortorder: 'DESC'\n };\n\n return this.request('event.get', params)\n .then(events => {\n return _.filter(events, (event) => event.acknowledges.length);\n });\n }\n\n getAlerts(itemids, timeFrom, timeTo) {\n var params = {\n output: 'extend',\n itemids: itemids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n // filter: {\n // value: 1\n // },\n selectLastEvent: 'extend'\n };\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n }\n\n return ZabbixAPI;\n}\n\nfunction isNotAuthorized(message) {\n return (\n message === \"Session terminated, re-login, please.\" ||\n message === \"Not authorised.\" ||\n message === \"Not authorized.\"\n );\n}\n\nangular\n .module('grafana.services')\n .factory('zabbixAPIService', ZabbixAPIServiceFactory);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPI.service.js"],"names":["ZabbixAPIServiceFactory","alertSrv","zabbixAPICoreService","ZabbixAPI","api_url","username","password","basicAuth","withCredentials","url","auth","requestOptions","loginPromise","loginErrorCount","maxLoginAttempts","zabbixAPICore","getTrend","getTrend_ZBXNEXT1193","method","params","request","catch","isNotAuthorized","error","data","loginOnce","then","message","statusText","alertAPIError","timeout","set","Promise","resolve","login","getVersion","eventid","eventids","output","sortfield","real_hosts","groupids","hostids","appids","itemtype","webitems","filter","selectHosts","applicationids","value_type","utils","expandItems","itemids","globalmacro","itemid","items","length","lastvalue","timeFrom","timeTill","grouped_items","_","groupBy","promises","map","history","sortorder","time_from","time_till","all","flatten","trend","self","serviceids","timeRange","timeTo","intervals","from","to","options","showTriggers","hideHostsInMaintenance","expandDescription","expandData","expandComment","monitored","skipDependent","value","selectGroups","selectItems","selectLastEvent","maintenance","lastChangeSince","lastChangeTill","objectids","showEvents","select_acknowledges","preservekeys","events","event","acknowledges","angular","module","factory"],"mappings":";;;;;;;;;;;;;AAKA;AACA,WAASA,uBAAT,CAAiCC,QAAjC,EAA2CC,oBAA3C,EAAiE;AAAA,QAOzDC,SAPyD;AAS7D,yBAAYC,OAAZ,EAAqBC,QAArB,EAA+BC,QAA/B,EAAyCC,SAAzC,EAAoDC,eAApD,EAAqE;AAAA;;AACnE,aAAKC,GAAL,GAAwBL,OAAxB;AACA,aAAKC,QAAL,GAAwBA,QAAxB;AACA,aAAKC,QAAL,GAAwBA,QAAxB;AACA,aAAKI,IAAL,GAAwB,EAAxB;;AAEA,aAAKC,cAAL,GAAsB;AACpBJ,qBAAWA,SADS;AAEpBC,2BAAiBA;AAFG,SAAtB;;AAKA,aAAKI,YAAL,GAAoB,IAApB;AACA,aAAKC,eAAL,GAAuB,CAAvB;AACA,aAAKC,gBAAL,GAAwB,CAAxB;;AAEA,aAAKb,QAAL,GAAgBA,QAAhB;AACA,aAAKc,aAAL,GAAqBb,oBAArB;;AAEA,aAAKc,QAAL,GAAgB,KAAKC,oBAArB;AACA;AACD;;AAED;AACA;AACA;;AAjC6D;AAAA;AAAA,gCAmCrDC,MAnCqD,EAmC7CC,MAnC6C,EAmCrC;AAAA;;AACtB,iBAAO,KAAKJ,aAAL,CAAmBK,OAAnB,CAA2B,KAAKX,GAAhC,EAAqCS,MAArC,EAA6CC,MAA7C,EAAqD,KAAKR,cAA1D,EAA0E,KAAKD,IAA/E,EACNW,KADM,CACA,iBAAS;AACd,gBAAIC,gBAAgBC,MAAMC,IAAtB,CAAJ,EAAiC;AAC/B;AACA,oBAAKX,eAAL;AACA,kBAAI,MAAKA,eAAL,GAAuB,MAAKC,gBAAhC,EAAkD;AAChD,sBAAKD,eAAL,GAAuB,CAAvB;AACA,uBAAO,IAAP;AACD,eAHD,MAGO;AACL,uBAAO,MAAKY,SAAL,GACNC,IADM,CACD;AAAA,yBAAM,MAAKN,OAAL,CAAaF,MAAb,EAAqBC,MAArB,CAAN;AAAA,iBADC,CAAP;AAED;AACF,aAVD,MAUO;AACL;AACA,kBAAIQ,UAAUJ,MAAMC,IAAN,GAAaD,MAAMC,IAAnB,GAA0BD,MAAMK,UAA9C;AACA,oBAAKC,aAAL,CAAmBF,OAAnB;AACD;AACF,WAjBM,CAAP;AAkBD;AAtD4D;AAAA;AAAA,sCAwD/CA,OAxD+C,EAwDtB;AAAA,cAAhBG,OAAgB,uEAAN,IAAM;;AACrC,eAAK7B,QAAL,CAAc8B,GAAd,CACE,kBADF,EAEEJ,OAFF,EAGE,OAHF,EAIEG,OAJF;AAMD;AA/D4D;AAAA;AAAA,oCAuEjD;AAAA;;AACV,cAAI,CAAC,KAAKlB,YAAV,EAAwB;AACtB,iBAAKA,YAAL,GAAoBoB,QAAQC,OAAR,CAClB,KAAKC,KAAL,GAAaR,IAAb,CAAkB,gBAAQ;AACxB,qBAAKhB,IAAL,GAAYA,IAAZ;AACA,qBAAKE,YAAL,GAAoB,IAApB;AACA,qBAAOF,IAAP;AACD,aAJD,CADkB,CAApB;AAOD;AACD,iBAAO,KAAKE,YAAZ;AACD;AAlF4D;AAAA;AAAA,gCAuFrD;AACN,iBAAO,KAAKG,aAAL,CAAmBmB,KAAnB,CAAyB,KAAKzB,GAA9B,EAAmC,KAAKJ,QAAxC,EAAkD,KAAKC,QAAvD,EAAiE,KAAKK,cAAtE,CAAP;AACD;AAzF4D;AAAA;AAAA,qCA8FhD;AACX,iBAAO,KAAKI,aAAL,CAAmBoB,UAAnB,CAA8B,KAAK1B,GAAnC,EAAwC,KAAKE,cAA7C,CAAP;AACD;AAhG4D;AAAA;AAAA,yCAsG5CyB,OAtG4C,EAsGnCT,OAtGmC,EAsG1B;AACjC,cAAIR,SAAS;AACXkB,sBAAUD,OADC;AAEXT,qBAASA;AAFE,WAAb;;AAKA,iBAAO,KAAKP,OAAL,CAAa,mBAAb,EAAkCD,MAAlC,CAAP;AACD;AA7G4D;AAAA;AAAA,oCA+GjD;AACV,cAAIA,SAAS;AACXmB,oBAAQ,CAAC,MAAD,CADG;AAEXC,uBAAW,MAFA;AAGXC,wBAAY;AAHD,WAAb;;AAMA,iBAAO,KAAKpB,OAAL,CAAa,eAAb,EAA8BD,MAA9B,CAAP;AACD;AAvH4D;AAAA;AAAA,iCAyHpDsB,QAzHoD,EAyH1C;AACjB,cAAItB,SAAS;AACXmB,oBAAQ,CAAC,MAAD,EAAS,MAAT,CADG;AAEXC,uBAAW;AAFA,WAAb;AAIA,cAAIE,QAAJ,EAAc;AACZtB,mBAAOsB,QAAP,GAAkBA,QAAlB;AACD;;AAED,iBAAO,KAAKrB,OAAL,CAAa,UAAb,EAAyBD,MAAzB,CAAP;AACD;AAnI4D;AAAA;AAAA,gCAqIrDuB,OArIqD,EAqI5C;AACf,cAAIvB,SAAS;AACXmB,oBAAQ,CAAC,eAAD,EAAkB,MAAlB,CADG;AAEXI,qBAASA;AAFE,WAAb;;AAKA,iBAAO,KAAKtB,OAAL,CAAa,iBAAb,EAAgCD,MAAhC,CAAP;AACD;AA5I4D;AAAA;AAAA,iCAqJpDuB,OArJoD,EAqJ3CC,MArJ2C,EAqJnCC,QArJmC,EAqJzB;AAClC,cAAIzB,SAAS;AACXmB,oBAAQ,CACN,MADM,EACE,MADF,EAEN,YAFM,EAGN,QAHM,EAIN,QAJM,EAKN,OALM,CADG;AAQXC,uBAAW,MARA;AASXM,sBAAU,IATC;AAUXC,oBAAQ,EAVG;AAWXC,yBAAa,CAAC,QAAD,EAAW,MAAX;AAXF,WAAb;AAaA,cAAIL,OAAJ,EAAa;AACXvB,mBAAOuB,OAAP,GAAiBA,OAAjB;AACD;AACD,cAAIC,MAAJ,EAAY;AACVxB,mBAAO6B,cAAP,GAAwBL,MAAxB;AACD;AACD,cAAIC,aAAa,KAAjB,EAAwB;AACtB;AACAzB,mBAAO2B,MAAP,CAAcG,UAAd,GAA2B,CAAC,CAAD,EAAI,CAAJ,CAA3B;AACD;AACD,cAAIL,aAAa,MAAjB,EAAyB;AACvB;AACAzB,mBAAO2B,MAAP,CAAcG,UAAd,GAA2B,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAA3B;AACD;;AAED,iBAAO,KAAK7B,OAAL,CAAa,UAAb,EAAyBD,MAAzB,EACNO,IADM,CACDwB,MAAMC,WADL,CAAP;AAED;AApL4D;AAAA;AAAA,sCAsL/CC,OAtL+C,EAsLtC;AACrB,cAAIjC,SAAS;AACXiC,qBAASA,OADE;AAEXd,oBAAQ,CACN,MADM,EACE,MADF,EAEN,YAFM,EAGN,QAHM,EAIN,QAJM,EAKN,OALM,CAFG;AASXO,sBAAU,IATC;AAUXE,yBAAa,CAAC,QAAD,EAAW,MAAX;AAVF,WAAb;;AAaA,iBAAO,KAAK3B,OAAL,CAAa,UAAb,EAAyBD,MAAzB,EACNO,IADM,CACDwB,MAAMC,WADL,CAAP;AAED;AAtM4D;AAAA;AAAA,kCAwMnDT,OAxMmD,EAwM1C;AACjB,cAAIvB,SAAS;AACXmB,oBAAQ,QADG;AAEXI,qBAASA;AAFE,WAAb;;AAKA,iBAAO,KAAKtB,OAAL,CAAa,eAAb,EAA8BD,MAA9B,CAAP;AACD;AA/M4D;AAAA;AAAA,0CAiN3C;AAChB,cAAIA,SAAS;AACXmB,oBAAQ,QADG;AAEXe,yBAAa;AAFF,WAAb;;AAKA,iBAAO,KAAKjC,OAAL,CAAa,eAAb,EAA8BD,MAA9B,CAAP;AACD;AAxN4D;AAAA;AAAA,qCA0NhDmC,MA1NgD,EA0NxC;AACnB,cAAInC,SAAS;AACXmB,oBAAQ,CAAC,WAAD,CADG;AAEXc,qBAASE;AAFE,WAAb;AAIA,iBAAO,KAAKlC,OAAL,CAAa,UAAb,EAAyBD,MAAzB,EACNO,IADM,CACD;AAAA,mBAAS6B,MAAMC,MAAN,GAAeD,MAAM,CAAN,EAASE,SAAxB,GAAoC,IAA7C;AAAA,WADC,CAAP;AAED;AAjO4D;AAAA;AAAA,mCA2OlDF,KA3OkD,EA2O3CG,QA3O2C,EA2OjCC,QA3OiC,EA2OvB;AAAA;;AAEpC;AACA,cAAIC,gBAAgBC,EAAEC,OAAF,CAAUP,KAAV,EAAiB,YAAjB,CAApB;AACA,cAAIQ,WAAWF,EAAEG,GAAF,CAAMJ,aAAN,EAAqB,UAACL,KAAD,EAAQN,UAAR,EAAuB;AACzD,gBAAIG,UAAUS,EAAEG,GAAF,CAAMT,KAAN,EAAa,QAAb,CAAd;AACA,gBAAIpC,SAAS;AACXmB,sBAAQ,QADG;AAEX2B,uBAAShB,UAFE;AAGXG,uBAASA,OAHE;AAIXb,yBAAW,OAJA;AAKX2B,yBAAW,KALA;AAMXC,yBAAWT;AANA,aAAb;;AASA;AACA,gBAAIC,QAAJ,EAAc;AACZxC,qBAAOiD,SAAP,GAAmBT,QAAnB;AACD;;AAED,mBAAO,OAAKvC,OAAL,CAAa,aAAb,EAA4BD,MAA5B,CAAP;AACD,WAjBc,CAAf;;AAmBA,iBAAOa,QAAQqC,GAAR,CAAYN,QAAZ,EAAsBrC,IAAtB,CAA2BmC,EAAES,OAA7B,CAAP;AACD;AAnQ4D;AAAA;AAAA,6CA8QxCf,KA9QwC,EA8QjCG,QA9QiC,EA8QvBC,QA9QuB,EA8Qb;AAAA;;AAE9C;AACA,cAAIC,gBAAgBC,EAAEC,OAAF,CAAUP,KAAV,EAAiB,YAAjB,CAApB;AACA,cAAIQ,WAAWF,EAAEG,GAAF,CAAMJ,aAAN,EAAqB,UAACL,KAAD,EAAQN,UAAR,EAAuB;AACzD,gBAAIG,UAAUS,EAAEG,GAAF,CAAMT,KAAN,EAAa,QAAb,CAAd;AACA,gBAAIpC,SAAS;AACXmB,sBAAQ,QADG;AAEXiC,qBAAOtB,UAFI;AAGXG,uBAASA,OAHE;AAIXb,yBAAW,OAJA;AAKX2B,yBAAW,KALA;AAMXC,yBAAWT;AANA,aAAb;;AASA;AACA,gBAAIC,QAAJ,EAAc;AACZxC,qBAAOiD,SAAP,GAAmBT,QAAnB;AACD;;AAED,mBAAO,OAAKvC,OAAL,CAAa,WAAb,EAA0BD,MAA1B,CAAP;AACD,WAjBc,CAAf;;AAmBA,iBAAOa,QAAQqC,GAAR,CAAYN,QAAZ,EAAsBrC,IAAtB,CAA2BmC,EAAES,OAA7B,CAAP;AACD;AAtS4D;AAAA;AAAA,oCAwSjDf,KAxSiD,EAwS1CY,SAxS0C,EAwS/BC,SAxS+B,EAwSpBnB,UAxSoB,EAwSR;AACnD,cAAIuB,OAAO,IAAX;AACA,cAAIpB,UAAUS,EAAEG,GAAF,CAAMT,KAAN,EAAa,QAAb,CAAd;;AAEA,cAAIpC,SAAS;AACXmB,oBAAQ,CAAC,QAAD,EACN,OADM,EAENW,UAFM,CADG;AAKXG,qBAASA,OALE;AAMXe,uBAAWA;AANA,WAAb;;AASA;AACA,cAAIC,SAAJ,EAAe;AACbjD,mBAAOiD,SAAP,GAAmBA,SAAnB;AACD;;AAED,iBAAOI,KAAKpD,OAAL,CAAa,WAAb,EAA0BD,MAA1B,CAAP;AACD;AA3T4D;AAAA;AAAA,qCA6ThDsD,UA7TgD,EA6TpC;AACvB,cAAItD,SAAS;AACXmB,oBAAQ,QADG;AAEXmC,wBAAYA;AAFD,WAAb;AAIA,iBAAO,KAAKrD,OAAL,CAAa,aAAb,EAA4BD,MAA5B,CAAP;AACD;AAnU4D;AAAA;AAAA,+BAqUtDsD,UArUsD,EAqU1CC,SArU0C,EAqU/B;AAAA,0CACHA,SADG;AAAA,cACvBhB,QADuB;AAAA,cACbiB,MADa;;AAE5B,cAAIxD,SAAS;AACXsD,wBAAYA,UADD;AAEXG,uBAAW,CAAC;AACVC,oBAAMnB,QADI;AAEVoB,kBAAIH;AAFM,aAAD;AAFA,WAAb;AAOA,iBAAO,KAAKvD,OAAL,CAAa,gBAAb,EAA+BD,MAA/B,CAAP;AACD;AA/U4D;AAAA;AAAA,oCAiVjDsB,QAjViD,EAiVvCC,OAjVuC,EAiV9BM,cAjV8B,EAiVd+B,OAjVc,EAiVL;AAAA,cACjDC,YADiD,GACSD,OADT,CACjDC,YADiD;AAAA,cACnCC,sBADmC,GACSF,OADT,CACnCE,sBADmC;AAAA,cACXvB,QADW,GACSqB,OADT,CACXrB,QADW;AAAA,cACDiB,MADC,GACSI,OADT,CACDJ,MADC;;;AAGtD,cAAIxD,SAAS;AACXmB,oBAAQ,QADG;AAEXG,sBAAUA,QAFC;AAGXC,qBAASA,OAHE;AAIXM,4BAAgBA,cAJL;AAKXkC,+BAAmB,IALR;AAMXC,wBAAY,IAND;AAOXC,2BAAe,IAPJ;AAQXC,uBAAW,IARA;AASXC,2BAAe,IATJ;AAUX;AACAxC,oBAAQ;AACNyC,qBAAO;AADD,aAXG;AAcXC,0BAAc,CAAC,MAAD,CAdH;AAeXzC,yBAAa,CAAC,MAAD,EAAS,MAAT,CAfF;AAgBX0C,yBAAa,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,CAhBF;AAiBXC,6BAAiB;AAjBN,WAAb;;AAoBA,cAAIV,YAAJ,EAAkB;AAChB7D,mBAAO2B,MAAP,CAAcyC,KAAd,GAAsBP,YAAtB;AACD;;AAED,cAAIC,sBAAJ,EAA4B;AAC1B9D,mBAAOwE,WAAP,GAAqB,KAArB;AACD;;AAED,cAAIjC,YAAYiB,MAAhB,EAAwB;AACtBxD,mBAAOyE,eAAP,GAAyBlC,QAAzB;AACAvC,mBAAO0E,cAAP,GAAwBlB,MAAxB;AACD;;AAED,iBAAO,KAAKvD,OAAL,CAAa,aAAb,EAA4BD,MAA5B,CAAP;AACD;AAtX4D;AAAA;AAAA,kCAwXnD2E,SAxXmD,EAwXxCpC,QAxXwC,EAwX9BiB,MAxX8B,EAwXtBoB,UAxXsB,EAwXV;AACjD,cAAI5E,SAAS;AACXmB,oBAAQ,QADG;AAEX6B,uBAAWT,QAFA;AAGXU,uBAAWO,MAHA;AAIXmB,uBAAWA,SAJA;AAKXE,iCAAqB,QALV;AAMXjD,yBAAa,QANF;AAOXwC,mBAAOQ;AAPI,WAAb;;AAUA,iBAAO,KAAK3E,OAAL,CAAa,WAAb,EAA0BD,MAA1B,CAAP;AACD;AApY4D;AAAA;AAAA,wCAsY7CkB,QAtY6C,EAsYnC;AACxB,cAAIlB,SAAS;AACXmB,oBAAQ,QADG;AAEXD,sBAAUA,QAFC;AAGX4D,0BAAc,IAHH;AAIXD,iCAAqB,QAJV;AAKXzD,uBAAW,OALA;AAMX2B,uBAAW;AANA,WAAb;;AASA,iBAAO,KAAK9C,OAAL,CAAa,WAAb,EAA0BD,MAA1B,EACNO,IADM,CACD,kBAAU;AACd,mBAAOmC,EAAEf,MAAF,CAASoD,MAAT,EAAiB,UAACC,KAAD;AAAA,qBAAWA,MAAMC,YAAN,CAAmB5C,MAA9B;AAAA,aAAjB,CAAP;AACD,WAHM,CAAP;AAID;AApZ4D;AAAA;AAAA,kCAsZnDJ,OAtZmD,EAsZ1CM,QAtZ0C,EAsZhCiB,MAtZgC,EAsZxB;AACnC,cAAIxD,SAAS;AACXmB,oBAAQ,QADG;AAEXc,qBAASA,OAFE;AAGX8B,+BAAmB,IAHR;AAIXC,wBAAY,IAJD;AAKXC,2BAAe,IALJ;AAMXC,uBAAW,IANA;AAOXC,2BAAe,IAPJ;AAQX;AACA;AACA;AACA;AACAI,6BAAiB;AAZN,WAAb;;AAeA,cAAIhC,YAAYiB,MAAhB,EAAwB;AACtBxD,mBAAOyE,eAAP,GAAyBlC,QAAzB;AACAvC,mBAAO0E,cAAP,GAAwBlB,MAAxB;AACD;;AAED,iBAAO,KAAKvD,OAAL,CAAa,aAAb,EAA4BD,MAA5B,CAAP;AACD;AA5a4D;;AAAA;AAAA;;AA+a/D,WAAOhB,SAAP;AACD;;AAED,WAASmB,eAAT,CAAyBK,OAAzB,EAAkC;AAChC,WACEA,YAAY,uCAAZ,IACAA,YAAY,iBADZ,IAEAA,YAAY,iBAHd;AAKD;;;;AA9bM0E,a;;AACAxC,O;;AACKX,W;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8bZmD,cACGC,MADH,CACU,kBADV,EAEGC,OAFH,CAEW,kBAFX,EAE+BvG,uBAF/B","file":"zabbixAPI.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPICore.service';\n\n/** @ngInject */\nfunction ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {\n\n /**\n * Zabbix API Wrapper.\n * Creates Zabbix API instance with given parameters (url, credentials and other).\n * Wraps API calls and provides high-level methods.\n */\n class ZabbixAPI {\n\n constructor(api_url, username, password, basicAuth, withCredentials) {\n this.url = api_url;\n this.username = username;\n this.password = password;\n this.auth = \"\";\n\n this.requestOptions = {\n basicAuth: basicAuth,\n withCredentials: withCredentials\n };\n\n this.loginPromise = null;\n this.loginErrorCount = 0;\n this.maxLoginAttempts = 3;\n\n this.alertSrv = alertSrv;\n this.zabbixAPICore = zabbixAPICoreService;\n\n this.getTrend = this.getTrend_ZBXNEXT1193;\n //getTrend = getTrend_30;\n }\n\n //////////////////////////\n // Core method wrappers //\n //////////////////////////\n\n request(method, params) {\n return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth)\n .catch(error => {\n if (isNotAuthorized(error.data)) {\n // Handle auth errors\n this.loginErrorCount++;\n if (this.loginErrorCount > this.maxLoginAttempts) {\n this.loginErrorCount = 0;\n return null;\n } else {\n return this.loginOnce()\n .then(() => this.request(method, params));\n }\n } else {\n // Handle API errors\n let message = error.data ? error.data : error.statusText;\n this.alertAPIError(message);\n }\n });\n }\n\n alertAPIError(message, timeout = 5000) {\n this.alertSrv.set(\n \"Zabbix API Error\",\n message,\n 'error',\n timeout\n );\n }\n\n /**\n * When API unauthenticated or auth token expired each request produce login()\n * call. But auth token is common to all requests. This function wraps login() method\n * and call it once. If login() already called just wait for it (return its promise).\n * @return login promise\n */\n loginOnce() {\n if (!this.loginPromise) {\n this.loginPromise = Promise.resolve(\n this.login().then(auth => {\n this.auth = auth;\n this.loginPromise = null;\n return auth;\n })\n );\n }\n return this.loginPromise;\n }\n\n /**\n * Get authentication token.\n */\n login() {\n return this.zabbixAPICore.login(this.url, this.username, this.password, this.requestOptions);\n }\n\n /**\n * Get Zabbix API version\n */\n getVersion() {\n return this.zabbixAPICore.getVersion(this.url, this.requestOptions);\n }\n\n ////////////////////////////////\n // Zabbix API method wrappers //\n ////////////////////////////////\n\n acknowledgeEvent(eventid, message) {\n var params = {\n eventids: eventid,\n message: message\n };\n\n return this.request('event.acknowledge', params);\n }\n\n getGroups() {\n var params = {\n output: ['name'],\n sortfield: 'name',\n real_hosts: true\n };\n\n return this.request('hostgroup.get', params);\n }\n\n getHosts(groupids) {\n var params = {\n output: ['name', 'host'],\n sortfield: 'name'\n };\n if (groupids) {\n params.groupids = groupids;\n }\n\n return this.request('host.get', params);\n }\n\n getApps(hostids) {\n var params = {\n output: ['applicationid', 'name'],\n hostids: hostids\n };\n\n return this.request('application.get', params);\n }\n\n /**\n * Get Zabbix items\n * @param {[type]} hostids host ids\n * @param {[type]} appids application ids\n * @param {String} itemtype 'num' or 'text'\n * @return {[type]} array of items\n */\n getItems(hostids, appids, itemtype) {\n var params = {\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n sortfield: 'name',\n webitems: true,\n filter: {},\n selectHosts: ['hostid', 'name']\n };\n if (hostids) {\n params.hostids = hostids;\n }\n if (appids) {\n params.applicationids = appids;\n }\n if (itemtype === 'num') {\n // Return only numeric metrics\n params.filter.value_type = [0, 3];\n }\n if (itemtype === 'text') {\n // Return only text metrics\n params.filter.value_type = [1, 2, 4];\n }\n\n return this.request('item.get', params)\n .then(utils.expandItems);\n }\n\n getItemsByIDs(itemids) {\n var params = {\n itemids: itemids,\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n webitems: true,\n selectHosts: ['hostid', 'name']\n };\n\n return this.request('item.get', params)\n .then(utils.expandItems);\n }\n\n getMacros(hostids) {\n var params = {\n output: 'extend',\n hostids: hostids\n };\n\n return this.request('usermacro.get', params);\n }\n\n getGlobalMacros() {\n var params = {\n output: 'extend',\n globalmacro: true\n };\n\n return this.request('usermacro.get', params);\n }\n\n getLastValue(itemid) {\n var params = {\n output: ['lastvalue'],\n itemids: itemid\n };\n return this.request('item.get', params)\n .then(items => items.length ? items[0].lastvalue : null);\n }\n\n /**\n * Perform history query from Zabbix API\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} timeFrom Time in seconds\n * @param {Number} timeTill Time in seconds\n * @return {Array} Array of Zabbix history objects\n */\n getHistory(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n history: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('history.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n /**\n * Perform trends query from Zabbix API\n * Use trends api extension from ZBXNEXT-1193 patch.\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} time_from Time in seconds\n * @param {Number} time_till Time in seconds\n * @return {Array} Array of Zabbix trend objects\n */\n getTrend_ZBXNEXT1193(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n trend: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('trend.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getTrend_30(items, time_from, time_till, value_type) {\n var self = this;\n var itemids = _.map(items, 'itemid');\n\n var params = {\n output: [\"itemid\",\n \"clock\",\n value_type\n ],\n itemids: itemids,\n time_from: time_from\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (time_till) {\n params.time_till = time_till;\n }\n\n return self.request('trend.get', params);\n }\n\n getITService(serviceids) {\n var params = {\n output: 'extend',\n serviceids: serviceids\n };\n return this.request('service.get', params);\n }\n\n getSLA(serviceids, timeRange) {\n let [timeFrom, timeTo] = timeRange;\n var params = {\n serviceids: serviceids,\n intervals: [{\n from: timeFrom,\n to: timeTo\n }]\n };\n return this.request('service.getsla', params);\n }\n\n getTriggers(groupids, hostids, applicationids, options) {\n let {showTriggers, hideHostsInMaintenance, timeFrom, timeTo} = options;\n\n let params = {\n output: 'extend',\n groupids: groupids,\n hostids: hostids,\n applicationids: applicationids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n filter: {\n value: 1\n },\n selectGroups: ['name'],\n selectHosts: ['name', 'host'],\n selectItems: ['name', 'key_', 'lastvalue'],\n selectLastEvent: 'extend'\n };\n\n if (showTriggers) {\n params.filter.value = showTriggers;\n }\n\n if (hideHostsInMaintenance) {\n params.maintenance = false;\n }\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n\n getEvents(objectids, timeFrom, timeTo, showEvents) {\n var params = {\n output: 'extend',\n time_from: timeFrom,\n time_till: timeTo,\n objectids: objectids,\n select_acknowledges: 'extend',\n selectHosts: 'extend',\n value: showEvents\n };\n\n return this.request('event.get', params);\n }\n\n getAcknowledges(eventids) {\n var params = {\n output: 'extend',\n eventids: eventids,\n preservekeys: true,\n select_acknowledges: 'extend',\n sortfield: 'clock',\n sortorder: 'DESC'\n };\n\n return this.request('event.get', params)\n .then(events => {\n return _.filter(events, (event) => event.acknowledges.length);\n });\n }\n\n getAlerts(itemids, timeFrom, timeTo) {\n var params = {\n output: 'extend',\n itemids: itemids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n // filter: {\n // value: 1\n // },\n selectLastEvent: 'extend'\n };\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n }\n\n return ZabbixAPI;\n}\n\nfunction isNotAuthorized(message) {\n return (\n message === \"Session terminated, re-login, please.\" ||\n message === \"Not authorised.\" ||\n message === \"Not authorized.\"\n );\n}\n\nangular\n .module('grafana.services')\n .factory('zabbixAPIService', ZabbixAPIServiceFactory);\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbixCachingProxy.service.js b/dist/datasource-zabbix/zabbixCachingProxy.service.js
index 9ccf0f1..5e657ec 100644
--- a/dist/datasource-zabbix/zabbixCachingProxy.service.js
+++ b/dist/datasource-zabbix/zabbixCachingProxy.service.js
@@ -29,10 +29,11 @@ System.register(['angular', 'lodash'], function (_export, _context) {
/** @ngInject */
function ZabbixCachingProxyFactory() {
var ZabbixCachingProxy = function () {
- function ZabbixCachingProxy(zabbixAPI, cacheOptions) {
+ function ZabbixCachingProxy(zabbixAPI, zabbixDBConnector, cacheOptions) {
_classCallCheck(this, ZabbixCachingProxy);
this.zabbixAPI = zabbixAPI;
+ this.dbConnector = zabbixDBConnector;
this.cacheEnabled = cacheOptions.enabled;
this.ttl = cacheOptions.ttl || 600000; // 10 minutes by default
@@ -45,7 +46,8 @@ System.register(['angular', 'lodash'], function (_export, _context) {
history: {},
trends: {},
macros: {},
- globalMacros: {}
+ globalMacros: {},
+ itServices: {}
};
this.historyPromises = {};
@@ -53,6 +55,11 @@ System.register(['angular', 'lodash'], function (_export, _context) {
// Don't run duplicated history requests
this.getHistory = callAPIRequestOnce(_.bind(this.zabbixAPI.getHistory, this.zabbixAPI), this.historyPromises, getHistoryRequestHash);
+ if (this.dbConnector) {
+ this.getHistoryDB = callAPIRequestOnce(_.bind(this.dbConnector.getHistory, this.dbConnector), this.historyPromises, getDBQueryHash);
+ this.getTrendsDB = callAPIRequestOnce(_.bind(this.dbConnector.getTrends, this.dbConnector), this.historyPromises, getDBQueryHash);
+ }
+
// Don't run duplicated requests
this.groupPromises = {};
this.getGroupsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getGroups, this.zabbixAPI), this.groupPromises, getRequestHash);
@@ -66,6 +73,12 @@ System.register(['angular', 'lodash'], function (_export, _context) {
this.itemPromises = {};
this.getItemsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getItems, this.zabbixAPI), this.itemPromises, getRequestHash);
+ this.itemByIdPromises = {};
+ this.getItemsByIdOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getItemsByIDs, this.zabbixAPI), this.itemPromises, getRequestHash);
+
+ this.itServicesPromises = {};
+ this.getITServicesOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getITService, this.zabbixAPI), this.itServicesPromises, getRequestHash);
+
this.macroPromises = {};
this.getMacrosOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getMacros, this.zabbixAPI), this.macroPromises, getRequestHash);
@@ -120,6 +133,17 @@ System.register(['angular', 'lodash'], function (_export, _context) {
var params = [hostids, appids, itemtype];
return this.proxyRequest(this.getItemsOnce, params, this.cache.items);
}
+ }, {
+ key: 'getItemsByIDs',
+ value: function getItemsByIDs(itemids) {
+ var params = [itemids];
+ return this.proxyRequest(this.getItemsByIdOnce, params, this.cache.items);
+ }
+ }, {
+ key: 'getITServices',
+ value: function getITServices() {
+ return this.proxyRequest(this.getITServicesOnce, [], this.cache.itServices);
+ }
}, {
key: 'getMacros',
value: function getMacros(hostids) {
@@ -209,6 +233,14 @@ System.register(['angular', 'lodash'], function (_export, _context) {
return stamp.getHash();
}
+ function getDBQueryHash(args) {
+ var itemids = _.map(args[0], 'itemid');
+ var consolidateBy = args[3].consolidateBy;
+ var intervalMs = args[3].intervalMs;
+ var stamp = itemids.join() + args[1] + args[2] + consolidateBy + intervalMs;
+ return stamp.getHash();
+ }
+
return {
setters: [function (_angular) {
angular = _angular.default;
diff --git a/dist/datasource-zabbix/zabbixCachingProxy.service.js.map b/dist/datasource-zabbix/zabbixCachingProxy.service.js.map
index 9eda30f..5edd381 100644
--- a/dist/datasource-zabbix/zabbixCachingProxy.service.js.map
+++ b/dist/datasource-zabbix/zabbixCachingProxy.service.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/datasource-zabbix/zabbixCachingProxy.service.js"],"names":["ZabbixCachingProxyFactory","ZabbixCachingProxy","zabbixAPI","cacheOptions","cacheEnabled","enabled","ttl","cache","groups","hosts","applications","items","history","trends","macros","globalMacros","historyPromises","getHistory","callAPIRequestOnce","_","bind","getHistoryRequestHash","groupPromises","getGroupsOnce","getGroups","getRequestHash","hostPromises","getHostsOnce","getHosts","appPromises","getAppsOnce","getApps","itemPromises","getItemsOnce","getItems","macroPromises","getMacrosOnce","getMacros","globalMacroPromises","getGlobalMacrosOnce","getGlobalMacros","cacheObject","object_age","Date","now","timestamp","request","params","hash","isExpired","Promise","resolve","value","then","result","proxyRequest","groupids","hostids","appids","itemtype","promises","all","flatten","time_from","time_till","historyStorage","full_history","expired","filter","keyBy","item","itemid","length","grouped_history","groupBy","forEach","map","func","promiseKeeper","argsHashFunc","arguments","apply","args","requestStamp","arg","undefined","isArray","sort","toString","join","getHash","itemids","stamp","angular","module","factory","String","prototype","i","chr","len","charCodeAt","indexBy"],"mappings":"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","file":"zabbixCachingProxy.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\n\n// Use factory() instead service() for multiple datasources support.\n// Each datasource instance must initialize its own cache.\n\n/** @ngInject */\nfunction ZabbixCachingProxyFactory() {\n\n class ZabbixCachingProxy {\n constructor(zabbixAPI, cacheOptions) {\n this.zabbixAPI = zabbixAPI;\n this.cacheEnabled = cacheOptions.enabled;\n this.ttl = cacheOptions.ttl || 600000; // 10 minutes by default\n\n // Internal objects for data storing\n this.cache = {\n groups: {},\n hosts: {},\n applications: {},\n items: {},\n history: {},\n trends: {},\n macros: {},\n globalMacros: {}\n };\n\n this.historyPromises = {};\n\n // Don't run duplicated history requests\n this.getHistory = callAPIRequestOnce(_.bind(this.zabbixAPI.getHistory, this.zabbixAPI),\n this.historyPromises, getHistoryRequestHash);\n\n // Don't run duplicated requests\n this.groupPromises = {};\n this.getGroupsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getGroups, this.zabbixAPI),\n this.groupPromises, getRequestHash);\n\n this.hostPromises = {};\n this.getHostsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getHosts, this.zabbixAPI),\n this.hostPromises, getRequestHash);\n\n this.appPromises = {};\n this.getAppsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getApps, this.zabbixAPI),\n this.appPromises, getRequestHash);\n\n this.itemPromises = {};\n this.getItemsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getItems, this.zabbixAPI),\n this.itemPromises, getRequestHash);\n\n this.macroPromises = {};\n this.getMacrosOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getMacros, this.zabbixAPI),\n this.macroPromises, getRequestHash);\n\n this.globalMacroPromises = {};\n this.getGlobalMacrosOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getGlobalMacros, this.zabbixAPI),\n this.globalMacroPromises, getRequestHash);\n }\n\n isExpired(cacheObject) {\n if (cacheObject) {\n let object_age = Date.now() - cacheObject.timestamp;\n return !(cacheObject.timestamp && object_age < this.ttl);\n } else {\n return true;\n }\n }\n\n /**\n * Check that result is present in cache and up to date\n * or send request to API.\n */\n proxyRequest(request, params, cacheObject) {\n let hash = getRequestHash(params);\n if (this.cacheEnabled && !this.isExpired(cacheObject[hash])) {\n return Promise.resolve(cacheObject[hash].value);\n } else {\n return request(...params)\n .then(result => {\n cacheObject[hash] = {\n value: result,\n timestamp: Date.now()\n };\n return result;\n });\n }\n }\n\n getGroups() {\n return this.proxyRequest(this.getGroupsOnce, [], this.cache.groups);\n }\n\n getHosts(groupids) {\n return this.proxyRequest(this.getHostsOnce, [groupids], this.cache.hosts);\n }\n\n getApps(hostids) {\n return this.proxyRequest(this.getAppsOnce, [hostids], this.cache.applications);\n }\n\n getItems(hostids, appids, itemtype) {\n let params = [hostids, appids, itemtype];\n return this.proxyRequest(this.getItemsOnce, params, this.cache.items);\n }\n\n getMacros(hostids) {\n // Merge global macros and host macros\n let promises = [\n this.proxyRequest(this.getMacrosOnce, [hostids], this.cache.macros),\n this.proxyRequest(this.getGlobalMacrosOnce, [], this.cache.globalMacros)\n ];\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getHistoryFromCache(items, time_from, time_till) {\n var historyStorage = this.cache.history;\n var full_history;\n var expired = _.filter(_.keyBy(items, 'itemid'), (item, itemid) => {\n return !historyStorage[itemid];\n });\n if (expired.length) {\n return this.zabbixAPI.getHistory(expired, time_from, time_till).then(function(history) {\n var grouped_history = _.groupBy(history, 'itemid');\n _.forEach(expired, item => {\n var itemid = item.itemid;\n historyStorage[itemid] = item;\n historyStorage[itemid].time_from = time_from;\n historyStorage[itemid].time_till = time_till;\n historyStorage[itemid].history = grouped_history[itemid];\n });\n full_history = _.map(items, item => {\n return historyStorage[item.itemid].history;\n });\n return _.flatten(full_history, true);\n });\n } else {\n full_history = _.map(items, function(item) {\n return historyStorage[item.itemid].history;\n });\n return Promise.resolve(_.flatten(full_history, true));\n }\n }\n\n getHistoryFromAPI(items, time_from, time_till) {\n return this.zabbixAPI.getHistory(items, time_from, time_till);\n }\n }\n\n return ZabbixCachingProxy;\n}\n\nangular\n .module('grafana.services')\n .factory('ZabbixCachingProxy', ZabbixCachingProxyFactory);\n\n/**\n * Wrap zabbix API request to prevent multiple calls\n * with same params when waiting for result.\n */\nfunction callAPIRequestOnce(func, promiseKeeper, argsHashFunc) {\n return function() {\n var hash = argsHashFunc(arguments);\n if (!promiseKeeper[hash]) {\n promiseKeeper[hash] = Promise.resolve(\n func.apply(this, arguments)\n .then(result => {\n promiseKeeper[hash] = null;\n return result;\n })\n );\n }\n return promiseKeeper[hash];\n };\n}\n\nfunction getRequestHash(args) {\n var requestStamp = _.map(args, arg => {\n if (arg === undefined) {\n return 'undefined';\n } else {\n if (_.isArray(arg)) {\n return arg.sort().toString();\n } else {\n return arg.toString();\n }\n }\n }).join();\n return requestStamp.getHash();\n}\n\nfunction getHistoryRequestHash(args) {\n let itemids = _.map(args[0], 'itemid');\n let stamp = itemids.join() + args[1] + args[2];\n return stamp.getHash();\n}\n\nString.prototype.getHash = function() {\n var hash = 0, i, chr, len;\n if (this.length !== 0) {\n for (i = 0, len = this.length; i < len; i++) {\n chr = this.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n};\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.keyBy) {_.keyBy = _.indexBy;}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../src/datasource-zabbix/zabbixCachingProxy.service.js"],"names":["ZabbixCachingProxyFactory","ZabbixCachingProxy","zabbixAPI","zabbixDBConnector","cacheOptions","dbConnector","cacheEnabled","enabled","ttl","cache","groups","hosts","applications","items","history","trends","macros","globalMacros","itServices","historyPromises","getHistory","callAPIRequestOnce","_","bind","getHistoryRequestHash","getHistoryDB","getDBQueryHash","getTrendsDB","getTrends","groupPromises","getGroupsOnce","getGroups","getRequestHash","hostPromises","getHostsOnce","getHosts","appPromises","getAppsOnce","getApps","itemPromises","getItemsOnce","getItems","itemByIdPromises","getItemsByIdOnce","getItemsByIDs","itServicesPromises","getITServicesOnce","getITService","macroPromises","getMacrosOnce","getMacros","globalMacroPromises","getGlobalMacrosOnce","getGlobalMacros","cacheObject","object_age","Date","now","timestamp","request","params","hash","isExpired","Promise","resolve","value","then","result","proxyRequest","groupids","hostids","appids","itemtype","itemids","promises","all","flatten","time_from","time_till","historyStorage","full_history","expired","filter","keyBy","item","itemid","length","grouped_history","groupBy","forEach","map","func","promiseKeeper","argsHashFunc","arguments","apply","args","requestStamp","arg","undefined","isArray","sort","toString","join","getHash","stamp","consolidateBy","intervalMs","angular","module","factory","String","prototype","i","chr","len","charCodeAt","indexBy"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;;AAEA;AACA,WAASA,yBAAT,GAAqC;AAAA,QAE7BC,kBAF6B;AAGjC,kCAAYC,SAAZ,EAAuBC,iBAAvB,EAA0CC,YAA1C,EAAwD;AAAA;;AACtD,aAAKF,SAAL,GAAiBA,SAAjB;AACA,aAAKG,WAAL,GAAmBF,iBAAnB;AACA,aAAKG,YAAL,GAAoBF,aAAaG,OAAjC;AACA,aAAKC,GAAL,GAAoBJ,aAAaI,GAAb,IAAoB,MAAxC,CAJsD,CAIN;;AAEhD;AACA,aAAKC,KAAL,GAAa;AACXC,kBAAQ,EADG;AAEXC,iBAAO,EAFI;AAGXC,wBAAc,EAHH;AAIXC,iBAAO,EAJI;AAKXC,mBAAS,EALE;AAMXC,kBAAQ,EANG;AAOXC,kBAAQ,EAPG;AAQXC,wBAAc,EARH;AASXC,sBAAY;AATD,SAAb;;AAYA,aAAKC,eAAL,GAAuB,EAAvB;;AAEA;AACA,aAAKC,UAAL,GAAkBC,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAekB,UAAtB,EAAkC,KAAKlB,SAAvC,CAAnB,EACmB,KAAKiB,eADxB,EACyCK,qBADzC,CAAlB;;AAGA,YAAI,KAAKnB,WAAT,EAAsB;AACpB,eAAKoB,YAAL,GAAoBJ,mBAAmBC,EAAEC,IAAF,CAAO,KAAKlB,WAAL,CAAiBe,UAAxB,EAAoC,KAAKf,WAAzC,CAAnB,EACmB,KAAKc,eADxB,EACyCO,cADzC,CAApB;AAEA,eAAKC,WAAL,GAAmBN,mBAAmBC,EAAEC,IAAF,CAAO,KAAKlB,WAAL,CAAiBuB,SAAxB,EAAmC,KAAKvB,WAAxC,CAAnB,EACmB,KAAKc,eADxB,EACyCO,cADzC,CAAnB;AAED;;AAED;AACA,aAAKG,aAAL,GAAqB,EAArB;AACA,aAAKC,aAAL,GAAqBT,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAe6B,SAAtB,EAAiC,KAAK7B,SAAtC,CAAnB,EACmB,KAAK2B,aADxB,EACuCG,cADvC,CAArB;;AAGA,aAAKC,YAAL,GAAoB,EAApB;AACA,aAAKC,YAAL,GAAoBb,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAeiC,QAAtB,EAAgC,KAAKjC,SAArC,CAAnB,EACmB,KAAK+B,YADxB,EACsCD,cADtC,CAApB;;AAGA,aAAKI,WAAL,GAAmB,EAAnB;AACA,aAAKC,WAAL,GAAmBhB,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAeoC,OAAtB,EAA+B,KAAKpC,SAApC,CAAnB,EACmB,KAAKkC,WADxB,EACqCJ,cADrC,CAAnB;;AAGA,aAAKO,YAAL,GAAoB,EAApB;AACA,aAAKC,YAAL,GAAoBnB,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAeuC,QAAtB,EAAgC,KAAKvC,SAArC,CAAnB,EACmB,KAAKqC,YADxB,EACsCP,cADtC,CAApB;;AAGA,aAAKU,gBAAL,GAAwB,EAAxB;AACA,aAAKC,gBAAL,GAAwBtB,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAe0C,aAAtB,EAAqC,KAAK1C,SAA1C,CAAnB,EACmB,KAAKqC,YADxB,EACsCP,cADtC,CAAxB;;AAGA,aAAKa,kBAAL,GAA0B,EAA1B;AACA,aAAKC,iBAAL,GAAyBzB,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAe6C,YAAtB,EAAoC,KAAK7C,SAAzC,CAAnB,EACmB,KAAK2C,kBADxB,EAC4Cb,cAD5C,CAAzB;;AAGA,aAAKgB,aAAL,GAAqB,EAArB;AACA,aAAKC,aAAL,GAAqB5B,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAegD,SAAtB,EAAiC,KAAKhD,SAAtC,CAAnB,EACkB,KAAK8C,aADvB,EACsChB,cADtC,CAArB;;AAGA,aAAKmB,mBAAL,GAA2B,EAA3B;AACA,aAAKC,mBAAL,GAA2B/B,mBAAmBC,EAAEC,IAAF,CAAO,KAAKrB,SAAL,CAAemD,eAAtB,EAAuC,KAAKnD,SAA5C,CAAnB,EACmB,KAAKiD,mBADxB,EAC6CnB,cAD7C,CAA3B;AAED;;AAnEgC;AAAA;AAAA,kCAqEvBsB,WArEuB,EAqEV;AACrB,cAAIA,WAAJ,EAAiB;AACf,gBAAIC,aAAaC,KAAKC,GAAL,KAAaH,YAAYI,SAA1C;AACA,mBAAO,EAAEJ,YAAYI,SAAZ,IAAyBH,aAAa,KAAK/C,GAA7C,CAAP;AACD,WAHD,MAGO;AACL,mBAAO,IAAP;AACD;AACF;AA5EgC;AAAA;AAAA,qCAkFpBmD,OAlFoB,EAkFXC,MAlFW,EAkFHN,WAlFG,EAkFU;AACzC,cAAIO,OAAO7B,eAAe4B,MAAf,CAAX;AACA,cAAI,KAAKtD,YAAL,IAAqB,CAAC,KAAKwD,SAAL,CAAeR,YAAYO,IAAZ,CAAf,CAA1B,EAA6D;AAC3D,mBAAOE,QAAQC,OAAR,CAAgBV,YAAYO,IAAZ,EAAkBI,KAAlC,CAAP;AACD,WAFD,MAEO;AACL,mBAAON,4CAAWC,MAAX,GACNM,IADM,CACD,kBAAU;AACdZ,0BAAYO,IAAZ,IAAoB;AAClBI,uBAAOE,MADW;AAElBT,2BAAWF,KAAKC,GAAL;AAFO,eAApB;AAIA,qBAAOU,MAAP;AACD,aAPM,CAAP;AAQD;AACF;AAhGgC;AAAA;AAAA,oCAkGrB;AACV,iBAAO,KAAKC,YAAL,CAAkB,KAAKtC,aAAvB,EAAsC,EAAtC,EAA0C,KAAKrB,KAAL,CAAWC,MAArD,CAAP;AACD;AApGgC;AAAA;AAAA,iCAsGxB2D,QAtGwB,EAsGd;AACjB,iBAAO,KAAKD,YAAL,CAAkB,KAAKlC,YAAvB,EAAqC,CAACmC,QAAD,CAArC,EAAiD,KAAK5D,KAAL,CAAWE,KAA5D,CAAP;AACD;AAxGgC;AAAA;AAAA,gCA0GzB2D,OA1GyB,EA0GhB;AACf,iBAAO,KAAKF,YAAL,CAAkB,KAAK/B,WAAvB,EAAoC,CAACiC,OAAD,CAApC,EAA+C,KAAK7D,KAAL,CAAWG,YAA1D,CAAP;AACD;AA5GgC;AAAA;AAAA,iCA8GxB0D,OA9GwB,EA8GfC,MA9Ge,EA8GPC,QA9GO,EA8GG;AAClC,cAAIZ,SAAS,CAACU,OAAD,EAAUC,MAAV,EAAkBC,QAAlB,CAAb;AACA,iBAAO,KAAKJ,YAAL,CAAkB,KAAK5B,YAAvB,EAAqCoB,MAArC,EAA6C,KAAKnD,KAAL,CAAWI,KAAxD,CAAP;AACD;AAjHgC;AAAA;AAAA,sCAmHnB4D,OAnHmB,EAmHV;AACrB,cAAIb,SAAS,CAACa,OAAD,CAAb;AACA,iBAAO,KAAKL,YAAL,CAAkB,KAAKzB,gBAAvB,EAAyCiB,MAAzC,EAAiD,KAAKnD,KAAL,CAAWI,KAA5D,CAAP;AACD;AAtHgC;AAAA;AAAA,wCAwHjB;AACd,iBAAO,KAAKuD,YAAL,CAAkB,KAAKtB,iBAAvB,EAA0C,EAA1C,EAA8C,KAAKrC,KAAL,CAAWS,UAAzD,CAAP;AACD;AA1HgC;AAAA;AAAA,kCA4HvBoD,OA5HuB,EA4Hd;AACjB;AACA,cAAII,WAAW,CACb,KAAKN,YAAL,CAAkB,KAAKnB,aAAvB,EAAsC,CAACqB,OAAD,CAAtC,EAAiD,KAAK7D,KAAL,CAAWO,MAA5D,CADa,EAEb,KAAKoD,YAAL,CAAkB,KAAKhB,mBAAvB,EAA4C,EAA5C,EAAgD,KAAK3C,KAAL,CAAWQ,YAA3D,CAFa,CAAf;;AAKA,iBAAO8C,QAAQY,GAAR,CAAYD,QAAZ,EAAsBR,IAAtB,CAA2B5C,EAAEsD,OAA7B,CAAP;AACD;AApIgC;AAAA;AAAA,4CAsIb/D,KAtIa,EAsINgE,SAtIM,EAsIKC,SAtIL,EAsIgB;AAC/C,cAAIC,iBAAiB,KAAKtE,KAAL,CAAWK,OAAhC;AACA,cAAIkE,YAAJ;AACA,cAAIC,UAAU3D,EAAE4D,MAAF,CAAS5D,EAAE6D,KAAF,CAAQtE,KAAR,EAAe,QAAf,CAAT,EAAmC,UAACuE,IAAD,EAAOC,MAAP,EAAkB;AACjE,mBAAO,CAACN,eAAeM,MAAf,CAAR;AACD,WAFa,CAAd;AAGA,cAAIJ,QAAQK,MAAZ,EAAoB;AAClB,mBAAO,KAAKpF,SAAL,CAAekB,UAAf,CAA0B6D,OAA1B,EAAmCJ,SAAnC,EAA8CC,SAA9C,EAAyDZ,IAAzD,CAA8D,UAASpD,OAAT,EAAkB;AACrF,kBAAIyE,kBAAkBjE,EAAEkE,OAAF,CAAU1E,OAAV,EAAmB,QAAnB,CAAtB;AACAQ,gBAAEmE,OAAF,CAAUR,OAAV,EAAmB,gBAAQ;AACzB,oBAAII,SAASD,KAAKC,MAAlB;AACAN,+BAAeM,MAAf,IAAyBD,IAAzB;AACAL,+BAAeM,MAAf,EAAuBR,SAAvB,GAAmCA,SAAnC;AACAE,+BAAeM,MAAf,EAAuBP,SAAvB,GAAmCA,SAAnC;AACAC,+BAAeM,MAAf,EAAuBvE,OAAvB,GAAiCyE,gBAAgBF,MAAhB,CAAjC;AACD,eAND;AAOAL,6BAAe1D,EAAEoE,GAAF,CAAM7E,KAAN,EAAa,gBAAQ;AAClC,uBAAOkE,eAAeK,KAAKC,MAApB,EAA4BvE,OAAnC;AACD,eAFc,CAAf;AAGA,qBAAOQ,EAAEsD,OAAF,CAAUI,YAAV,EAAwB,IAAxB,CAAP;AACD,aAbM,CAAP;AAcD,WAfD,MAeO;AACLA,2BAAe1D,EAAEoE,GAAF,CAAM7E,KAAN,EAAa,UAASuE,IAAT,EAAe;AACzC,qBAAOL,eAAeK,KAAKC,MAApB,EAA4BvE,OAAnC;AACD,aAFc,CAAf;AAGA,mBAAOiD,QAAQC,OAAR,CAAgB1C,EAAEsD,OAAF,CAAUI,YAAV,EAAwB,IAAxB,CAAhB,CAAP;AACD;AACF;AAjKgC;AAAA;AAAA,0CAmKfnE,KAnKe,EAmKRgE,SAnKQ,EAmKGC,SAnKH,EAmKc;AAC7C,iBAAO,KAAK5E,SAAL,CAAekB,UAAf,CAA0BP,KAA1B,EAAiCgE,SAAjC,EAA4CC,SAA5C,CAAP;AACD;AArKgC;;AAAA;AAAA;;AAwKnC,WAAO7E,kBAAP;AACD;;AAMD;;;;AAIA,WAASoB,kBAAT,CAA4BsE,IAA5B,EAAkCC,aAAlC,EAAiDC,YAAjD,EAA+D;AAC7D,WAAO,YAAW;AAChB,UAAIhC,OAAOgC,aAAaC,SAAb,CAAX;AACA,UAAI,CAACF,cAAc/B,IAAd,CAAL,EAA0B;AACxB+B,sBAAc/B,IAAd,IAAsBE,QAAQC,OAAR,CACpB2B,KAAKI,KAAL,CAAW,IAAX,EAAiBD,SAAjB,EACC5B,IADD,CACM,kBAAU;AACd0B,wBAAc/B,IAAd,IAAsB,IAAtB;AACA,iBAAOM,MAAP;AACD,SAJD,CADoB,CAAtB;AAOD;AACD,aAAOyB,cAAc/B,IAAd,CAAP;AACD,KAZD;AAaD;;AAED,WAAS7B,cAAT,CAAwBgE,IAAxB,EAA8B;AAC5B,QAAIC,eAAe3E,EAAEoE,GAAF,CAAMM,IAAN,EAAY,eAAO;AACpC,UAAIE,QAAQC,SAAZ,EAAuB;AACrB,eAAO,WAAP;AACD,OAFD,MAEO;AACL,YAAI7E,EAAE8E,OAAF,CAAUF,GAAV,CAAJ,EAAoB;AAClB,iBAAOA,IAAIG,IAAJ,GAAWC,QAAX,EAAP;AACD,SAFD,MAEO;AACL,iBAAOJ,IAAII,QAAJ,EAAP;AACD;AACF;AACF,KAVkB,EAUhBC,IAVgB,EAAnB;AAWA,WAAON,aAAaO,OAAb,EAAP;AACD;;AAED,WAAShF,qBAAT,CAA+BwE,IAA/B,EAAqC;AACnC,QAAIvB,UAAUnD,EAAEoE,GAAF,CAAMM,KAAK,CAAL,CAAN,EAAe,QAAf,CAAd;AACA,QAAIS,QAAQhC,QAAQ8B,IAAR,KAAiBP,KAAK,CAAL,CAAjB,GAA2BA,KAAK,CAAL,CAAvC;AACA,WAAOS,MAAMD,OAAN,EAAP;AACD;;AAED,WAAS9E,cAAT,CAAwBsE,IAAxB,EAA8B;AAC5B,QAAIvB,UAAUnD,EAAEoE,GAAF,CAAMM,KAAK,CAAL,CAAN,EAAe,QAAf,CAAd;AACA,QAAIU,gBAAgBV,KAAK,CAAL,EAAQU,aAA5B;AACA,QAAIC,aAAaX,KAAK,CAAL,EAAQW,UAAzB;AACA,QAAIF,QAAQhC,QAAQ8B,IAAR,KAAiBP,KAAK,CAAL,CAAjB,GAA2BA,KAAK,CAAL,CAA3B,GAAqCU,aAArC,GAAqDC,UAAjE;AACA,WAAOF,MAAMD,OAAN,EAAP;AACD;;;;AArOMI,a;;AACAtF,O;;;;;;;;;;;;;;;;;;;;;AAiLPsF,cACGC,MADH,CACU,kBADV,EAEGC,OAFH,CAEW,oBAFX,EAEiC9G,yBAFjC,EAqDA+G,OAAOC,SAAP,CAAiBR,OAAjB,GAA2B,YAAW;AACpC,YAAI3C,OAAO,CAAX;AAAA,YAAcoD,CAAd;AAAA,YAAiBC,GAAjB;AAAA,YAAsBC,GAAtB;AACA,YAAI,KAAK7B,MAAL,KAAgB,CAApB,EAAuB;AACrB,eAAK2B,IAAI,CAAJ,EAAOE,MAAM,KAAK7B,MAAvB,EAA+B2B,IAAIE,GAAnC,EAAwCF,GAAxC,EAA6C;AAC3CC,kBAAQ,KAAKE,UAAL,CAAgBH,CAAhB,CAAR;AACApD,mBAAS,CAACA,QAAQ,CAAT,IAAcA,IAAf,GAAuBqD,GAA/B;AACArD,oBAAQ,CAAR,CAH2C,CAGhC;AACZ;AACF;AACD,eAAOA,IAAP;AACD,OAVD;;AAYA;AACA,UAAI,CAACvC,EAAE6D,KAAP,EAAc;AAAC7D,UAAE6D,KAAF,GAAU7D,EAAE+F,OAAZ;AAAqB","file":"zabbixCachingProxy.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\n\n// Use factory() instead service() for multiple datasources support.\n// Each datasource instance must initialize its own cache.\n\n/** @ngInject */\nfunction ZabbixCachingProxyFactory() {\n\n class ZabbixCachingProxy {\n constructor(zabbixAPI, zabbixDBConnector, cacheOptions) {\n this.zabbixAPI = zabbixAPI;\n this.dbConnector = zabbixDBConnector;\n this.cacheEnabled = cacheOptions.enabled;\n this.ttl = cacheOptions.ttl || 600000; // 10 minutes by default\n\n // Internal objects for data storing\n this.cache = {\n groups: {},\n hosts: {},\n applications: {},\n items: {},\n history: {},\n trends: {},\n macros: {},\n globalMacros: {},\n itServices: {}\n };\n\n this.historyPromises = {};\n\n // Don't run duplicated history requests\n this.getHistory = callAPIRequestOnce(_.bind(this.zabbixAPI.getHistory, this.zabbixAPI),\n this.historyPromises, getHistoryRequestHash);\n\n if (this.dbConnector) {\n this.getHistoryDB = callAPIRequestOnce(_.bind(this.dbConnector.getHistory, this.dbConnector),\n this.historyPromises, getDBQueryHash);\n this.getTrendsDB = callAPIRequestOnce(_.bind(this.dbConnector.getTrends, this.dbConnector),\n this.historyPromises, getDBQueryHash);\n }\n\n // Don't run duplicated requests\n this.groupPromises = {};\n this.getGroupsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getGroups, this.zabbixAPI),\n this.groupPromises, getRequestHash);\n\n this.hostPromises = {};\n this.getHostsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getHosts, this.zabbixAPI),\n this.hostPromises, getRequestHash);\n\n this.appPromises = {};\n this.getAppsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getApps, this.zabbixAPI),\n this.appPromises, getRequestHash);\n\n this.itemPromises = {};\n this.getItemsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getItems, this.zabbixAPI),\n this.itemPromises, getRequestHash);\n\n this.itemByIdPromises = {};\n this.getItemsByIdOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getItemsByIDs, this.zabbixAPI),\n this.itemPromises, getRequestHash);\n\n this.itServicesPromises = {};\n this.getITServicesOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getITService, this.zabbixAPI),\n this.itServicesPromises, getRequestHash);\n\n this.macroPromises = {};\n this.getMacrosOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getMacros, this.zabbixAPI),\n this.macroPromises, getRequestHash);\n\n this.globalMacroPromises = {};\n this.getGlobalMacrosOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getGlobalMacros, this.zabbixAPI),\n this.globalMacroPromises, getRequestHash);\n }\n\n isExpired(cacheObject) {\n if (cacheObject) {\n let object_age = Date.now() - cacheObject.timestamp;\n return !(cacheObject.timestamp && object_age < this.ttl);\n } else {\n return true;\n }\n }\n\n /**\n * Check that result is present in cache and up to date\n * or send request to API.\n */\n proxyRequest(request, params, cacheObject) {\n let hash = getRequestHash(params);\n if (this.cacheEnabled && !this.isExpired(cacheObject[hash])) {\n return Promise.resolve(cacheObject[hash].value);\n } else {\n return request(...params)\n .then(result => {\n cacheObject[hash] = {\n value: result,\n timestamp: Date.now()\n };\n return result;\n });\n }\n }\n\n getGroups() {\n return this.proxyRequest(this.getGroupsOnce, [], this.cache.groups);\n }\n\n getHosts(groupids) {\n return this.proxyRequest(this.getHostsOnce, [groupids], this.cache.hosts);\n }\n\n getApps(hostids) {\n return this.proxyRequest(this.getAppsOnce, [hostids], this.cache.applications);\n }\n\n getItems(hostids, appids, itemtype) {\n let params = [hostids, appids, itemtype];\n return this.proxyRequest(this.getItemsOnce, params, this.cache.items);\n }\n\n getItemsByIDs(itemids) {\n let params = [itemids];\n return this.proxyRequest(this.getItemsByIdOnce, params, this.cache.items);\n }\n\n getITServices() {\n return this.proxyRequest(this.getITServicesOnce, [], this.cache.itServices);\n }\n\n getMacros(hostids) {\n // Merge global macros and host macros\n let promises = [\n this.proxyRequest(this.getMacrosOnce, [hostids], this.cache.macros),\n this.proxyRequest(this.getGlobalMacrosOnce, [], this.cache.globalMacros)\n ];\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getHistoryFromCache(items, time_from, time_till) {\n var historyStorage = this.cache.history;\n var full_history;\n var expired = _.filter(_.keyBy(items, 'itemid'), (item, itemid) => {\n return !historyStorage[itemid];\n });\n if (expired.length) {\n return this.zabbixAPI.getHistory(expired, time_from, time_till).then(function(history) {\n var grouped_history = _.groupBy(history, 'itemid');\n _.forEach(expired, item => {\n var itemid = item.itemid;\n historyStorage[itemid] = item;\n historyStorage[itemid].time_from = time_from;\n historyStorage[itemid].time_till = time_till;\n historyStorage[itemid].history = grouped_history[itemid];\n });\n full_history = _.map(items, item => {\n return historyStorage[item.itemid].history;\n });\n return _.flatten(full_history, true);\n });\n } else {\n full_history = _.map(items, function(item) {\n return historyStorage[item.itemid].history;\n });\n return Promise.resolve(_.flatten(full_history, true));\n }\n }\n\n getHistoryFromAPI(items, time_from, time_till) {\n return this.zabbixAPI.getHistory(items, time_from, time_till);\n }\n }\n\n return ZabbixCachingProxy;\n}\n\nangular\n .module('grafana.services')\n .factory('ZabbixCachingProxy', ZabbixCachingProxyFactory);\n\n/**\n * Wrap zabbix API request to prevent multiple calls\n * with same params when waiting for result.\n */\nfunction callAPIRequestOnce(func, promiseKeeper, argsHashFunc) {\n return function() {\n var hash = argsHashFunc(arguments);\n if (!promiseKeeper[hash]) {\n promiseKeeper[hash] = Promise.resolve(\n func.apply(this, arguments)\n .then(result => {\n promiseKeeper[hash] = null;\n return result;\n })\n );\n }\n return promiseKeeper[hash];\n };\n}\n\nfunction getRequestHash(args) {\n var requestStamp = _.map(args, arg => {\n if (arg === undefined) {\n return 'undefined';\n } else {\n if (_.isArray(arg)) {\n return arg.sort().toString();\n } else {\n return arg.toString();\n }\n }\n }).join();\n return requestStamp.getHash();\n}\n\nfunction getHistoryRequestHash(args) {\n let itemids = _.map(args[0], 'itemid');\n let stamp = itemids.join() + args[1] + args[2];\n return stamp.getHash();\n}\n\nfunction getDBQueryHash(args) {\n let itemids = _.map(args[0], 'itemid');\n let consolidateBy = args[3].consolidateBy;\n let intervalMs = args[3].intervalMs;\n let stamp = itemids.join() + args[1] + args[2] + consolidateBy + intervalMs;\n return stamp.getHash();\n}\n\nString.prototype.getHash = function() {\n var hash = 0, i, chr, len;\n if (this.length !== 0) {\n for (i = 0, len = this.length; i < len; i++) {\n chr = this.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n};\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.keyBy) {_.keyBy = _.indexBy;}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbixDBConnector.js b/dist/datasource-zabbix/zabbixDBConnector.js
new file mode 100644
index 0000000..1d46ef7
--- /dev/null
+++ b/dist/datasource-zabbix/zabbixDBConnector.js
@@ -0,0 +1,233 @@
+'use strict';
+
+System.register(['angular', 'lodash'], function (_export, _context) {
+ "use strict";
+
+ var angular, _, _createClass, DEFAULT_QUERY_LIMIT, HISTORY_TO_TABLE_MAP, TREND_TO_TABLE_MAP, consolidateByFunc, consolidateByTrendColumns;
+
+ function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+
+ /** @ngInject */
+ function ZabbixDBConnectorFactory(datasourceSrv, backendSrv) {
+ var ZabbixDBConnector = function () {
+ function ZabbixDBConnector(sqlDataSourceId) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, ZabbixDBConnector);
+
+ var limit = options.limit;
+
+
+ this.sqlDataSourceId = sqlDataSourceId;
+ this.limit = limit || DEFAULT_QUERY_LIMIT;
+ }
+
+ /**
+ * Try to load DS with given id to check it's exist.
+ * @param {*} datasourceId ID of SQL data source
+ */
+
+
+ _createClass(ZabbixDBConnector, [{
+ key: 'loadSQLDataSource',
+ value: function loadSQLDataSource(datasourceId) {
+ var ds = _.find(datasourceSrv.getAll(), { 'id': datasourceId });
+ if (ds) {
+ return datasourceSrv.loadDatasource(ds.name).then(function (ds) {
+ console.log('SQL data source loaded', ds);
+ });
+ } else {
+ return Promise.reject('SQL Data Source with ID ' + datasourceId + ' not found');
+ }
+ }
+ }, {
+ key: 'testSQLDataSource',
+ value: function testSQLDataSource() {
+ var testQuery = 'SELECT itemid AS metric, clock AS time_sec, value_avg AS value FROM trends_uint LIMIT 1';
+ return this.invokeSQLQuery(testQuery);
+ }
+ }, {
+ key: 'getHistory',
+ value: function getHistory(items, timeFrom, timeTill, options) {
+ var _this = this;
+
+ var intervalMs = options.intervalMs,
+ consolidateBy = options.consolidateBy;
+
+ var intervalSec = Math.ceil(intervalMs / 1000);
+
+ consolidateBy = consolidateBy || 'avg';
+ var aggFunction = consolidateByFunc[consolidateBy];
+
+ // Group items by value type and perform request for each value type
+ var grouped_items = _.groupBy(items, 'value_type');
+ var promises = _.map(grouped_items, function (items, value_type) {
+ var itemids = _.map(items, 'itemid').join(', ');
+ var table = HISTORY_TO_TABLE_MAP[value_type];
+
+ var query = '\n SELECT itemid AS metric, clock AS time_sec, ' + aggFunction + '(value) AS value\n FROM ' + table + '\n WHERE itemid IN (' + itemids + ')\n AND clock > ' + timeFrom + ' AND clock < ' + timeTill + '\n GROUP BY time_sec DIV ' + intervalSec + ', metric\n ';
+
+ query = compactSQLQuery(query);
+ return _this.invokeSQLQuery(query);
+ });
+
+ return Promise.all(promises).then(function (results) {
+ return _.flatten(results);
+ });
+ }
+ }, {
+ key: 'getTrends',
+ value: function getTrends(items, timeFrom, timeTill, options) {
+ var _this2 = this;
+
+ var intervalMs = options.intervalMs,
+ consolidateBy = options.consolidateBy;
+
+ var intervalSec = Math.ceil(intervalMs / 1000);
+
+ consolidateBy = consolidateBy || 'avg';
+ var aggFunction = consolidateByFunc[consolidateBy];
+
+ // Group items by value type and perform request for each value type
+ var grouped_items = _.groupBy(items, 'value_type');
+ var promises = _.map(grouped_items, function (items, value_type) {
+ var itemids = _.map(items, 'itemid').join(', ');
+ var table = TREND_TO_TABLE_MAP[value_type];
+ var valueColumn = _.includes(['avg', 'min', 'max'], consolidateBy) ? consolidateBy : 'avg';
+ valueColumn = consolidateByTrendColumns[valueColumn];
+
+ var query = '\n SELECT itemid AS metric, clock AS time_sec, ' + aggFunction + '(' + valueColumn + ') AS value\n FROM ' + table + '\n WHERE itemid IN (' + itemids + ')\n AND clock > ' + timeFrom + ' AND clock < ' + timeTill + '\n GROUP BY time_sec DIV ' + intervalSec + ', metric\n ';
+
+ query = compactSQLQuery(query);
+ return _this2.invokeSQLQuery(query);
+ });
+
+ return Promise.all(promises).then(function (results) {
+ return _.flatten(results);
+ });
+ }
+ }, {
+ key: 'handleGrafanaTSResponse',
+ value: function handleGrafanaTSResponse(history, items) {
+ var addHostName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+
+ return convertGrafanaTSResponse(history, items, addHostName);
+ }
+ }, {
+ key: 'invokeSQLQuery',
+ value: function invokeSQLQuery(query) {
+ var queryDef = {
+ refId: 'A',
+ format: 'time_series',
+ datasourceId: this.sqlDataSourceId,
+ rawSql: query,
+ maxDataPoints: this.limit
+ };
+
+ return backendSrv.datasourceRequest({
+ url: '/api/tsdb/query',
+ method: 'POST',
+ data: {
+ queries: [queryDef]
+ }
+ }).then(function (response) {
+ var results = response.data.results;
+ if (results['A']) {
+ return results['A'].series;
+ } else {
+ return null;
+ }
+ });
+ }
+ }]);
+
+ return ZabbixDBConnector;
+ }();
+
+ return ZabbixDBConnector;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+
+ function convertGrafanaTSResponse(time_series, items, addHostName) {
+ var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid'); //uniqBy is needed to deduplicate
+ var grafanaSeries = _.map(time_series, function (series) {
+ var itemid = series.name;
+ var datapoints = series.points;
+ var item = _.find(items, { 'itemid': itemid });
+ var alias = item.name;
+ if (_.keys(hosts).length > 1 && addHostName) {
+ //only when actual multi hosts selected
+ var host = _.find(hosts, { 'hostid': item.hostid });
+ alias = host.name + ": " + alias;
+ }
+ return {
+ target: alias,
+ datapoints: datapoints
+ };
+ });
+
+ return _.sortBy(grafanaSeries, 'target');
+ }
+
+ function compactSQLQuery(query) {
+ return query.replace(/\s+/g, ' ');
+ }
+ return {
+ setters: [function (_angular) {
+ angular = _angular.default;
+ }, function (_lodash) {
+ _ = _lodash.default;
+ }],
+ execute: function () {
+ _createClass = function () {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+
+ return function (Constructor, protoProps, staticProps) {
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+ }();
+
+ DEFAULT_QUERY_LIMIT = 10000;
+ HISTORY_TO_TABLE_MAP = {
+ '0': 'history',
+ '1': 'history_str',
+ '2': 'history_log',
+ '3': 'history_uint',
+ '4': 'history_text'
+ };
+ TREND_TO_TABLE_MAP = {
+ '0': 'trends',
+ '3': 'trends_uint'
+ };
+ consolidateByFunc = {
+ 'avg': 'AVG',
+ 'min': 'MIN',
+ 'max': 'MAX',
+ 'sum': 'SUM',
+ 'count': 'COUNT'
+ };
+ consolidateByTrendColumns = {
+ 'avg': 'value_avg',
+ 'min': 'value_min',
+ 'max': 'value_max'
+ };
+ angular.module('grafana.services').factory('ZabbixDBConnector', ZabbixDBConnectorFactory);
+ }
+ };
+});
+//# sourceMappingURL=zabbixDBConnector.js.map
diff --git a/dist/datasource-zabbix/zabbixDBConnector.js.map b/dist/datasource-zabbix/zabbixDBConnector.js.map
new file mode 100644
index 0000000..66e923b
--- /dev/null
+++ b/dist/datasource-zabbix/zabbixDBConnector.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../src/datasource-zabbix/zabbixDBConnector.js"],"names":["ZabbixDBConnectorFactory","datasourceSrv","backendSrv","ZabbixDBConnector","sqlDataSourceId","options","limit","DEFAULT_QUERY_LIMIT","datasourceId","ds","_","find","getAll","loadDatasource","name","then","console","log","Promise","reject","testQuery","invokeSQLQuery","items","timeFrom","timeTill","intervalMs","consolidateBy","intervalSec","Math","ceil","aggFunction","consolidateByFunc","grouped_items","groupBy","promises","map","value_type","itemids","join","table","HISTORY_TO_TABLE_MAP","query","compactSQLQuery","all","flatten","results","TREND_TO_TABLE_MAP","valueColumn","includes","consolidateByTrendColumns","history","addHostName","convertGrafanaTSResponse","queryDef","refId","format","rawSql","maxDataPoints","datasourceRequest","url","method","data","queries","response","series","time_series","hosts","uniqBy","grafanaSeries","itemid","datapoints","points","item","alias","keys","length","host","hostid","target","sortBy","replace","angular","module","factory"],"mappings":"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","file":"zabbixDBConnector.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\n\nconst DEFAULT_QUERY_LIMIT = 10000;\nconst HISTORY_TO_TABLE_MAP = {\n '0': 'history',\n '1': 'history_str',\n '2': 'history_log',\n '3': 'history_uint',\n '4': 'history_text'\n};\n\nconst TREND_TO_TABLE_MAP = {\n '0': 'trends',\n '3': 'trends_uint'\n};\n\nconst consolidateByFunc = {\n 'avg': 'AVG',\n 'min': 'MIN',\n 'max': 'MAX',\n 'sum': 'SUM',\n 'count': 'COUNT'\n};\n\nconst consolidateByTrendColumns = {\n 'avg': 'value_avg',\n 'min': 'value_min',\n 'max': 'value_max'\n};\n\n/** @ngInject */\nfunction ZabbixDBConnectorFactory(datasourceSrv, backendSrv) {\n\n class ZabbixDBConnector {\n\n constructor(sqlDataSourceId, options = {}) {\n let {limit} = options;\n\n this.sqlDataSourceId = sqlDataSourceId;\n this.limit = limit || DEFAULT_QUERY_LIMIT;\n }\n\n /**\n * Try to load DS with given id to check it's exist.\n * @param {*} datasourceId ID of SQL data source\n */\n loadSQLDataSource(datasourceId) {\n let ds = _.find(datasourceSrv.getAll(), {'id': datasourceId});\n if (ds) {\n return datasourceSrv.loadDatasource(ds.name)\n .then(ds => {\n console.log('SQL data source loaded', ds);\n });\n } else {\n return Promise.reject(`SQL Data Source with ID ${datasourceId} not found`);\n }\n }\n\n /**\n * Try to invoke test query for one of Zabbix database tables.\n */\n testSQLDataSource() {\n let testQuery = `SELECT itemid AS metric, clock AS time_sec, value_avg AS value FROM trends_uint LIMIT 1`;\n return this.invokeSQLQuery(testQuery);\n }\n\n getHistory(items, timeFrom, timeTill, options) {\n let {intervalMs, consolidateBy} = options;\n let intervalSec = Math.ceil(intervalMs / 1000);\n\n consolidateBy = consolidateBy || 'avg';\n let aggFunction = consolidateByFunc[consolidateBy];\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid').join(', ');\n let table = HISTORY_TO_TABLE_MAP[value_type];\n\n let query = `\n SELECT itemid AS metric, clock AS time_sec, ${aggFunction}(value) AS value\n FROM ${table}\n WHERE itemid IN (${itemids})\n AND clock > ${timeFrom} AND clock < ${timeTill}\n GROUP BY time_sec DIV ${intervalSec}, metric\n `;\n\n query = compactSQLQuery(query);\n return this.invokeSQLQuery(query);\n });\n\n return Promise.all(promises).then(results => {\n return _.flatten(results);\n });\n }\n\n getTrends(items, timeFrom, timeTill, options) {\n let {intervalMs, consolidateBy} = options;\n let intervalSec = Math.ceil(intervalMs / 1000);\n\n consolidateBy = consolidateBy || 'avg';\n let aggFunction = consolidateByFunc[consolidateBy];\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid').join(', ');\n let table = TREND_TO_TABLE_MAP[value_type];\n let valueColumn = _.includes(['avg', 'min', 'max'], consolidateBy) ? consolidateBy : 'avg';\n valueColumn = consolidateByTrendColumns[valueColumn];\n\n let query = `\n SELECT itemid AS metric, clock AS time_sec, ${aggFunction}(${valueColumn}) AS value\n FROM ${table}\n WHERE itemid IN (${itemids})\n AND clock > ${timeFrom} AND clock < ${timeTill}\n GROUP BY time_sec DIV ${intervalSec}, metric\n `;\n\n query = compactSQLQuery(query);\n return this.invokeSQLQuery(query);\n });\n\n return Promise.all(promises).then(results => {\n return _.flatten(results);\n });\n }\n\n handleGrafanaTSResponse(history, items, addHostName = true) {\n return convertGrafanaTSResponse(history, items, addHostName);\n }\n\n invokeSQLQuery(query) {\n let queryDef = {\n refId: 'A',\n format: 'time_series',\n datasourceId: this.sqlDataSourceId,\n rawSql: query,\n maxDataPoints: this.limit\n };\n\n return backendSrv.datasourceRequest({\n url: '/api/tsdb/query',\n method: 'POST',\n data: {\n queries: [queryDef],\n }\n })\n .then(response => {\n let results = response.data.results;\n if (results['A']) {\n return results['A'].series;\n } else {\n return null;\n }\n });\n }\n }\n\n return ZabbixDBConnector;\n}\n\nangular\n .module('grafana.services')\n .factory('ZabbixDBConnector', ZabbixDBConnectorFactory);\n\n///////////////////////////////////////////////////////////////////////////////\n\nfunction convertGrafanaTSResponse(time_series, items, addHostName) {\n var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid'); //uniqBy is needed to deduplicate\n let grafanaSeries = _.map(time_series, series => {\n let itemid = series.name;\n let datapoints = series.points;\n var item = _.find(items, {'itemid': itemid});\n var alias = item.name;\n if (_.keys(hosts).length > 1 && addHostName) { //only when actual multi hosts selected\n var host = _.find(hosts, {'hostid': item.hostid});\n alias = host.name + \": \" + alias;\n }\n return {\n target: alias,\n datapoints: datapoints\n };\n });\n\n return _.sortBy(grafanaSeries, 'target');\n}\n\nfunction compactSQLQuery(query) {\n return query.replace(/\\s+/g, ' ');\n}\n"]}
\ No newline at end of file
diff --git a/dist/panel-triggers/editor.html b/dist/panel-triggers/editor.html
index aa60aea..af58a83 100644
--- a/dist/panel-triggers/editor.html
+++ b/dist/panel-triggers/editor.html
@@ -55,6 +55,10 @@
placeholder="trigger name"
class="gf-form-input"
ng-style="editor.panel.triggers.trigger.style"
+ ng-class="{
+ 'zbx-variable': editor.isVariable(editor.panel.triggers.trigger.filter),
+ 'zbx-regex': editor.isRegex(editor.panel.triggers.trigger.filter)
+ }"
empty-to-null>