SQL Data Source
@@ -94,7 +94,7 @@
-
diff --git a/dist/datasource-zabbix/query.controller.js b/dist/datasource-zabbix/query.controller.js
index 6f1880c..c596e7e 100644
--- a/dist/datasource-zabbix/query.controller.js
+++ b/dist/datasource-zabbix/query.controller.js
@@ -1,6 +1,6 @@
'use strict';
-System.register(['app/plugins/sdk', 'lodash', './constants', './utils', './metricFunctions', './migrations', './add-metric-function.directive', './metric-function-editor.directive'], function (_export, _context) {
+System.register(['app/plugins/sdk', 'lodash', './constants', './utils', './metricFunctions', './migrations'], function (_export, _context) {
"use strict";
var QueryCtrl, _, c, utils, metricFunctions, migrations, _createClass, ZabbixQueryController;
@@ -48,7 +48,7 @@ System.register(['app/plugins/sdk', 'lodash', './constants', './utils', './metri
metricFunctions = _metricFunctions;
}, function (_migrations) {
migrations = _migrations;
- }, function (_addMetricFunctionDirective) {}, function (_metricFunctionEditorDirective) {}],
+ }],
execute: function () {
_createClass = function () {
function defineProperties(target, props) {
@@ -401,9 +401,6 @@ System.register(['app/plugins/sdk', 'lodash', './constants', './utils', './metri
}(QueryCtrl));
_export('ZabbixQueryController', ZabbixQueryController);
-
- // Set templateUrl as static property
- ZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html';
}
};
});
diff --git a/dist/datasource-zabbix/query.controller.js.map b/dist/datasource-zabbix/query.controller.js.map
index 2b80eb0..6a4a863 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","_","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","MODE_TRIGGERS","editorMode","METRICS","TEXT","ITSERVICE","ITEMID","TRIGGERS","slaPropertyList","name","property","ackFilters","resultFormats","triggerSeverity","TRIGGER_SEVERITY","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","skipEmptyValues","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\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 {value: 'triggers', text: 'Triggers', mode: c.MODE_TRIGGERS}\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 TRIGGERS: c.MODE_TRIGGERS\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 this.ackFilters = [\n {text: 'all triggers', value: 2},\n {text: 'unacknowledged', value: 0},\n {text: 'acknowledged', value: 1},\n ];\n\n this.resultFormats = [{ text: 'Time series', value: 'time_series' }, { text: 'Table', value: 'table' }];\n\n this.triggerSeverity = c.TRIGGER_SEVERITY;\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 'triggers': {\n 'count': true,\n 'minSeverity': 3,\n 'acknowledged': 2\n },\n 'options': {\n 'showDisabledItems': false,\n 'skipEmptyValues': false\n },\n 'table': {\n 'skipEmptyValues': 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 target.mode === c.MODE_TRIGGERS) {\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 this.queryOptionsText = this.renderQueryOptionsText();\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 skipEmptyValues: \"Skip empty values\"\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
+{"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","MODE_TRIGGERS","editorMode","METRICS","TEXT","ITSERVICE","ITEMID","TRIGGERS","slaPropertyList","name","property","ackFilters","resultFormats","triggerSeverity","TRIGGER_SEVERITY","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","skipEmptyValues","forOwn","key","join"],"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\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 {value: 'triggers', text: 'Triggers', mode: c.MODE_TRIGGERS}\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 TRIGGERS: c.MODE_TRIGGERS\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 this.ackFilters = [\n {text: 'all triggers', value: 2},\n {text: 'unacknowledged', value: 0},\n {text: 'acknowledged', value: 1},\n ];\n\n this.resultFormats = [{ text: 'Time series', value: 'time_series' }, { text: 'Table', value: 'table' }];\n\n this.triggerSeverity = c.TRIGGER_SEVERITY;\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 'triggers': {\n 'count': true,\n 'minSeverity': 3,\n 'acknowledged': 2\n },\n 'options': {\n 'showDisabledItems': false,\n 'skipEmptyValues': false\n },\n 'table': {\n 'skipEmptyValues': 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 target.mode === c.MODE_TRIGGERS) {\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 this.queryOptionsText = this.renderQueryOptionsText();\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 skipEmptyValues: \"Skip empty values\"\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"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/datasource.spec.js b/dist/datasource-zabbix/specs/datasource.spec.js
index 3679501..2a7ea3a 100644
--- a/dist/datasource-zabbix/specs/datasource.spec.js
+++ b/dist/datasource-zabbix/specs/datasource.spec.js
@@ -1,16 +1,13 @@
"use strict";
-System.register(["lodash", "q", "../module", "../datasource"], function (_export, _context) {
+System.register(["lodash", "../module", "../datasource"], function (_export, _context) {
"use strict";
- var _, Q, Promise, Datasource, zabbixTemplateFormat;
+ var _, Datasource, zabbixTemplateFormat;
return {
setters: [function (_lodash) {
_ = _lodash.default;
- }, function (_q) {
- Q = _q.default;
- Promise = _q.Promise;
}, function (_module) {
Datasource = _module.Datasource;
}, function (_datasource) {
@@ -24,27 +21,26 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
beforeEach(function () {
ctx.instanceSettings = {
jsonData: {
- alerting: true,
+ alerting: false,
username: 'zabbix',
password: 'zabbix',
trends: true,
trendsFrom: '14d',
trendsRange: '7d',
- dbConnection: {
- enabled: false
- }
+ dbConnectionEnable: false
}
};
ctx.templateSrv = {};
- ctx.alertSrv = {};
- ctx.dashboardSrv = {};
+ ctx.backendSrv = {
+ datasourceRequest: jest.fn()
+ };
+ ctx.datasourceSrv = {};
ctx.zabbixAlertingSrv = {
setPanelAlertState: jest.fn(),
removeZabbixThreshold: jest.fn()
};
- ctx.zabbix = function () {};
- ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.alertSrv, ctx.dashboardSrv, ctx.zabbixAlertingSrv, ctx.zabbix);
+ ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.backendSrv, ctx.datasourceSrv, ctx.zabbixAlertingSrv);
});
describe('When querying data', function () {
@@ -52,9 +48,6 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
ctx.ds.replaceTemplateVars = function (str) {
return str;
};
- ctx.ds.alertQuery = function () {
- return Q.when([]);
- };
});
ctx.options = {
@@ -117,10 +110,7 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
ctx.ds.replaceTemplateVars = function (str) {
return str;
};
- ctx.ds.alertQuery = function () {
- return Q.when([]);
- };
- ctx.ds.zabbix.getHistory = jest.fn().mockReturnValue(Promise.resolve([{ clock: "1500010200", itemid: "10100", ns: "900111000", value: "Linux first" }, { clock: "1500010300", itemid: "10100", ns: "900111000", value: "Linux 2nd" }, { clock: "1500010400", itemid: "10100", ns: "900111000", value: "Linux last" }]));
+ ctx.ds.zabbix.zabbixAPI.getHistory = jest.fn().mockReturnValue(Promise.resolve([{ clock: "1500010200", itemid: "10100", ns: "900111000", value: "Linux first" }, { clock: "1500010300", itemid: "10100", ns: "900111000", value: "Linux 2nd" }, { clock: "1500010400", itemid: "10100", ns: "900111000", value: "Linux last" }]));
ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([{
hosts: [{ hostid: "10001", name: "Zabbix server" }],
@@ -244,10 +234,10 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
return str;
};
ctx.ds.zabbix = {
- getGroups: jest.fn().mockReturnValue(Q.when([])),
- getHosts: jest.fn().mockReturnValue(Q.when([])),
- getApps: jest.fn().mockReturnValue(Q.when([])),
- getItems: jest.fn().mockReturnValue(Q.when([]))
+ getGroups: jest.fn().mockReturnValue(Promise.resolve([])),
+ getHosts: jest.fn().mockReturnValue(Promise.resolve([])),
+ getApps: jest.fn().mockReturnValue(Promise.resolve([])),
+ getItems: jest.fn().mockReturnValue(Promise.resolve([]))
};
});
@@ -411,9 +401,7 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
"hosts": [{ "hostid": "10631", "name": "Test host" }],
"item": "Test item"
}];
- ctx.ds.zabbix.getItemsFromTarget = function () {
- return Promise.resolve(targetItems);
- };
+ ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve(targetItems));
options = {
"panelId": 10,
@@ -434,9 +422,7 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
"expression": "{15915}<100"
}];
- ctx.ds.zabbix.getAlerts = function () {
- return Promise.resolve(itemTriggers);
- };
+ ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds).toHaveLength(1);
@@ -453,9 +439,7 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
"expression": "{15915}<=100"
}];
- ctx.ds.zabbix.getAlerts = function () {
- return Promise.resolve(itemTriggers);
- };
+ ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds.length).toBe(1);
@@ -472,9 +456,7 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
"expression": "{15915}>=30"
}];
- ctx.ds.zabbix.getAlerts = function () {
- return Promise.resolve(itemTriggers);
- };
+ ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds.length).toBe(1);
@@ -491,9 +473,7 @@ System.register(["lodash", "q", "../module", "../datasource"], function (_export
"expression": "{15915}=50"
}];
- ctx.ds.zabbix.getAlerts = function () {
- return Promise.resolve(itemTriggers);
- };
+ ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
return ctx.ds.alertQuery(options).then(function (resp) {
expect(resp.thresholds.length).toBe(1);
diff --git a/dist/datasource-zabbix/specs/datasource.spec.js.map b/dist/datasource-zabbix/specs/datasource.spec.js.map
index c178bb2..9abf564 100644
--- a/dist/datasource-zabbix/specs/datasource.spec.js.map
+++ b/dist/datasource-zabbix/specs/datasource.spec.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/specs/datasource.spec.js"],"names":["_","Q","Promise","Datasource","zabbixTemplateFormat","describe","ctx","beforeEach","instanceSettings","jsonData","alerting","username","password","trends","trendsFrom","trendsRange","dbConnection","enabled","templateSrv","alertSrv","dashboardSrv","zabbixAlertingSrv","setPanelAlertState","jest","fn","removeZabbixThreshold","zabbix","ds","replaceTemplateVars","str","alertQuery","when","options","targets","group","filter","host","application","item","range","from","to","it","done","query","then","expect","result","data","length","toBe","ranges","forEach","queryNumericData","callArgs","mock","calls","mockClear","getHistory","mockReturnValue","resolve","clock","itemid","ns","value","getItemsFromTarget","hosts","hostid","name","key_","textFilter","useCaptureGroups","mode","resultFormat","skipEmptyValues","tableData","columns","toEqual","text","rows","testReplacingVariable","target","varValue","expectedResult","replace","template_var_value","expected_result","getGroups","getHosts","getApps","getItems","tests","test","metricFindQuery","toBeCalledWith","targetItems","itemTriggers","getAlerts","resp","thresholds","toHaveLength"],"mappings":"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","file":"datasource.spec.js","sourcesContent":["import _ from 'lodash';\nimport Q, { Promise } from \"q\";\nimport {Datasource} from \"../module\";\nimport {zabbixTemplateFormat} from \"../datasource\";\n\ndescribe('ZabbixDatasource', () => {\n let ctx = {};\n\n beforeEach(() => {\n ctx.instanceSettings = {\n jsonData: {\n alerting: true,\n username: 'zabbix',\n password: 'zabbix',\n trends: true,\n trendsFrom: '14d',\n trendsRange: '7d',\n dbConnection: {\n enabled: false\n }\n }\n };\n ctx.templateSrv = {};\n ctx.alertSrv = {};\n ctx.dashboardSrv = {};\n ctx.zabbixAlertingSrv = {\n setPanelAlertState: jest.fn(),\n removeZabbixThreshold: jest.fn(),\n };\n ctx.zabbix = () => {};\n\n ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.alertSrv, ctx.dashboardSrv, ctx.zabbixAlertingSrv, ctx.zabbix);\n });\n\n describe('When querying data', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n ctx.ds.alertQuery = () => Q.when([]);\n });\n\n ctx.options = {\n targets: [\n {\n group: {filter: \"\"},\n host: {filter: \"\"},\n application: {filter: \"\"},\n item: {filter: \"\"}\n }\n ],\n range: {from: 'now-7d', to: 'now'}\n };\n\n it('should return an empty array when no targets are set', (done) => {\n let options = {\n targets: [],\n range: {from: 'now-6h', to: 'now'}\n };\n ctx.ds.query(options).then(result => {\n expect(result.data.length).toBe(0);\n done();\n });\n });\n\n it('should use trends if it enabled and time more than trendsFrom', (done) => {\n let ranges = ['now-7d', 'now-168h', 'now-1M', 'now-1y'];\n\n _.forEach(ranges, range => {\n ctx.options.range.from = range;\n ctx.ds.queryNumericData = jest.fn();\n ctx.ds.query(ctx.options);\n\n // Check that useTrends options is true\n let callArgs = ctx.ds.queryNumericData.mock.calls[0];\n expect(callArgs[2]).toBe(true);\n ctx.ds.queryNumericData.mockClear();\n });\n\n done();\n });\n\n it('shouldnt use trends if it enabled and time less than trendsFrom', (done) => {\n let ranges = ['now-6d', 'now-167h', 'now-1h', 'now-30m', 'now-30s'];\n\n _.forEach(ranges, range => {\n ctx.options.range.from = range;\n ctx.ds.queryNumericData = jest.fn();\n ctx.ds.query(ctx.options);\n\n // Check that useTrends options is false\n let callArgs = ctx.ds.queryNumericData.mock.calls[0];\n expect(callArgs[2]).toBe(false);\n ctx.ds.queryNumericData.mockClear();\n });\n done();\n });\n\n });\n\n describe('When querying text data', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n ctx.ds.alertQuery = () => Q.when([]);\n ctx.ds.zabbix.getHistory = jest.fn().mockReturnValue(Promise.resolve([\n {clock: \"1500010200\", itemid:\"10100\", ns:\"900111000\", value:\"Linux first\"},\n {clock: \"1500010300\", itemid:\"10100\", ns:\"900111000\", value:\"Linux 2nd\"},\n {clock: \"1500010400\", itemid:\"10100\", ns:\"900111000\", value:\"Linux last\"}\n ]));\n\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([\n {\n hosts: [{hostid: \"10001\", name: \"Zabbix server\"}],\n itemid: \"10100\",\n name: \"System information\",\n key_: \"system.uname\",\n }\n ]));\n\n ctx.options = {\n range: {from: 'now-1h', to: 'now'},\n targets: [\n {\n group: {filter: \"\"},\n host: {filter: \"Zabbix server\"},\n application: {filter: \"\"},\n item: {filter: \"System information\"},\n textFilter: \"\",\n useCaptureGroups: true,\n mode: 2,\n resultFormat: \"table\",\n options: {\n skipEmptyValues: false\n }\n }\n ],\n };\n });\n\n it('should return data in table format', (done) => {\n ctx.ds.query(ctx.options).then(result => {\n expect(result.data.length).toBe(1);\n\n let tableData = result.data[0];\n expect(tableData.columns).toEqual([\n {text: 'Host'}, {text: 'Item'}, {text: 'Key'}, {text: 'Last value'}\n ]);\n expect(tableData.rows).toEqual([\n ['Zabbix server', 'System information', 'system.uname', 'Linux last']\n ]);\n done();\n });\n });\n\n it('should extract value if regex with capture group is used', (done) => {\n ctx.options.targets[0].textFilter = \"Linux (.*)\";\n ctx.ds.query(ctx.options).then(result => {\n let tableData = result.data[0];\n expect(tableData.rows[0][3]).toEqual('last');\n done();\n });\n });\n\n it('should skip item when last value is empty', () => {\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([\n {\n hosts: [{hostid: \"10001\", name: \"Zabbix server\"}],\n itemid: \"10100\", name: \"System information\", key_: \"system.uname\"\n },\n {\n hosts: [{hostid: \"10002\", name: \"Server02\"}],\n itemid: \"90109\", name: \"System information\", key_: \"system.uname\"\n }\n ]));\n\n ctx.options.targets[0].options.skipEmptyValues = true;\n ctx.ds.zabbix.getHistory = jest.fn().mockReturnValue(Promise.resolve([\n {clock: \"1500010200\", itemid:\"10100\", ns:\"900111000\", value:\"Linux first\"},\n {clock: \"1500010300\", itemid:\"10100\", ns:\"900111000\", value:\"Linux 2nd\"},\n {clock: \"1500010400\", itemid:\"10100\", ns:\"900111000\", value:\"Linux last\"},\n {clock: \"1500010200\", itemid:\"90109\", ns:\"900111000\", value:\"Non empty value\"},\n {clock: \"1500010500\", itemid:\"90109\", ns:\"900111000\", value:\"\"}\n ]));\n return ctx.ds.query(ctx.options).then(result => {\n let tableData = result.data[0];\n expect(tableData.rows.length).toBe(1);\n expect(tableData.rows[0][3]).toEqual('Linux last');\n });\n });\n });\n\n describe('When replacing template variables', () => {\n\n function testReplacingVariable(target, varValue, expectedResult, done) {\n ctx.ds.templateSrv.replace = () => {\n return zabbixTemplateFormat(varValue);\n };\n\n let result = ctx.ds.replaceTemplateVars(target);\n expect(result).toBe(expectedResult);\n done();\n }\n\n /*\n * Alphanumerics, spaces, dots, dashes and underscores\n * are allowed in Zabbix host name.\n * 'AaBbCc0123 .-_'\n */\n it('should return properly escaped regex', (done) => {\n let target = '$host';\n let template_var_value = 'AaBbCc0123 .-_';\n let expected_result = '/^AaBbCc0123 \\\\.-_$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n\n /*\n * Single-value variable\n * $host = backend01\n * $host => /^backend01|backend01$/\n */\n it('should return proper regex for single value', (done) => {\n let target = '$host';\n let template_var_value = 'backend01';\n let expected_result = '/^backend01$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n\n /*\n * Multi-value variable\n * $host = [backend01, backend02]\n * $host => /^(backend01|backend01)$/\n */\n it('should return proper regex for multi-value', (done) => {\n let target = '$host';\n let template_var_value = ['backend01', 'backend02'];\n let expected_result = '/^(backend01|backend02)$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n });\n\n describe('When invoking metricFindQuery()', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n ctx.ds.zabbix = {\n getGroups: jest.fn().mockReturnValue(Q.when([])),\n getHosts: jest.fn().mockReturnValue(Q.when([])),\n getApps: jest.fn().mockReturnValue(Q.when([])),\n getItems: jest.fn().mockReturnValue(Q.when([]))\n };\n });\n\n it('should return groups', (done) => {\n const tests = [\n {query: '*', expect: '/.*/'},\n {query: '', expect: ''},\n {query: 'Backend', expect: 'Backend'},\n {query: 'Back*', expect: 'Back*'},\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getGroups).toBeCalledWith(test.expect);\n ctx.ds.zabbix.getGroups.mockClear();\n }\n done();\n });\n\n it('should return hosts', (done) => {\n const tests = [\n {query: '*.*', expect: ['/.*/', '/.*/']},\n {query: '.', expect: ['', '']},\n {query: 'Backend.*', expect: ['Backend', '/.*/']},\n {query: 'Back*.', expect: ['Back*', '']},\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getHosts).toBeCalledWith(test.expect[0], test.expect[1]);\n ctx.ds.zabbix.getHosts.mockClear();\n }\n done();\n });\n\n it('should return applications', (done) => {\n const tests = [\n {query: '*.*.*', expect: ['/.*/', '/.*/', '/.*/']},\n {query: '.*.', expect: ['', '/.*/', '']},\n {query: 'Backend.backend01.*', expect: ['Backend', 'backend01', '/.*/']},\n {query: 'Back*.*.', expect: ['Back*', '/.*/', '']}\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getApps).toBeCalledWith(test.expect[0], test.expect[1], test.expect[2]);\n ctx.ds.zabbix.getApps.mockClear();\n }\n done();\n });\n\n it('should return items', (done) => {\n const tests = [\n {query: '*.*.*.*', expect: ['/.*/', '/.*/', '', '/.*/']},\n {query: '.*.*.*', expect: ['', '/.*/', '', '/.*/']},\n {query: 'Backend.backend01.*.*', expect: ['Backend', 'backend01', '', '/.*/']},\n {query: 'Back*.*.cpu.*', expect: ['Back*', '/.*/', 'cpu', '/.*/']}\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getItems)\n .toBeCalledWith(test.expect[0], test.expect[1], test.expect[2], test.expect[3]);\n ctx.ds.zabbix.getItems.mockClear();\n }\n done();\n });\n\n it('should invoke method with proper arguments', (done) => {\n let query = '*.*';\n\n ctx.ds.metricFindQuery(query);\n expect(ctx.ds.zabbix.getHosts).toBeCalledWith('/.*/', '/.*/');\n done();\n });\n });\n\n describe('When querying alerts', () => {\n let options = {};\n\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n\n let targetItems = [{\n \"itemid\": \"1\",\n \"name\": \"test item\",\n \"key_\": \"test.key\",\n \"value_type\": \"3\",\n \"hostid\": \"10631\",\n \"status\": \"0\",\n \"state\": \"0\",\n \"hosts\": [{\"hostid\": \"10631\", \"name\": \"Test host\"}],\n \"item\": \"Test item\"\n }];\n ctx.ds.zabbix.getItemsFromTarget = () => Promise.resolve(targetItems);\n\n options = {\n \"panelId\": 10,\n \"targets\": [{\n \"application\": {\"filter\": \"\"},\n \"group\": {\"filter\": \"Test group\"},\n \"host\": {\"filter\": \"Test host\"},\n \"item\": {\"filter\": \"Test item\"},\n }]\n };\n });\n\n it('should return threshold when comparative symbol is `less than`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}<100\",\n }];\n\n ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds).toHaveLength(1);\n expect(resp.thresholds[0]).toBe(100);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `less than or equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}<=100\",\n }];\n\n ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(100);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `greater than or equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}>=30\",\n }];\n\n ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(30);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}=50\",\n }];\n\n ctx.ds.zabbix.getAlerts = () => Promise.resolve(itemTriggers);\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(50);\n return resp;\n });\n });\n });\n});\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../src/datasource-zabbix/specs/datasource.spec.js"],"names":["_","Datasource","zabbixTemplateFormat","describe","ctx","beforeEach","instanceSettings","jsonData","alerting","username","password","trends","trendsFrom","trendsRange","dbConnectionEnable","templateSrv","backendSrv","datasourceRequest","jest","fn","datasourceSrv","zabbixAlertingSrv","setPanelAlertState","removeZabbixThreshold","ds","replaceTemplateVars","str","options","targets","group","filter","host","application","item","range","from","to","it","done","query","then","expect","result","data","length","toBe","ranges","forEach","queryNumericData","callArgs","mock","calls","mockClear","zabbix","zabbixAPI","getHistory","mockReturnValue","Promise","resolve","clock","itemid","ns","value","getItemsFromTarget","hosts","hostid","name","key_","textFilter","useCaptureGroups","mode","resultFormat","skipEmptyValues","tableData","columns","toEqual","text","rows","testReplacingVariable","target","varValue","expectedResult","replace","template_var_value","expected_result","getGroups","getHosts","getApps","getItems","tests","test","metricFindQuery","toBeCalledWith","targetItems","itemTriggers","getAlerts","alertQuery","resp","thresholds","toHaveLength"],"mappings":"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","file":"datasource.spec.js","sourcesContent":["import _ from 'lodash';\nimport { Datasource } from \"../module\";\nimport { zabbixTemplateFormat } from \"../datasource\";\n\ndescribe('ZabbixDatasource', () => {\n let ctx = {};\n\n beforeEach(() => {\n ctx.instanceSettings = {\n jsonData: {\n alerting: false,\n username: 'zabbix',\n password: 'zabbix',\n trends: true,\n trendsFrom: '14d',\n trendsRange: '7d',\n dbConnectionEnable: false\n }\n };\n ctx.templateSrv = {};\n ctx.backendSrv = {\n datasourceRequest: jest.fn()\n };\n ctx.datasourceSrv = {};\n ctx.zabbixAlertingSrv = {\n setPanelAlertState: jest.fn(),\n removeZabbixThreshold: jest.fn(),\n };\n\n ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.backendSrv, ctx.datasourceSrv, ctx.zabbixAlertingSrv);\n });\n\n describe('When querying data', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n });\n\n ctx.options = {\n targets: [\n {\n group: {filter: \"\"},\n host: {filter: \"\"},\n application: {filter: \"\"},\n item: {filter: \"\"}\n }\n ],\n range: {from: 'now-7d', to: 'now'}\n };\n\n it('should return an empty array when no targets are set', (done) => {\n let options = {\n targets: [],\n range: {from: 'now-6h', to: 'now'}\n };\n ctx.ds.query(options).then(result => {\n expect(result.data.length).toBe(0);\n done();\n });\n });\n\n it('should use trends if it enabled and time more than trendsFrom', (done) => {\n let ranges = ['now-7d', 'now-168h', 'now-1M', 'now-1y'];\n\n _.forEach(ranges, range => {\n ctx.options.range.from = range;\n ctx.ds.queryNumericData = jest.fn();\n ctx.ds.query(ctx.options);\n\n // Check that useTrends options is true\n let callArgs = ctx.ds.queryNumericData.mock.calls[0];\n expect(callArgs[2]).toBe(true);\n ctx.ds.queryNumericData.mockClear();\n });\n\n done();\n });\n\n it('shouldnt use trends if it enabled and time less than trendsFrom', (done) => {\n let ranges = ['now-6d', 'now-167h', 'now-1h', 'now-30m', 'now-30s'];\n\n _.forEach(ranges, range => {\n ctx.options.range.from = range;\n ctx.ds.queryNumericData = jest.fn();\n ctx.ds.query(ctx.options);\n\n // Check that useTrends options is false\n let callArgs = ctx.ds.queryNumericData.mock.calls[0];\n expect(callArgs[2]).toBe(false);\n ctx.ds.queryNumericData.mockClear();\n });\n done();\n });\n\n });\n\n describe('When querying text data', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n ctx.ds.zabbix.zabbixAPI.getHistory = jest.fn().mockReturnValue(Promise.resolve([\n {clock: \"1500010200\", itemid:\"10100\", ns:\"900111000\", value:\"Linux first\"},\n {clock: \"1500010300\", itemid:\"10100\", ns:\"900111000\", value:\"Linux 2nd\"},\n {clock: \"1500010400\", itemid:\"10100\", ns:\"900111000\", value:\"Linux last\"}\n ]));\n\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([\n {\n hosts: [{hostid: \"10001\", name: \"Zabbix server\"}],\n itemid: \"10100\",\n name: \"System information\",\n key_: \"system.uname\",\n }\n ]));\n\n ctx.options = {\n range: {from: 'now-1h', to: 'now'},\n targets: [\n {\n group: {filter: \"\"},\n host: {filter: \"Zabbix server\"},\n application: {filter: \"\"},\n item: {filter: \"System information\"},\n textFilter: \"\",\n useCaptureGroups: true,\n mode: 2,\n resultFormat: \"table\",\n options: {\n skipEmptyValues: false\n }\n }\n ],\n };\n });\n\n it('should return data in table format', (done) => {\n ctx.ds.query(ctx.options).then(result => {\n expect(result.data.length).toBe(1);\n\n let tableData = result.data[0];\n expect(tableData.columns).toEqual([\n {text: 'Host'}, {text: 'Item'}, {text: 'Key'}, {text: 'Last value'}\n ]);\n expect(tableData.rows).toEqual([\n ['Zabbix server', 'System information', 'system.uname', 'Linux last']\n ]);\n done();\n });\n });\n\n it('should extract value if regex with capture group is used', (done) => {\n ctx.options.targets[0].textFilter = \"Linux (.*)\";\n ctx.ds.query(ctx.options).then(result => {\n let tableData = result.data[0];\n expect(tableData.rows[0][3]).toEqual('last');\n done();\n });\n });\n\n it('should skip item when last value is empty', () => {\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([\n {\n hosts: [{hostid: \"10001\", name: \"Zabbix server\"}],\n itemid: \"10100\", name: \"System information\", key_: \"system.uname\"\n },\n {\n hosts: [{hostid: \"10002\", name: \"Server02\"}],\n itemid: \"90109\", name: \"System information\", key_: \"system.uname\"\n }\n ]));\n\n ctx.options.targets[0].options.skipEmptyValues = true;\n ctx.ds.zabbix.getHistory = jest.fn().mockReturnValue(Promise.resolve([\n {clock: \"1500010200\", itemid:\"10100\", ns:\"900111000\", value:\"Linux first\"},\n {clock: \"1500010300\", itemid:\"10100\", ns:\"900111000\", value:\"Linux 2nd\"},\n {clock: \"1500010400\", itemid:\"10100\", ns:\"900111000\", value:\"Linux last\"},\n {clock: \"1500010200\", itemid:\"90109\", ns:\"900111000\", value:\"Non empty value\"},\n {clock: \"1500010500\", itemid:\"90109\", ns:\"900111000\", value:\"\"}\n ]));\n return ctx.ds.query(ctx.options).then(result => {\n let tableData = result.data[0];\n expect(tableData.rows.length).toBe(1);\n expect(tableData.rows[0][3]).toEqual('Linux last');\n });\n });\n });\n\n describe('When replacing template variables', () => {\n\n function testReplacingVariable(target, varValue, expectedResult, done) {\n ctx.ds.templateSrv.replace = () => {\n return zabbixTemplateFormat(varValue);\n };\n\n let result = ctx.ds.replaceTemplateVars(target);\n expect(result).toBe(expectedResult);\n done();\n }\n\n /*\n * Alphanumerics, spaces, dots, dashes and underscores\n * are allowed in Zabbix host name.\n * 'AaBbCc0123 .-_'\n */\n it('should return properly escaped regex', (done) => {\n let target = '$host';\n let template_var_value = 'AaBbCc0123 .-_';\n let expected_result = '/^AaBbCc0123 \\\\.-_$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n\n /*\n * Single-value variable\n * $host = backend01\n * $host => /^backend01|backend01$/\n */\n it('should return proper regex for single value', (done) => {\n let target = '$host';\n let template_var_value = 'backend01';\n let expected_result = '/^backend01$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n\n /*\n * Multi-value variable\n * $host = [backend01, backend02]\n * $host => /^(backend01|backend01)$/\n */\n it('should return proper regex for multi-value', (done) => {\n let target = '$host';\n let template_var_value = ['backend01', 'backend02'];\n let expected_result = '/^(backend01|backend02)$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n });\n\n describe('When invoking metricFindQuery()', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n ctx.ds.zabbix = {\n getGroups: jest.fn().mockReturnValue(Promise.resolve([])),\n getHosts: jest.fn().mockReturnValue(Promise.resolve([])),\n getApps: jest.fn().mockReturnValue(Promise.resolve([])),\n getItems: jest.fn().mockReturnValue(Promise.resolve([]))\n };\n });\n\n it('should return groups', (done) => {\n const tests = [\n {query: '*', expect: '/.*/'},\n {query: '', expect: ''},\n {query: 'Backend', expect: 'Backend'},\n {query: 'Back*', expect: 'Back*'},\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getGroups).toBeCalledWith(test.expect);\n ctx.ds.zabbix.getGroups.mockClear();\n }\n done();\n });\n\n it('should return hosts', (done) => {\n const tests = [\n {query: '*.*', expect: ['/.*/', '/.*/']},\n {query: '.', expect: ['', '']},\n {query: 'Backend.*', expect: ['Backend', '/.*/']},\n {query: 'Back*.', expect: ['Back*', '']},\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getHosts).toBeCalledWith(test.expect[0], test.expect[1]);\n ctx.ds.zabbix.getHosts.mockClear();\n }\n done();\n });\n\n it('should return applications', (done) => {\n const tests = [\n {query: '*.*.*', expect: ['/.*/', '/.*/', '/.*/']},\n {query: '.*.', expect: ['', '/.*/', '']},\n {query: 'Backend.backend01.*', expect: ['Backend', 'backend01', '/.*/']},\n {query: 'Back*.*.', expect: ['Back*', '/.*/', '']}\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getApps).toBeCalledWith(test.expect[0], test.expect[1], test.expect[2]);\n ctx.ds.zabbix.getApps.mockClear();\n }\n done();\n });\n\n it('should return items', (done) => {\n const tests = [\n {query: '*.*.*.*', expect: ['/.*/', '/.*/', '', '/.*/']},\n {query: '.*.*.*', expect: ['', '/.*/', '', '/.*/']},\n {query: 'Backend.backend01.*.*', expect: ['Backend', 'backend01', '', '/.*/']},\n {query: 'Back*.*.cpu.*', expect: ['Back*', '/.*/', 'cpu', '/.*/']}\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getItems)\n .toBeCalledWith(test.expect[0], test.expect[1], test.expect[2], test.expect[3]);\n ctx.ds.zabbix.getItems.mockClear();\n }\n done();\n });\n\n it('should invoke method with proper arguments', (done) => {\n let query = '*.*';\n\n ctx.ds.metricFindQuery(query);\n expect(ctx.ds.zabbix.getHosts).toBeCalledWith('/.*/', '/.*/');\n done();\n });\n });\n\n describe('When querying alerts', () => {\n let options = {};\n\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n\n let targetItems = [{\n \"itemid\": \"1\",\n \"name\": \"test item\",\n \"key_\": \"test.key\",\n \"value_type\": \"3\",\n \"hostid\": \"10631\",\n \"status\": \"0\",\n \"state\": \"0\",\n \"hosts\": [{\"hostid\": \"10631\", \"name\": \"Test host\"}],\n \"item\": \"Test item\"\n }];\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve(targetItems));\n\n options = {\n \"panelId\": 10,\n \"targets\": [{\n \"application\": {\"filter\": \"\"},\n \"group\": {\"filter\": \"Test group\"},\n \"host\": {\"filter\": \"Test host\"},\n \"item\": {\"filter\": \"Test item\"},\n }]\n };\n });\n\n it('should return threshold when comparative symbol is `less than`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}<100\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds).toHaveLength(1);\n expect(resp.thresholds[0]).toBe(100);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `less than or equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}<=100\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(100);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `greater than or equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}>=30\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(30);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}=50\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(50);\n return resp;\n });\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/migrations.test.js b/dist/datasource-zabbix/specs/migrations.test.js
new file mode 100644
index 0000000..af40971
--- /dev/null
+++ b/dist/datasource-zabbix/specs/migrations.test.js
@@ -0,0 +1,56 @@
+'use strict';
+
+System.register(['../migrations'], function (_export, _context) {
+ "use strict";
+
+ var migrateDSConfig, DS_CONFIG_SCHEMA;
+ return {
+ setters: [function (_migrations) {
+ migrateDSConfig = _migrations.migrateDSConfig;
+ DS_CONFIG_SCHEMA = _migrations.DS_CONFIG_SCHEMA;
+ }],
+ execute: function () {
+
+ describe('Migrations', function () {
+ var ctx = {};
+
+ describe('When migrating datasource config', function () {
+ beforeEach(function () {
+ ctx.jsonData = {
+ dbConnection: {
+ enable: true,
+ datasourceId: 1
+ }
+ };
+ });
+
+ it('should change direct DB connection setting to flat style', function () {
+ migrateDSConfig(ctx.jsonData);
+ expect(ctx.jsonData).toMatchObject({
+ dbConnectionEnable: true,
+ dbConnectionDatasourceId: 1,
+ schema: DS_CONFIG_SCHEMA
+ });
+ });
+
+ it('should not touch anything if schema is up to date', function () {
+ ctx.jsonData = {
+ futureOptionOne: 'foo',
+ futureOptionTwo: 'bar',
+ schema: DS_CONFIG_SCHEMA
+ };
+ migrateDSConfig(ctx.jsonData);
+ expect(ctx.jsonData).toMatchObject({
+ futureOptionOne: 'foo',
+ futureOptionTwo: 'bar',
+ schema: DS_CONFIG_SCHEMA
+ });
+ expect(ctx.jsonData.dbConnectionEnable).toBeUndefined();
+ expect(ctx.jsonData.dbConnectionDatasourceId).toBeUndefined();
+ });
+ });
+ });
+ }
+ };
+});
+//# sourceMappingURL=migrations.test.js.map
diff --git a/dist/datasource-zabbix/specs/migrations.test.js.map b/dist/datasource-zabbix/specs/migrations.test.js.map
new file mode 100644
index 0000000..2f9d144
--- /dev/null
+++ b/dist/datasource-zabbix/specs/migrations.test.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../../src/datasource-zabbix/specs/migrations.test.js"],"names":["migrateDSConfig","DS_CONFIG_SCHEMA","describe","ctx","beforeEach","jsonData","dbConnection","enable","datasourceId","it","expect","toMatchObject","dbConnectionEnable","dbConnectionDatasourceId","schema","futureOptionOne","futureOptionTwo","toBeUndefined"],"mappings":";;;;;;;;AAASA,qB,eAAAA,e;AAAiBC,sB,eAAAA,gB;;;;AAE1BC,eAAS,YAAT,EAAuB,YAAM;AAC3B,YAAIC,MAAM,EAAV;;AAEAD,iBAAS,kCAAT,EAA6C,YAAM;AACjDE,qBAAW,YAAM;AACfD,gBAAIE,QAAJ,GAAe;AACbC,4BAAc;AACZC,wBAAQ,IADI;AAEZC,8BAAc;AAFF;AADD,aAAf;AAMD,WAPD;;AASAC,aAAG,0DAAH,EAA+D,YAAM;AACnET,4BAAgBG,IAAIE,QAApB;AACAK,mBAAOP,IAAIE,QAAX,EAAqBM,aAArB,CAAmC;AACjCC,kCAAoB,IADa;AAEjCC,wCAA0B,CAFO;AAGjCC,sBAAQb;AAHyB,aAAnC;AAKD,WAPD;;AASAQ,aAAG,mDAAH,EAAwD,YAAM;AAC5DN,gBAAIE,QAAJ,GAAe;AACbU,+BAAiB,KADJ;AAEbC,+BAAiB,KAFJ;AAGbF,sBAAQb;AAHK,aAAf;AAKAD,4BAAgBG,IAAIE,QAApB;AACAK,mBAAOP,IAAIE,QAAX,EAAqBM,aAArB,CAAmC;AACjCI,+BAAiB,KADgB;AAEjCC,+BAAiB,KAFgB;AAGjCF,sBAAQb;AAHyB,aAAnC;AAKAS,mBAAOP,IAAIE,QAAJ,CAAaO,kBAApB,EAAwCK,aAAxC;AACAP,mBAAOP,IAAIE,QAAJ,CAAaQ,wBAApB,EAA8CI,aAA9C;AACD,WAdD;AAeD,SAlCD;AAmCD,OAtCD","file":"migrations.test.js","sourcesContent":["import { migrateDSConfig, DS_CONFIG_SCHEMA } from '../migrations';\n\ndescribe('Migrations', () => {\n let ctx = {};\n\n describe('When migrating datasource config', () => {\n beforeEach(() => {\n ctx.jsonData = {\n dbConnection: {\n enable: true,\n datasourceId: 1\n }\n };\n });\n\n it('should change direct DB connection setting to flat style', () => {\n migrateDSConfig(ctx.jsonData);\n expect(ctx.jsonData).toMatchObject({\n dbConnectionEnable: true,\n dbConnectionDatasourceId: 1,\n schema: DS_CONFIG_SCHEMA\n });\n });\n\n it('should not touch anything if schema is up to date', () => {\n ctx.jsonData = {\n futureOptionOne: 'foo',\n futureOptionTwo: 'bar',\n schema: DS_CONFIG_SCHEMA\n };\n migrateDSConfig(ctx.jsonData);\n expect(ctx.jsonData).toMatchObject({\n futureOptionOne: 'foo',\n futureOptionTwo: 'bar',\n schema: DS_CONFIG_SCHEMA\n });\n expect(ctx.jsonData.dbConnectionEnable).toBeUndefined();\n expect(ctx.jsonData.dbConnectionDatasourceId).toBeUndefined();\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/utils.js b/dist/datasource-zabbix/utils.js
index 9f370a1..b19b068 100644
--- a/dist/datasource-zabbix/utils.js
+++ b/dist/datasource-zabbix/utils.js
@@ -250,10 +250,26 @@ System.register(['lodash', 'moment'], function (_export, _context) {
};
}
- // Fix for backward compatibility with lodash 2.4
+ /**
+ * Apply function one by one: `sequence([a(), b(), c()]) = c(b(a()))`
+ * @param {*} funcsArray functions to apply
+ */
_export('callOnce', callOnce);
+ function sequence(funcsArray) {
+ return function (result) {
+ for (var i = 0; i < funcsArray.length; i++) {
+ result = funcsArray[i].call(this, result);
+ }
+ return result;
+ };
+ }
+
+ // Fix for backward compatibility with lodash 2.4
+
+ _export('sequence', sequence);
+
return {
setters: [function (_lodash) {
_ = _lodash.default;
diff --git a/dist/datasource-zabbix/utils.js.map b/dist/datasource-zabbix/utils.js.map
index 94c6f0a..6293307 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","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
+{"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","sequence","funcsArray","call","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/**\n * Apply function one by one: `sequence([a(), b(), c()]) = c(b(a()))`\n * @param {*} funcsArray functions to apply\n */\nexport function sequence(funcsArray) {\n return function(result) {\n for (var i = 0; i < funcsArray.length; i++) {\n result = funcsArray[i].call(this, result);\n }\n return result;\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/connectors/dbConnector.js b/dist/datasource-zabbix/zabbix/connectors/dbConnector.js
index 2e5facb..4384617 100644
--- a/dist/datasource-zabbix/zabbix/connectors/dbConnector.js
+++ b/dist/datasource-zabbix/zabbix/connectors/dbConnector.js
@@ -3,7 +3,7 @@
System.register(['lodash'], function (_export, _context) {
"use strict";
- var _, _createClass, NOT_IMPLEMENTED, DBConnector;
+ var _, _createClass, DBConnector, ZabbixNotImplemented;
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
@@ -34,8 +34,6 @@ System.register(['lodash'], function (_export, _context) {
};
}();
- NOT_IMPLEMENTED = 'Method should be implemented in subclass of DBConnector';
-
DBConnector = function () {
function DBConnector(options, backendSrv, datasourceSrv) {
_classCallCheck(this, DBConnector);
@@ -44,7 +42,8 @@ System.register(['lodash'], function (_export, _context) {
this.datasourceSrv = datasourceSrv;
this.datasourceId = options.datasourceId;
this.datasourceName = options.datasourceName;
- this.datasourceType = null;
+ this.datasourceTypeId = null;
+ this.datasourceTypeName = null;
}
_createClass(DBConnector, [{
@@ -55,7 +54,9 @@ System.register(['lodash'], function (_export, _context) {
var ds = _.find(this.datasourceSrv.getAll(), { 'id': this.datasourceId });
if (ds) {
return this.datasourceSrv.loadDatasource(ds.name).then(function (ds) {
- _this.datasourceType = ds.meta.id;
+ _this.datasourceName = ds.name;
+ _this.datasourceTypeId = ds.meta.id;
+ _this.datasourceTypeName = ds.meta.name;
return ds;
});
} else {
@@ -65,17 +66,17 @@ System.register(['lodash'], function (_export, _context) {
}, {
key: 'testDataSource',
value: function testDataSource() {
- throw NOT_IMPLEMENTED;
+ throw new ZabbixNotImplemented('testDataSource()');
}
}, {
key: 'getHistory',
value: function getHistory() {
- throw NOT_IMPLEMENTED;
+ throw new ZabbixNotImplemented('getHistory()');
}
}, {
key: 'getTrends',
value: function getTrends() {
- throw NOT_IMPLEMENTED;
+ throw new ZabbixNotImplemented('getTrends()');
}
}]);
@@ -83,6 +84,27 @@ System.register(['lodash'], function (_export, _context) {
}();
_export('default', DBConnector);
+
+ _export('ZabbixNotImplemented', ZabbixNotImplemented = function () {
+ function ZabbixNotImplemented(methodName) {
+ _classCallCheck(this, ZabbixNotImplemented);
+
+ this.code = null;
+ this.name = 'ZabbixNotImplemented';
+ this.message = 'Zabbix DB Connector Error: method ' + (methodName || '') + ' should be implemented in subclass of DBConnector';
+ }
+
+ _createClass(ZabbixNotImplemented, [{
+ key: 'toString',
+ value: function toString() {
+ return this.message;
+ }
+ }]);
+
+ return ZabbixNotImplemented;
+ }());
+
+ _export('ZabbixNotImplemented', ZabbixNotImplemented);
}
};
});
diff --git a/dist/datasource-zabbix/zabbix/connectors/dbConnector.js.map b/dist/datasource-zabbix/zabbix/connectors/dbConnector.js.map
index bb80c45..9752319 100644
--- a/dist/datasource-zabbix/zabbix/connectors/dbConnector.js.map
+++ b/dist/datasource-zabbix/zabbix/connectors/dbConnector.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/datasource-zabbix/zabbix/connectors/dbConnector.js"],"names":["_","NOT_IMPLEMENTED","DBConnector","options","backendSrv","datasourceSrv","datasourceId","datasourceName","datasourceType","ds","find","getAll","loadDatasource","name","then","meta","id","Promise","reject"],"mappings":";;;;;;;;;;;;;;;AAAOA,O;;;;;;;;;;;;;;;;;;;;;AAEDC,qB,GAAkB,yD;;AAEHC,iB;AACnB,6BAAYC,OAAZ,EAAqBC,UAArB,EAAiCC,aAAjC,EAAgD;AAAA;;AAC9C,eAAKD,UAAL,GAAkBA,UAAlB;AACA,eAAKC,aAAL,GAAqBA,aAArB;AACA,eAAKC,YAAL,GAAoBH,QAAQG,YAA5B;AACA,eAAKC,cAAL,GAAsBJ,QAAQI,cAA9B;AACA,eAAKC,cAAL,GAAsB,IAAtB;AACD;;;;6CAEkB;AAAA;;AACjB,gBAAIC,KAAKT,EAAEU,IAAF,CAAO,KAAKL,aAAL,CAAmBM,MAAnB,EAAP,EAAoC,EAAC,MAAM,KAAKL,YAAZ,EAApC,CAAT;AACA,gBAAIG,EAAJ,EAAQ;AACN,qBAAO,KAAKJ,aAAL,CAAmBO,cAAnB,CAAkCH,GAAGI,IAArC,EACNC,IADM,CACD,cAAM;AACV,sBAAKN,cAAL,GAAsBC,GAAGM,IAAH,CAAQC,EAA9B;AACA,uBAAOP,EAAP;AACD,eAJM,CAAP;AAKD,aAND,MAMO;AACL,qBAAOQ,QAAQC,MAAR,8BAA0C,KAAKZ,YAA/C,gBAAP;AACD;AACF;;;2CAEgB;AACf,kBAAML,eAAN;AACD;;;uCAEY;AACX,kBAAMA,eAAN;AACD;;;sCAEW;AACV,kBAAMA,eAAN;AACD;;;;;;yBAhCkBC,W","file":"dbConnector.js","sourcesContent":["import _ from 'lodash';\n\nconst NOT_IMPLEMENTED = 'Method should be implemented in subclass of DBConnector';\n\nexport default class DBConnector {\n constructor(options, backendSrv, datasourceSrv) {\n this.backendSrv = backendSrv;\n this.datasourceSrv = datasourceSrv;\n this.datasourceId = options.datasourceId;\n this.datasourceName = options.datasourceName;\n this.datasourceType = null;\n }\n\n loadDBDataSource() {\n let ds = _.find(this.datasourceSrv.getAll(), {'id': this.datasourceId});\n if (ds) {\n return this.datasourceSrv.loadDatasource(ds.name)\n .then(ds => {\n this.datasourceType = ds.meta.id;\n return ds;\n });\n } else {\n return Promise.reject(`SQL Data Source with ID ${this.datasourceId} not found`);\n }\n }\n\n testDataSource() {\n throw NOT_IMPLEMENTED;\n }\n\n getHistory() {\n throw NOT_IMPLEMENTED;\n }\n\n getTrends() {\n throw NOT_IMPLEMENTED;\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/datasource-zabbix/zabbix/connectors/dbConnector.js"],"names":["_","DBConnector","options","backendSrv","datasourceSrv","datasourceId","datasourceName","datasourceTypeId","datasourceTypeName","ds","find","getAll","loadDatasource","name","then","meta","id","Promise","reject","ZabbixNotImplemented","methodName","code","message"],"mappings":";;;;;;;;;;;;;;;AAAOA,O;;;;;;;;;;;;;;;;;;;;;AAMcC,iB;AACnB,6BAAYC,OAAZ,EAAqBC,UAArB,EAAiCC,aAAjC,EAAgD;AAAA;;AAC9C,eAAKD,UAAL,GAAkBA,UAAlB;AACA,eAAKC,aAAL,GAAqBA,aAArB;AACA,eAAKC,YAAL,GAAoBH,QAAQG,YAA5B;AACA,eAAKC,cAAL,GAAsBJ,QAAQI,cAA9B;AACA,eAAKC,gBAAL,GAAwB,IAAxB;AACA,eAAKC,kBAAL,GAA0B,IAA1B;AACD;;;;6CAEkB;AAAA;;AACjB,gBAAIC,KAAKT,EAAEU,IAAF,CAAO,KAAKN,aAAL,CAAmBO,MAAnB,EAAP,EAAoC,EAAC,MAAM,KAAKN,YAAZ,EAApC,CAAT;AACA,gBAAII,EAAJ,EAAQ;AACN,qBAAO,KAAKL,aAAL,CAAmBQ,cAAnB,CAAkCH,GAAGI,IAArC,EACNC,IADM,CACD,cAAM;AACV,sBAAKR,cAAL,GAAsBG,GAAGI,IAAzB;AACA,sBAAKN,gBAAL,GAAwBE,GAAGM,IAAH,CAAQC,EAAhC;AACA,sBAAKR,kBAAL,GAA0BC,GAAGM,IAAH,CAAQF,IAAlC;AACA,uBAAOJ,EAAP;AACD,eANM,CAAP;AAOD,aARD,MAQO;AACL,qBAAOQ,QAAQC,MAAR,8BAA0C,KAAKb,YAA/C,gBAAP;AACD;AACF;;;2CAKgB;AACf,kBAAM,IAAIc,oBAAJ,CAAyB,kBAAzB,CAAN;AACD;;;uCAKY;AACX,kBAAM,IAAIA,oBAAJ,CAAyB,cAAzB,CAAN;AACD;;;sCAKW;AACV,kBAAM,IAAIA,oBAAJ,CAAyB,aAAzB,CAAN;AACD;;;;;;yBA5CkBlB,W;;sCAgDRkB,oB;AACX,sCAAYC,UAAZ,EAAwB;AAAA;;AACtB,eAAKC,IAAL,GAAY,IAAZ;AACA,eAAKR,IAAL,GAAY,sBAAZ;AACA,eAAKS,OAAL,2CAAoDF,cAAc,EAAlE;AACD;;;;qCAEU;AACT,mBAAO,KAAKE,OAAZ;AACD","file":"dbConnector.js","sourcesContent":["import _ from 'lodash';\n\n/**\n * Base class for external history database connectors. Subclasses should implement `getHistory()`, `getTrends()` and\n * `testDataSource()` methods, which describe how to fetch data from source other than Zabbix API.\n */\nexport default class DBConnector {\n constructor(options, backendSrv, datasourceSrv) {\n this.backendSrv = backendSrv;\n this.datasourceSrv = datasourceSrv;\n this.datasourceId = options.datasourceId;\n this.datasourceName = options.datasourceName;\n this.datasourceTypeId = null;\n this.datasourceTypeName = null;\n }\n\n loadDBDataSource() {\n let ds = _.find(this.datasourceSrv.getAll(), {'id': this.datasourceId});\n if (ds) {\n return this.datasourceSrv.loadDatasource(ds.name)\n .then(ds => {\n this.datasourceName = ds.name;\n this.datasourceTypeId = ds.meta.id;\n this.datasourceTypeName = ds.meta.name;\n return ds;\n });\n } else {\n return Promise.reject(`SQL Data Source with ID ${this.datasourceId} not found`);\n }\n }\n\n /**\n * Send test request to datasource in order to ensure it's working.\n */\n testDataSource() {\n throw new ZabbixNotImplemented('testDataSource()');\n }\n\n /**\n * Get history data from external sources.\n */\n getHistory() {\n throw new ZabbixNotImplemented('getHistory()');\n }\n\n /**\n * Get trends data from external sources.\n */\n getTrends() {\n throw new ZabbixNotImplemented('getTrends()');\n }\n}\n\n// Define Zabbix DB Connector exception type for non-implemented methods\nexport class ZabbixNotImplemented {\n constructor(methodName) {\n this.code = null;\n this.name = 'ZabbixNotImplemented';\n this.message = `Zabbix DB Connector Error: method ${methodName || ''} should be implemented in subclass of DBConnector`;\n }\n\n toString() {\n return this.message;\n }\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js b/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js
index 0ef5348..ea33a99 100644
--- a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js
+++ b/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js
@@ -167,7 +167,7 @@ System.register(['lodash', './mysql', './postgres', '../dbConnector'], function
_createClass(SQLConnector, [{
key: 'loadSQLDialect',
value: function loadSQLDialect() {
- if (this.datasourceType === supportedDatabases.postgres) {
+ if (this.datasourceTypeId === supportedDatabases.postgres) {
this.sqlDialect = postgres;
} else {
this.sqlDialect = mysql;
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js.map b/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js.map
index c9e6ebe..240a01f 100644
--- a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js.map
+++ b/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../../src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js"],"names":["convertGrafanaTSResponse","time_series","items","addHostName","hosts","_","uniqBy","flatten","map","grafanaSeries","itemid","series","name","item","find","alias","keys","length","host","hostid","datapoints","cloneDeep","points","target","sortBy","compactSQLQuery","query","replace","mysql","postgres","DBConnector","supportedDatabases","DEFAULT_QUERY_LIMIT","HISTORY_TO_TABLE_MAP","TREND_TO_TABLE_MAP","consolidateByFunc","consolidateByTrendColumns","SQLConnector","options","backendSrv","datasourceSrv","limit","sqlDialect","then","loadSQLDialect","datasourceType","testQuery","invokeSQLQuery","timeFrom","timeTill","intervalMs","consolidateBy","intervalSec","Math","ceil","aggFunction","grouped_items","groupBy","promises","value_type","itemids","join","table","historyQuery","Promise","all","results","valueColumn","includes","trendsQuery","history","queryDef","refId","format","datasourceId","rawSql","maxDataPoints","datasourceRequest","url","method","data","queries","response"],"mappings":"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","file":"sqlConnector.js","sourcesContent":["import _ from 'lodash';\nimport mysql from './mysql';\nimport postgres from './postgres';\nimport DBConnector from '../dbConnector';\n\nconst supportedDatabases = {\n mysql: 'mysql',\n postgres: 'postgres'\n};\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\nexport class SQLConnector extends DBConnector {\n constructor(options, backendSrv, datasourceSrv) {\n super(options, backendSrv, datasourceSrv);\n\n this.limit = options.limit || DEFAULT_QUERY_LIMIT;\n this.sqlDialect = null;\n\n super.loadDBDataSource()\n .then(() => this.loadSQLDialect());\n }\n\n loadSQLDialect() {\n if (this.datasourceType === supportedDatabases.postgres) {\n this.sqlDialect = postgres;\n } else {\n this.sqlDialect = mysql;\n }\n }\n\n /**\n * Try to invoke test query for one of Zabbix database tables.\n */\n testDataSource() {\n let testQuery = this.sqlDialect.testQuery();\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 let query = this.sqlDialect.historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction);\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 let query = this.sqlDialect.trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn);\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.datasourceId,\n rawSql: query,\n maxDataPoints: this.limit\n };\n\n return this.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///////////////////////////////////////////////////////////////////////////////\n\nfunction convertGrafanaTSResponse(time_series, items, addHostName) {\n //uniqBy is needed to deduplicate\n var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid');\n let grafanaSeries = _.map(time_series, series => {\n let itemid = series.name;\n var item = _.find(items, {'itemid': itemid});\n var alias = item.name;\n //only when actual multi hosts selected\n if (_.keys(hosts).length > 1 && addHostName) {\n var host = _.find(hosts, {'hostid': item.hostid});\n alias = host.name + \": \" + alias;\n }\n // CachingProxy deduplicates requests and returns one time series for equal queries.\n // Clone is needed to prevent changing of series object shared between all targets.\n let datapoints = _.cloneDeep(series.points);\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
+{"version":3,"sources":["../../../../../src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js"],"names":["convertGrafanaTSResponse","time_series","items","addHostName","hosts","_","uniqBy","flatten","map","grafanaSeries","itemid","series","name","item","find","alias","keys","length","host","hostid","datapoints","cloneDeep","points","target","sortBy","compactSQLQuery","query","replace","mysql","postgres","DBConnector","supportedDatabases","DEFAULT_QUERY_LIMIT","HISTORY_TO_TABLE_MAP","TREND_TO_TABLE_MAP","consolidateByFunc","consolidateByTrendColumns","SQLConnector","options","backendSrv","datasourceSrv","limit","sqlDialect","then","loadSQLDialect","datasourceTypeId","testQuery","invokeSQLQuery","timeFrom","timeTill","intervalMs","consolidateBy","intervalSec","Math","ceil","aggFunction","grouped_items","groupBy","promises","value_type","itemids","join","table","historyQuery","Promise","all","results","valueColumn","includes","trendsQuery","history","queryDef","refId","format","datasourceId","rawSql","maxDataPoints","datasourceRequest","url","method","data","queries","response"],"mappings":"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","file":"sqlConnector.js","sourcesContent":["import _ from 'lodash';\nimport mysql from './mysql';\nimport postgres from './postgres';\nimport DBConnector from '../dbConnector';\n\nconst supportedDatabases = {\n mysql: 'mysql',\n postgres: 'postgres'\n};\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\nexport class SQLConnector extends DBConnector {\n constructor(options, backendSrv, datasourceSrv) {\n super(options, backendSrv, datasourceSrv);\n\n this.limit = options.limit || DEFAULT_QUERY_LIMIT;\n this.sqlDialect = null;\n\n super.loadDBDataSource()\n .then(() => this.loadSQLDialect());\n }\n\n loadSQLDialect() {\n if (this.datasourceTypeId === supportedDatabases.postgres) {\n this.sqlDialect = postgres;\n } else {\n this.sqlDialect = mysql;\n }\n }\n\n /**\n * Try to invoke test query for one of Zabbix database tables.\n */\n testDataSource() {\n let testQuery = this.sqlDialect.testQuery();\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 let query = this.sqlDialect.historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction);\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 let query = this.sqlDialect.trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn);\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.datasourceId,\n rawSql: query,\n maxDataPoints: this.limit\n };\n\n return this.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///////////////////////////////////////////////////////////////////////////////\n\nfunction convertGrafanaTSResponse(time_series, items, addHostName) {\n //uniqBy is needed to deduplicate\n var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid');\n let grafanaSeries = _.map(time_series, series => {\n let itemid = series.name;\n var item = _.find(items, {'itemid': itemid});\n var alias = item.name;\n //only when actual multi hosts selected\n if (_.keys(hosts).length > 1 && addHostName) {\n var host = _.find(hosts, {'hostid': item.hostid});\n alias = host.name + \": \" + alias;\n }\n // CachingProxy deduplicates requests and returns one time series for equal queries.\n // Clone is needed to prevent changing of series object shared between all targets.\n let datapoints = _.cloneDeep(series.points);\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/datasource-zabbix/zabbix/zabbix.js b/dist/datasource-zabbix/zabbix/zabbix.js
index 9fd66f7..bd38c67 100644
--- a/dist/datasource-zabbix/zabbix/zabbix.js
+++ b/dist/datasource-zabbix/zabbix/zabbix.js
@@ -1,9 +1,9 @@
'use strict';
-System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbix_api/zabbixAPIConnector', './connectors/sql/sqlConnector', './proxy/cachingProxy'], function (_export, _context) {
+System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbix_api/zabbixAPIConnector', './connectors/sql/sqlConnector', './proxy/cachingProxy', './connectors/dbConnector'], function (_export, _context) {
"use strict";
- var _, utils, responseHandler, ZabbixAPIConnector, SQLConnector, CachingProxy, _slicedToArray, _createClass, REQUESTS_TO_PROXYFY, REQUESTS_TO_CACHE, REQUESTS_TO_BIND, Zabbix;
+ var _, utils, responseHandler, ZabbixAPIConnector, SQLConnector, CachingProxy, ZabbixNotImplemented, _slicedToArray, _createClass, REQUESTS_TO_PROXYFY, REQUESTS_TO_CACHE, REQUESTS_TO_BIND, Zabbix;
function _toConsumableArray(arr) {
if (Array.isArray(arr)) {
@@ -99,6 +99,8 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
SQLConnector = _connectorsSqlSqlConnector.SQLConnector;
}, function (_proxyCachingProxy) {
CachingProxy = _proxyCachingProxy.CachingProxy;
+ }, function (_connectorsDbConnector) {
+ ZabbixNotImplemented = _connectorsDbConnector.ZabbixNotImplemented;
}],
execute: function () {
_slicedToArray = function () {
@@ -282,6 +284,37 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
}
}
}
+ }, {
+ key: 'testDataSource',
+ value: function testDataSource() {
+ var _this = this;
+
+ var zabbixVersion = void 0;
+ var dbConnectorStatus = void 0;
+ return this.getVersion().then(function (version) {
+ zabbixVersion = version;
+ return _this.login();
+ }).then(function () {
+ if (_this.enableDirectDBConnection) {
+ return _this.dbConnector.testDataSource();
+ } else {
+ return Promise.resolve();
+ }
+ }).catch(function (error) {
+ if (error instanceof ZabbixNotImplemented) {
+ return Promise.resolve();
+ }
+ return Promise.reject(error);
+ }).then(function (testResult) {
+ if (testResult) {
+ dbConnectorStatus = {
+ dsType: _this.dbConnector.datasourceTypeName,
+ dsName: _this.dbConnector.datasourceName
+ };
+ }
+ return { zabbixVersion: zabbixVersion, dbConnectorStatus: dbConnectorStatus };
+ });
+ }
}, {
key: 'getItemsFromTarget',
value: function getItemsFromTarget(target, options) {
@@ -324,11 +357,11 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
}, {
key: 'getAllHosts',
value: function getAllHosts(groupFilter) {
- var _this = this;
+ var _this2 = this;
return this.getGroups(groupFilter).then(function (groups) {
var groupids = _.map(groups, 'groupid');
- return _this.zabbixAPI.getHosts(groupids);
+ return _this2.zabbixAPI.getHosts(groupids);
});
}
}, {
@@ -341,22 +374,22 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
}, {
key: 'getAllApps',
value: function getAllApps(groupFilter, hostFilter) {
- var _this2 = this;
+ var _this3 = this;
return this.getHosts(groupFilter, hostFilter).then(function (hosts) {
var hostids = _.map(hosts, 'hostid');
- return _this2.zabbixAPI.getApps(hostids);
+ return _this3.zabbixAPI.getApps(hostids);
});
}
}, {
key: 'getApps',
value: function getApps(groupFilter, hostFilter, appFilter) {
- var _this3 = this;
+ var _this4 = this;
return this.getHosts(groupFilter, hostFilter).then(function (hosts) {
var hostids = _.map(hosts, 'hostid');
if (appFilter) {
- return _this3.zabbixAPI.getApps(hostids).then(function (apps) {
+ return _this4.zabbixAPI.getApps(hostids).then(function (apps) {
return filterByQuery(apps, appFilter);
});
} else {
@@ -370,16 +403,16 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
}, {
key: 'getAllItems',
value: function getAllItems(groupFilter, hostFilter, appFilter) {
- var _this4 = this;
+ var _this5 = this;
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
return this.getApps(groupFilter, hostFilter, appFilter).then(function (apps) {
if (apps.appFilterEmpty) {
- return _this4.zabbixAPI.getItems(apps.hostids, undefined, options.itemtype);
+ return _this5.zabbixAPI.getItems(apps.hostids, undefined, options.itemtype);
} else {
var appids = _.map(apps, 'applicationid');
- return _this4.zabbixAPI.getItems(undefined, appids, options.itemtype);
+ return _this5.zabbixAPI.getItems(undefined, appids, options.itemtype);
}
}).then(function (items) {
if (!options.showDisabledItems) {
@@ -421,7 +454,7 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
}, {
key: 'getTriggers',
value: function getTriggers(groupFilter, hostFilter, appFilter, options) {
- var _this5 = this;
+ var _this6 = this;
var promises = [this.getGroups(groupFilter), this.getHosts(groupFilter, hostFilter), this.getApps(groupFilter, hostFilter, appFilter)];
@@ -443,13 +476,13 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
return query;
}).then(function (query) {
- return _this5.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options);
+ return _this6.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options);
});
}
}, {
key: 'getHistoryTS',
value: function getHistoryTS(items, timeRange, options) {
- var _this6 = this;
+ var _this7 = this;
var _timeRange = _slicedToArray(timeRange, 2),
timeFrom = _timeRange[0],
@@ -457,7 +490,7 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
if (this.enableDirectDBConnection) {
return this.getHistoryDB(items, timeFrom, timeTo, options).then(function (history) {
- return _this6.dbConnector.handleGrafanaTSResponse(history, items);
+ return _this7.dbConnector.handleGrafanaTSResponse(history, items);
});
} else {
return this.zabbixAPI.getHistory(items, timeFrom, timeTo).then(function (history) {
@@ -468,7 +501,7 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
}, {
key: 'getTrends',
value: function getTrends(items, timeRange, options) {
- var _this7 = this;
+ var _this8 = this;
var _timeRange2 = _slicedToArray(timeRange, 2),
timeFrom = _timeRange2[0],
@@ -476,7 +509,7 @@ System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbi
if (this.enableDirectDBConnection) {
return this.getTrendsDB(items, timeFrom, timeTo, options).then(function (history) {
- return _this7.dbConnector.handleGrafanaTSResponse(history, items);
+ return _this8.dbConnector.handleGrafanaTSResponse(history, items);
});
} else {
var valueType = options.consolidateBy || options.valueType;
diff --git a/dist/datasource-zabbix/zabbix/zabbix.js.map b/dist/datasource-zabbix/zabbix/zabbix.js.map
index c785a7f..dfa11b1 100644
--- a/dist/datasource-zabbix/zabbix/zabbix.js.map
+++ b/dist/datasource-zabbix/zabbix/zabbix.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/zabbix/zabbix.js"],"names":["findByName","list","name","finded","_","find","filterByName","filter","filterByRegex","regex","filterPattern","utils","buildRegex","zbx_obj","test","findByFilter","isRegex","filterByQuery","getHostIds","items","hostIds","map","item","hosts","uniq","flatten","responseHandler","ZabbixAPIConnector","SQLConnector","CachingProxy","REQUESTS_TO_PROXYFY","REQUESTS_TO_CACHE","REQUESTS_TO_BIND","Zabbix","options","backendSrv","datasourceSrv","url","username","password","basicAuth","withCredentials","cacheTTL","enableDirectDBConnection","datasourceId","cacheOptions","enabled","ttl","cachingProxy","zabbixAPI","dbConnectorOptions","dbConnector","getHistoryDB","proxyfyWithCache","getHistory","getTrendsDB","getTrends","proxyfyRequests","cacheRequests","bindRequests","request","proxyfy","cacheRequest","bind","target","parts","filters","p","getItems","Promise","all","getHosts","getApps","then","results","apps","appFilterEmpty","getGroups","groupFilter","getAllGroups","groups","groupids","hostFilter","getAllHosts","hostids","appFilter","undefined","itemtype","appids","showDisabledItems","expandUserMacro","getMacros","forEach","containsMacro","replaceMacro","macros","itemFilter","getAllItems","itServiceFilter","getITService","itServices","promises","filteredGroups","filteredHosts","filteredApps","query","applicationids","getTriggers","timeRange","timeFrom","timeTo","handleGrafanaTSResponse","history","handleHistory","valueType","consolidateBy","getTrend","handleTrends","sortTimeseries","length","resultFormat","handleHistoryAsTable","handleText","resolve","itservices","isOldVersion","itservice","serviceid","itServiceIds","getSLA","handleSLAResponse","slaProperty","slaResponse"],"mappings":"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","file":"zabbix.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from '../utils';\nimport responseHandler from '../responseHandler';\nimport { ZabbixAPIConnector } from './connectors/zabbix_api/zabbixAPIConnector';\nimport { SQLConnector } from './connectors/sql/sqlConnector';\nimport { CachingProxy } from './proxy/cachingProxy';\n\nconst REQUESTS_TO_PROXYFY = [\n 'getHistory', 'getTrend', 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs',\n 'getEvents', 'getAlerts', 'getHostAlerts', 'getAcknowledges', 'getITService', 'getSLA', 'getVersion'\n];\n\nconst REQUESTS_TO_CACHE = [\n 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs', 'getITService'\n];\n\nconst REQUESTS_TO_BIND = [\n 'getHistory', 'getTrend', 'getMacros', 'getItemsByIDs', 'getEvents', 'getAlerts', 'getHostAlerts',\n 'getAcknowledges', 'getITService', 'getVersion', 'login'\n];\n\nexport class Zabbix {\n constructor(options, backendSrv, datasourceSrv) {\n let {\n url,\n username,\n password,\n basicAuth,\n withCredentials,\n cacheTTL,\n enableDirectDBConnection,\n datasourceId\n } = options;\n\n this.enableDirectDBConnection = enableDirectDBConnection;\n\n // Initialize caching proxy for requests\n let cacheOptions = {\n enabled: true,\n ttl: cacheTTL\n };\n this.cachingProxy = new CachingProxy(cacheOptions);\n\n this.zabbixAPI = new ZabbixAPIConnector(url, username, password, basicAuth, withCredentials, backendSrv);\n\n if (enableDirectDBConnection) {\n let dbConnectorOptions = { datasourceId };\n this.dbConnector = new SQLConnector(dbConnectorOptions, backendSrv, datasourceSrv);\n this.getHistoryDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getHistory, 'getHistory', this.dbConnector);\n this.getTrendsDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getTrends, 'getTrends', this.dbConnector);\n }\n\n this.proxyfyRequests();\n this.cacheRequests();\n this.bindRequests();\n }\n\n proxyfyRequests() {\n for (let request of REQUESTS_TO_PROXYFY) {\n this.zabbixAPI[request] = this.cachingProxy.proxyfy(this.zabbixAPI[request], request, this.zabbixAPI);\n }\n }\n\n cacheRequests() {\n for (let request of REQUESTS_TO_CACHE) {\n this.zabbixAPI[request] = this.cachingProxy.cacheRequest(this.zabbixAPI[request], request, this.zabbixAPI);\n }\n }\n\n bindRequests() {\n for (let request of REQUESTS_TO_BIND) {\n this[request] = this.zabbixAPI[request].bind(this.zabbixAPI);\n }\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 getHostsFromTarget(target) {\n let parts = ['group', 'host', 'application'];\n let filters = _.map(parts, p => target[p].filter);\n return Promise.all([\n this.getHosts(...filters),\n this.getApps(...filters),\n ]).then((results) => {\n let [hosts, apps] = results;\n if (apps.appFilterEmpty) {\n apps = [];\n }\n return [hosts, apps];\n });\n }\n\n getAllGroups() {\n return this.zabbixAPI.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.zabbixAPI.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.zabbixAPI.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.zabbixAPI.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.zabbixAPI.getItems(apps.hostids, undefined, options.itemtype);\n } else {\n let appids = _.map(apps, 'applicationid');\n return this.zabbixAPI.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.zabbixAPI.getITService()\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 getHistoryTS(items, timeRange, options) {\n let [timeFrom, timeTo] = timeRange;\n if (this.enableDirectDBConnection) {\n return this.getHistoryDB(items, timeFrom, timeTo, options)\n .then(history => this.dbConnector.handleGrafanaTSResponse(history, items));\n } else {\n return this.zabbixAPI.getHistory(items, timeFrom, timeTo)\n .then(history => responseHandler.handleHistory(history, items));\n }\n }\n\n getTrends(items, timeRange, options) {\n let [timeFrom, timeTo] = timeRange;\n if (this.enableDirectDBConnection) {\n return this.getTrendsDB(items, timeFrom, timeTo, options)\n .then(history => this.dbConnector.handleGrafanaTSResponse(history, items));\n } else {\n let valueType = options.consolidateBy || options.valueType;\n return this.zabbixAPI.getTrend(items, timeFrom, timeTo)\n .then(history => responseHandler.handleTrends(history, items, valueType))\n .then(responseHandler.sortTimeseries); // Sort trend data, issue #202\n }\n }\n\n getHistoryText(items, timeRange, target) {\n let [timeFrom, timeTo] = timeRange;\n if (items.length) {\n return this.zabbixAPI.getHistory(items, timeFrom, timeTo)\n .then(history => {\n if (target.resultFormat === 'table') {\n return responseHandler.handleHistoryAsTable(history, items, target);\n } else {\n return responseHandler.handleText(history, items, target);\n }\n });\n } else {\n return Promise.resolve([]);\n }\n }\n\n getSLA(itservices, timeRange, target, options) {\n let itServices = itservices;\n if (options.isOldVersion) {\n itServices = _.filter(itServices, {'serviceid': target.itservice.serviceid});\n }\n let itServiceIds = _.map(itServices, 'serviceid');\n return this.zabbixAPI.getSLA(itServiceIds, timeRange)\n .then(slaResponse => {\n return _.map(itServiceIds, serviceid => {\n let itservice = _.find(itServices, {'serviceid': serviceid});\n return responseHandler.handleSLAResponse(itservice, target.slaProperty, slaResponse);\n });\n });\n }\n}\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/zabbix.js"],"names":["findByName","list","name","finded","_","find","filterByName","filter","filterByRegex","regex","filterPattern","utils","buildRegex","zbx_obj","test","findByFilter","isRegex","filterByQuery","getHostIds","items","hostIds","map","item","hosts","uniq","flatten","responseHandler","ZabbixAPIConnector","SQLConnector","CachingProxy","ZabbixNotImplemented","REQUESTS_TO_PROXYFY","REQUESTS_TO_CACHE","REQUESTS_TO_BIND","Zabbix","options","backendSrv","datasourceSrv","url","username","password","basicAuth","withCredentials","cacheTTL","enableDirectDBConnection","datasourceId","cacheOptions","enabled","ttl","cachingProxy","zabbixAPI","dbConnectorOptions","dbConnector","getHistoryDB","proxyfyWithCache","getHistory","getTrendsDB","getTrends","proxyfyRequests","cacheRequests","bindRequests","request","proxyfy","cacheRequest","bind","zabbixVersion","dbConnectorStatus","getVersion","then","version","login","testDataSource","Promise","resolve","catch","error","reject","testResult","dsType","datasourceTypeName","dsName","datasourceName","target","parts","filters","p","getItems","all","getHosts","getApps","results","apps","appFilterEmpty","getGroups","groupFilter","getAllGroups","groups","groupids","hostFilter","getAllHosts","hostids","appFilter","undefined","itemtype","appids","showDisabledItems","expandUserMacro","getMacros","forEach","containsMacro","replaceMacro","macros","itemFilter","getAllItems","itServiceFilter","getITService","itServices","promises","filteredGroups","filteredHosts","filteredApps","query","applicationids","getTriggers","timeRange","timeFrom","timeTo","handleGrafanaTSResponse","history","handleHistory","valueType","consolidateBy","getTrend","handleTrends","sortTimeseries","length","resultFormat","handleHistoryAsTable","handleText","itservices","isOldVersion","itservice","serviceid","itServiceIds","getSLA","handleSLAResponse","slaProperty","slaResponse"],"mappings":"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","file":"zabbix.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from '../utils';\nimport responseHandler from '../responseHandler';\nimport { ZabbixAPIConnector } from './connectors/zabbix_api/zabbixAPIConnector';\nimport { SQLConnector } from './connectors/sql/sqlConnector';\nimport { CachingProxy } from './proxy/cachingProxy';\nimport { ZabbixNotImplemented } from './connectors/dbConnector';\n\nconst REQUESTS_TO_PROXYFY = [\n 'getHistory', 'getTrend', 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs',\n 'getEvents', 'getAlerts', 'getHostAlerts', 'getAcknowledges', 'getITService', 'getSLA', 'getVersion'\n];\n\nconst REQUESTS_TO_CACHE = [\n 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs', 'getITService'\n];\n\nconst REQUESTS_TO_BIND = [\n 'getHistory', 'getTrend', 'getMacros', 'getItemsByIDs', 'getEvents', 'getAlerts', 'getHostAlerts',\n 'getAcknowledges', 'getITService', 'getVersion', 'login'\n];\n\nexport class Zabbix {\n constructor(options, backendSrv, datasourceSrv) {\n let {\n url,\n username,\n password,\n basicAuth,\n withCredentials,\n cacheTTL,\n enableDirectDBConnection,\n datasourceId\n } = options;\n\n this.enableDirectDBConnection = enableDirectDBConnection;\n\n // Initialize caching proxy for requests\n let cacheOptions = {\n enabled: true,\n ttl: cacheTTL\n };\n this.cachingProxy = new CachingProxy(cacheOptions);\n\n this.zabbixAPI = new ZabbixAPIConnector(url, username, password, basicAuth, withCredentials, backendSrv);\n\n if (enableDirectDBConnection) {\n let dbConnectorOptions = { datasourceId };\n this.dbConnector = new SQLConnector(dbConnectorOptions, backendSrv, datasourceSrv);\n this.getHistoryDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getHistory, 'getHistory', this.dbConnector);\n this.getTrendsDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getTrends, 'getTrends', this.dbConnector);\n }\n\n this.proxyfyRequests();\n this.cacheRequests();\n this.bindRequests();\n }\n\n proxyfyRequests() {\n for (let request of REQUESTS_TO_PROXYFY) {\n this.zabbixAPI[request] = this.cachingProxy.proxyfy(this.zabbixAPI[request], request, this.zabbixAPI);\n }\n }\n\n cacheRequests() {\n for (let request of REQUESTS_TO_CACHE) {\n this.zabbixAPI[request] = this.cachingProxy.cacheRequest(this.zabbixAPI[request], request, this.zabbixAPI);\n }\n }\n\n bindRequests() {\n for (let request of REQUESTS_TO_BIND) {\n this[request] = this.zabbixAPI[request].bind(this.zabbixAPI);\n }\n }\n\n /**\n * Perform test query for Zabbix API and external history DB.\n * @return {object} test result object:\n * ```\n {\n zabbixVersion,\n dbConnectorStatus: {\n dsType,\n dsName\n }\n }\n ```\n */\n testDataSource() {\n let zabbixVersion;\n let dbConnectorStatus;\n return this.getVersion()\n .then(version => {\n zabbixVersion = version;\n return this.login();\n })\n .then(() => {\n if (this.enableDirectDBConnection) {\n return this.dbConnector.testDataSource();\n } else {\n return Promise.resolve();\n }\n })\n .catch(error => {\n if (error instanceof ZabbixNotImplemented) {\n return Promise.resolve();\n }\n return Promise.reject(error);\n })\n .then(testResult => {\n if (testResult) {\n dbConnectorStatus = {\n dsType: this.dbConnector.datasourceTypeName,\n dsName: this.dbConnector.datasourceName\n };\n }\n return { zabbixVersion, dbConnectorStatus };\n });\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 getHostsFromTarget(target) {\n let parts = ['group', 'host', 'application'];\n let filters = _.map(parts, p => target[p].filter);\n return Promise.all([\n this.getHosts(...filters),\n this.getApps(...filters),\n ]).then((results) => {\n let [hosts, apps] = results;\n if (apps.appFilterEmpty) {\n apps = [];\n }\n return [hosts, apps];\n });\n }\n\n getAllGroups() {\n return this.zabbixAPI.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.zabbixAPI.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.zabbixAPI.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.zabbixAPI.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.zabbixAPI.getItems(apps.hostids, undefined, options.itemtype);\n } else {\n let appids = _.map(apps, 'applicationid');\n return this.zabbixAPI.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.zabbixAPI.getITService()\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 getHistoryTS(items, timeRange, options) {\n let [timeFrom, timeTo] = timeRange;\n if (this.enableDirectDBConnection) {\n return this.getHistoryDB(items, timeFrom, timeTo, options)\n .then(history => this.dbConnector.handleGrafanaTSResponse(history, items));\n } else {\n return this.zabbixAPI.getHistory(items, timeFrom, timeTo)\n .then(history => responseHandler.handleHistory(history, items));\n }\n }\n\n getTrends(items, timeRange, options) {\n let [timeFrom, timeTo] = timeRange;\n if (this.enableDirectDBConnection) {\n return this.getTrendsDB(items, timeFrom, timeTo, options)\n .then(history => this.dbConnector.handleGrafanaTSResponse(history, items));\n } else {\n let valueType = options.consolidateBy || options.valueType;\n return this.zabbixAPI.getTrend(items, timeFrom, timeTo)\n .then(history => responseHandler.handleTrends(history, items, valueType))\n .then(responseHandler.sortTimeseries); // Sort trend data, issue #202\n }\n }\n\n getHistoryText(items, timeRange, target) {\n let [timeFrom, timeTo] = timeRange;\n if (items.length) {\n return this.zabbixAPI.getHistory(items, timeFrom, timeTo)\n .then(history => {\n if (target.resultFormat === 'table') {\n return responseHandler.handleHistoryAsTable(history, items, target);\n } else {\n return responseHandler.handleText(history, items, target);\n }\n });\n } else {\n return Promise.resolve([]);\n }\n }\n\n getSLA(itservices, timeRange, target, options) {\n let itServices = itservices;\n if (options.isOldVersion) {\n itServices = _.filter(itServices, {'serviceid': target.itservice.serviceid});\n }\n let itServiceIds = _.map(itServices, 'serviceid');\n return this.zabbixAPI.getSLA(itServiceIds, timeRange)\n .then(slaResponse => {\n return _.map(itServiceIds, serviceid => {\n let itservice = _.find(itServices, {'serviceid': serviceid});\n return responseHandler.handleSLAResponse(itservice, target.slaProperty, slaResponse);\n });\n });\n }\n}\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/panel-triggers/triggers_panel_ctrl.js.map b/dist/panel-triggers/triggers_panel_ctrl.js.map
index 5fea90a..b2fccfc 100644
--- a/dist/panel-triggers/triggers_panel_ctrl.js.map
+++ b/dist/panel-triggers/triggers_panel_ctrl.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/panel-triggers/triggers_panel_ctrl.js"],"names":["filterTriggers","triggers","triggerFilter","utils","isRegex","_","filter","trigger","buildRegex","test","description","$","moment","PanelCtrl","triggerPanelOptionsTab","triggerPanelTriggersTab","migratePanelSchema","CURRENT_SCHEMA_VERSION","ZABBIX_DS_ID","DEFAULT_TARGET","group","host","application","tags","DEFAULT_SEVERITY","priority","severity","color","show","DEFAULT_TIME_FORMAT","PANEL_DEFAULTS","schemaVersion","datasources","targets","hostField","hostTechNameField","hostGroups","showTags","statusField","severityField","descriptionField","descriptionAtNewLine","hostsInMaintenance","showTriggers","sortTriggersBy","text","value","showEvents","limit","fontSize","pageSize","highlightBackground","highlightNewEvents","highlightNewerThan","customLastChangeFormat","lastChangeFormat","triggerSeverity","okEventColor","ackEventColor","triggerStatusMap","TriggerPanelCtrl","$scope","$injector","$timeout","datasourceSrv","templateSrv","contextSrv","dashboardSrv","scope","editorTabIndex","defaultTimeFormat","pageIndex","triggerList","currentTriggersPage","panel","defaultsDeep","cloneDeep","available_datasources","map","getZabbixDataSources","length","push","isEmpty","initDatasources","events","on","onInitEditMode","bind","onRefresh","promises","ds","get","then","datasource","Promise","all","getMetricSources","meta","id","addEditorTab","timing","queryStart","Date","getTime","queryEnd","otherPanelInFullscreenMode","error","loading","setTimeQueryStart","getTriggers","setTimeQueryEnd","render","zabbixTriggers","catch","err","cancelled","console","log","message","data","emit","triggerListUnfiltered","formatTrigger","filterTriggersPost","sortTriggers","slice","getCurrentTriggersPage","zabbix","groupFilter","replaceTemplateVars","hostFilter","appFilter","triggersOptions","getAcknowledges","setMaintenanceStatus","filterTriggersPre","addTriggerDataSource","flatten","results","eventids","lastEvent","eventid","each","event","find","acknowledges","formatAcknowledge","ack","timestamp","unix","clock","time","format","user","alias","name","surname","fullName","target","tagsFilter","replace","parseTags","every","tag","maintenance","maintenance_status","some","hosts","orderBy","zabbixTrigger","triggerObj","hostTechName","comments","lastchangeUnix","Number","lastchange","setTriggerLastChange","setTriggerSeverity","markAckEvents","age","fromNow","tagStr","split","trim","tagParts","join","tagFilter","targetTags","newTag","uniqWith","isEqual","newFilter","tagsToString","refresh","showComment","grafana_user","ack_message","userIsEditor","isEditor","isGrafanaAdmin","disableReadOnlyUsersAck","reject","zabbixAPI","acknowledgeEvent","startPos","endPos","Math","min","groupNames","groups","iconClass","isNewTrigger","statusClass","mainColor","secondColor","lightTheme","highlightIntervalMs","parseInterval","durationSec","now","e","elem","attrs","ctrl","pageCount","$watchGroup","renderPanel","switchPage","renderData","getContentHeight","panelHeight","height","el","currentTarget","parseInt","$apply","appendPaginationControls","footerElem","empty","ceil","startPage","max","endPage","paginationList","i","activeClass","pageLinkElem","append","setFontSize","triggerCardElem","css","rootElem","renderingCompleted","unbindDestroy","$on","off","templateUrl"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAupBA,WAASA,cAAT,CAAwBC,QAAxB,EAAkCC,aAAlC,EAAiD;AAC/C,QAAIC,MAAMC,OAAN,CAAcF,aAAd,CAAJ,EAAkC;AAChC,aAAOG,EAAEC,MAAF,CAASL,QAAT,EAAmB,UAASM,OAAT,EAAkB;AAC1C,eAAOJ,MAAMK,UAAN,CAAiBN,aAAjB,EAAgCO,IAAhC,CAAqCF,QAAQG,WAA7C,CAAP;AACD,OAFM,CAAP;AAGD,KAJD,MAIO;AACL,aAAOL,EAAEC,MAAF,CAASL,QAAT,EAAmB,UAASM,OAAT,EAAkB;AAC1C,eAAOA,QAAQG,WAAR,KAAwBR,aAA/B;AACD,OAFM,CAAP;AAGD;AACF;;;AAjqBMG,O;;AACAM,O;;AACAC,Y;;AACKT,W;;AACJU,e,kBAAAA,S;;AACAC,4B,gBAAAA,sB;;AACAC,6B,iBAAAA,uB;;AACAC,wB,eAAAA,kB;AAAoBC,4B,eAAAA,sB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtBC,kB,GAAe,mC;;gCAERC,c,GAAiB;AAC5BC,eAAO,EAACd,QAAQ,EAAT,EADqB;AAE5Be,cAAM,EAACf,QAAQ,EAAT,EAFsB;AAG5BgB,qBAAa,EAAChB,QAAQ,EAAT,EAHe;AAI5BC,iBAAS,EAACD,QAAQ,EAAT,EAJmB;AAK5BiB,cAAM,EAACjB,QAAQ,EAAT;AALsB,O;;;;kCAQjBkB,gB,GAAmB,CAC9B,EAAEC,UAAU,CAAZ,EAAeC,UAAU,gBAAzB,EAA4CC,OAAO,oBAAnD,EAAyEC,MAAM,IAA/E,EAD8B,EAE9B,EAAEH,UAAU,CAAZ,EAAeC,UAAU,aAAzB,EAA4CC,OAAO,oBAAnD,EAAyEC,MAAM,IAA/E,EAF8B,EAG9B,EAAEH,UAAU,CAAZ,EAAeC,UAAU,SAAzB,EAA4CC,OAAO,mBAAnD,EAAwEC,MAAM,IAA9E,EAH8B,EAI9B,EAAEH,UAAU,CAAZ,EAAeC,UAAU,SAAzB,EAA4CC,OAAO,mBAAnD,EAAwEC,MAAM,IAA9E,EAJ8B,EAK9B,EAAEH,UAAU,CAAZ,EAAeC,UAAU,MAAzB,EAA4CC,OAAO,mBAAnD,EAAwEC,MAAM,IAA9E,EAL8B,EAM9B,EAAEH,UAAU,CAAZ,EAAeC,UAAU,UAAzB,EAA4CC,OAAO,gBAAnD,EAAqEC,MAAM,IAA3E,EAN8B,C;;;;AAS1BC,yB,GAAsB,sB;;gCAEfC,c,GAAiB;AAC5BC,uBAAed,sBADa;AAE5Be,qBAAa,EAFe;AAG5BC,iBAAS,EAHmB;AAI5B;AACAC,mBAAW,IALiB;AAM5BC,2BAAmB,KANS;AAO5BC,oBAAY,KAPgB;AAQ5BC,kBAAU,IARkB;AAS5BC,qBAAa,IATe;AAU5BC,uBAAe,IAVa;AAW5BC,0BAAkB,IAXU;AAY5BC,8BAAsB,KAZM;AAa5B;AACAC,4BAAoB,IAdQ;AAe5BC,sBAAc,cAfc;AAgB5BC,wBAAgB,EAAEC,MAAM,aAAR,EAAuBC,OAAO,YAA9B,EAhBY;AAiB5BC,oBAAY,EAAEF,MAAM,UAAR,EAAoBC,OAAO,GAA3B,EAjBgB;AAkB5BE,eAAO,GAlBqB;AAmB5B;AACAC,kBAAU,MApBkB;AAqB5BC,kBAAU,EArBkB;AAsB5BC,6BAAqB,KAtBO;AAuB5BC,4BAAoB,KAvBQ;AAwB5BC,4BAAoB,IAxBQ;AAyB5BC,gCAAwB,KAzBI;AA0B5BC,0BAAkB,EA1BU;AA2B5B;AACAC,yBAAiBhC,gBA5BW;AA6B5BiC,sBAAc,mBA7Bc;AA8B5BC,uBAAe;AA9Ba,O;;;;AAiCxBC,sB,GAAmB;AACvB,aAAK,IADkB;AAEvB,aAAK;AAFkB,O;;kCAKZC,gB;;;AAEX;AACA,kCAAYC,MAAZ,EAAoBC,SAApB,EAA+BC,QAA/B,EAAyCC,aAAzC,EAAwDC,WAAxD,EAAqEC,UAArE,EAAiFC,YAAjF,EAA+F;AAAA;;AAAA,0IACvFN,MADuF,EAC/EC,SAD+E;;AAE7F,gBAAKE,aAAL,GAAqBA,aAArB;AACA,gBAAKC,WAAL,GAAmBA,WAAnB;AACA,gBAAKC,UAAL,GAAkBA,UAAlB;AACA,gBAAKC,YAAL,GAAoBA,YAApB;AACA,gBAAKC,KAAL,GAAaP,MAAb;AACA,gBAAKE,QAAL,GAAgBA,QAAhB;;AAEA,gBAAKM,cAAL,GAAsB,CAAtB;AACA,gBAAKV,gBAAL,GAAwBA,gBAAxB;AACA,gBAAKW,iBAAL,GAAyBzC,mBAAzB;AACA,gBAAK0C,SAAL,GAAiB,CAAjB;AACA,gBAAKC,WAAL,GAAmB,EAAnB;AACA,gBAAKC,mBAAL,GAA2B,EAA3B;AACA,gBAAKzC,WAAL,GAAmB,EAAnB;;AAEA,gBAAK0C,KAAL,GAAa1D,mBAAmB,MAAK0D,KAAxB,CAAb;AACArE,YAAEsE,YAAF,CAAe,MAAKD,KAApB,EAA2BrE,EAAEuE,SAAF,CAAY9C,cAAZ,CAA3B;;AAEA,gBAAK+C,qBAAL,GAA6BxE,EAAEyE,GAAF,CAAM,MAAKC,oBAAL,EAAN,EAAmC,MAAnC,CAA7B;AACA,cAAI,MAAKL,KAAL,CAAW1C,WAAX,CAAuBgD,MAAvB,KAAkC,CAAtC,EAAyC;AACvC,kBAAKN,KAAL,CAAW1C,WAAX,CAAuBiD,IAAvB,CAA4B,MAAKJ,qBAAL,CAA2B,CAA3B,CAA5B;AACD;AACD,cAAIxE,EAAE6E,OAAF,CAAU,MAAKR,KAAL,CAAWzC,OAArB,CAAJ,EAAmC;AACjC,kBAAKyC,KAAL,CAAWzC,OAAX,CAAmB,MAAKyC,KAAL,CAAW1C,WAAX,CAAuB,CAAvB,CAAnB,IAAgDb,cAAhD;AACD;;AAED,gBAAKgE,eAAL;AACA,gBAAKC,MAAL,CAAYC,EAAZ,CAAe,gBAAf,EAAiC,MAAKC,cAAL,CAAoBC,IAApB,OAAjC;AACA,gBAAKH,MAAL,CAAYC,EAAZ,CAAe,SAAf,EAA0B,MAAKG,SAAL,CAAeD,IAAf,OAA1B;AA9B6F;AA+B9F;;;;4CAEiB;AAAA;;AAChB,gBAAIE,WAAWpF,EAAEyE,GAAF,CAAM,KAAKJ,KAAL,CAAW1C,WAAjB,EAA8B,UAAC0D,EAAD,EAAQ;AACnD;AACA,qBAAO,OAAK1B,aAAL,CAAmB2B,GAAnB,CAAuBD,EAAvB,EACNE,IADM,CACD,sBAAc;AAClB,uBAAK5D,WAAL,CAAiB0D,EAAjB,IAAuBG,UAAvB;AACA,uBAAOA,UAAP;AACD,eAJM,CAAP;AAKD,aAPc,CAAf;AAQA,mBAAOC,QAAQC,GAAR,CAAYN,QAAZ,CAAP;AACD;;;iDAEsB;AACrB,mBAAOpF,EAAEC,MAAF,CAAS,KAAK0D,aAAL,CAAmBgC,gBAAnB,EAAT,EAAgD,sBAAc;AACnE,qBAAOH,WAAWI,IAAX,CAAgBC,EAAhB,KAAuBhF,YAAvB,IAAuC2E,WAAW/C,KAAzD;AACD,aAFM,CAAP;AAGD;;;2CAEgB;AACf,iBAAKqD,YAAL,CAAkB,UAAlB,EAA8BpF,uBAA9B,EAAuD,CAAvD;AACA,iBAAKoF,YAAL,CAAkB,SAAlB,EAA6BrF,sBAA7B,EAAqD,CAArD;AACD;;;8CAEmB;AAClB,iBAAKsF,MAAL,CAAYC,UAAZ,GAAyB,IAAIC,IAAJ,GAAWC,OAAX,EAAzB;AACD;;;4CAEiB;AAChB,iBAAKH,MAAL,CAAYI,QAAZ,GAAuB,IAAIF,IAAJ,GAAWC,OAAX,EAAvB;AACD;;;sCAEW;AAAA;;AACV;AACA,gBAAI,KAAKE,0BAAL,EAAJ,EAAuC;AAAE;AAAS;;AAElD;AACA,mBAAO,KAAKC,KAAZ;AACA,iBAAKC,OAAL,GAAe,IAAf;AACA,iBAAKC,iBAAL;AACA,iBAAKrC,SAAL,GAAiB,CAAjB;;AAEA,mBAAO,KAAKsC,WAAL,GACNjB,IADM,CACD,0BAAkB;AACtB;AACA,qBAAKe,OAAL,GAAe,KAAf;AACA,qBAAKG,eAAL;;AAEA,qBAAKC,MAAL,CAAYC,cAAZ;AACD,aAPM,EAQNC,KARM,CAQA,eAAO;AACZ;AACA,kBAAIC,IAAIC,SAAR,EAAmB;AACjBC,wBAAQC,GAAR,CAAY,yBAAZ,EAAuCH,GAAvC;AACA;AACD;;AAED,qBAAKP,OAAL,GAAe,KAAf;AACA,qBAAKD,KAAL,GAAaQ,IAAII,OAAJ,IAAe,eAA5B;;AAEA,kBAAIJ,IAAIK,IAAR,EAAc;AACZ,oBAAIL,IAAIK,IAAJ,CAASD,OAAb,EAAsB;AACpB,yBAAKZ,KAAL,GAAaQ,IAAIK,IAAJ,CAASD,OAAtB;AACD;AACD,oBAAIJ,IAAIK,IAAJ,CAASb,KAAb,EAAoB;AAClB,yBAAKA,KAAL,GAAaQ,IAAIK,IAAJ,CAASb,KAAtB;AACD;AACF;;AAED,qBAAKtB,MAAL,CAAYoC,IAAZ,CAAiB,YAAjB,EAA+BN,GAA/B;AACAE,sBAAQC,GAAR,CAAY,mBAAZ,EAAiCH,GAAjC;AACD,aA7BM,CAAP;AA8BD;;;iCAEMF,c,EAAgB;AAAA;;AACrB,gBAAI/G,WAAWI,EAAEuE,SAAF,CAAYoC,kBAAkB,KAAKS,qBAAnC,CAAf;AACA,iBAAKA,qBAAL,GAA6BpH,EAAEuE,SAAF,CAAY3E,QAAZ,CAA7B;;AAEAA,uBAAWI,EAAEyE,GAAF,CAAM7E,QAAN,EAAgB,KAAKyH,aAAL,CAAmBnC,IAAnB,CAAwB,IAAxB,CAAhB,CAAX;AACAtF,uBAAW,KAAK0H,kBAAL,CAAwB1H,QAAxB,CAAX;AACAA,uBAAW,KAAK2H,YAAL,CAAkB3H,QAAlB,CAAX;;AAEA;AACAA,uBAAWA,SAAS4H,KAAT,CAAe,CAAf,EAAkB,KAAKnD,KAAL,CAAW1B,KAAX,IAAoBlB,eAAekB,KAArD,CAAX;;AAEA,iBAAKwB,WAAL,GAAmBvE,QAAnB;AACA,iBAAK6H,sBAAL;;AAEA,iBAAK/D,QAAL,CAAc,YAAM;AAClB,6IAAa,OAAKS,WAAlB;AACD,aAFD;AAGD;;;wCAEa;AAAA;;AACZ,gBAAIiB,WAAWpF,EAAEyE,GAAF,CAAM,KAAKJ,KAAL,CAAW1C,WAAjB,EAA8B,UAAC0D,EAAD,EAAQ;AACnD,qBAAO,OAAK1B,aAAL,CAAmB2B,GAAnB,CAAuBD,EAAvB,EACNE,IADM,CACD,sBAAc;AAClB,oBAAImC,SAASlC,WAAWkC,MAAxB;AACA,oBAAIhF,aAAa,OAAK2B,KAAL,CAAW3B,UAAX,CAAsBD,KAAvC;AACA,oBAAI5C,gBAAgB,OAAKwE,KAAL,CAAWzC,OAAX,CAAmByD,EAAnB,CAApB;;AAEA;AACA,oBAAIsC,cAAcnC,WAAWoC,mBAAX,CAA+B/H,cAAckB,KAAd,CAAoBd,MAAnD,CAAlB;AACA,oBAAI4H,aAAarC,WAAWoC,mBAAX,CAA+B/H,cAAcmB,IAAd,CAAmBf,MAAlD,CAAjB;AACA,oBAAI6H,YAAYtC,WAAWoC,mBAAX,CAA+B/H,cAAcoB,WAAd,CAA0BhB,MAAzD,CAAhB;;AAEA,oBAAI8H,kBAAkB;AACpBzF,gCAAcI;AADM,iBAAtB;;AAIA,uBAAOgF,OAAOlB,WAAP,CAAmBmB,WAAnB,EAAgCE,UAAhC,EAA4CC,SAA5C,EAAuDC,eAAvD,CAAP;AACD,eAhBM,EAgBJxC,IAhBI,CAgBC,UAAC3F,QAAD,EAAc;AACpB,uBAAO,OAAKoI,eAAL,CAAqBpI,QAArB,EAA+ByF,EAA/B,CAAP;AACD,eAlBM,EAkBJE,IAlBI,CAkBC,UAAC3F,QAAD,EAAc;AACpB,uBAAO,OAAKqI,oBAAL,CAA0BrI,QAA1B,CAAP;AACD,eApBM,EAoBJ2F,IApBI,CAoBC,UAAC3F,QAAD,EAAc;AACpB,uBAAO,OAAKsI,iBAAL,CAAuBtI,QAAvB,EAAiCyF,EAAjC,CAAP;AACD,eAtBM,EAsBJE,IAtBI,CAsBC,UAAC3F,QAAD,EAAc;AACpB,uBAAO,OAAKuI,oBAAL,CAA0BvI,QAA1B,EAAoCyF,EAApC,CAAP;AACD,eAxBM,CAAP;AAyBD,aA1Bc,CAAf;;AA4BA,mBAAOI,QAAQC,GAAR,CAAYN,QAAZ,EACNG,IADM,CACD;AAAA,qBAAWvF,EAAEoI,OAAF,CAAUC,OAAV,CAAX;AAAA,aADC,CAAP;AAED;;;0CAEelE,W,EAAakB,E,EAAI;AAAA;;AAC/B;AACA,gBAAIiD,WAAWtI,EAAEyE,GAAF,CAAMN,WAAN,EAAmB,mBAAW;AAC3C,qBAAOjE,QAAQqI,SAAR,CAAkBC,OAAzB;AACD,aAFc,CAAf;;AAIA,mBAAO,KAAK7G,WAAL,CAAiB0D,EAAjB,EAAqBqC,MAArB,CAA4BM,eAA5B,CAA4CM,QAA5C,EACN/C,IADM,CACD,kBAAU;;AAEd;AACAvF,gBAAEyI,IAAF,CAAOtE,WAAP,EAAoB,mBAAW;AAC7B,oBAAIuE,QAAQ1I,EAAE2I,IAAF,CAAO5D,MAAP,EAAe,iBAAS;AAClC,yBAAO2D,MAAMF,OAAN,KAAkBtI,QAAQqI,SAAR,CAAkBC,OAA3C;AACD,iBAFW,CAAZ;;AAIA,oBAAIE,KAAJ,EAAW;AACTxI,0BAAQ0I,YAAR,GAAuB5I,EAAEyE,GAAF,CAAMiE,MAAME,YAAZ,EAA0B,OAAKC,iBAAL,CAAuB3D,IAAvB,QAA1B,CAAvB;AACD;;AAED,oBAAI,CAAChF,QAAQqI,SAAR,CAAkBC,OAAvB,EAAgC;AAC9BtI,0BAAQqI,SAAR,GAAoB,IAApB;AACD;AACF,eAZD;;AAcA,qBAAOpE,WAAP;AACD,aAnBM,CAAP;AAoBD;;;4CAEiB2E,G,EAAK;AACrB,gBAAIC,YAAYxI,OAAOyI,IAAP,CAAYF,IAAIG,KAAhB,CAAhB;AACA,gBAAI,KAAK5E,KAAL,CAAWpB,sBAAf,EAAuC;AACrC6F,kBAAII,IAAJ,GAAWH,UAAUI,MAAV,CAAiB,KAAK9E,KAAL,CAAWnB,gBAA5B,CAAX;AACD,aAFD,MAEO;AACL4F,kBAAII,IAAJ,GAAWH,UAAUI,MAAV,CAAiB,KAAKlF,iBAAtB,CAAX;AACD;AACD6E,gBAAIM,IAAJ,GAAWN,IAAIO,KAAJ,IAAa,EAAxB;AACA,gBAAIP,IAAIQ,IAAJ,IAAYR,IAAIS,OAApB,EAA6B;AAC3B,kBAAMC,YAAcV,IAAIQ,IAAJ,IAAY,EAA1B,WAAgCR,IAAIS,OAAJ,IAAe,EAA/C,CAAN;AACAT,kBAAIM,IAAJ,WAAiBI,QAAjB;AACD;AACD,mBAAOV,GAAP;AACD;;;4CAEiB3E,W,EAAakB,E,EAAI;AACjC;AACA,gBAAIxF,gBAAgB,KAAKwE,KAAL,CAAWzC,OAAX,CAAmByD,EAAnB,EAAuBnF,OAAvB,CAA+BD,MAAnD;AACAJ,4BAAgB,KAAK8B,WAAL,CAAiB0D,EAAjB,EAAqBuC,mBAArB,CAAyC/H,aAAzC,CAAhB;AACA,gBAAIA,aAAJ,EAAmB;AACjBsE,4BAAcxE,eAAewE,WAAf,EAA4BtE,aAA5B,CAAd;AACD;;AAED;AACA,gBAAM4J,SAAS,KAAKpF,KAAL,CAAWzC,OAAX,CAAmByD,EAAnB,CAAf;AACA,gBAAIoE,OAAOvI,IAAP,CAAYjB,MAAhB,EAAwB;AACtB,kBAAIyJ,aAAa,KAAK/H,WAAL,CAAiB0D,EAAjB,EAAqBuC,mBAArB,CAAyC6B,OAAOvI,IAAP,CAAYjB,MAArD,CAAjB;AACA;AACAyJ,2BAAaA,WAAWC,OAAX,CAAmB,IAAnB,EAAyB,EAAzB,EAA6BA,OAA7B,CAAqC,IAArC,EAA2C,EAA3C,CAAb;AACA,kBAAMzI,OAAO,KAAK0I,SAAL,CAAeF,UAAf,CAAb;AACAvF,4BAAcnE,EAAEC,MAAF,CAASkE,WAAT,EAAsB,mBAAW;AAC7C,uBAAOnE,EAAE6J,KAAF,CAAQ3I,IAAR,EAAc,UAAC4I,GAAD,EAAS;AAC5B,yBAAO9J,EAAE2I,IAAF,CAAOzI,QAAQgB,IAAf,EAAqB,EAAC4I,KAAKA,IAAIA,GAAV,EAAerH,OAAOqH,IAAIrH,KAA1B,EAArB,CAAP;AACD,iBAFM,CAAP;AAGD,eAJa,CAAd;AAKD;;AAED,mBAAO0B,WAAP;AACD;;;6CAEkBvE,Q,EAAU;AAAA;;AAC3B,gBAAIuE,cAAcnE,EAAEuE,SAAF,CAAY3E,QAAZ,CAAlB;;AAEA;AACA,gBAAI,KAAKyE,KAAL,CAAW/B,YAAX,KAA4B,gBAAhC,EAAkD;AAChD6B,4BAAcnE,EAAEC,MAAF,CAASkE,WAAT,EAAsB,mBAAW;AAC7C,uBAAO,CAACjE,QAAQ0I,YAAhB;AACD,eAFa,CAAd;AAGD,aAJD,MAIO,IAAI,KAAKvE,KAAL,CAAW/B,YAAX,KAA4B,cAAhC,EAAgD;AACrD6B,4BAAcnE,EAAEC,MAAF,CAASkE,WAAT,EAAsB,cAAtB,CAAd;AACD,aAFM,MAEA;AACLA,4BAAcA,WAAd;AACD;;AAED;AACA,gBAAI,CAAC,KAAKE,KAAL,CAAWhC,kBAAhB,EAAoC;AAClC8B,4BAAcnE,EAAEC,MAAF,CAASkE,WAAT,EAAsB,UAACjE,OAAD;AAAA,uBAAaA,QAAQ6J,WAAR,KAAwB,KAArC;AAAA,eAAtB,CAAd;AACD;;AAED;AACA5F,0BAAcnE,EAAEC,MAAF,CAASkE,WAAT,EAAsB,mBAAW;AAC7C,qBAAO,OAAKE,KAAL,CAAWlB,eAAX,CAA2BjD,QAAQkB,QAAnC,EAA6CG,IAApD;AACD,aAFa,CAAd;;AAIA,mBAAO4C,WAAP;AACD;;;+CAEoBvE,Q,EAAU;AAC7BI,cAAEyI,IAAF,CAAO7I,QAAP,EAAiB,UAACM,OAAD,EAAa;AAC5B,kBAAI8J,qBAAqBhK,EAAEiK,IAAF,CAAO/J,QAAQgK,KAAf,EAAsB,UAAClJ,IAAD;AAAA,uBAAUA,KAAKgJ,kBAAL,KAA4B,GAAtC;AAAA,eAAtB,CAAzB;AACA9J,sBAAQ6J,WAAR,GAAsBC,kBAAtB;AACD,aAHD;AAIA,mBAAOpK,QAAP;AACD;;;+CAEoBA,Q,EAAUyF,E,EAAI;AACjCrF,cAAEyI,IAAF,CAAO7I,QAAP,EAAiB,UAACM,OAAD,EAAa;AAC5BA,sBAAQsF,UAAR,GAAqBH,EAArB;AACD,aAFD;AAGA,mBAAOzF,QAAP;AACD;;;uCAEYuE,W,EAAa;AACxB,gBAAI,KAAKE,KAAL,CAAW9B,cAAX,CAA0BE,KAA1B,KAAoC,UAAxC,EAAoD;AAClD0B,4BAAcnE,EAAEmK,OAAF,CAAUhG,WAAV,EAAuB,CAAC,UAAD,EAAa,gBAAb,EAA+B,WAA/B,CAAvB,EAAoE,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,CAApE,CAAd;AACD,aAFD,MAEO;AACLA,4BAAcnE,EAAEmK,OAAF,CAAUhG,WAAV,EAAuB,CAAC,gBAAD,EAAmB,UAAnB,EAA+B,WAA/B,CAAvB,EAAoE,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,CAApE,CAAd;AACD;AACD,mBAAOA,WAAP;AACD;;;wCAEaiG,a,EAAe;AAC3B,gBAAIlK,UAAUF,EAAEuE,SAAF,CAAY6F,aAAZ,CAAd;AACA,gBAAIC,aAAanK,OAAjB;;AAEA;AACA,gBAAIA,QAAQgK,KAAR,IAAiBhK,QAAQgK,KAAR,CAAcvF,MAAnC,EAA2C;AACzC0F,yBAAWrJ,IAAX,GAAkBd,QAAQgK,KAAR,CAAc,CAAd,EAAiBZ,IAAnC;AACAe,yBAAWC,YAAX,GAA0BpK,QAAQgK,KAAR,CAAc,CAAd,EAAiBlJ,IAA3C;AACD;;AAED;AACA,gBAAId,QAAQgB,IAAR,IAAgBhB,QAAQgB,IAAR,CAAayD,MAAb,KAAwB,CAA5C,EAA+C;AAC7CzE,sBAAQgB,IAAR,GAAe,IAAf;AACD;;AAED;AACA,gBAAIhB,QAAQqK,QAAZ,EAAsB;AACpBrK,sBAAQqK,QAAR,GAAmBrK,QAAQqK,QAAR,CAAiBZ,OAAjB,CAAyB,IAAzB,EAA+B,MAA/B,CAAnB;AACD;;AAED;AACAzJ,oBAAQsK,cAAR,GAAyBC,OAAOvK,QAAQwK,UAAf,CAAzB;AACAL,yBAAa,KAAKM,oBAAL,CAA0BN,UAA1B,CAAb;AACAA,yBAAa,KAAKO,kBAAL,CAAwBP,UAAxB,CAAb;AACA,mBAAOA,UAAP;AACD;;;8CAEmBnK,O,EAAS;AAC3BA,sBAAU,KAAKyK,oBAAL,CAA0BzK,OAA1B,CAAV;AACAA,sBAAU,KAAK0K,kBAAL,CAAwB1K,OAAxB,CAAV;AACA,mBAAOA,OAAP;AACD;;;6CAEkBA,O,EAAS;AAC1B,gBAAIA,QAAQuC,KAAR,KAAkB,GAAtB,EAA2B;AACzB;AACAvC,sBAAQoB,KAAR,GAAgB,KAAK+C,KAAL,CAAWlB,eAAX,CAA2BjD,QAAQkB,QAAnC,EAA6CE,KAA7D;AACD,aAHD,MAGO;AACL;AACApB,sBAAQoB,KAAR,GAAgB,KAAK+C,KAAL,CAAWjB,YAA3B;AACD;AACDlD,oBAAQmB,QAAR,GAAmB,KAAKgD,KAAL,CAAWlB,eAAX,CAA2BjD,QAAQkB,QAAnC,EAA6CC,QAAhE;;AAEA;AACA,gBAAI,KAAKgD,KAAL,CAAWwG,aAAX,IAA4B3K,QAAQ0I,YAApC,IAAoD1I,QAAQ0I,YAAR,CAAqBjE,MAA7E,EAAqF;AACnFzE,sBAAQoB,KAAR,GAAgB,KAAK+C,KAAL,CAAWhB,aAA3B;AACD;;AAED,mBAAOnD,OAAP;AACD;;;+CAEoBA,O,EAAS;AAC5B,gBAAI,CAACA,QAAQsK,cAAb,EAA6B;AAC3BtK,sBAAQwK,UAAR,GAAqB,EAArB;AACAxK,sBAAQ4K,GAAR,GAAc,EAAd;AACA,qBAAO5K,OAAP;AACD;;AAED,gBAAI6I,YAAYxI,OAAOyI,IAAP,CAAY9I,QAAQsK,cAApB,CAAhB;AACA,gBAAI,KAAKnG,KAAL,CAAWpB,sBAAf,EAAuC;AACrC;AACA/C,sBAAQwK,UAAR,GAAqB3B,UAAUI,MAAV,CAAiB,KAAK9E,KAAL,CAAWnB,gBAA5B,CAArB;AACD,aAHD,MAGO;AACLhD,sBAAQwK,UAAR,GAAqB3B,UAAUI,MAAV,CAAiB,KAAKlF,iBAAtB,CAArB;AACD;AACD/D,oBAAQ4K,GAAR,GAAc/B,UAAUgC,OAAV,CAAkB,IAAlB,CAAd;AACA,mBAAO7K,OAAP;AACD;;;oCAES8K,M,EAAQ;AAChB,gBAAI,CAACA,MAAL,EAAa;AACX,qBAAO,EAAP;AACD;;AAED,gBAAI9J,OAAOlB,EAAEyE,GAAF,CAAMuG,OAAOC,KAAP,CAAa,GAAb,CAAN,EAAyB,UAACnB,GAAD;AAAA,qBAASA,IAAIoB,IAAJ,EAAT;AAAA,aAAzB,CAAX;AACAhK,mBAAOlB,EAAEyE,GAAF,CAAMvD,IAAN,EAAY,UAAC4I,GAAD,EAAS;AAC1B,kBAAMqB,WAAWrB,IAAImB,KAAJ,CAAU,GAAV,CAAjB;AACA,qBAAO,EAACnB,KAAKqB,SAAS,CAAT,EAAYD,IAAZ,EAAN,EAA0BzI,OAAO0I,SAAS,CAAT,EAAYD,IAAZ,EAAjC,EAAP;AACD,aAHM,CAAP;AAIA,mBAAOhK,IAAP;AACD;;;uCAEYA,I,EAAM;AACjB,mBAAOlB,EAAEyE,GAAF,CAAMvD,IAAN,EAAY,UAAC4I,GAAD;AAAA,qBAAYA,IAAIA,GAAhB,SAAuBA,IAAIrH,KAA3B;AAAA,aAAZ,EAAgD2I,IAAhD,CAAqD,IAArD,CAAP;AACD;;;uCAEYtB,G,EAAKzE,E,EAAI;AACpB,gBAAIgG,YAAY,KAAKhH,KAAL,CAAWzC,OAAX,CAAmByD,EAAnB,EAAuBnE,IAAvB,CAA4BjB,MAA5C;AACA,gBAAIqL,aAAa,KAAK1B,SAAL,CAAeyB,SAAf,CAAjB;AACA,gBAAIE,SAAS,EAACzB,KAAKA,IAAIA,GAAV,EAAerH,OAAOqH,IAAIrH,KAA1B,EAAb;AACA6I,uBAAW1G,IAAX,CAAgB2G,MAAhB;AACAD,yBAAatL,EAAEwL,QAAF,CAAWF,UAAX,EAAuBtL,EAAEyL,OAAzB,CAAb;AACA,gBAAIC,YAAY,KAAKC,YAAL,CAAkBL,UAAlB,CAAhB;AACA,iBAAKjH,KAAL,CAAWzC,OAAX,CAAmByD,EAAnB,EAAuBnE,IAAvB,CAA4BjB,MAA5B,GAAqCyL,SAArC;AACA,iBAAKE,OAAL;AACD;;;wCAEa1L,O,EAAS;AACrBA,oBAAQ2L,WAAR,GAAsB,CAAC3L,QAAQ2L,WAA/B;AACD;;;6CAEkB3L,O,EAAS+G,O,EAAS;AAAA;;AACnC,gBAAIuB,UAAUtI,QAAQqI,SAAR,GAAoBrI,QAAQqI,SAAR,CAAkBC,OAAtC,GAAgD,IAA9D;AACA,gBAAIsD,eAAe,KAAKjI,UAAL,CAAgBuF,IAAhB,CAAqBE,IAAxC;AACA,gBAAIyC,cAAcD,eAAe,cAAf,GAAgC7E,OAAlD;AACA,mBAAO,KAAKtD,aAAL,CAAmB2B,GAAnB,CAAuBpF,QAAQsF,UAA/B,EACND,IADM,CACD,sBAAc;AAClB,kBAAMyG,eAAe,OAAKnI,UAAL,CAAgBoI,QAAhB,IAA4B,OAAKpI,UAAL,CAAgBqI,cAAjE;AACA,kBAAI1G,WAAW2G,uBAAX,IAAsC,CAACH,YAA3C,EAAyD;AACvD,uBAAOvG,QAAQ2G,MAAR,CAAe,EAACnF,SAAS,gDAAV,EAAf,CAAP;AACD;AACD,kBAAIuB,OAAJ,EAAa;AACX,uBAAOhD,WAAWkC,MAAX,CAAkB2E,SAAlB,CAA4BC,gBAA5B,CAA6C9D,OAA7C,EAAsDuD,WAAtD,CAAP;AACD,eAFD,MAEO;AACL,uBAAOtG,QAAQ2G,MAAR,CAAe,EAACnF,SAAS,gDAAV,EAAf,CAAP;AACD;AACF,aAXM,EAYN1B,IAZM,CAYD,KAAKJ,SAAL,CAAeD,IAAf,CAAoB,IAApB,CAZC,EAaN0B,KAbM,CAaA,UAACC,GAAD,EAAS;AACd,qBAAKR,KAAL,GAAaQ,IAAII,OAAJ,IAAe,mBAA5B;AACA,qBAAKlC,MAAL,CAAYoC,IAAZ,CAAiB,YAAjB,EAA+BN,GAA/B;AACAE,sBAAQC,GAAR,CAAY,mBAAZ,EAAiCH,GAAjC;AACD,aAjBM,CAAP;AAkBD;;;mDAEwB;AACvB,gBAAIhE,WAAW,KAAKwB,KAAL,CAAWxB,QAAX,IAAuBpB,eAAeoB,QAArD;AACA,gBAAI0J,WAAW,KAAKrI,SAAL,GAAiBrB,QAAhC;AACA,gBAAI2J,SAASC,KAAKC,GAAL,CAASH,WAAW1J,QAApB,EAA8B,KAAKsB,WAAL,CAAiBQ,MAA/C,CAAb;AACA,iBAAKP,mBAAL,GAA2B,KAAKD,WAAL,CAAiBqD,KAAjB,CAAuB+E,QAAvB,EAAiCC,MAAjC,CAA3B;AACA,mBAAO,KAAKpI,mBAAZ;AACD;;;yCAEclE,O,EAAS;AACtB,gBAAIc,OAAO,EAAX;AACA,gBAAI,KAAKqD,KAAL,CAAWxC,SAAX,IAAwB,KAAKwC,KAAL,CAAWvC,iBAAvC,EAA0D;AACxDd,qBAAUd,QAAQc,IAAlB,UAA2Bd,QAAQoK,YAAnC;AACD,aAFD,MAEO,IAAI,KAAKjG,KAAL,CAAWxC,SAAX,IAAwB,KAAKwC,KAAL,CAAWvC,iBAAvC,EAA0D;AAC/Dd,qBAAO,KAAKqD,KAAL,CAAWxC,SAAX,GAAuB3B,QAAQc,IAA/B,GAAsCd,QAAQoK,YAArD;AACD;;AAED,mBAAOtJ,IAAP;AACD;;;2CAEgBd,O,EAAS;AACxB,gBAAIyM,aAAa,EAAjB;AACA,gBAAI,KAAKtI,KAAL,CAAWtC,UAAf,EAA2B;AACzB,kBAAI6K,SAAS5M,EAAEyE,GAAF,CAAMvE,QAAQ0M,MAAd,EAAsB,MAAtB,EAA8BxB,IAA9B,CAAmC,IAAnC,CAAb;AACAuB,mCAAmBC,MAAnB;AACD;;AAED,mBAAOD,UAAP;AACD;;;4CAEiBzM,O,EAAS;AACzB,gBAAI2M,YAAY,EAAhB;AACA,gBAAI3M,QAAQuC,KAAR,KAAkB,GAAtB,EAA2B;AACzB,kBAAIvC,QAAQkB,QAAR,IAAoB,CAAxB,EAA2B;AACzByL,4BAAY,kBAAZ;AACD,eAFD,MAEO;AACLA,4BAAY,iBAAZ;AACD;AACF,aAND,MAMO;AACLA,0BAAY,gBAAZ;AACD;;AAED,gBAAI,KAAKxI,KAAL,CAAWtB,kBAAX,IAAiC,KAAK+J,YAAL,CAAkB5M,OAAlB,CAArC,EAAiE;AAC/D2M,2BAAa,0BAAb;AACD;AACD,mBAAOA,SAAP;AACD;;;sDAE2B1J,e,EAAiB;AAC3C,gBAAI0J,YAAY,iBAAhB;AACA,gBAAI1J,gBAAgB/B,QAAhB,IAA4B,CAAhC,EAAmC;AACjCyL,0BAAY,kBAAZ;AACD;AACD,mBAAOA,SAAP;AACD;;;6CAEkB3M,O,EAAS;AAC1B,gBAAI6M,cAAc,EAAlB;;AAEA,gBAAI7M,QAAQuC,KAAR,KAAkB,GAAtB,EAA2B;AACzBsK,4BAAc,sBAAd;AACD,aAFD,MAEO;AACLA,4BAAc,gBAAd;AACD;;AAED,gBAAI,KAAK1I,KAAL,CAAWtB,kBAAX,IAAiC,KAAK+J,YAAL,CAAkB5M,OAAlB,CAArC,EAAiE;AAC/D6M,6BAAe,0BAAf;AACD;;AAED,mBAAOA,WAAP;AACD;;;wCAEa7M,O,EAAS;AACrB,gBAAM8M,YAAY9M,QAAQoB,KAA1B;AACA,gBAAM2L,cAAc,KAAKpJ,UAAL,CAAgBuF,IAAhB,CAAqB8D,UAArB,GAAkC,SAAlC,GAA8C,SAAlE;AACA,gBAAI,KAAKrJ,UAAL,CAAgBuF,IAAhB,CAAqB8D,UAAzB,EAAqC;AACnC,kDAAkCD,WAAlC,UAAkDD,SAAlD;AACD;AACD,gDAAkCA,SAAlC,UAAgDC,WAAhD;AACD;;;uCAEY/M,O,EAAS;AACpB,gBAAI;AACF,kBAAMiN,sBAAsBrN,MAAMsN,aAAN,CAAoB,KAAK/I,KAAL,CAAWrB,kBAAX,IAAiCvB,eAAeuB,kBAApE,CAA5B;AACA,kBAAMqK,cAAepH,KAAKqH,GAAL,KAAapN,QAAQsK,cAAR,GAAyB,IAA3D;AACA,qBAAO6C,cAAcF,mBAArB;AACD,aAJD,CAIE,OAAOI,CAAP,EAAU;AACV,qBAAO,KAAP;AACD;AACF;;;+BAEIxJ,K,EAAOyJ,I,EAAMC,K,EAAOC,I,EAAM;AAC7B,gBAAIrJ,QAAQqJ,KAAKrJ,KAAjB;AACA,gBAAIsJ,YAAY,CAAhB;AACA,gBAAIxJ,cAAcuJ,KAAKvJ,WAAvB;;AAEAJ,kBAAM6J,WAAN,CAAkB,CAAC,0BAAD,EAA6B,kBAA7B,CAAlB,EAAoEC,WAApE;AACAL,iBAAKxI,EAAL,CAAQ,OAAR,EAAiB,2BAAjB,EAA8C8I,UAA9C;AACAJ,iBAAK3I,MAAL,CAAYC,EAAZ,CAAe,QAAf,EAAyB,UAAC+I,UAAD,EAAgB;AACvC5J,4BAAc4J,cAAc5J,WAA5B;AACA0J;AACD,aAHD;;AAKA,qBAASG,gBAAT,GAA4B;AAC1B,kBAAIC,cAAcP,KAAKQ,MAAvB;AACA,kBAAIP,YAAY,CAAhB,EAAmB;AACjBM,+BAAe,EAAf;AACD;AACD,qBAAOA,cAAc,IAArB;AACD;;AAED,qBAASH,UAAT,CAAoBP,CAApB,EAAuB;AACrB,kBAAIY,KAAK7N,EAAEiN,EAAEa,aAAJ,CAAT;AACAV,mBAAKxJ,SAAL,GAAkBmK,SAASF,GAAG3L,IAAH,EAAT,EAAoB,EAApB,IAAwB,CAA1C;;AAEA,kBAAIK,WAAWwB,MAAMxB,QAAN,IAAkB,EAAjC;AACA,kBAAI0J,WAAWmB,KAAKxJ,SAAL,GAAiBrB,QAAhC;AACA,kBAAI2J,SAASC,KAAKC,GAAL,CAASH,WAAW1J,QAApB,EAA8BsB,YAAYQ,MAA1C,CAAb;AACA+I,mBAAKtJ,mBAAL,GAA2BD,YAAYqD,KAAZ,CAAkB+E,QAAlB,EAA4BC,MAA5B,CAA3B;;AAEAzI,oBAAMuK,MAAN,CAAa,YAAM;AACjBT;AACD,eAFD;AAGD;;AAED,qBAASU,wBAAT,CAAkCC,UAAlC,EAA8C;AAC5CA,yBAAWC,KAAX;;AAEA,kBAAI5L,WAAWwB,MAAMxB,QAAN,IAAkB,CAAjC;AACA8K,0BAAYlB,KAAKiC,IAAL,CAAUvK,YAAYQ,MAAZ,GAAqB9B,QAA/B,CAAZ;AACA,kBAAI8K,cAAc,CAAlB,EAAqB;AACnB;AACD;;AAED,kBAAIgB,YAAYlC,KAAKmC,GAAL,CAASlB,KAAKxJ,SAAL,GAAiB,CAA1B,EAA6B,CAA7B,CAAhB;AACA,kBAAI2K,UAAUpC,KAAKC,GAAL,CAASiB,SAAT,EAAoBgB,YAAY,CAAhC,CAAd;;AAEA,kBAAIG,iBAAiBxO,EAAE,WAAF,CAArB;;AAEA,mBAAK,IAAIyO,IAAIJ,SAAb,EAAwBI,IAAIF,OAA5B,EAAqCE,GAArC,EAA0C;AACxC,oBAAIC,cAAcD,MAAMrB,KAAKxJ,SAAX,GAAuB,QAAvB,GAAkC,EAApD;AACA,oBAAI+K,eAAe3O,EAAE,oDAAoD0O,WAApD,GAAkE,IAAlE,IAA0ED,IAAE,CAA5E,IAAiF,WAAnF,CAAnB;AACAD,+BAAeI,MAAf,CAAsBD,YAAtB;AACD;;AAEDT,yBAAWU,MAAX,CAAkBJ,cAAlB;AACD;;AAED,qBAASK,WAAT,GAAuB;AACrB,kBAAMvM,WAAWyL,SAAShK,MAAMzB,QAAN,CAAe4E,KAAf,CAAqB,CAArB,EAAwBnD,MAAMzB,QAAN,CAAe+B,MAAf,GAAwB,CAAhD,CAAT,CAAjB;AACA,kBAAIyK,kBAAkB5B,KAAK7E,IAAL,CAAU,kBAAV,CAAtB;AACA,kBAAI/F,YAAYA,aAAa,GAA7B,EAAkC;AAChCwM,gCAAgBzG,IAAhB,CAAqB,wBAArB,EAA+C0G,GAA/C,CAAmD;AACjD,+BAAazM,WAAW,GADyB;AAEjD,4BAAUA,WAAW,GAAX,GAAiB,CAAjB,GAAqB;AAFkB,iBAAnD;AAIAwM,gCAAgBzG,IAAhB,CAAqB,wBAArB,EAA+C0G,GAA/C,CAAmD,EAAC,aAAazM,WAAW,GAAzB,EAAnD;AACAwM,gCAAgBzG,IAAhB,CAAqB,wBAArB,EAA+C0G,GAA/C,CAAmD,EAAC,aAAazM,WAAW,GAAX,GAAiB,GAA/B,EAAnD;AACAwM,gCAAgBzG,IAAhB,CAAqB,yBAArB,EAAgD0G,GAAhD,CAAoD,EAAC,aAAazM,WAAW,GAAX,GAAiB,GAA/B,EAApD;AACAwM,gCAAgBzG,IAAhB,CAAqB,UAArB,EAAiC0G,GAAjC,CAAqC,EAAC,aAAazM,WAAW,GAAX,GAAiB,GAA/B,EAArC;AACAwM,gCAAgBzG,IAAhB,CAAqB,UAArB,EAAiC0G,GAAjC,CAAqC,EAAC,eAAezM,WAAW,GAAX,GAAiB,EAAjB,GAAsB,IAAtC,EAArC;AACD,eAVD,MAUO;AACL;AACAwM,gCAAgBzG,IAAhB,CAAqB,wBAArB,EAA+C0G,GAA/C,CAAmD,EAAC,aAAa,EAAd,EAAkB,gBAAgB,EAAlC,EAAnD;AACAD,gCAAgBzG,IAAhB,CAAqB,wBAArB,EAA+C0G,GAA/C,CAAmD,EAAC,aAAa,EAAd,EAAnD;AACAD,gCAAgBzG,IAAhB,CAAqB,wBAArB,EAA+C0G,GAA/C,CAAmD,EAAC,aAAa,EAAd,EAAnD;AACAD,gCAAgBzG,IAAhB,CAAqB,yBAArB,EAAgD0G,GAAhD,CAAoD,EAAC,aAAa,EAAd,EAApD;AACAD,gCAAgBzG,IAAhB,CAAqB,UAArB,EAAiC0G,GAAjC,CAAqC,EAAC,aAAa,EAAd,EAArC;AACAD,gCAAgBzG,IAAhB,CAAqB,UAArB,EAAiC0G,GAAjC,CAAqC,EAAC,eAAe,EAAhB,EAArC;AACD;AACF;;AAED,qBAASxB,WAAT,GAAuB;AACrB,kBAAIyB,WAAW9B,KAAK7E,IAAL,CAAU,wBAAV,CAAf;AACA,kBAAI6F,aAAahB,KAAK7E,IAAL,CAAU,wBAAV,CAAjB;AACA4F,uCAAyBC,UAAzB;AACAc,uBAASD,GAAT,CAAa,EAAC,cAAcrB,kBAAf,EAAb;AACAsB,uBAASD,GAAT,CAAa,EAAC,UAAUrB,kBAAX,EAAb;AACAmB;AACAzB,mBAAK6B,kBAAL;AACD;;AAED,gBAAIC,gBAAgBzL,MAAM0L,GAAN,CAAU,UAAV,EAAsB,YAAW;AACnDjC,mBAAKkC,GAAL,CAAS,OAAT,EAAkB,2BAAlB;AACAF;AACD,aAHmB,CAApB;AAID;;;;QA9kBmChP,S;;;;AAilBtC+C,uBAAiBoM,WAAjB,GAA+B,+EAA/B","file":"triggers_panel_ctrl.js","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport moment from 'moment';\nimport * as utils from '../datasource-zabbix/utils';\nimport {PanelCtrl} from 'app/plugins/sdk';\nimport {triggerPanelOptionsTab} from './options_tab';\nimport {triggerPanelTriggersTab} from './triggers_tab';\nimport {migratePanelSchema, CURRENT_SCHEMA_VERSION} from './migrations';\n\nconst ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource';\n\nexport const DEFAULT_TARGET = {\n group: {filter: \"\"},\n host: {filter: \"\"},\n application: {filter: \"\"},\n trigger: {filter: \"\"},\n tags: {filter: \"\"},\n};\n\nexport const DEFAULT_SEVERITY = [\n { priority: 0, severity: 'Not classified', color: 'rgb(108, 108, 108)', show: true},\n { priority: 1, severity: 'Information', color: 'rgb(120, 158, 183)', show: true},\n { priority: 2, severity: 'Warning', color: 'rgb(175, 180, 36)', show: true},\n { priority: 3, severity: 'Average', color: 'rgb(255, 137, 30)', show: true},\n { priority: 4, severity: 'High', color: 'rgb(255, 101, 72)', show: true},\n { priority: 5, severity: 'Disaster', color: 'rgb(215, 0, 0)', show: true},\n];\n\nconst DEFAULT_TIME_FORMAT = \"DD MMM YYYY HH:mm:ss\";\n\nexport const PANEL_DEFAULTS = {\n schemaVersion: CURRENT_SCHEMA_VERSION,\n datasources: [],\n targets: {},\n // Fields\n hostField: true,\n hostTechNameField: false,\n hostGroups: false,\n showTags: true,\n statusField: true,\n severityField: true,\n descriptionField: true,\n descriptionAtNewLine: false,\n // Options\n hostsInMaintenance: true,\n showTriggers: 'all triggers',\n sortTriggersBy: { text: 'last change', value: 'lastchange' },\n showEvents: { text: 'Problems', value: '1' },\n limit: 100,\n // View options\n fontSize: '100%',\n pageSize: 10,\n highlightBackground: false,\n highlightNewEvents: false,\n highlightNewerThan: '1h',\n customLastChangeFormat: false,\n lastChangeFormat: \"\",\n // Triggers severity and colors\n triggerSeverity: DEFAULT_SEVERITY,\n okEventColor: 'rgb(56, 189, 113)',\n ackEventColor: 'rgb(56, 219, 156)'\n};\n\nconst triggerStatusMap = {\n '0': 'OK',\n '1': 'PROBLEM'\n};\n\nexport class TriggerPanelCtrl extends PanelCtrl {\n\n /** @ngInject */\n constructor($scope, $injector, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {\n super($scope, $injector);\n this.datasourceSrv = datasourceSrv;\n this.templateSrv = templateSrv;\n this.contextSrv = contextSrv;\n this.dashboardSrv = dashboardSrv;\n this.scope = $scope;\n this.$timeout = $timeout;\n\n this.editorTabIndex = 1;\n this.triggerStatusMap = triggerStatusMap;\n this.defaultTimeFormat = DEFAULT_TIME_FORMAT;\n this.pageIndex = 0;\n this.triggerList = [];\n this.currentTriggersPage = [];\n this.datasources = {};\n\n this.panel = migratePanelSchema(this.panel);\n _.defaultsDeep(this.panel, _.cloneDeep(PANEL_DEFAULTS));\n\n this.available_datasources = _.map(this.getZabbixDataSources(), 'name');\n if (this.panel.datasources.length === 0) {\n this.panel.datasources.push(this.available_datasources[0]);\n }\n if (_.isEmpty(this.panel.targets)) {\n this.panel.targets[this.panel.datasources[0]] = DEFAULT_TARGET;\n }\n\n this.initDatasources();\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('refresh', this.onRefresh.bind(this));\n }\n\n initDatasources() {\n let promises = _.map(this.panel.datasources, (ds) => {\n // Load datasource\n return this.datasourceSrv.get(ds)\n .then(datasource => {\n this.datasources[ds] = datasource;\n return datasource;\n });\n });\n return Promise.all(promises);\n }\n\n getZabbixDataSources() {\n return _.filter(this.datasourceSrv.getMetricSources(), datasource => {\n return datasource.meta.id === ZABBIX_DS_ID && datasource.value;\n });\n }\n\n onInitEditMode() {\n this.addEditorTab('Triggers', triggerPanelTriggersTab, 1);\n this.addEditorTab('Options', triggerPanelOptionsTab, 2);\n }\n\n setTimeQueryStart() {\n this.timing.queryStart = new Date().getTime();\n }\n\n setTimeQueryEnd() {\n this.timing.queryEnd = new Date().getTime();\n }\n\n onRefresh() {\n // ignore fetching data if another panel is in fullscreen\n if (this.otherPanelInFullscreenMode()) { return; }\n\n // clear loading/error state\n delete this.error;\n this.loading = true;\n this.setTimeQueryStart();\n this.pageIndex = 0;\n\n return this.getTriggers()\n .then(zabbixTriggers => {\n // Notify panel that request is finished\n this.loading = false;\n this.setTimeQueryEnd();\n\n this.render(zabbixTriggers);\n })\n .catch(err => {\n // if cancelled keep loading set to true\n if (err.cancelled) {\n console.log('Panel request cancelled', err);\n return;\n }\n\n this.loading = false;\n this.error = err.message || \"Request Error\";\n\n if (err.data) {\n if (err.data.message) {\n this.error = err.data.message;\n }\n if (err.data.error) {\n this.error = err.data.error;\n }\n }\n\n this.events.emit('data-error', err);\n console.log('Panel data error:', err);\n });\n }\n\n render(zabbixTriggers) {\n let triggers = _.cloneDeep(zabbixTriggers || this.triggerListUnfiltered);\n this.triggerListUnfiltered = _.cloneDeep(triggers);\n\n triggers = _.map(triggers, this.formatTrigger.bind(this));\n triggers = this.filterTriggersPost(triggers);\n triggers = this.sortTriggers(triggers);\n\n // Limit triggers number\n triggers = triggers.slice(0, this.panel.limit || PANEL_DEFAULTS.limit);\n\n this.triggerList = triggers;\n this.getCurrentTriggersPage();\n\n this.$timeout(() => {\n super.render(this.triggerList);\n });\n }\n\n getTriggers() {\n let promises = _.map(this.panel.datasources, (ds) => {\n return this.datasourceSrv.get(ds)\n .then(datasource => {\n var zabbix = datasource.zabbix;\n var showEvents = this.panel.showEvents.value;\n var triggerFilter = this.panel.targets[ds];\n\n // Replace template variables\n var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter);\n var hostFilter = datasource.replaceTemplateVars(triggerFilter.host.filter);\n var appFilter = datasource.replaceTemplateVars(triggerFilter.application.filter);\n\n let triggersOptions = {\n showTriggers: showEvents\n };\n\n return zabbix.getTriggers(groupFilter, hostFilter, appFilter, triggersOptions);\n }).then((triggers) => {\n return this.getAcknowledges(triggers, ds);\n }).then((triggers) => {\n return this.setMaintenanceStatus(triggers);\n }).then((triggers) => {\n return this.filterTriggersPre(triggers, ds);\n }).then((triggers) => {\n return this.addTriggerDataSource(triggers, ds);\n });\n });\n\n return Promise.all(promises)\n .then(results => _.flatten(results));\n }\n\n getAcknowledges(triggerList, ds) {\n // Request acknowledges for trigger\n var eventids = _.map(triggerList, trigger => {\n return trigger.lastEvent.eventid;\n });\n\n return this.datasources[ds].zabbix.getAcknowledges(eventids)\n .then(events => {\n\n // Map events to triggers\n _.each(triggerList, trigger => {\n var event = _.find(events, event => {\n return event.eventid === trigger.lastEvent.eventid;\n });\n\n if (event) {\n trigger.acknowledges = _.map(event.acknowledges, this.formatAcknowledge.bind(this));\n }\n\n if (!trigger.lastEvent.eventid) {\n trigger.lastEvent = null;\n }\n });\n\n return triggerList;\n });\n }\n\n formatAcknowledge(ack) {\n let timestamp = moment.unix(ack.clock);\n if (this.panel.customLastChangeFormat) {\n ack.time = timestamp.format(this.panel.lastChangeFormat);\n } else {\n ack.time = timestamp.format(this.defaultTimeFormat);\n }\n ack.user = ack.alias || '';\n if (ack.name || ack.surname) {\n const fullName = `${ack.name || ''} ${ack.surname || ''}`;\n ack.user += ` (${fullName})`;\n }\n return ack;\n }\n\n filterTriggersPre(triggerList, ds) {\n // Filter triggers by description\n let triggerFilter = this.panel.targets[ds].trigger.filter;\n triggerFilter = this.datasources[ds].replaceTemplateVars(triggerFilter);\n if (triggerFilter) {\n triggerList = filterTriggers(triggerList, triggerFilter);\n }\n\n // Filter by tags\n const target = this.panel.targets[ds];\n if (target.tags.filter) {\n let tagsFilter = this.datasources[ds].replaceTemplateVars(target.tags.filter);\n // replaceTemplateVars() builds regex-like string, so we should trim it.\n tagsFilter = tagsFilter.replace('/^', '').replace('$/', '');\n const tags = this.parseTags(tagsFilter);\n triggerList = _.filter(triggerList, trigger => {\n return _.every(tags, (tag) => {\n return _.find(trigger.tags, {tag: tag.tag, value: tag.value});\n });\n });\n }\n\n return triggerList;\n }\n\n filterTriggersPost(triggers) {\n let triggerList = _.cloneDeep(triggers);\n\n // Filter acknowledged triggers\n if (this.panel.showTriggers === 'unacknowledged') {\n triggerList = _.filter(triggerList, trigger => {\n return !trigger.acknowledges;\n });\n } else if (this.panel.showTriggers === 'acknowledged') {\n triggerList = _.filter(triggerList, 'acknowledges');\n } else {\n triggerList = triggerList;\n }\n\n // Filter by maintenance status\n if (!this.panel.hostsInMaintenance) {\n triggerList = _.filter(triggerList, (trigger) => trigger.maintenance === false);\n }\n\n // Filter triggers by severity\n triggerList = _.filter(triggerList, trigger => {\n return this.panel.triggerSeverity[trigger.priority].show;\n });\n\n return triggerList;\n }\n\n setMaintenanceStatus(triggers) {\n _.each(triggers, (trigger) => {\n let maintenance_status = _.some(trigger.hosts, (host) => host.maintenance_status === '1');\n trigger.maintenance = maintenance_status;\n });\n return triggers;\n }\n\n addTriggerDataSource(triggers, ds) {\n _.each(triggers, (trigger) => {\n trigger.datasource = ds;\n });\n return triggers;\n }\n\n sortTriggers(triggerList) {\n if (this.panel.sortTriggersBy.value === 'priority') {\n triggerList = _.orderBy(triggerList, ['priority', 'lastchangeUnix', 'triggerid'], ['desc', 'desc', 'desc']);\n } else {\n triggerList = _.orderBy(triggerList, ['lastchangeUnix', 'priority', 'triggerid'], ['desc', 'desc', 'desc']);\n }\n return triggerList;\n }\n\n formatTrigger(zabbixTrigger) {\n let trigger = _.cloneDeep(zabbixTrigger);\n let triggerObj = trigger;\n\n // Set host that the trigger belongs\n if (trigger.hosts && trigger.hosts.length) {\n triggerObj.host = trigger.hosts[0].name;\n triggerObj.hostTechName = trigger.hosts[0].host;\n }\n\n // Set tags if present\n if (trigger.tags && trigger.tags.length === 0) {\n trigger.tags = null;\n }\n\n // Handle multi-line description\n if (trigger.comments) {\n trigger.comments = trigger.comments.replace('\\n', '
');\n }\n\n // Format last change and age\n trigger.lastchangeUnix = Number(trigger.lastchange);\n triggerObj = this.setTriggerLastChange(triggerObj);\n triggerObj = this.setTriggerSeverity(triggerObj);\n return triggerObj;\n }\n\n updateTriggerFormat(trigger) {\n trigger = this.setTriggerLastChange(trigger);\n trigger = this.setTriggerSeverity(trigger);\n return trigger;\n }\n\n setTriggerSeverity(trigger) {\n if (trigger.value === '1') {\n // Problem state\n trigger.color = this.panel.triggerSeverity[trigger.priority].color;\n } else {\n // OK state\n trigger.color = this.panel.okEventColor;\n }\n trigger.severity = this.panel.triggerSeverity[trigger.priority].severity;\n\n // Mark acknowledged triggers with different color\n if (this.panel.markAckEvents && trigger.acknowledges && trigger.acknowledges.length) {\n trigger.color = this.panel.ackEventColor;\n }\n\n return trigger;\n }\n\n setTriggerLastChange(trigger) {\n if (!trigger.lastchangeUnix) {\n trigger.lastchange = \"\";\n trigger.age = \"\";\n return trigger;\n }\n\n let timestamp = moment.unix(trigger.lastchangeUnix);\n if (this.panel.customLastChangeFormat) {\n // User defined format\n trigger.lastchange = timestamp.format(this.panel.lastChangeFormat);\n } else {\n trigger.lastchange = timestamp.format(this.defaultTimeFormat);\n }\n trigger.age = timestamp.fromNow(true);\n return trigger;\n }\n\n parseTags(tagStr) {\n if (!tagStr) {\n return [];\n }\n\n let tags = _.map(tagStr.split(','), (tag) => tag.trim());\n tags = _.map(tags, (tag) => {\n const tagParts = tag.split(':');\n return {tag: tagParts[0].trim(), value: tagParts[1].trim()};\n });\n return tags;\n }\n\n tagsToString(tags) {\n return _.map(tags, (tag) => `${tag.tag}:${tag.value}`).join(', ');\n }\n\n addTagFilter(tag, ds) {\n let tagFilter = this.panel.targets[ds].tags.filter;\n let targetTags = this.parseTags(tagFilter);\n let newTag = {tag: tag.tag, value: tag.value};\n targetTags.push(newTag);\n targetTags = _.uniqWith(targetTags, _.isEqual);\n let newFilter = this.tagsToString(targetTags);\n this.panel.targets[ds].tags.filter = newFilter;\n this.refresh();\n }\n\n switchComment(trigger) {\n trigger.showComment = !trigger.showComment;\n }\n\n acknowledgeTrigger(trigger, message) {\n let eventid = trigger.lastEvent ? trigger.lastEvent.eventid : null;\n let grafana_user = this.contextSrv.user.name;\n let ack_message = grafana_user + ' (Grafana): ' + message;\n return this.datasourceSrv.get(trigger.datasource)\n .then(datasource => {\n const userIsEditor = this.contextSrv.isEditor || this.contextSrv.isGrafanaAdmin;\n if (datasource.disableReadOnlyUsersAck && !userIsEditor) {\n return Promise.reject({message: 'You have no permissions to acknowledge events.'});\n }\n if (eventid) {\n return datasource.zabbix.zabbixAPI.acknowledgeEvent(eventid, ack_message);\n } else {\n return Promise.reject({message: 'Trigger has no events. Nothing to acknowledge.'});\n }\n })\n .then(this.onRefresh.bind(this))\n .catch((err) => {\n this.error = err.message || \"Acknowledge Error\";\n this.events.emit('data-error', err);\n console.log('Panel data error:', err);\n });\n }\n\n getCurrentTriggersPage() {\n let pageSize = this.panel.pageSize || PANEL_DEFAULTS.pageSize;\n let startPos = this.pageIndex * pageSize;\n let endPos = Math.min(startPos + pageSize, this.triggerList.length);\n this.currentTriggersPage = this.triggerList.slice(startPos, endPos);\n return this.currentTriggersPage;\n }\n\n formatHostName(trigger) {\n let host = \"\";\n if (this.panel.hostField && this.panel.hostTechNameField) {\n host = `${trigger.host} (${trigger.hostTechName})`;\n } else if (this.panel.hostField || this.panel.hostTechNameField) {\n host = this.panel.hostField ? trigger.host : trigger.hostTechName;\n }\n\n return host;\n }\n\n formatHostGroups(trigger) {\n let groupNames = \"\";\n if (this.panel.hostGroups) {\n let groups = _.map(trigger.groups, 'name').join(', ');\n groupNames += `[ ${groups} ]`;\n }\n\n return groupNames;\n }\n\n getAlertIconClass(trigger) {\n let iconClass = '';\n if (trigger.value === '1') {\n if (trigger.priority >= 3) {\n iconClass = 'icon-gf-critical';\n } else {\n iconClass = 'icon-gf-warning';\n }\n } else {\n iconClass = 'icon-gf-online';\n }\n\n if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {\n iconClass += ' zabbix-trigger--blinked';\n }\n return iconClass;\n }\n\n getAlertIconClassBySeverity(triggerSeverity) {\n let iconClass = 'icon-gf-warning';\n if (triggerSeverity.priority >= 3) {\n iconClass = 'icon-gf-critical';\n }\n return iconClass;\n }\n\n getAlertStateClass(trigger) {\n let statusClass = '';\n\n if (trigger.value === '1') {\n statusClass = 'alert-state-critical';\n } else {\n statusClass = 'alert-state-ok';\n }\n\n if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {\n statusClass += ' zabbix-trigger--blinked';\n }\n\n return statusClass;\n }\n\n getBackground(trigger) {\n const mainColor = trigger.color;\n const secondColor = this.contextSrv.user.lightTheme ? '#dde4ed' : '#262628';\n if (this.contextSrv.user.lightTheme) {\n return `linear-gradient(135deg, ${secondColor}, ${mainColor})`;\n }\n return `linear-gradient(135deg, ${mainColor}, ${secondColor})`;\n }\n\n isNewTrigger(trigger) {\n try {\n const highlightIntervalMs = utils.parseInterval(this.panel.highlightNewerThan || PANEL_DEFAULTS.highlightNewerThan);\n const durationSec = (Date.now() - trigger.lastchangeUnix * 1000);\n return durationSec < highlightIntervalMs;\n } catch (e) {\n return false;\n }\n }\n\n link(scope, elem, attrs, ctrl) {\n let panel = ctrl.panel;\n let pageCount = 0;\n let triggerList = ctrl.triggerList;\n\n scope.$watchGroup(['ctrl.currentTriggersPage', 'ctrl.triggerList'], renderPanel);\n elem.on('click', '.triggers-panel-page-link', switchPage);\n ctrl.events.on('render', (renderData) => {\n triggerList = renderData || triggerList;\n renderPanel();\n });\n\n function getContentHeight() {\n let panelHeight = ctrl.height;\n if (pageCount > 1) {\n panelHeight -= 36;\n }\n return panelHeight + 'px';\n }\n\n function switchPage(e) {\n let el = $(e.currentTarget);\n ctrl.pageIndex = (parseInt(el.text(), 10)-1);\n\n let pageSize = panel.pageSize || 10;\n let startPos = ctrl.pageIndex * pageSize;\n let endPos = Math.min(startPos + pageSize, triggerList.length);\n ctrl.currentTriggersPage = triggerList.slice(startPos, endPos);\n\n scope.$apply(() => {\n renderPanel();\n });\n }\n\n function appendPaginationControls(footerElem) {\n footerElem.empty();\n\n let pageSize = panel.pageSize || 5;\n pageCount = Math.ceil(triggerList.length / pageSize);\n if (pageCount === 1) {\n return;\n }\n\n let startPage = Math.max(ctrl.pageIndex - 3, 0);\n let endPage = Math.min(pageCount, startPage + 9);\n\n let paginationList = $('
');\n\n for (let i = startPage; i < endPage; i++) {\n let activeClass = i === ctrl.pageIndex ? 'active' : '';\n let pageLinkElem = $('
' + (i+1) + '');\n paginationList.append(pageLinkElem);\n }\n\n footerElem.append(paginationList);\n }\n\n function setFontSize() {\n const fontSize = parseInt(panel.fontSize.slice(0, panel.fontSize.length - 1));\n let triggerCardElem = elem.find('.alert-rule-item');\n if (fontSize && fontSize !== 100) {\n triggerCardElem.find('.alert-rule-item__icon').css({\n 'font-size': fontSize + '%',\n 'margin': fontSize / 100 * 6 + 'px'\n });\n triggerCardElem.find('.alert-rule-item__name').css({'font-size': fontSize + '%'});\n triggerCardElem.find('.alert-rule-item__text').css({'font-size': fontSize * 0.8 + '%'});\n triggerCardElem.find('.zbx-trigger-lastchange').css({'font-size': fontSize * 0.8 + '%'});\n triggerCardElem.find('.zbx-tag').css({'font-size': fontSize * 0.6 + '%'});\n triggerCardElem.find('.zbx-tag').css({'line-height': fontSize / 100 * 16 + 'px'});\n } else {\n // remove css\n triggerCardElem.find('.alert-rule-item__icon').css({'font-size': '', 'margin-right': ''});\n triggerCardElem.find('.alert-rule-item__name').css({'font-size': ''});\n triggerCardElem.find('.alert-rule-item__text').css({'font-size': ''});\n triggerCardElem.find('.zbx-trigger-lastchange').css({'font-size': ''});\n triggerCardElem.find('.zbx-tag').css({'font-size': ''});\n triggerCardElem.find('.zbx-tag').css({'line-height': ''});\n }\n }\n\n function renderPanel() {\n let rootElem = elem.find('.triggers-panel-scroll');\n let footerElem = elem.find('.triggers-panel-footer');\n appendPaginationControls(footerElem);\n rootElem.css({'max-height': getContentHeight()});\n rootElem.css({'height': getContentHeight()});\n setFontSize();\n ctrl.renderingCompleted();\n }\n\n let unbindDestroy = scope.$on('$destroy', function() {\n elem.off('click', '.triggers-panel-page-link');\n unbindDestroy();\n });\n }\n}\n\nTriggerPanelCtrl.templateUrl = 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/module.html';\n\nfunction filterTriggers(triggers, triggerFilter) {\n if (utils.isRegex(triggerFilter)) {\n return _.filter(triggers, function(trigger) {\n return utils.buildRegex(triggerFilter).test(trigger.description);\n });\n } else {\n return _.filter(triggers, function(trigger) {\n return trigger.description === triggerFilter;\n });\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../src/panel-triggers/triggers_panel_ctrl.js"],"names":["filterTriggers","triggers","triggerFilter","utils","isRegex","_","filter","trigger","buildRegex","test","description","$","moment","PanelCtrl","triggerPanelOptionsTab","triggerPanelTriggersTab","migratePanelSchema","CURRENT_SCHEMA_VERSION","ZABBIX_DS_ID","DEFAULT_TARGET","group","host","application","tags","DEFAULT_SEVERITY","priority","severity","color","show","DEFAULT_TIME_FORMAT","PANEL_DEFAULTS","schemaVersion","datasources","targets","hostField","hostTechNameField","hostGroups","showTags","statusField","severityField","descriptionField","descriptionAtNewLine","hostsInMaintenance","showTriggers","sortTriggersBy","text","value","showEvents","limit","fontSize","pageSize","highlightBackground","highlightNewEvents","highlightNewerThan","customLastChangeFormat","lastChangeFormat","triggerSeverity","okEventColor","ackEventColor","triggerStatusMap","TriggerPanelCtrl","$scope","$injector","$timeout","datasourceSrv","templateSrv","contextSrv","dashboardSrv","scope","editorTabIndex","defaultTimeFormat","pageIndex","triggerList","currentTriggersPage","panel","defaultsDeep","cloneDeep","available_datasources","map","getZabbixDataSources","length","push","isEmpty","initDatasources","events","on","onInitEditMode","bind","onRefresh","promises","ds","get","then","datasource","Promise","all","getMetricSources","meta","id","addEditorTab","timing","queryStart","Date","getTime","queryEnd","otherPanelInFullscreenMode","error","loading","setTimeQueryStart","getTriggers","setTimeQueryEnd","render","zabbixTriggers","catch","err","cancelled","console","log","message","data","emit","triggerListUnfiltered","formatTrigger","filterTriggersPost","sortTriggers","slice","getCurrentTriggersPage","zabbix","groupFilter","replaceTemplateVars","hostFilter","appFilter","triggersOptions","getAcknowledges","setMaintenanceStatus","filterTriggersPre","addTriggerDataSource","flatten","results","eventids","lastEvent","eventid","each","event","find","acknowledges","formatAcknowledge","ack","timestamp","unix","clock","time","format","user","alias","name","surname","fullName","target","tagsFilter","replace","parseTags","every","tag","maintenance","maintenance_status","some","hosts","orderBy","zabbixTrigger","triggerObj","hostTechName","comments","lastchangeUnix","Number","lastchange","setTriggerLastChange","setTriggerSeverity","markAckEvents","age","fromNow","tagStr","split","trim","tagParts","join","tagFilter","targetTags","newTag","uniqWith","isEqual","newFilter","tagsToString","refresh","showComment","grafana_user","ack_message","userIsEditor","isEditor","isGrafanaAdmin","disableReadOnlyUsersAck","reject","zabbixAPI","acknowledgeEvent","startPos","endPos","Math","min","groupNames","groups","iconClass","isNewTrigger","statusClass","mainColor","secondColor","lightTheme","highlightIntervalMs","parseInterval","durationSec","now","e","elem","attrs","ctrl","pageCount","$watchGroup","renderPanel","switchPage","renderData","getContentHeight","panelHeight","height","el","currentTarget","parseInt","$apply","appendPaginationControls","footerElem","empty","ceil","startPage","max","endPage","paginationList","i","activeClass","pageLinkElem","append","setFontSize","triggerCardElem","css","rootElem","renderingCompleted","unbindDestroy","$on","off","templateUrl"],"mappings":"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","file":"triggers_panel_ctrl.js","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport moment from 'moment';\nimport * as utils from '../datasource-zabbix/utils';\nimport {PanelCtrl} from 'app/plugins/sdk';\nimport {triggerPanelOptionsTab} from './options_tab';\nimport {triggerPanelTriggersTab} from './triggers_tab';\nimport {migratePanelSchema, CURRENT_SCHEMA_VERSION} from './migrations';\n\nconst ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource';\n\nexport const DEFAULT_TARGET = {\n group: {filter: \"\"},\n host: {filter: \"\"},\n application: {filter: \"\"},\n trigger: {filter: \"\"},\n tags: {filter: \"\"},\n};\n\nexport const DEFAULT_SEVERITY = [\n { priority: 0, severity: 'Not classified', color: 'rgb(108, 108, 108)', show: true},\n { priority: 1, severity: 'Information', color: 'rgb(120, 158, 183)', show: true},\n { priority: 2, severity: 'Warning', color: 'rgb(175, 180, 36)', show: true},\n { priority: 3, severity: 'Average', color: 'rgb(255, 137, 30)', show: true},\n { priority: 4, severity: 'High', color: 'rgb(255, 101, 72)', show: true},\n { priority: 5, severity: 'Disaster', color: 'rgb(215, 0, 0)', show: true},\n];\n\nconst DEFAULT_TIME_FORMAT = \"DD MMM YYYY HH:mm:ss\";\n\nexport const PANEL_DEFAULTS = {\n schemaVersion: CURRENT_SCHEMA_VERSION,\n datasources: [],\n targets: {},\n // Fields\n hostField: true,\n hostTechNameField: false,\n hostGroups: false,\n showTags: true,\n statusField: true,\n severityField: true,\n descriptionField: true,\n descriptionAtNewLine: false,\n // Options\n hostsInMaintenance: true,\n showTriggers: 'all triggers',\n sortTriggersBy: { text: 'last change', value: 'lastchange' },\n showEvents: { text: 'Problems', value: '1' },\n limit: 100,\n // View options\n fontSize: '100%',\n pageSize: 10,\n highlightBackground: false,\n highlightNewEvents: false,\n highlightNewerThan: '1h',\n customLastChangeFormat: false,\n lastChangeFormat: \"\",\n // Triggers severity and colors\n triggerSeverity: DEFAULT_SEVERITY,\n okEventColor: 'rgb(56, 189, 113)',\n ackEventColor: 'rgb(56, 219, 156)'\n};\n\nconst triggerStatusMap = {\n '0': 'OK',\n '1': 'PROBLEM'\n};\n\nexport class TriggerPanelCtrl extends PanelCtrl {\n\n /** @ngInject */\n constructor($scope, $injector, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {\n super($scope, $injector);\n this.datasourceSrv = datasourceSrv;\n this.templateSrv = templateSrv;\n this.contextSrv = contextSrv;\n this.dashboardSrv = dashboardSrv;\n this.scope = $scope;\n this.$timeout = $timeout;\n\n this.editorTabIndex = 1;\n this.triggerStatusMap = triggerStatusMap;\n this.defaultTimeFormat = DEFAULT_TIME_FORMAT;\n this.pageIndex = 0;\n this.triggerList = [];\n this.currentTriggersPage = [];\n this.datasources = {};\n\n this.panel = migratePanelSchema(this.panel);\n _.defaultsDeep(this.panel, _.cloneDeep(PANEL_DEFAULTS));\n\n this.available_datasources = _.map(this.getZabbixDataSources(), 'name');\n if (this.panel.datasources.length === 0) {\n this.panel.datasources.push(this.available_datasources[0]);\n }\n if (_.isEmpty(this.panel.targets)) {\n this.panel.targets[this.panel.datasources[0]] = DEFAULT_TARGET;\n }\n\n this.initDatasources();\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('refresh', this.onRefresh.bind(this));\n }\n\n initDatasources() {\n let promises = _.map(this.panel.datasources, (ds) => {\n // Load datasource\n return this.datasourceSrv.get(ds)\n .then(datasource => {\n this.datasources[ds] = datasource;\n return datasource;\n });\n });\n return Promise.all(promises);\n }\n\n getZabbixDataSources() {\n return _.filter(this.datasourceSrv.getMetricSources(), datasource => {\n return datasource.meta.id === ZABBIX_DS_ID && datasource.value;\n });\n }\n\n onInitEditMode() {\n this.addEditorTab('Triggers', triggerPanelTriggersTab, 1);\n this.addEditorTab('Options', triggerPanelOptionsTab, 2);\n }\n\n setTimeQueryStart() {\n this.timing.queryStart = new Date().getTime();\n }\n\n setTimeQueryEnd() {\n this.timing.queryEnd = new Date().getTime();\n }\n\n onRefresh() {\n // ignore fetching data if another panel is in fullscreen\n if (this.otherPanelInFullscreenMode()) { return; }\n\n // clear loading/error state\n delete this.error;\n this.loading = true;\n this.setTimeQueryStart();\n this.pageIndex = 0;\n\n return this.getTriggers()\n .then(zabbixTriggers => {\n // Notify panel that request is finished\n this.loading = false;\n this.setTimeQueryEnd();\n\n this.render(zabbixTriggers);\n })\n .catch(err => {\n // if cancelled keep loading set to true\n if (err.cancelled) {\n console.log('Panel request cancelled', err);\n return;\n }\n\n this.loading = false;\n this.error = err.message || \"Request Error\";\n\n if (err.data) {\n if (err.data.message) {\n this.error = err.data.message;\n }\n if (err.data.error) {\n this.error = err.data.error;\n }\n }\n\n this.events.emit('data-error', err);\n console.log('Panel data error:', err);\n });\n }\n\n render(zabbixTriggers) {\n let triggers = _.cloneDeep(zabbixTriggers || this.triggerListUnfiltered);\n this.triggerListUnfiltered = _.cloneDeep(triggers);\n\n triggers = _.map(triggers, this.formatTrigger.bind(this));\n triggers = this.filterTriggersPost(triggers);\n triggers = this.sortTriggers(triggers);\n\n // Limit triggers number\n triggers = triggers.slice(0, this.panel.limit || PANEL_DEFAULTS.limit);\n\n this.triggerList = triggers;\n this.getCurrentTriggersPage();\n\n this.$timeout(() => {\n super.render(this.triggerList);\n });\n }\n\n getTriggers() {\n let promises = _.map(this.panel.datasources, (ds) => {\n return this.datasourceSrv.get(ds)\n .then(datasource => {\n var zabbix = datasource.zabbix;\n var showEvents = this.panel.showEvents.value;\n var triggerFilter = this.panel.targets[ds];\n\n // Replace template variables\n var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter);\n var hostFilter = datasource.replaceTemplateVars(triggerFilter.host.filter);\n var appFilter = datasource.replaceTemplateVars(triggerFilter.application.filter);\n\n let triggersOptions = {\n showTriggers: showEvents\n };\n\n return zabbix.getTriggers(groupFilter, hostFilter, appFilter, triggersOptions);\n }).then((triggers) => {\n return this.getAcknowledges(triggers, ds);\n }).then((triggers) => {\n return this.setMaintenanceStatus(triggers);\n }).then((triggers) => {\n return this.filterTriggersPre(triggers, ds);\n }).then((triggers) => {\n return this.addTriggerDataSource(triggers, ds);\n });\n });\n\n return Promise.all(promises)\n .then(results => _.flatten(results));\n }\n\n getAcknowledges(triggerList, ds) {\n // Request acknowledges for trigger\n var eventids = _.map(triggerList, trigger => {\n return trigger.lastEvent.eventid;\n });\n\n return this.datasources[ds].zabbix.getAcknowledges(eventids)\n .then(events => {\n\n // Map events to triggers\n _.each(triggerList, trigger => {\n var event = _.find(events, event => {\n return event.eventid === trigger.lastEvent.eventid;\n });\n\n if (event) {\n trigger.acknowledges = _.map(event.acknowledges, this.formatAcknowledge.bind(this));\n }\n\n if (!trigger.lastEvent.eventid) {\n trigger.lastEvent = null;\n }\n });\n\n return triggerList;\n });\n }\n\n formatAcknowledge(ack) {\n let timestamp = moment.unix(ack.clock);\n if (this.panel.customLastChangeFormat) {\n ack.time = timestamp.format(this.panel.lastChangeFormat);\n } else {\n ack.time = timestamp.format(this.defaultTimeFormat);\n }\n ack.user = ack.alias || '';\n if (ack.name || ack.surname) {\n const fullName = `${ack.name || ''} ${ack.surname || ''}`;\n ack.user += ` (${fullName})`;\n }\n return ack;\n }\n\n filterTriggersPre(triggerList, ds) {\n // Filter triggers by description\n let triggerFilter = this.panel.targets[ds].trigger.filter;\n triggerFilter = this.datasources[ds].replaceTemplateVars(triggerFilter);\n if (triggerFilter) {\n triggerList = filterTriggers(triggerList, triggerFilter);\n }\n\n // Filter by tags\n const target = this.panel.targets[ds];\n if (target.tags.filter) {\n let tagsFilter = this.datasources[ds].replaceTemplateVars(target.tags.filter);\n // replaceTemplateVars() builds regex-like string, so we should trim it.\n tagsFilter = tagsFilter.replace('/^', '').replace('$/', '');\n const tags = this.parseTags(tagsFilter);\n triggerList = _.filter(triggerList, trigger => {\n return _.every(tags, (tag) => {\n return _.find(trigger.tags, {tag: tag.tag, value: tag.value});\n });\n });\n }\n\n return triggerList;\n }\n\n filterTriggersPost(triggers) {\n let triggerList = _.cloneDeep(triggers);\n\n // Filter acknowledged triggers\n if (this.panel.showTriggers === 'unacknowledged') {\n triggerList = _.filter(triggerList, trigger => {\n return !trigger.acknowledges;\n });\n } else if (this.panel.showTriggers === 'acknowledged') {\n triggerList = _.filter(triggerList, 'acknowledges');\n } else {\n triggerList = triggerList;\n }\n\n // Filter by maintenance status\n if (!this.panel.hostsInMaintenance) {\n triggerList = _.filter(triggerList, (trigger) => trigger.maintenance === false);\n }\n\n // Filter triggers by severity\n triggerList = _.filter(triggerList, trigger => {\n return this.panel.triggerSeverity[trigger.priority].show;\n });\n\n return triggerList;\n }\n\n setMaintenanceStatus(triggers) {\n _.each(triggers, (trigger) => {\n let maintenance_status = _.some(trigger.hosts, (host) => host.maintenance_status === '1');\n trigger.maintenance = maintenance_status;\n });\n return triggers;\n }\n\n addTriggerDataSource(triggers, ds) {\n _.each(triggers, (trigger) => {\n trigger.datasource = ds;\n });\n return triggers;\n }\n\n sortTriggers(triggerList) {\n if (this.panel.sortTriggersBy.value === 'priority') {\n triggerList = _.orderBy(triggerList, ['priority', 'lastchangeUnix', 'triggerid'], ['desc', 'desc', 'desc']);\n } else {\n triggerList = _.orderBy(triggerList, ['lastchangeUnix', 'priority', 'triggerid'], ['desc', 'desc', 'desc']);\n }\n return triggerList;\n }\n\n formatTrigger(zabbixTrigger) {\n let trigger = _.cloneDeep(zabbixTrigger);\n let triggerObj = trigger;\n\n // Set host that the trigger belongs\n if (trigger.hosts && trigger.hosts.length) {\n triggerObj.host = trigger.hosts[0].name;\n triggerObj.hostTechName = trigger.hosts[0].host;\n }\n\n // Set tags if present\n if (trigger.tags && trigger.tags.length === 0) {\n trigger.tags = null;\n }\n\n // Handle multi-line description\n if (trigger.comments) {\n trigger.comments = trigger.comments.replace('\\n', '
');\n }\n\n // Format last change and age\n trigger.lastchangeUnix = Number(trigger.lastchange);\n triggerObj = this.setTriggerLastChange(triggerObj);\n triggerObj = this.setTriggerSeverity(triggerObj);\n return triggerObj;\n }\n\n updateTriggerFormat(trigger) {\n trigger = this.setTriggerLastChange(trigger);\n trigger = this.setTriggerSeverity(trigger);\n return trigger;\n }\n\n setTriggerSeverity(trigger) {\n if (trigger.value === '1') {\n // Problem state\n trigger.color = this.panel.triggerSeverity[trigger.priority].color;\n } else {\n // OK state\n trigger.color = this.panel.okEventColor;\n }\n trigger.severity = this.panel.triggerSeverity[trigger.priority].severity;\n\n // Mark acknowledged triggers with different color\n if (this.panel.markAckEvents && trigger.acknowledges && trigger.acknowledges.length) {\n trigger.color = this.panel.ackEventColor;\n }\n\n return trigger;\n }\n\n setTriggerLastChange(trigger) {\n if (!trigger.lastchangeUnix) {\n trigger.lastchange = \"\";\n trigger.age = \"\";\n return trigger;\n }\n\n let timestamp = moment.unix(trigger.lastchangeUnix);\n if (this.panel.customLastChangeFormat) {\n // User defined format\n trigger.lastchange = timestamp.format(this.panel.lastChangeFormat);\n } else {\n trigger.lastchange = timestamp.format(this.defaultTimeFormat);\n }\n trigger.age = timestamp.fromNow(true);\n return trigger;\n }\n\n parseTags(tagStr) {\n if (!tagStr) {\n return [];\n }\n\n let tags = _.map(tagStr.split(','), (tag) => tag.trim());\n tags = _.map(tags, (tag) => {\n const tagParts = tag.split(':');\n return {tag: tagParts[0].trim(), value: tagParts[1].trim()};\n });\n return tags;\n }\n\n tagsToString(tags) {\n return _.map(tags, (tag) => `${tag.tag}:${tag.value}`).join(', ');\n }\n\n addTagFilter(tag, ds) {\n let tagFilter = this.panel.targets[ds].tags.filter;\n let targetTags = this.parseTags(tagFilter);\n let newTag = {tag: tag.tag, value: tag.value};\n targetTags.push(newTag);\n targetTags = _.uniqWith(targetTags, _.isEqual);\n let newFilter = this.tagsToString(targetTags);\n this.panel.targets[ds].tags.filter = newFilter;\n this.refresh();\n }\n\n switchComment(trigger) {\n trigger.showComment = !trigger.showComment;\n }\n\n acknowledgeTrigger(trigger, message) {\n let eventid = trigger.lastEvent ? trigger.lastEvent.eventid : null;\n let grafana_user = this.contextSrv.user.name;\n let ack_message = grafana_user + ' (Grafana): ' + message;\n return this.datasourceSrv.get(trigger.datasource)\n .then(datasource => {\n const userIsEditor = this.contextSrv.isEditor || this.contextSrv.isGrafanaAdmin;\n if (datasource.disableReadOnlyUsersAck && !userIsEditor) {\n return Promise.reject({message: 'You have no permissions to acknowledge events.'});\n }\n if (eventid) {\n return datasource.zabbix.zabbixAPI.acknowledgeEvent(eventid, ack_message);\n } else {\n return Promise.reject({message: 'Trigger has no events. Nothing to acknowledge.'});\n }\n })\n .then(this.onRefresh.bind(this))\n .catch((err) => {\n this.error = err.message || \"Acknowledge Error\";\n this.events.emit('data-error', err);\n console.log('Panel data error:', err);\n });\n }\n\n getCurrentTriggersPage() {\n let pageSize = this.panel.pageSize || PANEL_DEFAULTS.pageSize;\n let startPos = this.pageIndex * pageSize;\n let endPos = Math.min(startPos + pageSize, this.triggerList.length);\n this.currentTriggersPage = this.triggerList.slice(startPos, endPos);\n return this.currentTriggersPage;\n }\n\n formatHostName(trigger) {\n let host = \"\";\n if (this.panel.hostField && this.panel.hostTechNameField) {\n host = `${trigger.host} (${trigger.hostTechName})`;\n } else if (this.panel.hostField || this.panel.hostTechNameField) {\n host = this.panel.hostField ? trigger.host : trigger.hostTechName;\n }\n\n return host;\n }\n\n formatHostGroups(trigger) {\n let groupNames = \"\";\n if (this.panel.hostGroups) {\n let groups = _.map(trigger.groups, 'name').join(', ');\n groupNames += `[ ${groups} ]`;\n }\n\n return groupNames;\n }\n\n getAlertIconClass(trigger) {\n let iconClass = '';\n if (trigger.value === '1') {\n if (trigger.priority >= 3) {\n iconClass = 'icon-gf-critical';\n } else {\n iconClass = 'icon-gf-warning';\n }\n } else {\n iconClass = 'icon-gf-online';\n }\n\n if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {\n iconClass += ' zabbix-trigger--blinked';\n }\n return iconClass;\n }\n\n getAlertIconClassBySeverity(triggerSeverity) {\n let iconClass = 'icon-gf-warning';\n if (triggerSeverity.priority >= 3) {\n iconClass = 'icon-gf-critical';\n }\n return iconClass;\n }\n\n getAlertStateClass(trigger) {\n let statusClass = '';\n\n if (trigger.value === '1') {\n statusClass = 'alert-state-critical';\n } else {\n statusClass = 'alert-state-ok';\n }\n\n if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {\n statusClass += ' zabbix-trigger--blinked';\n }\n\n return statusClass;\n }\n\n getBackground(trigger) {\n const mainColor = trigger.color;\n const secondColor = this.contextSrv.user.lightTheme ? '#dde4ed' : '#262628';\n if (this.contextSrv.user.lightTheme) {\n return `linear-gradient(135deg, ${secondColor}, ${mainColor})`;\n }\n return `linear-gradient(135deg, ${mainColor}, ${secondColor})`;\n }\n\n isNewTrigger(trigger) {\n try {\n const highlightIntervalMs = utils.parseInterval(this.panel.highlightNewerThan || PANEL_DEFAULTS.highlightNewerThan);\n const durationSec = (Date.now() - trigger.lastchangeUnix * 1000);\n return durationSec < highlightIntervalMs;\n } catch (e) {\n return false;\n }\n }\n\n link(scope, elem, attrs, ctrl) {\n let panel = ctrl.panel;\n let pageCount = 0;\n let triggerList = ctrl.triggerList;\n\n scope.$watchGroup(['ctrl.currentTriggersPage', 'ctrl.triggerList'], renderPanel);\n elem.on('click', '.triggers-panel-page-link', switchPage);\n ctrl.events.on('render', (renderData) => {\n triggerList = renderData || triggerList;\n renderPanel();\n });\n\n function getContentHeight() {\n let panelHeight = ctrl.height;\n if (pageCount > 1) {\n panelHeight -= 36;\n }\n return panelHeight + 'px';\n }\n\n function switchPage(e) {\n let el = $(e.currentTarget);\n ctrl.pageIndex = (parseInt(el.text(), 10)-1);\n\n let pageSize = panel.pageSize || 10;\n let startPos = ctrl.pageIndex * pageSize;\n let endPos = Math.min(startPos + pageSize, triggerList.length);\n ctrl.currentTriggersPage = triggerList.slice(startPos, endPos);\n\n scope.$apply(() => {\n renderPanel();\n });\n }\n\n function appendPaginationControls(footerElem) {\n footerElem.empty();\n\n let pageSize = panel.pageSize || 5;\n pageCount = Math.ceil(triggerList.length / pageSize);\n if (pageCount === 1) {\n return;\n }\n\n let startPage = Math.max(ctrl.pageIndex - 3, 0);\n let endPage = Math.min(pageCount, startPage + 9);\n\n let paginationList = $('
');\n\n for (let i = startPage; i < endPage; i++) {\n let activeClass = i === ctrl.pageIndex ? 'active' : '';\n let pageLinkElem = $('
' + (i+1) + '');\n paginationList.append(pageLinkElem);\n }\n\n footerElem.append(paginationList);\n }\n\n function setFontSize() {\n const fontSize = parseInt(panel.fontSize.slice(0, panel.fontSize.length - 1));\n let triggerCardElem = elem.find('.alert-rule-item');\n if (fontSize && fontSize !== 100) {\n triggerCardElem.find('.alert-rule-item__icon').css({\n 'font-size': fontSize + '%',\n 'margin': fontSize / 100 * 6 + 'px'\n });\n triggerCardElem.find('.alert-rule-item__name').css({'font-size': fontSize + '%'});\n triggerCardElem.find('.alert-rule-item__text').css({'font-size': fontSize * 0.8 + '%'});\n triggerCardElem.find('.zbx-trigger-lastchange').css({'font-size': fontSize * 0.8 + '%'});\n triggerCardElem.find('.zbx-tag').css({'font-size': fontSize * 0.6 + '%'});\n triggerCardElem.find('.zbx-tag').css({'line-height': fontSize / 100 * 16 + 'px'});\n } else {\n // remove css\n triggerCardElem.find('.alert-rule-item__icon').css({'font-size': '', 'margin-right': ''});\n triggerCardElem.find('.alert-rule-item__name').css({'font-size': ''});\n triggerCardElem.find('.alert-rule-item__text').css({'font-size': ''});\n triggerCardElem.find('.zbx-trigger-lastchange').css({'font-size': ''});\n triggerCardElem.find('.zbx-tag').css({'font-size': ''});\n triggerCardElem.find('.zbx-tag').css({'line-height': ''});\n }\n }\n\n function renderPanel() {\n let rootElem = elem.find('.triggers-panel-scroll');\n let footerElem = elem.find('.triggers-panel-footer');\n appendPaginationControls(footerElem);\n rootElem.css({'max-height': getContentHeight()});\n rootElem.css({'height': getContentHeight()});\n setFontSize();\n ctrl.renderingCompleted();\n }\n\n let unbindDestroy = scope.$on('$destroy', function() {\n elem.off('click', '.triggers-panel-page-link');\n unbindDestroy();\n });\n }\n}\n\nTriggerPanelCtrl.templateUrl = 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/module.html';\n\nfunction filterTriggers(triggers, triggerFilter) {\n if (utils.isRegex(triggerFilter)) {\n return _.filter(triggers, function(trigger) {\n return utils.buildRegex(triggerFilter).test(trigger.description);\n });\n } else {\n return _.filter(triggers, function(trigger) {\n return trigger.description === triggerFilter;\n });\n }\n}\n"]}
\ No newline at end of file