diff --git a/dist/datasource-zabbix/query.controller.js b/dist/datasource-zabbix/query.controller.js index 0b2cb4e..cbb49aa 100644 --- a/dist/datasource-zabbix/query.controller.js +++ b/dist/datasource-zabbix/query.controller.js @@ -35,10 +35,6 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './utils', './metricFun if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - // Get list of metric names for bs-typeahead directive - function getMetricNames(scope, metricList) { - return _.uniq(_.map(scope.metric[metricList], 'name')); - } return { setters: [function (_appPluginsSdk) { QueryCtrl = _appPluginsSdk.QueryCtrl; @@ -94,10 +90,10 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './utils', './metricFun }; // Map functions for bs-typeahead - _this.getGroupNames = _.partial(getMetricNames, _this, 'groupList'); - _this.getHostNames = _.partial(getMetricNames, _this, 'hostList'); - _this.getApplicationNames = _.partial(getMetricNames, _this, 'appList'); - _this.getItemNames = _.partial(getMetricNames, _this, 'itemList'); + _this.getGroupNames = _.bind(_this.getMetricNames, _this, 'groupList'); + _this.getHostNames = _.bind(_this.getMetricNames, _this, 'hostList'); + _this.getApplicationNames = _.bind(_this.getMetricNames, _this, 'appList'); + _this.getItemNames = _.bind(_this.getMetricNames, _this, 'itemList'); // Update metric suggestion when template variable was changed $rootScope.$on('template-variable-value-updated', function () { @@ -163,6 +159,18 @@ System.register(['app/plugins/sdk', 'angular', 'lodash', './utils', './metricFun var itemtype = this.editorModes[this.target.mode].value; return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps(), this.suggestItems(itemtype)]); } + }, { + key: 'getMetricNames', + value: function getMetricNames(metricList) { + var metrics = _.uniq(_.map(this.metric[metricList], 'name')); + + // Add template variables + _.forEach(this.templateSrv.variables, function (variable) { + metrics.unshift('$' + variable.name); + }); + + return metrics; + } }, { key: 'suggestGroups', value: function suggestGroups() { diff --git a/dist/datasource-zabbix/query.controller.js.map b/dist/datasource-zabbix/query.controller.js.map index 75433c9..7d47777 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":["getMetricNames","scope","metricList","_","uniq","map","metric","QueryCtrl","angular","utils","metricFunctions","migrations","ZabbixQueryController","$scope","$injector","$rootScope","$sce","templateSrv","zabbix","datasource","replaceTemplateVars","editorModes","value","text","mode","getGroupNames","partial","getHostNames","getApplicationNames","getItemNames","$on","onVariableChange","onTargetBlur","init","target","migrate","scopeDefaults","oldTarget","cloneDeep","queryOptionsText","renderQueryOptionsText","defaults","targetDefaults","group","filter","host","application","item","functions","options","showDisabledItems","func","createFuncInstance","def","params","downsampleFunctionList","name","initFilters","slaPropertyList","property","itserviceList","updateITServiceList","itemtype","Promise","all","suggestGroups","suggestHosts","suggestApps","suggestItems","getAllGroups","then","groupList","groups","groupFilter","getAllHosts","hostList","hosts","hostFilter","getAllApps","appList","apps","appFilter","getAllItems","itemList","items","str","isRegex","isTemplateVariable","variables","newTarget","isEqual","targetChanged","isContainsVariables","some","field","parseTarget","panelCtrl","refresh","funcDef","newFunc","added","push","moveAliasFuncLast","length","without","aliasFunc","find","showQueryOptions","optionsMap","forOwn","key","join","getITService","iteservices","concat","isEmpty","errors","copy","templateUrl"],"mappings":"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","file":"query.controller.js","sourcesContent":["import {QueryCtrl} from 'app/plugins/sdk';\nimport angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport * as metricFunctions from './metricFunctions';\nimport * as migrations from './migrations';\n\nimport './add-metric-function.directive';\nimport './metric-function-editor.directive';\n\nimport './css/query-editor.css!';\n\nexport class ZabbixQueryController extends QueryCtrl {\n\n // ZabbixQueryCtrl constructor\n constructor($scope, $injector, $rootScope, $sce, templateSrv) {\n super($scope, $injector);\n this.zabbix = this.datasource.zabbix;\n\n // Use custom format for template variables\n this.replaceTemplateVars = this.datasource.replaceTemplateVars;\n this.templateSrv = templateSrv;\n\n this.editorModes = {\n 0: {value: 'num', text: 'Metrics', mode: 0},\n 1: {value: 'itservice', text: 'IT Services', mode: 1},\n 2: {value: 'text', text: 'Text', mode: 2}\n };\n\n // Map functions for bs-typeahead\n this.getGroupNames = _.partial(getMetricNames, this, 'groupList');\n this.getHostNames = _.partial(getMetricNames, this, 'hostList');\n this.getApplicationNames = _.partial(getMetricNames, this, 'appList');\n this.getItemNames = _.partial(getMetricNames, this, 'itemList');\n\n // Update metric suggestion when template variable was changed\n $rootScope.$on('template-variable-value-updated', () => this.onVariableChange());\n\n // Update metrics when item selected from dropdown\n $scope.$on('typeahead-updated', () => {\n this.onTargetBlur();\n });\n\n this.init = function() {\n var target = this.target;\n\n // Migrate old targets\n target = migrations.migrate(target);\n\n var scopeDefaults = {\n metric: {},\n oldTarget: _.cloneDeep(this.target),\n queryOptionsText: this.renderQueryOptionsText()\n };\n _.defaults(this, scopeDefaults);\n\n // Load default values\n var targetDefaults = {\n mode: 0,\n group: { filter: \"\" },\n host: { filter: \"\" },\n application: { filter: \"\" },\n item: { filter: \"\" },\n functions: [],\n options: {\n showDisabledItems: false\n }\n };\n _.defaults(target, targetDefaults);\n\n // Create function instances from saved JSON\n target.functions = _.map(target.functions, function(func) {\n return metricFunctions.createFuncInstance(func.def, func.params);\n });\n\n if (target.mode === 0 ||\n target.mode === 2) {\n\n this.downsampleFunctionList = [\n {name: \"avg\", value: \"avg\"},\n {name: \"min\", value: \"min\"},\n {name: \"max\", value: \"max\"}\n ];\n\n this.initFilters();\n }\n else if (target.mode === 1) {\n this.slaPropertyList = [\n {name: \"Status\", property: \"status\"},\n {name: \"SLA\", property: \"sla\"},\n {name: \"OK time\", property: \"okTime\"},\n {name: \"Problem time\", property: \"problemTime\"},\n {name: \"Down time\", property: \"downtimeTime\"}\n ];\n this.itserviceList = [{name: \"test\"}];\n this.updateITServiceList();\n }\n };\n\n this.init();\n }\n\n initFilters() {\n let itemtype = this.editorModes[this.target.mode].value;\n return Promise.all([\n this.suggestGroups(),\n this.suggestHosts(),\n this.suggestApps(),\n this.suggestItems(itemtype)\n ]);\n }\n\n suggestGroups() {\n return this.zabbix.getAllGroups()\n .then(groups => {\n this.metric.groupList = groups;\n return groups;\n });\n }\n\n suggestHosts() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n return this.zabbix.getAllHosts(groupFilter)\n .then(hosts => {\n this.metric.hostList = hosts;\n return hosts;\n });\n }\n\n suggestApps() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n return this.zabbix.getAllApps(groupFilter, hostFilter)\n .then(apps => {\n this.metric.appList = apps;\n return apps;\n });\n }\n\n suggestItems(itemtype = 'num') {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n let appFilter = this.replaceTemplateVars(this.target.application.filter);\n let options = {\n itemtype: itemtype,\n showDisabledItems: this.target.options.showDisabledItems\n };\n\n return this.zabbix\n .getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => {\n this.metric.itemList = items;\n return items;\n });\n }\n\n isRegex(str) {\n return utils.isRegex(str);\n }\n\n isVariable(str) {\n return utils.isTemplateVariable(str, this.templateSrv.variables);\n }\n\n onTargetBlur() {\n var newTarget = _.cloneDeep(this.target);\n if (!_.isEqual(this.oldTarget, this.target)) {\n this.oldTarget = newTarget;\n this.targetChanged();\n }\n }\n\n onVariableChange() {\n if (this.isContainsVariables()) {\n this.targetChanged();\n }\n }\n\n /**\n * Check query for template variables\n */\n isContainsVariables() {\n return _.some(['group', 'host', 'application'], field => {\n if (this.target[field] && this.target[field].filter) {\n return utils.isTemplateVariable(this.target[field].filter, this.templateSrv.variables);\n } else {\n return false;\n }\n });\n }\n\n parseTarget() {\n // Parse target\n }\n\n // Validate target and set validation info\n validateTarget() {\n // validate\n }\n\n targetChanged() {\n this.initFilters();\n this.parseTarget();\n this.panelCtrl.refresh();\n }\n\n addFunction(funcDef) {\n var newFunc = metricFunctions.createFuncInstance(funcDef);\n newFunc.added = true;\n this.target.functions.push(newFunc);\n\n this.moveAliasFuncLast();\n\n if (newFunc.params.length && newFunc.added ||\n newFunc.def.params.length === 0) {\n this.targetChanged();\n }\n }\n\n removeFunction(func) {\n this.target.functions = _.without(this.target.functions, func);\n this.targetChanged();\n }\n\n moveAliasFuncLast() {\n var aliasFunc = _.find(this.target.functions, function(func) {\n return func.def.name === 'alias' ||\n func.def.name === 'aliasByNode' ||\n func.def.name === 'aliasByMetric';\n });\n\n if (aliasFunc) {\n this.target.functions = _.without(this.target.functions, aliasFunc);\n this.target.functions.push(aliasFunc);\n }\n }\n\n toggleQueryOptions() {\n this.showQueryOptions = !this.showQueryOptions;\n }\n\n onQueryOptionChange() {\n this.queryOptionsText = this.renderQueryOptionsText();\n this.onTargetBlur();\n }\n\n renderQueryOptionsText() {\n var optionsMap = {\n showDisabledItems: \"Show disabled items\"\n };\n var options = [];\n _.forOwn(this.target.options, (value, key) => {\n if (value) {\n if (value === true) {\n // Show only option name (if enabled) for boolean options\n options.push(optionsMap[key]);\n } else {\n // Show \"option = value\" for another options\n options.push(optionsMap[key] + \" = \" + value);\n }\n }\n });\n return \"Options: \" + options.join(', ');\n }\n\n /**\n * Switch query editor to specified mode.\n * Modes:\n * 0 - items\n * 1 - IT services\n * 2 - Text metrics\n */\n switchEditorMode(mode) {\n this.target.mode = mode;\n this.init();\n }\n\n /////////////////\n // IT Services //\n /////////////////\n\n /**\n * Update list of IT services\n */\n updateITServiceList() {\n this.zabbix.getITService().then((iteservices) => {\n this.itserviceList = [];\n this.itserviceList = this.itserviceList.concat(iteservices);\n });\n }\n\n /**\n * Call when IT service is selected.\n */\n selectITService() {\n if (!_.isEqual(this.oldTarget, this.target) && _.isEmpty(this.target.errors)) {\n this.oldTarget = angular.copy(this.target);\n this.panelCtrl.refresh();\n }\n }\n}\n\n// Set templateUrl as static property\nZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html';\n\n// Get list of metric names for bs-typeahead directive\nfunction getMetricNames(scope, metricList) {\n return _.uniq(_.map(scope.metric[metricList], 'name'));\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/datasource-zabbix/query.controller.js"],"names":["QueryCtrl","angular","_","utils","metricFunctions","migrations","ZabbixQueryController","$scope","$injector","$rootScope","$sce","templateSrv","zabbix","datasource","replaceTemplateVars","editorModes","value","text","mode","getGroupNames","bind","getMetricNames","getHostNames","getApplicationNames","getItemNames","$on","onVariableChange","onTargetBlur","init","target","migrate","scopeDefaults","metric","oldTarget","cloneDeep","queryOptionsText","renderQueryOptionsText","defaults","targetDefaults","group","filter","host","application","item","functions","options","showDisabledItems","map","func","createFuncInstance","def","params","downsampleFunctionList","name","initFilters","slaPropertyList","property","itserviceList","updateITServiceList","itemtype","Promise","all","suggestGroups","suggestHosts","suggestApps","suggestItems","metricList","metrics","uniq","forEach","variables","unshift","variable","getAllGroups","then","groupList","groups","groupFilter","getAllHosts","hostList","hosts","hostFilter","getAllApps","appList","apps","appFilter","getAllItems","itemList","items","str","isRegex","isTemplateVariable","newTarget","isEqual","targetChanged","isContainsVariables","some","field","parseTarget","panelCtrl","refresh","funcDef","newFunc","added","push","moveAliasFuncLast","length","without","aliasFunc","find","showQueryOptions","optionsMap","forOwn","key","join","getITService","iteservices","concat","isEmpty","errors","copy","templateUrl"],"mappings":"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","file":"query.controller.js","sourcesContent":["import {QueryCtrl} from 'app/plugins/sdk';\nimport angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport * as metricFunctions from './metricFunctions';\nimport * as migrations from './migrations';\n\nimport './add-metric-function.directive';\nimport './metric-function-editor.directive';\n\nimport './css/query-editor.css!';\n\nexport class ZabbixQueryController extends QueryCtrl {\n\n // ZabbixQueryCtrl constructor\n constructor($scope, $injector, $rootScope, $sce, templateSrv) {\n super($scope, $injector);\n this.zabbix = this.datasource.zabbix;\n\n // Use custom format for template variables\n this.replaceTemplateVars = this.datasource.replaceTemplateVars;\n this.templateSrv = templateSrv;\n\n this.editorModes = {\n 0: {value: 'num', text: 'Metrics', mode: 0},\n 1: {value: 'itservice', text: 'IT Services', mode: 1},\n 2: {value: 'text', text: 'Text', mode: 2}\n };\n\n // Map functions for bs-typeahead\n this.getGroupNames = _.bind(this.getMetricNames, this, 'groupList');\n this.getHostNames = _.bind(this.getMetricNames, this, 'hostList');\n this.getApplicationNames = _.bind(this.getMetricNames, this, 'appList');\n this.getItemNames = _.bind(this.getMetricNames, this, 'itemList');\n\n // Update metric suggestion when template variable was changed\n $rootScope.$on('template-variable-value-updated', () => this.onVariableChange());\n\n // Update metrics when item selected from dropdown\n $scope.$on('typeahead-updated', () => {\n this.onTargetBlur();\n });\n\n this.init = function() {\n var target = this.target;\n\n // Migrate old targets\n target = migrations.migrate(target);\n\n var scopeDefaults = {\n metric: {},\n oldTarget: _.cloneDeep(this.target),\n queryOptionsText: this.renderQueryOptionsText()\n };\n _.defaults(this, scopeDefaults);\n\n // Load default values\n var targetDefaults = {\n mode: 0,\n group: { filter: \"\" },\n host: { filter: \"\" },\n application: { filter: \"\" },\n item: { filter: \"\" },\n functions: [],\n options: {\n showDisabledItems: false\n }\n };\n _.defaults(target, targetDefaults);\n\n // Create function instances from saved JSON\n target.functions = _.map(target.functions, function(func) {\n return metricFunctions.createFuncInstance(func.def, func.params);\n });\n\n if (target.mode === 0 ||\n target.mode === 2) {\n\n this.downsampleFunctionList = [\n {name: \"avg\", value: \"avg\"},\n {name: \"min\", value: \"min\"},\n {name: \"max\", value: \"max\"}\n ];\n\n this.initFilters();\n }\n else if (target.mode === 1) {\n this.slaPropertyList = [\n {name: \"Status\", property: \"status\"},\n {name: \"SLA\", property: \"sla\"},\n {name: \"OK time\", property: \"okTime\"},\n {name: \"Problem time\", property: \"problemTime\"},\n {name: \"Down time\", property: \"downtimeTime\"}\n ];\n this.itserviceList = [{name: \"test\"}];\n this.updateITServiceList();\n }\n };\n\n this.init();\n }\n\n initFilters() {\n let itemtype = this.editorModes[this.target.mode].value;\n return Promise.all([\n this.suggestGroups(),\n this.suggestHosts(),\n this.suggestApps(),\n this.suggestItems(itemtype)\n ]);\n }\n\n // Get list of metric names for bs-typeahead directive\n getMetricNames(metricList) {\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 return metrics;\n }\n\n suggestGroups() {\n return this.zabbix.getAllGroups()\n .then(groups => {\n this.metric.groupList = groups;\n return groups;\n });\n }\n\n suggestHosts() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n return this.zabbix.getAllHosts(groupFilter)\n .then(hosts => {\n this.metric.hostList = hosts;\n return hosts;\n });\n }\n\n suggestApps() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n return this.zabbix.getAllApps(groupFilter, hostFilter)\n .then(apps => {\n this.metric.appList = apps;\n return apps;\n });\n }\n\n suggestItems(itemtype = 'num') {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n let appFilter = this.replaceTemplateVars(this.target.application.filter);\n let options = {\n itemtype: itemtype,\n showDisabledItems: this.target.options.showDisabledItems\n };\n\n return this.zabbix\n .getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => {\n this.metric.itemList = items;\n return items;\n });\n }\n\n isRegex(str) {\n return utils.isRegex(str);\n }\n\n isVariable(str) {\n return utils.isTemplateVariable(str, this.templateSrv.variables);\n }\n\n onTargetBlur() {\n var newTarget = _.cloneDeep(this.target);\n if (!_.isEqual(this.oldTarget, this.target)) {\n this.oldTarget = newTarget;\n this.targetChanged();\n }\n }\n\n onVariableChange() {\n if (this.isContainsVariables()) {\n this.targetChanged();\n }\n }\n\n /**\n * Check query for template variables\n */\n isContainsVariables() {\n return _.some(['group', 'host', 'application'], field => {\n if (this.target[field] && this.target[field].filter) {\n return utils.isTemplateVariable(this.target[field].filter, this.templateSrv.variables);\n } else {\n return false;\n }\n });\n }\n\n parseTarget() {\n // Parse target\n }\n\n // Validate target and set validation info\n validateTarget() {\n // validate\n }\n\n targetChanged() {\n this.initFilters();\n this.parseTarget();\n this.panelCtrl.refresh();\n }\n\n addFunction(funcDef) {\n var newFunc = metricFunctions.createFuncInstance(funcDef);\n newFunc.added = true;\n this.target.functions.push(newFunc);\n\n this.moveAliasFuncLast();\n\n if (newFunc.params.length && newFunc.added ||\n newFunc.def.params.length === 0) {\n this.targetChanged();\n }\n }\n\n removeFunction(func) {\n this.target.functions = _.without(this.target.functions, func);\n this.targetChanged();\n }\n\n moveAliasFuncLast() {\n var aliasFunc = _.find(this.target.functions, function(func) {\n return func.def.name === 'alias' ||\n func.def.name === 'aliasByNode' ||\n func.def.name === 'aliasByMetric';\n });\n\n if (aliasFunc) {\n this.target.functions = _.without(this.target.functions, aliasFunc);\n this.target.functions.push(aliasFunc);\n }\n }\n\n toggleQueryOptions() {\n this.showQueryOptions = !this.showQueryOptions;\n }\n\n onQueryOptionChange() {\n this.queryOptionsText = this.renderQueryOptionsText();\n this.onTargetBlur();\n }\n\n renderQueryOptionsText() {\n var optionsMap = {\n showDisabledItems: \"Show disabled items\"\n };\n var options = [];\n _.forOwn(this.target.options, (value, key) => {\n if (value) {\n if (value === true) {\n // Show only option name (if enabled) for boolean options\n options.push(optionsMap[key]);\n } else {\n // Show \"option = value\" for another options\n options.push(optionsMap[key] + \" = \" + value);\n }\n }\n });\n return \"Options: \" + options.join(', ');\n }\n\n /**\n * Switch query editor to specified mode.\n * Modes:\n * 0 - items\n * 1 - IT services\n * 2 - Text metrics\n */\n switchEditorMode(mode) {\n this.target.mode = mode;\n this.init();\n }\n\n /////////////////\n // IT Services //\n /////////////////\n\n /**\n * Update list of IT services\n */\n updateITServiceList() {\n this.zabbix.getITService().then((iteservices) => {\n this.itserviceList = [];\n this.itserviceList = this.itserviceList.concat(iteservices);\n });\n }\n\n /**\n * Call when IT service is selected.\n */\n selectITService() {\n if (!_.isEqual(this.oldTarget, this.target) && _.isEmpty(this.target.errors)) {\n this.oldTarget = angular.copy(this.target);\n this.panelCtrl.refresh();\n }\n }\n}\n\n// Set templateUrl as static property\nZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html';\n"]} \ No newline at end of file diff --git a/dist/test/datasource-zabbix/query.controller.js b/dist/test/datasource-zabbix/query.controller.js index 24542f5..e4715be 100644 --- a/dist/test/datasource-zabbix/query.controller.js +++ b/dist/test/datasource-zabbix/query.controller.js @@ -67,10 +67,10 @@ var ZabbixQueryController = exports.ZabbixQueryController = function (_QueryCtrl }; // Map functions for bs-typeahead - _this.getGroupNames = _lodash2.default.partial(getMetricNames, _this, 'groupList'); - _this.getHostNames = _lodash2.default.partial(getMetricNames, _this, 'hostList'); - _this.getApplicationNames = _lodash2.default.partial(getMetricNames, _this, 'appList'); - _this.getItemNames = _lodash2.default.partial(getMetricNames, _this, 'itemList'); + _this.getGroupNames = _lodash2.default.bind(_this.getMetricNames, _this, 'groupList'); + _this.getHostNames = _lodash2.default.bind(_this.getMetricNames, _this, 'hostList'); + _this.getApplicationNames = _lodash2.default.bind(_this.getMetricNames, _this, 'appList'); + _this.getItemNames = _lodash2.default.bind(_this.getMetricNames, _this, 'itemList'); // Update metric suggestion when template variable was changed $rootScope.$on('template-variable-value-updated', function () { @@ -136,6 +136,21 @@ var ZabbixQueryController = exports.ZabbixQueryController = function (_QueryCtrl var itemtype = this.editorModes[this.target.mode].value; return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps(), this.suggestItems(itemtype)]); } + + // Get list of metric names for bs-typeahead directive + + }, { + key: 'getMetricNames', + value: function getMetricNames(metricList) { + var metrics = _lodash2.default.uniq(_lodash2.default.map(this.metric[metricList], 'name')); + + // Add template variables + _lodash2.default.forEach(this.templateSrv.variables, function (variable) { + metrics.unshift('$' + variable.name); + }); + + return metrics; + } }, { key: 'suggestGroups', value: function suggestGroups() { @@ -371,8 +386,3 @@ var ZabbixQueryController = exports.ZabbixQueryController = function (_QueryCtrl ZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html'; - -// Get list of metric names for bs-typeahead directive -function getMetricNames(scope, metricList) { - return _lodash2.default.uniq(_lodash2.default.map(scope.metric[metricList], 'name')); -} diff --git a/src/datasource-zabbix/query.controller.js b/src/datasource-zabbix/query.controller.js index d857e4f..8d28384 100644 --- a/src/datasource-zabbix/query.controller.js +++ b/src/datasource-zabbix/query.controller.js @@ -28,10 +28,10 @@ export class ZabbixQueryController extends QueryCtrl { }; // Map functions for bs-typeahead - this.getGroupNames = _.partial(getMetricNames, this, 'groupList'); - this.getHostNames = _.partial(getMetricNames, this, 'hostList'); - this.getApplicationNames = _.partial(getMetricNames, this, 'appList'); - this.getItemNames = _.partial(getMetricNames, this, 'itemList'); + this.getGroupNames = _.bind(this.getMetricNames, this, 'groupList'); + this.getHostNames = _.bind(this.getMetricNames, this, 'hostList'); + this.getApplicationNames = _.bind(this.getMetricNames, this, 'appList'); + this.getItemNames = _.bind(this.getMetricNames, this, 'itemList'); // Update metric suggestion when template variable was changed $rootScope.$on('template-variable-value-updated', () => this.onVariableChange()); @@ -110,6 +110,18 @@ export class ZabbixQueryController extends QueryCtrl { ]); } + // Get list of metric names for bs-typeahead directive + getMetricNames(metricList) { + let metrics = _.uniq(_.map(this.metric[metricList], 'name')); + + // Add template variables + _.forEach(this.templateSrv.variables, variable => { + metrics.unshift('$' + variable.name); + }); + + return metrics; + } + suggestGroups() { return this.zabbix.getAllGroups() .then(groups => { @@ -302,8 +314,3 @@ export class ZabbixQueryController extends QueryCtrl { // Set templateUrl as static property ZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html'; - -// Get list of metric names for bs-typeahead directive -function getMetricNames(scope, metricList) { - return _.uniq(_.map(scope.metric[metricList], 'name')); -}