From eb239574885d5146ccf5605e7406335eaae2cf61 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 1 Feb 2017 19:02:32 +0300 Subject: [PATCH 01/10] Fix linter error (; missed). --- src/datasource-zabbix/dataProcessor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datasource-zabbix/dataProcessor.js b/src/datasource-zabbix/dataProcessor.js index 560ccd6..7551ae7 100644 --- a/src/datasource-zabbix/dataProcessor.js +++ b/src/datasource-zabbix/dataProcessor.js @@ -164,7 +164,7 @@ function setAliasByRegex(alias, timeseries) { function extractText(str, pattern) { var extractPattern = new RegExp(pattern); var extractedValue = extractPattern.exec(str); - extractedValue = extractedValue[0] + extractedValue = extractedValue[0]; return extractedValue; } From 873b57e71ac5e7c40e8d74f82d5d2c94ad5fa516 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 1 Feb 2017 19:12:09 +0300 Subject: [PATCH 02/10] Fix error for new empty panel, fixes #337 --- src/datasource-zabbix/datasource.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/datasource-zabbix/datasource.js b/src/datasource-zabbix/datasource.js index 806442b..55e3bf8 100644 --- a/src/datasource-zabbix/datasource.js +++ b/src/datasource-zabbix/datasource.js @@ -394,7 +394,9 @@ class ZabbixAPIDatasource { replaceTargetVariables(target, options) { let parts = ['group', 'host', 'application', 'item']; parts.forEach(p => { - target[p].filter = this.replaceTemplateVars(target[p].filter, options.scopedVars); + if (target[p] && target[p].filter) { + target[p].filter = this.replaceTemplateVars(target[p].filter, options.scopedVars); + } }); target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars); From f8d18c41f5382fe6872cec92c41fbb3ff0988a0a Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 1 Feb 2017 19:21:26 +0300 Subject: [PATCH 03/10] Fix checking query for variables. --- src/datasource-zabbix/query.controller.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/datasource-zabbix/query.controller.js b/src/datasource-zabbix/query.controller.js index 9fd49c3..d857e4f 100644 --- a/src/datasource-zabbix/query.controller.js +++ b/src/datasource-zabbix/query.controller.js @@ -181,7 +181,11 @@ export class ZabbixQueryController extends QueryCtrl { */ isContainsVariables() { return _.some(['group', 'host', 'application'], field => { - return utils.isTemplateVariable(this.panel.triggers[field].filter, this.templateSrv.variables); + if (this.target[field] && this.target[field].filter) { + return utils.isTemplateVariable(this.target[field].filter, this.templateSrv.variables); + } else { + return false; + } }); } From 658e436198ee65489967c072ccf10d51b2a984af Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 1 Feb 2017 19:57:32 +0300 Subject: [PATCH 04/10] Triggers panel: remove 'default' from datasources list (cause error), iss #340 --- src/panel-triggers/editor.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/panel-triggers/editor.js b/src/panel-triggers/editor.js index 97d2b85..d8f2736 100644 --- a/src/panel-triggers/editor.js +++ b/src/panel-triggers/editor.js @@ -61,13 +61,8 @@ class TriggerPanelEditorCtrl { }; _.defaults(this, scopeDefaults); - // Get zabbix data sources - var datasources = _.filter(this.datasourceSrv.getMetricSources(), datasource => { - return datasource.meta.id === 'alexanderzobnin-zabbix-datasource'; - }); - this.datasources = _.map(datasources, 'name'); - // Set default datasource + this.datasources = _.map(this.getZabbixDataSources(), 'name'); if (!this.panel.datasource) { this.panel.datasource = this.datasources[0]; } @@ -170,6 +165,13 @@ class TriggerPanelEditorCtrl { isVariable(str) { return utils.isTemplateVariable(str, this.templateSrv.variables); } + + getZabbixDataSources() { + let ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource'; + return _.filter(this.datasourceSrv.getMetricSources(), datasource => { + return datasource.meta.id === ZABBIX_DS_ID && datasource.value; + }); + } } // Get list of metric names for bs-typeahead directive From 0b3f53734124404d9868227bfbf7f456b8d63039 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 2 Feb 2017 11:33:54 +0300 Subject: [PATCH 05/10] Add dist/ directory to repo to correspond development guide. http://docs.grafana.org/plugins/development/ --- .gitattributes | 3 + .gitignore | 2 +- dist/README.md | 24 + dist/components/config.html | 1 + dist/components/config.js | 27 + dist/components/config.js.map | 1 + dist/dashboards/template_linux_server.json | 569 ++++++++++++++++ dist/dashboards/zabbix_server_dashboard.json | 633 ++++++++++++++++++ .../add-metric-function.directive.js | 116 ++++ .../add-metric-function.directive.js.map | 1 + dist/datasource-zabbix/css/query-editor.css | 7 + dist/datasource-zabbix/dataProcessor.js | 287 ++++++++ dist/datasource-zabbix/dataProcessor.js.map | 1 + dist/datasource-zabbix/datasource.js | 597 +++++++++++++++++ dist/datasource-zabbix/datasource.js.map | 1 + .../datasource-zabbix/img/zabbix_app_logo.svg | 107 +++ .../metric-function-editor.directive.js | 251 +++++++ .../metric-function-editor.directive.js.map | 1 + dist/datasource-zabbix/metricFunctions.js | 315 +++++++++ dist/datasource-zabbix/metricFunctions.js.map | 1 + dist/datasource-zabbix/migrations.js | 55 ++ dist/datasource-zabbix/migrations.js.map | 1 + dist/datasource-zabbix/module.js | 51 ++ dist/datasource-zabbix/module.js.map | 1 + .../partials/annotations.editor.html | 65 ++ dist/datasource-zabbix/partials/config.html | 60 ++ .../partials/query.editor.html | 170 +++++ .../partials/query.options.html | 88 +++ dist/datasource-zabbix/plugin.json | 19 + dist/datasource-zabbix/query.controller.js | 376 +++++++++++ .../datasource-zabbix/query.controller.js.map | 1 + dist/datasource-zabbix/responseHandler.js | 113 ++++ dist/datasource-zabbix/responseHandler.js.map | 1 + .../specs/datasource_specs.js | 230 +++++++ .../specs/modules/datemath.js | 111 +++ dist/datasource-zabbix/specs/test-main.js | 49 ++ dist/datasource-zabbix/utils.js | 169 +++++ dist/datasource-zabbix/utils.js.map | 1 + dist/datasource-zabbix/zabbix.js | 278 ++++++++ dist/datasource-zabbix/zabbix.js.map | 1 + dist/datasource-zabbix/zabbixAPI.service.js | 397 +++++++++++ .../zabbixAPI.service.js.map | 1 + .../zabbixAPICore.service.js | 150 +++++ .../zabbixAPICore.service.js.map | 1 + .../zabbixCachingProxy.service.js | 243 +++++++ .../zabbixCachingProxy.service.js.map | 1 + dist/img/screenshot-annotations.png | Bin 0 -> 177280 bytes dist/img/screenshot-dashboard01.png | Bin 0 -> 380288 bytes dist/img/screenshot-metric_editor.png | Bin 0 -> 40602 bytes dist/img/screenshot-showcase.png | Bin 0 -> 260846 bytes dist/img/screenshot-triggers.png | Bin 0 -> 171803 bytes dist/img/zabbix_app_logo.svg | 107 +++ dist/module.js | 16 + dist/module.js.map | 1 + dist/panel-triggers/ack-tooltip.directive.js | 126 ++++ .../ack-tooltip.directive.js.map | 1 + dist/panel-triggers/css/panel_triggers.css | 96 +++ .../panel-triggers/css/panel_triggers.css.map | 9 + dist/panel-triggers/editor.html | 256 +++++++ dist/panel-triggers/editor.js | 225 +++++++ dist/panel-triggers/editor.js.map | 1 + dist/panel-triggers/module.html | 124 ++++ dist/panel-triggers/module.js | 321 +++++++++ dist/panel-triggers/module.js.map | 1 + dist/panel-triggers/plugin.json | 12 + dist/plugin.json | 65 ++ dist/test/components/config.js | 13 + .../add-metric-function.directive.js | 116 ++++ dist/test/datasource-zabbix/dataProcessor.js | 330 +++++++++ dist/test/datasource-zabbix/datasource.js | 582 ++++++++++++++++ .../metric-function-editor.directive.js | 246 +++++++ .../test/datasource-zabbix/metricFunctions.js | 292 ++++++++ dist/test/datasource-zabbix/migrations.js | 48 ++ dist/test/datasource-zabbix/module.js | 36 + .../datasource-zabbix/query.controller.js | 378 +++++++++++ .../test/datasource-zabbix/responseHandler.js | 116 ++++ .../specs/datasource_specs.js | 317 +++++++++ .../specs/modules/datemath.js | 135 ++++ .../test/datasource-zabbix/specs/test-main.js | 66 ++ dist/test/datasource-zabbix/utils.js | 151 +++++ dist/test/datasource-zabbix/zabbix.js | 266 ++++++++ .../datasource-zabbix/zabbixAPI.service.js | 436 ++++++++++++ .../zabbixAPICore.service.js | 142 ++++ .../zabbixCachingProxy.service.js | 215 ++++++ dist/test/module.js | 10 + .../panel-triggers/ack-tooltip.directive.js | 122 ++++ dist/test/panel-triggers/editor.js | 225 +++++++ dist/test/panel-triggers/module.js | 302 +++++++++ 88 files changed, 11482 insertions(+), 1 deletion(-) create mode 100644 .gitattributes create mode 100644 dist/README.md create mode 100644 dist/components/config.html create mode 100644 dist/components/config.js create mode 100644 dist/components/config.js.map create mode 100644 dist/dashboards/template_linux_server.json create mode 100644 dist/dashboards/zabbix_server_dashboard.json create mode 100644 dist/datasource-zabbix/add-metric-function.directive.js create mode 100644 dist/datasource-zabbix/add-metric-function.directive.js.map create mode 100644 dist/datasource-zabbix/css/query-editor.css create mode 100644 dist/datasource-zabbix/dataProcessor.js create mode 100644 dist/datasource-zabbix/dataProcessor.js.map create mode 100644 dist/datasource-zabbix/datasource.js create mode 100644 dist/datasource-zabbix/datasource.js.map create mode 100644 dist/datasource-zabbix/img/zabbix_app_logo.svg create mode 100644 dist/datasource-zabbix/metric-function-editor.directive.js create mode 100644 dist/datasource-zabbix/metric-function-editor.directive.js.map create mode 100644 dist/datasource-zabbix/metricFunctions.js create mode 100644 dist/datasource-zabbix/metricFunctions.js.map create mode 100644 dist/datasource-zabbix/migrations.js create mode 100644 dist/datasource-zabbix/migrations.js.map create mode 100644 dist/datasource-zabbix/module.js create mode 100644 dist/datasource-zabbix/module.js.map create mode 100644 dist/datasource-zabbix/partials/annotations.editor.html create mode 100644 dist/datasource-zabbix/partials/config.html create mode 100644 dist/datasource-zabbix/partials/query.editor.html create mode 100644 dist/datasource-zabbix/partials/query.options.html create mode 100644 dist/datasource-zabbix/plugin.json create mode 100644 dist/datasource-zabbix/query.controller.js create mode 100644 dist/datasource-zabbix/query.controller.js.map create mode 100644 dist/datasource-zabbix/responseHandler.js create mode 100644 dist/datasource-zabbix/responseHandler.js.map create mode 100644 dist/datasource-zabbix/specs/datasource_specs.js create mode 100644 dist/datasource-zabbix/specs/modules/datemath.js create mode 100644 dist/datasource-zabbix/specs/test-main.js create mode 100644 dist/datasource-zabbix/utils.js create mode 100644 dist/datasource-zabbix/utils.js.map create mode 100644 dist/datasource-zabbix/zabbix.js create mode 100644 dist/datasource-zabbix/zabbix.js.map create mode 100644 dist/datasource-zabbix/zabbixAPI.service.js create mode 100644 dist/datasource-zabbix/zabbixAPI.service.js.map create mode 100644 dist/datasource-zabbix/zabbixAPICore.service.js create mode 100644 dist/datasource-zabbix/zabbixAPICore.service.js.map create mode 100644 dist/datasource-zabbix/zabbixCachingProxy.service.js create mode 100644 dist/datasource-zabbix/zabbixCachingProxy.service.js.map create mode 100644 dist/img/screenshot-annotations.png create mode 100644 dist/img/screenshot-dashboard01.png create mode 100644 dist/img/screenshot-metric_editor.png create mode 100644 dist/img/screenshot-showcase.png create mode 100644 dist/img/screenshot-triggers.png create mode 100644 dist/img/zabbix_app_logo.svg create mode 100644 dist/module.js create mode 100644 dist/module.js.map create mode 100644 dist/panel-triggers/ack-tooltip.directive.js create mode 100644 dist/panel-triggers/ack-tooltip.directive.js.map create mode 100644 dist/panel-triggers/css/panel_triggers.css create mode 100644 dist/panel-triggers/css/panel_triggers.css.map create mode 100644 dist/panel-triggers/editor.html create mode 100644 dist/panel-triggers/editor.js create mode 100644 dist/panel-triggers/editor.js.map create mode 100644 dist/panel-triggers/module.html create mode 100644 dist/panel-triggers/module.js create mode 100644 dist/panel-triggers/module.js.map create mode 100644 dist/panel-triggers/plugin.json create mode 100644 dist/plugin.json create mode 100644 dist/test/components/config.js create mode 100644 dist/test/datasource-zabbix/add-metric-function.directive.js create mode 100644 dist/test/datasource-zabbix/dataProcessor.js create mode 100644 dist/test/datasource-zabbix/datasource.js create mode 100644 dist/test/datasource-zabbix/metric-function-editor.directive.js create mode 100644 dist/test/datasource-zabbix/metricFunctions.js create mode 100644 dist/test/datasource-zabbix/migrations.js create mode 100644 dist/test/datasource-zabbix/module.js create mode 100644 dist/test/datasource-zabbix/query.controller.js create mode 100644 dist/test/datasource-zabbix/responseHandler.js create mode 100644 dist/test/datasource-zabbix/specs/datasource_specs.js create mode 100644 dist/test/datasource-zabbix/specs/modules/datemath.js create mode 100644 dist/test/datasource-zabbix/specs/test-main.js create mode 100644 dist/test/datasource-zabbix/utils.js create mode 100644 dist/test/datasource-zabbix/zabbix.js create mode 100644 dist/test/datasource-zabbix/zabbixAPI.service.js create mode 100644 dist/test/datasource-zabbix/zabbixAPICore.service.js create mode 100644 dist/test/datasource-zabbix/zabbixCachingProxy.service.js create mode 100644 dist/test/module.js create mode 100644 dist/test/panel-triggers/ack-tooltip.directive.js create mode 100644 dist/test/panel-triggers/editor.js create mode 100644 dist/test/panel-triggers/module.js diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7ad0b88 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# Don't diff files in dist/ +*.map binary +dist/** binary diff --git a/.gitignore b/.gitignore index 5593838..1a27ba2 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ awsconfig /tmp vendor/phantomjs/phantomjs -dist/ +# dist/ # locally required config files public/css/*.min.css diff --git a/dist/README.md b/dist/README.md new file mode 100644 index 0000000..57f6e97 --- /dev/null +++ b/dist/README.md @@ -0,0 +1,24 @@ +## Zabbix plugin for Grafana +Zabbix plugin allows to show different type of data from [Zabbix](http://www.zabbix.com/) +monitoring system. + +### Live Demo + +Check out the [live demo](http://play.grafana-zabbix.org/) with dashboard examples. + +### Features + +#### Flexible metric editor + * Regex-based metric filtering + * Client-side data processing functions + * Template variables support + +#### Templated dashboards support +Group, host, application or item names can be replaced with a template variable. This allows you to create generic dashboards that can quickly be changed to show stats for a specific cluster, server or application. + +#### Annotations support + * Display zabbix events on graphs + * Show acknowledges for problems + +#### Triggers panel +Panel for showing Zabbix triggers (like Last 20 issues) with some customizable features. diff --git a/dist/components/config.html b/dist/components/config.html new file mode 100644 index 0000000..4c4b34c --- /dev/null +++ b/dist/components/config.html @@ -0,0 +1 @@ +

Zabbix Plugin Config

diff --git a/dist/components/config.js b/dist/components/config.js new file mode 100644 index 0000000..e13e8eb --- /dev/null +++ b/dist/components/config.js @@ -0,0 +1,27 @@ +'use strict'; + +System.register([], function (_export, _context) { + "use strict"; + + var ZabbixAppConfigCtrl; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + return { + setters: [], + execute: function () { + _export('ZabbixAppConfigCtrl', ZabbixAppConfigCtrl = function ZabbixAppConfigCtrl() { + _classCallCheck(this, ZabbixAppConfigCtrl); + }); + + _export('ZabbixAppConfigCtrl', ZabbixAppConfigCtrl); + + ZabbixAppConfigCtrl.templateUrl = 'components/config.html'; + } + }; +}); +//# sourceMappingURL=config.js.map diff --git a/dist/components/config.js.map b/dist/components/config.js.map new file mode 100644 index 0000000..69b4032 --- /dev/null +++ b/dist/components/config.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/components/config.js"],"names":["ZabbixAppConfigCtrl","templateUrl"],"mappings":";;;;;;;;;;;;;;;;qCAAaA,mB,GACX,+BAAc;AAAA;AAAG,O;;;;AAEnBA,0BAAoBC,WAApB,GAAkC,wBAAlC","file":"config.js","sourcesContent":["export class ZabbixAppConfigCtrl {\n constructor() { }\n}\nZabbixAppConfigCtrl.templateUrl = 'components/config.html';\n"]} \ No newline at end of file diff --git a/dist/dashboards/template_linux_server.json b/dist/dashboards/template_linux_server.json new file mode 100644 index 0000000..3cb9afa --- /dev/null +++ b/dist/dashboards/template_linux_server.json @@ -0,0 +1,569 @@ +{ + "id": null, + "title": "Template Linux Server", + "originalTitle": "Template Linux Server", + "tags": [ + "zabbix", + "example" + ], + "style": "dark", + "timezone": "browser", + "editable": true, + "hideControls": false, + "sharedCrosshair": false, + "rows": [ + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "aliasColors": { + "CPU iowait time": "#B7DBAB", + "CPU system time": "#BF1B00", + "CPU user time": "#EAB839" + }, + "bars": false, + "datasource": null, + "editable": true, + "error": false, + "fill": 3, + "grid": { + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 1, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "application": { + "filter": "CPU" + }, + "functions": [], + "group": { + "filter": "$group" + }, + "host": { + "filter": "$host" + }, + "item": { + "filter": "/CPU/" + }, + "mode": 0, + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU", + "tooltip": { + "msResolution": false, + "shared": true, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "show": true + }, + "yaxes": [ + { + "format": "percent", + "logBase": 1, + "max": 100, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { + "Processor load (1 min average per core)": "#1F78C1" + }, + "bars": false, + "datasource": null, + "editable": true, + "error": false, + "fill": 1, + "grid": { + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "application": { + "filter": "CPU" + }, + "functions": [], + "group": { + "filter": "$group" + }, + "host": { + "filter": "$host" + }, + "item": { + "filter": "Processor load (15 min average per core)" + }, + "mode": 0, + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "System load", + "tooltip": { + "msResolution": false, + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "show": true + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "showTitle": true, + "title": "CPU" + }, + { + "collapse": false, + "editable": true, + "height": "250px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": null, + "editable": true, + "error": false, + "fill": 3, + "grid": { + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 3, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "minSpan": 4, + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": "netif", + "scopedVars": { + "netif": { + "text": "eth0", + "value": "eth0", + "selected": false + } + }, + "seriesOverrides": [ + { + "alias": "/Incoming/", + "transform": "negative-Y" + } + ], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "application": { + "filter": "" + }, + "functions": [], + "group": { + "filter": "$group" + }, + "host": { + "filter": "$host" + }, + "item": { + "filter": "/$netif/" + }, + "mode": 0, + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Network traffic on $netif", + "tooltip": { + "msResolution": false, + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "show": true + }, + "yaxes": [ + { + "format": "bps", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": null, + "editable": true, + "error": false, + "fill": 3, + "grid": { + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 4, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "minSpan": 4, + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "scopedVars": { + "netif": { + "text": "eth1", + "value": "eth1", + "selected": false + } + }, + "seriesOverrides": [ + { + "alias": "/Incoming/", + "transform": "negative-Y" + } + ], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "application": { + "filter": "" + }, + "functions": [], + "group": { + "filter": "$group" + }, + "host": { + "filter": "$host" + }, + "item": { + "filter": "/$netif/" + }, + "mode": 0, + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Network traffic on $netif", + "tooltip": { + "msResolution": false, + "shared": true, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "show": true + }, + "yaxes": [ + { + "format": "bps", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "repeatIteration": 1460635040618, + "repeatPanelId": 3 + } + ], + "showTitle": true, + "title": "Network" + } + ], + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": { + "now": true, + "refresh_intervals": [ + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "3h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "templating": { + "list": [ + { + "allFormat": "regex values", + "current": { + "text": "Frontend", + "value": "Frontend" + }, + "datasource": null, + "hide": 0, + "includeAll": false, + "label": "Group", + "multi": false, + "multiFormat": "glob", + "name": "group", + "options": [ + { + "text": "Backend", + "value": "Backend", + "selected": false + }, + { + "text": "Database servers", + "value": "Database servers", + "selected": false + }, + { + "text": "Frontend", + "value": "Frontend", + "selected": true + }, + { + "text": "Linux servers", + "value": "Linux servers", + "selected": false + }, + { + "text": "Network", + "value": "Network", + "selected": false + }, + { + "text": "Workstations", + "value": "Workstations", + "selected": false + }, + { + "text": "Zabbix servers", + "value": "Zabbix servers", + "selected": false + } + ], + "query": "*", + "refresh": 1, + "refresh_on_load": false, + "regex": "", + "type": "query" + }, + { + "allFormat": "glob", + "current": { + "text": "frontend01", + "value": "frontend01" + }, + "datasource": null, + "hide": 0, + "includeAll": false, + "label": "Host", + "multi": false, + "multiFormat": "glob", + "name": "host", + "options": [ + { + "text": "frontend01", + "value": "frontend01", + "selected": true + }, + { + "text": "frontend02", + "value": "frontend02", + "selected": false + } + ], + "query": "$group.*", + "refresh": 1, + "refresh_on_load": false, + "regex": "", + "type": "query" + }, + { + "allFormat": "regex values", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": null, + "hide": 0, + "hideLabel": false, + "includeAll": true, + "label": "Network interface", + "multi": true, + "multiFormat": "regex values", + "name": "netif", + "options": [ + { + "text": "All", + "value": "$__all", + "selected": true + }, + { + "text": "eth0", + "value": "eth0", + "selected": false + }, + { + "text": "eth1", + "value": "eth1", + "selected": false + } + ], + "query": "*.$host.Network interfaces.*", + "refresh": 1, + "refresh_on_load": false, + "regex": "/(?:Incoming|Outgoing) network traffic on (.*)/", + "type": "query" + } + ] + }, + "annotations": { + "list": [] + }, + "schemaVersion": 12, + "version": 8, + "links": [] +} diff --git a/dist/dashboards/zabbix_server_dashboard.json b/dist/dashboards/zabbix_server_dashboard.json new file mode 100644 index 0000000..b9a8cb0 --- /dev/null +++ b/dist/dashboards/zabbix_server_dashboard.json @@ -0,0 +1,633 @@ +{ + "id": null, + "title": "Zabbix Server Dashboard", + "originalTitle": "Zabbix Server Dashboard", + "tags": [ + "zabbix", + "example" + ], + "style": "dark", + "timezone": "browser", + "editable": true, + "hideControls": false, + "sharedCrosshair": false, + "rows": [ + { + "collapse": false, + "editable": true, + "height": "100px", + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": null, + "editable": true, + "error": false, + "format": "none", + "id": 3, + "interval": null, + "isNew": true, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "span": 4, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "targets": [ + { + "application": { + "filter": "General" + }, + "functions": [], + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "item": { + "filter": "Host name" + }, + "mode": 2, + "refId": "A" + } + ], + "thresholds": "", + "title": "Host name", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": null, + "decimals": 0, + "editable": true, + "error": false, + "format": "s", + "id": 4, + "interval": null, + "isNew": true, + "links": [], + "maxDataPoints": "", + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "span": 4, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "targets": [ + { + "application": { + "filter": "General" + }, + "functions": [], + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "item": { + "filter": "System uptime" + }, + "mode": 0, + "refId": "A" + } + ], + "thresholds": "", + "title": "Uptime", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": null, + "editable": true, + "error": false, + "format": "none", + "id": 5, + "interval": null, + "isNew": true, + "links": [], + "maxDataPoints": "", + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "span": 4, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "targets": [ + { + "application": { + "filter": "Zabbix server" + }, + "functions": [], + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "item": { + "filter": "/Required performance of Zabbix server/" + }, + "mode": 0, + "refId": "A" + } + ], + "thresholds": "", + "title": "Required performance, NVPS", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + } + ], + "title": "General" + }, + { + "collapse": false, + "editable": true, + "height": "300px", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": null, + "editable": true, + "error": false, + "fill": 1, + "grid": { + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 1, + "isNew": true, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/user/", + "color": "#1F78C1" + }, + { + "alias": "/system/", + "color": "#BF1B00" + }, + { + "alias": "/iowait/", + "color": "#E5AC0E" + } + ], + "span": 7, + "stack": true, + "steppedLine": false, + "targets": [ + { + "application": { + "filter": "CPU" + }, + "functions": [], + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "item": { + "filter": "/CPU (?!idle)/" + }, + "mode": 0, + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU", + "tooltip": { + "msResolution": false, + "shared": true, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "show": true + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "columns": [ + { + "text": "Current", + "value": "current" + }, + { + "text": "Avg", + "value": "avg" + } + ], + "editable": true, + "error": false, + "fontSize": "100%", + "id": 2, + "isNew": true, + "links": [], + "pageSize": null, + "scroll": true, + "showHeader": true, + "sort": { + "col": 2, + "desc": true + }, + "span": 5, + "styles": [ + { + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "date" + }, + { + "colorMode": "cell", + "colors": [ + "rgb(41, 170, 106)", + "rgba(239, 148, 21, 0.89)", + "rgba(239, 10, 10, 0.9)" + ], + "decimals": 1, + "pattern": "/.*/", + "thresholds": [ + "50", + "80" + ], + "type": "number", + "unit": "percent" + } + ], + "targets": [ + { + "application": { + "filter": "Zabbix server" + }, + "functions": [], + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "item": { + "filter": "/Zabbix busy/" + }, + "mode": 0, + "refId": "A" + } + ], + "title": "Zabbix processes", + "transform": "timeseries_aggregations", + "type": "table" + } + ], + "title": "Row" + }, + { + "title": "New row", + "height": "380", + "editable": true, + "collapse": false, + "panels": [ + { + "title": "Zabbix busy processes", + "error": false, + "span": 7.069277691711851, + "editable": true, + "type": "graph", + "isNew": true, + "id": 6, + "targets": [ + { + "refId": "A", + "mode": 0, + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "application": { + "filter": "Zabbix server" + }, + "item": { + "filter": "/Zabbix busy/" + }, + "functions": [] + } + ], + "datasource": null, + "renderer": "flot", + "yaxes": [ + { + "label": null, + "show": true, + "logBase": 1, + "min": null, + "max": null, + "format": "percent" + }, + { + "label": null, + "show": true, + "logBase": 1, + "min": null, + "max": null, + "format": "short" + } + ], + "xaxis": { + "show": true + }, + "grid": { + "threshold1": null, + "threshold2": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "lines": true, + "fill": 0, + "linewidth": 2, + "points": false, + "pointradius": 5, + "bars": false, + "stack": false, + "percentage": false, + "legend": { + "show": true, + "values": false, + "min": false, + "max": false, + "current": false, + "total": false, + "avg": false, + "hideEmpty": true, + "hideZero": true, + "alignAsTable": true, + "rightSide": true + }, + "nullPointMode": "connected", + "steppedLine": false, + "tooltip": { + "value_type": "cumulative", + "shared": true, + "msResolution": false + }, + "timeFrom": null, + "timeShift": null, + "aliasColors": {}, + "seriesOverrides": [], + "links": [] + }, + { + "title": "Zabbix Queue", + "error": false, + "span": 4.930722308288148, + "editable": true, + "type": "graph", + "isNew": true, + "id": 7, + "targets": [ + { + "refId": "A", + "mode": 0, + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "application": { + "filter": "Zabbix server" + }, + "item": { + "filter": "Zabbix queue" + }, + "functions": [] + }, + { + "refId": "B", + "mode": 0, + "group": { + "filter": "Zabbix servers" + }, + "host": { + "filter": "Zabbix server" + }, + "application": { + "filter": "Zabbix server" + }, + "item": { + "filter": "/Values processed/" + }, + "functions": [] + } + ], + "datasource": null, + "renderer": "flot", + "yaxes": [ + { + "label": null, + "show": true, + "logBase": 1, + "min": null, + "max": null, + "format": "short" + }, + { + "label": null, + "show": true, + "logBase": 1, + "min": null, + "max": null, + "format": "short" + } + ], + "xaxis": { + "show": true + }, + "grid": { + "threshold1": null, + "threshold2": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "lines": true, + "fill": 0, + "linewidth": 2, + "points": false, + "pointradius": 5, + "bars": false, + "stack": false, + "percentage": false, + "legend": { + "show": true, + "values": false, + "min": false, + "max": false, + "current": false, + "total": false, + "avg": false + }, + "nullPointMode": "connected", + "steppedLine": false, + "tooltip": { + "value_type": "cumulative", + "shared": true, + "msResolution": false + }, + "timeFrom": null, + "timeShift": null, + "aliasColors": {}, + "seriesOverrides": [], + "links": [] + } + ] + } + ], + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "templating": { + "list": [] + }, + "annotations": { + "list": [] + }, + "schemaVersion": 12, + "version": 6, + "links": [] +} diff --git a/dist/datasource-zabbix/add-metric-function.directive.js b/dist/datasource-zabbix/add-metric-function.directive.js new file mode 100644 index 0000000..04812b5 --- /dev/null +++ b/dist/datasource-zabbix/add-metric-function.directive.js @@ -0,0 +1,116 @@ +'use strict'; + +System.register(['angular', 'lodash', 'jquery', './metricFunctions'], function (_export, _context) { + "use strict"; + + var angular, _, $, metricFunctions; + + function getAllFunctionNames(categories) { + return _.reduce(categories, function (list, category) { + _.each(category, function (func) { + list.push(func.name); + }); + return list; + }, []); + } + + function createFunctionDropDownMenu(categories) { + return _.map(categories, function (list, category) { + return { + text: category, + submenu: _.map(list, function (value) { + return { + text: value.name, + click: "ctrl.addFunction('" + value.name + "')" + }; + }) + }; + }); + } + return { + setters: [function (_angular) { + angular = _angular.default; + }, function (_lodash) { + _ = _lodash.default; + }, function (_jquery) { + $ = _jquery.default; + }, function (_metricFunctions) { + metricFunctions = _metricFunctions; + }], + execute: function () { + + /** @ngInject */ + angular.module('grafana.directives').directive('addMetricFunction', function ($compile) { + var inputTemplate = ''; + + var buttonTemplate = '' + ''; + + return { + link: function link($scope, elem) { + var categories = metricFunctions.getCategories(); + var allFunctions = getAllFunctionNames(categories); + + $scope.functionMenu = createFunctionDropDownMenu(categories); + + var $input = $(inputTemplate); + var $button = $(buttonTemplate); + $input.appendTo(elem); + $button.appendTo(elem); + + $input.attr('data-provide', 'typeahead'); + $input.typeahead({ + source: allFunctions, + minLength: 1, + items: 10, + updater: function updater(value) { + var funcDef = metricFunctions.getFuncDef(value); + if (!funcDef) { + // try find close match + value = value.toLowerCase(); + funcDef = _.find(allFunctions, function (funcName) { + return funcName.toLowerCase().indexOf(value) === 0; + }); + + if (!funcDef) { + return; + } + } + + $scope.$apply(function () { + $scope.addFunction(funcDef); + }); + + $input.trigger('blur'); + return ''; + } + }); + + $button.click(function () { + $button.hide(); + $input.show(); + $input.focus(); + }); + + $input.keyup(function () { + elem.toggleClass('open', $input.val() === ''); + }); + + $input.blur(function () { + // clicking the function dropdown menu wont + // work if you remove class at once + setTimeout(function () { + $input.val(''); + $input.hide(); + $button.show(); + elem.removeClass('open'); + }, 200); + }); + + $compile(elem.contents())($scope); + } + }; + }); + } + }; +}); +//# sourceMappingURL=add-metric-function.directive.js.map diff --git a/dist/datasource-zabbix/add-metric-function.directive.js.map b/dist/datasource-zabbix/add-metric-function.directive.js.map new file mode 100644 index 0000000..24912c0 --- /dev/null +++ b/dist/datasource-zabbix/add-metric-function.directive.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/add-metric-function.directive.js"],"names":["getAllFunctionNames","categories","_","reduce","list","category","each","func","push","name","createFunctionDropDownMenu","map","text","submenu","value","click","angular","$","metricFunctions","module","directive","$compile","inputTemplate","buttonTemplate","link","$scope","elem","getCategories","allFunctions","functionMenu","$input","$button","appendTo","attr","typeahead","source","minLength","items","updater","funcDef","getFuncDef","toLowerCase","find","funcName","indexOf","$apply","addFunction","trigger","hide","show","focus","keyup","toggleClass","val","blur","setTimeout","removeClass","contents"],"mappings":"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","file":"add-metric-function.directive.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport * as metricFunctions from './metricFunctions';\n\n/** @ngInject */\nangular\n .module('grafana.directives')\n .directive('addMetricFunction', function($compile) {\n var inputTemplate = '';\n\n var buttonTemplate = '' +\n '';\n\n return {\n link: function($scope, elem) {\n var categories = metricFunctions.getCategories();\n var allFunctions = getAllFunctionNames(categories);\n\n $scope.functionMenu = createFunctionDropDownMenu(categories);\n\n var $input = $(inputTemplate);\n var $button = $(buttonTemplate);\n $input.appendTo(elem);\n $button.appendTo(elem);\n\n $input.attr('data-provide', 'typeahead');\n $input.typeahead({\n source: allFunctions,\n minLength: 1,\n items: 10,\n updater: function (value) {\n var funcDef = metricFunctions.getFuncDef(value);\n if (!funcDef) {\n // try find close match\n value = value.toLowerCase();\n funcDef = _.find(allFunctions, function(funcName) {\n return funcName.toLowerCase().indexOf(value) === 0;\n });\n\n if (!funcDef) { return; }\n }\n\n $scope.$apply(function() {\n $scope.addFunction(funcDef);\n });\n\n $input.trigger('blur');\n return '';\n }\n });\n\n $button.click(function() {\n $button.hide();\n $input.show();\n $input.focus();\n });\n\n $input.keyup(function() {\n elem.toggleClass('open', $input.val() === '');\n });\n\n $input.blur(function() {\n // clicking the function dropdown menu wont\n // work if you remove class at once\n setTimeout(function() {\n $input.val('');\n $input.hide();\n $button.show();\n elem.removeClass('open');\n }, 200);\n });\n\n $compile(elem.contents())($scope);\n }\n };\n });\n\nfunction getAllFunctionNames(categories) {\n return _.reduce(categories, function(list, category) {\n _.each(category, function(func) {\n list.push(func.name);\n });\n return list;\n }, []);\n}\n\nfunction createFunctionDropDownMenu(categories) {\n return _.map(categories, function(list, category) {\n return {\n text: category,\n submenu: _.map(list, function(value) {\n return {\n text: value.name,\n click: \"ctrl.addFunction('\" + value.name + \"')\",\n };\n })\n };\n });\n}\n\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/css/query-editor.css b/dist/datasource-zabbix/css/query-editor.css new file mode 100644 index 0000000..3edd27d --- /dev/null +++ b/dist/datasource-zabbix/css/query-editor.css @@ -0,0 +1,7 @@ +.zbx-regex { + color: #CCA300; +} + +.zbx-variable { + color: #33B5E5; +} diff --git a/dist/datasource-zabbix/dataProcessor.js b/dist/datasource-zabbix/dataProcessor.js new file mode 100644 index 0000000..12312de --- /dev/null +++ b/dist/datasource-zabbix/dataProcessor.js @@ -0,0 +1,287 @@ +'use strict'; + +System.register(['lodash', './utils'], function (_export, _context) { + "use strict"; + + var _, utils, metricFunctions, aggregationFunctions; + + /** + * Downsample datapoints series + */ + function downsampleSeries(datapoints, time_to, ms_interval, func) { + var downsampledSeries = []; + var timeWindow = { + from: time_to * 1000 - ms_interval, + to: time_to * 1000 + }; + + var points_sum = 0; + var points_num = 0; + var value_avg = 0; + var frame = []; + + for (var i = datapoints.length - 1; i >= 0; i -= 1) { + if (timeWindow.from < datapoints[i][1] && datapoints[i][1] <= timeWindow.to) { + points_sum += datapoints[i][0]; + points_num++; + frame.push(datapoints[i][0]); + } else { + value_avg = points_num ? points_sum / points_num : 0; + + if (func === "max") { + downsampledSeries.push([_.max(frame), timeWindow.to]); + } else if (func === "min") { + downsampledSeries.push([_.min(frame), timeWindow.to]); + } + + // avg by default + else { + downsampledSeries.push([value_avg, timeWindow.to]); + } + + // Shift time window + timeWindow.to = timeWindow.from; + timeWindow.from -= ms_interval; + + points_sum = 0; + points_num = 0; + frame = []; + + // Process point again + i++; + } + } + return downsampledSeries.reverse(); + } + + /** + * Group points by given time interval + * datapoints: [[, ], ...] + */ + function groupBy(interval, groupByCallback, datapoints) { + var ms_interval = utils.parseInterval(interval); + + // Calculate frame timestamps + var frames = _.groupBy(datapoints, function (point) { + // Calculate time for group of points + return Math.floor(point[1] / ms_interval) * ms_interval; + }); + + // frame: { '': [[, ], ...] } + // return [{ '': }, { '': }, ...] + var grouped = _.mapValues(frames, function (frame) { + var points = _.map(frame, function (point) { + return point[0]; + }); + return groupByCallback(points); + }); + + // Convert points to Grafana format + return sortByTime(_.map(grouped, function (value, timestamp) { + return [Number(value), Number(timestamp)]; + })); + }function sumSeries(timeseries) { + + // Calculate new points for interpolation + var new_timestamps = _.uniq(_.map(_.flatten(timeseries, true), function (point) { + return point[1]; + })); + new_timestamps = _.sortBy(new_timestamps); + + var interpolated_timeseries = _.map(timeseries, function (series) { + var timestamps = _.map(series, function (point) { + return point[1]; + }); + var new_points = _.map(_.difference(new_timestamps, timestamps), function (timestamp) { + return [null, timestamp]; + }); + var new_series = series.concat(new_points); + return sortByTime(new_series); + }); + + _.each(interpolated_timeseries, interpolateSeries); + + var new_timeseries = []; + var sum; + for (var i = new_timestamps.length - 1; i >= 0; i--) { + sum = 0; + for (var j = interpolated_timeseries.length - 1; j >= 0; j--) { + sum += interpolated_timeseries[j][i][0]; + } + new_timeseries.push([sum, new_timestamps[i]]); + } + + return sortByTime(new_timeseries); + }function limit(order, n, orderByFunc, timeseries) { + var orderByCallback = aggregationFunctions[orderByFunc]; + var sortByIteratee = function sortByIteratee(ts) { + var values = _.map(ts.datapoints, function (point) { + return point[0]; + }); + return orderByCallback(values); + }; + var sortedTimeseries = _.sortBy(timeseries, sortByIteratee); + if (order === 'bottom') { + return sortedTimeseries.slice(0, n); + } else { + return sortedTimeseries.slice(-n); + } + }function AVERAGE(values) { + var sum = 0; + _.each(values, function (value) { + sum += value; + }); + return sum / values.length; + }function MIN(values) { + return _.min(values); + }function MAX(values) { + return _.max(values); + }function MEDIAN(values) { + var sorted = _.sortBy(values); + return sorted[Math.floor(sorted.length / 2)]; + }function setAlias(alias, timeseries) { + timeseries.target = alias; + return timeseries; + }function setAliasByRegex(alias, timeseries) { + timeseries.target = extractText(timeseries.target, alias); + return timeseries; + }function extractText(str, pattern) { + var extractPattern = new RegExp(pattern); + var extractedValue = extractPattern.exec(str); + extractedValue = extractedValue[0]; + return extractedValue; + }function scale(factor, datapoints) { + return _.map(datapoints, function (point) { + return [point[0] * factor, point[1]]; + }); + }function delta(datapoints) { + var newSeries = []; + var deltaValue = void 0; + for (var i = 1; i < datapoints.length; i++) { + deltaValue = datapoints[i][0] - datapoints[i - 1][0]; + newSeries.push([deltaValue, datapoints[i][1]]); + } + return newSeries; + }function groupByWrapper(interval, groupFunc, datapoints) { + var groupByCallback = aggregationFunctions[groupFunc]; + return groupBy(interval, groupByCallback, datapoints); + }function aggregateByWrapper(interval, aggregateFunc, datapoints) { + // Flatten all points in frame and then just use groupBy() + var flattenedPoints = _.flatten(datapoints, true); + var groupByCallback = aggregationFunctions[aggregateFunc]; + return groupBy(interval, groupByCallback, flattenedPoints); + }function aggregateWrapper(groupByCallback, interval, datapoints) { + var flattenedPoints = _.flatten(datapoints, true); + return groupBy(interval, groupByCallback, flattenedPoints); + }function sortByTime(series) { + return _.sortBy(series, function (point) { + return point[1]; + }); + } + + /** + * Interpolate series with gaps + */ + function interpolateSeries(series) { + var left, right; + + // Interpolate series + for (var i = series.length - 1; i >= 0; i--) { + if (!series[i][0]) { + left = findNearestLeft(series, series[i]); + right = findNearestRight(series, series[i]); + if (!left) { + left = right; + } + if (!right) { + right = left; + } + series[i][0] = linearInterpolation(series[i][1], left, right); + } + } + return series; + }function linearInterpolation(timestamp, left, right) { + if (left[1] === right[1]) { + return (left[0] + right[0]) / 2; + } else { + return left[0] + (right[0] - left[0]) / (right[1] - left[1]) * (timestamp - left[1]); + } + }function findNearestRight(series, point) { + var point_index = _.indexOf(series, point); + var nearestRight; + for (var i = point_index; i < series.length; i++) { + if (series[i][0] !== null) { + return series[i]; + } + } + return nearestRight; + }function findNearestLeft(series, point) { + var point_index = _.indexOf(series, point); + var nearestLeft; + for (var i = point_index; i > 0; i--) { + if (series[i][0] !== null) { + return series[i]; + } + } + return nearestLeft; + }function timeShift(interval, range) { + var shift = utils.parseTimeShiftInterval(interval) / 1000; + return range.map(function (time) { + return time - shift; + }); + }function unShiftTimeSeries(interval, datapoints) { + var unshift = utils.parseTimeShiftInterval(interval); + return datapoints.map(function (dp) { + return [dp[0], dp[1] + unshift]; + }); + }return { + setters: [function (_lodash) { + _ = _lodash.default; + }, function (_utils) { + utils = _utils; + }], + execute: function () { + metricFunctions = { + groupBy: groupByWrapper, + scale: scale, + delta: delta, + aggregateBy: aggregateByWrapper, + average: _.partial(aggregateWrapper, AVERAGE), + min: _.partial(aggregateWrapper, MIN), + max: _.partial(aggregateWrapper, MAX), + median: _.partial(aggregateWrapper, MEDIAN), + sumSeries: sumSeries, + top: _.partial(limit, 'top'), + bottom: _.partial(limit, 'bottom'), + timeShift: timeShift, + setAlias: setAlias, + setAliasByRegex: setAliasByRegex + }; + aggregationFunctions = { + avg: AVERAGE, + min: MIN, + max: MAX, + median: MEDIAN + }; + + _export('default', { + downsampleSeries: downsampleSeries, + groupBy: groupBy, + AVERAGE: AVERAGE, + MIN: MIN, + MAX: MAX, + MEDIAN: MEDIAN, + unShiftTimeSeries: unShiftTimeSeries, + + get aggregationFunctions() { + return aggregationFunctions; + }, + + get metricFunctions() { + return metricFunctions; + } + }); + } + }; +}); +//# sourceMappingURL=dataProcessor.js.map diff --git a/dist/datasource-zabbix/dataProcessor.js.map b/dist/datasource-zabbix/dataProcessor.js.map new file mode 100644 index 0000000..7c84bff --- /dev/null +++ b/dist/datasource-zabbix/dataProcessor.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/dataProcessor.js"],"names":["downsampleSeries","datapoints","time_to","ms_interval","func","downsampledSeries","timeWindow","from","to","points_sum","points_num","value_avg","frame","i","length","push","_","max","min","reverse","groupBy","interval","groupByCallback","utils","parseInterval","frames","point","Math","floor","grouped","mapValues","points","map","sortByTime","value","timestamp","Number","sumSeries","timeseries","new_timestamps","uniq","flatten","sortBy","interpolated_timeseries","series","timestamps","new_points","difference","new_series","concat","each","interpolateSeries","new_timeseries","sum","j","limit","order","n","orderByFunc","orderByCallback","aggregationFunctions","sortByIteratee","ts","values","sortedTimeseries","slice","AVERAGE","MIN","MAX","MEDIAN","sorted","setAlias","alias","target","setAliasByRegex","extractText","str","pattern","extractPattern","RegExp","extractedValue","exec","scale","factor","delta","newSeries","deltaValue","groupByWrapper","groupFunc","aggregateByWrapper","aggregateFunc","flattenedPoints","aggregateWrapper","left","right","findNearestLeft","findNearestRight","linearInterpolation","point_index","indexOf","nearestRight","nearestLeft","timeShift","range","shift","parseTimeShiftInterval","time","unShiftTimeSeries","unshift","dp","metricFunctions","aggregateBy","average","partial","median","top","bottom","avg"],"mappings":";;;;;;;AAGA;;;AAGA,WAASA,gBAAT,CAA0BC,UAA1B,EAAsCC,OAAtC,EAA+CC,WAA/C,EAA4DC,IAA5D,EAAkE;AAChE,QAAIC,oBAAoB,EAAxB;AACA,QAAIC,aAAa;AACfC,YAAML,UAAU,IAAV,GAAiBC,WADR;AAEfK,UAAIN,UAAU;AAFC,KAAjB;;AAKA,QAAIO,aAAa,CAAjB;AACA,QAAIC,aAAa,CAAjB;AACA,QAAIC,YAAY,CAAhB;AACA,QAAIC,QAAQ,EAAZ;;AAEA,SAAK,IAAIC,IAAIZ,WAAWa,MAAX,GAAoB,CAAjC,EAAoCD,KAAK,CAAzC,EAA4CA,KAAK,CAAjD,EAAoD;AAClD,UAAIP,WAAWC,IAAX,GAAkBN,WAAWY,CAAX,EAAc,CAAd,CAAlB,IAAsCZ,WAAWY,CAAX,EAAc,CAAd,KAAoBP,WAAWE,EAAzE,EAA6E;AAC3EC,sBAAcR,WAAWY,CAAX,EAAc,CAAd,CAAd;AACAH;AACAE,cAAMG,IAAN,CAAWd,WAAWY,CAAX,EAAc,CAAd,CAAX;AACD,OAJD,MAKK;AACHF,oBAAYD,aAAaD,aAAaC,UAA1B,GAAuC,CAAnD;;AAEA,YAAIN,SAAS,KAAb,EAAoB;AAClBC,4BAAkBU,IAAlB,CAAuB,CAACC,EAAEC,GAAF,CAAML,KAAN,CAAD,EAAeN,WAAWE,EAA1B,CAAvB;AACD,SAFD,MAGK,IAAIJ,SAAS,KAAb,EAAoB;AACvBC,4BAAkBU,IAAlB,CAAuB,CAACC,EAAEE,GAAF,CAAMN,KAAN,CAAD,EAAeN,WAAWE,EAA1B,CAAvB;AACD;;AAED;AAJK,aAKA;AACHH,8BAAkBU,IAAlB,CAAuB,CAACJ,SAAD,EAAYL,WAAWE,EAAvB,CAAvB;AACD;;AAED;AACAF,mBAAWE,EAAX,GAAgBF,WAAWC,IAA3B;AACAD,mBAAWC,IAAX,IAAmBJ,WAAnB;;AAEAM,qBAAa,CAAb;AACAC,qBAAa,CAAb;AACAE,gBAAQ,EAAR;;AAEA;AACAC;AACD;AACF;AACD,WAAOR,kBAAkBc,OAAlB,EAAP;AACD;;AAED;;;;AAIA,WAASC,OAAT,CAAiBC,QAAjB,EAA2BC,eAA3B,EAA4CrB,UAA5C,EAAwD;AACtD,QAAIE,cAAcoB,MAAMC,aAAN,CAAoBH,QAApB,CAAlB;;AAEA;AACA,QAAII,SAAST,EAAEI,OAAF,CAAUnB,UAAV,EAAsB,UAASyB,KAAT,EAAgB;AACjD;AACA,aAAOC,KAAKC,KAAL,CAAWF,MAAM,CAAN,IAAWvB,WAAtB,IAAqCA,WAA5C;AACD,KAHY,CAAb;;AAKA;AACA;AACA,QAAI0B,UAAUb,EAAEc,SAAF,CAAYL,MAAZ,EAAoB,UAASb,KAAT,EAAgB;AAChD,UAAImB,SAASf,EAAEgB,GAAF,CAAMpB,KAAN,EAAa,UAASc,KAAT,EAAgB;AACxC,eAAOA,MAAM,CAAN,CAAP;AACD,OAFY,CAAb;AAGA,aAAOJ,gBAAgBS,MAAhB,CAAP;AACD,KALa,CAAd;;AAOA;AACA,WAAOE,WAAWjB,EAAEgB,GAAF,CAAMH,OAAN,EAAe,UAASK,KAAT,EAAgBC,SAAhB,EAA2B;AAC1D,aAAO,CAACC,OAAOF,KAAP,CAAD,EAAgBE,OAAOD,SAAP,CAAhB,CAAP;AACD,KAFiB,CAAX,CAAP;AAGD,GAED,SAASE,SAAT,CAAmBC,UAAnB,EAA+B;;AAE7B;AACA,QAAIC,iBAAiBvB,EAAEwB,IAAF,CAAOxB,EAAEgB,GAAF,CAAMhB,EAAEyB,OAAF,CAAUH,UAAV,EAAsB,IAAtB,CAAN,EAAmC,UAASZ,KAAT,EAAgB;AAC7E,aAAOA,MAAM,CAAN,CAAP;AACD,KAF2B,CAAP,CAArB;AAGAa,qBAAiBvB,EAAE0B,MAAF,CAASH,cAAT,CAAjB;;AAEA,QAAII,0BAA0B3B,EAAEgB,GAAF,CAAMM,UAAN,EAAkB,UAASM,MAAT,EAAiB;AAC/D,UAAIC,aAAa7B,EAAEgB,GAAF,CAAMY,MAAN,EAAc,UAASlB,KAAT,EAAgB;AAC7C,eAAOA,MAAM,CAAN,CAAP;AACD,OAFgB,CAAjB;AAGA,UAAIoB,aAAa9B,EAAEgB,GAAF,CAAMhB,EAAE+B,UAAF,CAAaR,cAAb,EAA6BM,UAA7B,CAAN,EAAgD,UAASV,SAAT,EAAoB;AACnF,eAAO,CAAC,IAAD,EAAOA,SAAP,CAAP;AACD,OAFgB,CAAjB;AAGA,UAAIa,aAAaJ,OAAOK,MAAP,CAAcH,UAAd,CAAjB;AACA,aAAOb,WAAWe,UAAX,CAAP;AACD,KAT6B,CAA9B;;AAWAhC,MAAEkC,IAAF,CAAOP,uBAAP,EAAgCQ,iBAAhC;;AAEA,QAAIC,iBAAiB,EAArB;AACA,QAAIC,GAAJ;AACA,SAAK,IAAIxC,IAAI0B,eAAezB,MAAf,GAAwB,CAArC,EAAwCD,KAAK,CAA7C,EAAgDA,GAAhD,EAAqD;AACnDwC,YAAM,CAAN;AACA,WAAK,IAAIC,IAAIX,wBAAwB7B,MAAxB,GAAiC,CAA9C,EAAiDwC,KAAK,CAAtD,EAAyDA,GAAzD,EAA8D;AAC5DD,eAAOV,wBAAwBW,CAAxB,EAA2BzC,CAA3B,EAA8B,CAA9B,CAAP;AACD;AACDuC,qBAAerC,IAAf,CAAoB,CAACsC,GAAD,EAAMd,eAAe1B,CAAf,CAAN,CAApB;AACD;;AAED,WAAOoB,WAAWmB,cAAX,CAAP;AACD,GAED,SAASG,KAAT,CAAeC,KAAf,EAAsBC,CAAtB,EAAyBC,WAAzB,EAAsCpB,UAAtC,EAAkD;AAChD,QAAIqB,kBAAkBC,qBAAqBF,WAArB,CAAtB;AACA,QAAIG,iBAAiB,SAAjBA,cAAiB,CAACC,EAAD,EAAQ;AAC3B,UAAIC,SAAS/C,EAAEgB,GAAF,CAAM8B,GAAG7D,UAAT,EAAqB,UAACyB,KAAD,EAAW;AAC3C,eAAOA,MAAM,CAAN,CAAP;AACD,OAFY,CAAb;AAGA,aAAOiC,gBAAgBI,MAAhB,CAAP;AACD,KALD;AAMA,QAAIC,mBAAmBhD,EAAE0B,MAAF,CAASJ,UAAT,EAAqBuB,cAArB,CAAvB;AACA,QAAIL,UAAU,QAAd,EAAwB;AACtB,aAAOQ,iBAAiBC,KAAjB,CAAuB,CAAvB,EAA0BR,CAA1B,CAAP;AACD,KAFD,MAEO;AACL,aAAOO,iBAAiBC,KAAjB,CAAuB,CAACR,CAAxB,CAAP;AACD;AACF,GAED,SAASS,OAAT,CAAiBH,MAAjB,EAAyB;AACvB,QAAIV,MAAM,CAAV;AACArC,MAAEkC,IAAF,CAAOa,MAAP,EAAe,UAAS7B,KAAT,EAAgB;AAC7BmB,aAAOnB,KAAP;AACD,KAFD;AAGA,WAAOmB,MAAMU,OAAOjD,MAApB;AACD,GAED,SAASqD,GAAT,CAAaJ,MAAb,EAAqB;AACnB,WAAO/C,EAAEE,GAAF,CAAM6C,MAAN,CAAP;AACD,GAED,SAASK,GAAT,CAAaL,MAAb,EAAqB;AACnB,WAAO/C,EAAEC,GAAF,CAAM8C,MAAN,CAAP;AACD,GAED,SAASM,MAAT,CAAgBN,MAAhB,EAAwB;AACtB,QAAIO,SAAStD,EAAE0B,MAAF,CAASqB,MAAT,CAAb;AACA,WAAOO,OAAO3C,KAAKC,KAAL,CAAW0C,OAAOxD,MAAP,GAAgB,CAA3B,CAAP,CAAP;AACD,GAED,SAASyD,QAAT,CAAkBC,KAAlB,EAAyBlC,UAAzB,EAAqC;AACnCA,eAAWmC,MAAX,GAAoBD,KAApB;AACA,WAAOlC,UAAP;AACD,GAED,SAASoC,eAAT,CAAyBF,KAAzB,EAAgClC,UAAhC,EAA4C;AAC1CA,eAAWmC,MAAX,GAAoBE,YAAYrC,WAAWmC,MAAvB,EAA+BD,KAA/B,CAApB;AACA,WAAOlC,UAAP;AACD,GAED,SAASqC,WAAT,CAAqBC,GAArB,EAA0BC,OAA1B,EAAmC;AACjC,QAAIC,iBAAiB,IAAIC,MAAJ,CAAWF,OAAX,CAArB;AACA,QAAIG,iBAAiBF,eAAeG,IAAf,CAAoBL,GAApB,CAArB;AACAI,qBAAiBA,eAAe,CAAf,CAAjB;AACA,WAAOA,cAAP;AACD,GAED,SAASE,KAAT,CAAeC,MAAf,EAAuBlF,UAAvB,EAAmC;AACjC,WAAOe,EAAEgB,GAAF,CAAM/B,UAAN,EAAkB,iBAAS;AAChC,aAAO,CACLyB,MAAM,CAAN,IAAWyD,MADN,EAELzD,MAAM,CAAN,CAFK,CAAP;AAID,KALM,CAAP;AAMD,GAED,SAAS0D,KAAT,CAAenF,UAAf,EAA2B;AACzB,QAAIoF,YAAY,EAAhB;AACA,QAAIC,mBAAJ;AACA,SAAK,IAAIzE,IAAI,CAAb,EAAgBA,IAAIZ,WAAWa,MAA/B,EAAuCD,GAAvC,EAA4C;AAC1CyE,mBAAarF,WAAWY,CAAX,EAAc,CAAd,IAAmBZ,WAAWY,IAAI,CAAf,EAAkB,CAAlB,CAAhC;AACAwE,gBAAUtE,IAAV,CAAe,CAACuE,UAAD,EAAarF,WAAWY,CAAX,EAAc,CAAd,CAAb,CAAf;AACD;AACD,WAAOwE,SAAP;AACD,GAED,SAASE,cAAT,CAAwBlE,QAAxB,EAAkCmE,SAAlC,EAA6CvF,UAA7C,EAAyD;AACvD,QAAIqB,kBAAkBsC,qBAAqB4B,SAArB,CAAtB;AACA,WAAOpE,QAAQC,QAAR,EAAkBC,eAAlB,EAAmCrB,UAAnC,CAAP;AACD,GAED,SAASwF,kBAAT,CAA4BpE,QAA5B,EAAsCqE,aAAtC,EAAqDzF,UAArD,EAAiE;AAC/D;AACA,QAAI0F,kBAAkB3E,EAAEyB,OAAF,CAAUxC,UAAV,EAAsB,IAAtB,CAAtB;AACA,QAAIqB,kBAAkBsC,qBAAqB8B,aAArB,CAAtB;AACA,WAAOtE,QAAQC,QAAR,EAAkBC,eAAlB,EAAmCqE,eAAnC,CAAP;AACD,GAED,SAASC,gBAAT,CAA0BtE,eAA1B,EAA2CD,QAA3C,EAAqDpB,UAArD,EAAiE;AAC/D,QAAI0F,kBAAkB3E,EAAEyB,OAAF,CAAUxC,UAAV,EAAsB,IAAtB,CAAtB;AACA,WAAOmB,QAAQC,QAAR,EAAkBC,eAAlB,EAAmCqE,eAAnC,CAAP;AACD,GAED,SAAS1D,UAAT,CAAoBW,MAApB,EAA4B;AAC1B,WAAO5B,EAAE0B,MAAF,CAASE,MAAT,EAAiB,UAASlB,KAAT,EAAgB;AACtC,aAAOA,MAAM,CAAN,CAAP;AACD,KAFM,CAAP;AAGD;;AAED;;;AAGA,WAASyB,iBAAT,CAA2BP,MAA3B,EAAmC;AACjC,QAAIiD,IAAJ,EAAUC,KAAV;;AAEA;AACA,SAAK,IAAIjF,IAAI+B,OAAO9B,MAAP,GAAgB,CAA7B,EAAgCD,KAAK,CAArC,EAAwCA,GAAxC,EAA6C;AAC3C,UAAI,CAAC+B,OAAO/B,CAAP,EAAU,CAAV,CAAL,EAAmB;AACjBgF,eAAOE,gBAAgBnD,MAAhB,EAAwBA,OAAO/B,CAAP,CAAxB,CAAP;AACAiF,gBAAQE,iBAAiBpD,MAAjB,EAAyBA,OAAO/B,CAAP,CAAzB,CAAR;AACA,YAAI,CAACgF,IAAL,EAAW;AACTA,iBAAOC,KAAP;AACD;AACD,YAAI,CAACA,KAAL,EAAY;AACVA,kBAAQD,IAAR;AACD;AACDjD,eAAO/B,CAAP,EAAU,CAAV,IAAeoF,oBAAoBrD,OAAO/B,CAAP,EAAU,CAAV,CAApB,EAAkCgF,IAAlC,EAAwCC,KAAxC,CAAf;AACD;AACF;AACD,WAAOlD,MAAP;AACD,GAED,SAASqD,mBAAT,CAA6B9D,SAA7B,EAAwC0D,IAAxC,EAA8CC,KAA9C,EAAqD;AACnD,QAAID,KAAK,CAAL,MAAYC,MAAM,CAAN,CAAhB,EAA0B;AACxB,aAAO,CAACD,KAAK,CAAL,IAAUC,MAAM,CAAN,CAAX,IAAuB,CAA9B;AACD,KAFD,MAEO;AACL,aAAQD,KAAK,CAAL,IAAU,CAACC,MAAM,CAAN,IAAWD,KAAK,CAAL,CAAZ,KAAwBC,MAAM,CAAN,IAAWD,KAAK,CAAL,CAAnC,KAA+C1D,YAAY0D,KAAK,CAAL,CAA3D,CAAlB;AACD;AACF,GAED,SAASG,gBAAT,CAA0BpD,MAA1B,EAAkClB,KAAlC,EAAyC;AACvC,QAAIwE,cAAclF,EAAEmF,OAAF,CAAUvD,MAAV,EAAkBlB,KAAlB,CAAlB;AACA,QAAI0E,YAAJ;AACA,SAAK,IAAIvF,IAAIqF,WAAb,EAA0BrF,IAAI+B,OAAO9B,MAArC,EAA6CD,GAA7C,EAAkD;AAChD,UAAI+B,OAAO/B,CAAP,EAAU,CAAV,MAAiB,IAArB,EAA2B;AACzB,eAAO+B,OAAO/B,CAAP,CAAP;AACD;AACF;AACD,WAAOuF,YAAP;AACD,GAED,SAASL,eAAT,CAAyBnD,MAAzB,EAAiClB,KAAjC,EAAwC;AACtC,QAAIwE,cAAclF,EAAEmF,OAAF,CAAUvD,MAAV,EAAkBlB,KAAlB,CAAlB;AACA,QAAI2E,WAAJ;AACA,SAAK,IAAIxF,IAAIqF,WAAb,EAA0BrF,IAAI,CAA9B,EAAiCA,GAAjC,EAAsC;AACpC,UAAI+B,OAAO/B,CAAP,EAAU,CAAV,MAAiB,IAArB,EAA2B;AACzB,eAAO+B,OAAO/B,CAAP,CAAP;AACD;AACF;AACD,WAAOwF,WAAP;AACD,GAED,SAASC,SAAT,CAAmBjF,QAAnB,EAA6BkF,KAA7B,EAAoC;AAClC,QAAIC,QAAQjF,MAAMkF,sBAAN,CAA6BpF,QAA7B,IAAyC,IAArD;AACA,WAAOkF,MAAMvE,GAAN,CAAU,gBAAQ;AACvB,aAAO0E,OAAOF,KAAd;AACD,KAFM,CAAP;AAGD,GAED,SAASG,iBAAT,CAA2BtF,QAA3B,EAAqCpB,UAArC,EAAiD;AAC/C,QAAI2G,UAAUrF,MAAMkF,sBAAN,CAA6BpF,QAA7B,CAAd;AACA,WAAOpB,WAAW+B,GAAX,CAAe,cAAM;AAC1B,aAAO,CACL6E,GAAG,CAAH,CADK,EAELA,GAAG,CAAH,IAAQD,OAFH,CAAP;AAID,KALM,CAAP;AAMD,G;;AAxRM5F,O;;AACKO,W;;;AAyRRuF,qB,GAAkB;AACpB1F,iBAASmE,cADW;AAEpBL,eAAOA,KAFa;AAGpBE,eAAOA,KAHa;AAIpB2B,qBAAatB,kBAJO;AAKpBuB,iBAAShG,EAAEiG,OAAF,CAAUrB,gBAAV,EAA4B1B,OAA5B,CALW;AAMpBhD,aAAKF,EAAEiG,OAAF,CAAUrB,gBAAV,EAA4BzB,GAA5B,CANe;AAOpBlD,aAAKD,EAAEiG,OAAF,CAAUrB,gBAAV,EAA4BxB,GAA5B,CAPe;AAQpB8C,gBAAQlG,EAAEiG,OAAF,CAAUrB,gBAAV,EAA4BvB,MAA5B,CARY;AASpBhC,mBAAWA,SATS;AAUpB8E,aAAKnG,EAAEiG,OAAF,CAAU1D,KAAV,EAAiB,KAAjB,CAVe;AAWpB6D,gBAAQpG,EAAEiG,OAAF,CAAU1D,KAAV,EAAiB,QAAjB,CAXY;AAYpB+C,mBAAWA,SAZS;AAapB/B,kBAAUA,QAbU;AAcpBG,yBAAiBA;AAdG,O;AAiBlBd,0B,GAAuB;AACzByD,aAAKnD,OADoB;AAEzBhD,aAAKiD,GAFoB;AAGzBlD,aAAKmD,GAHoB;AAIzB8C,gBAAQ7C;AAJiB,O;;yBAOZ;AACbrE,0BAAkBA,gBADL;AAEboB,iBAASA,OAFI;AAGb8C,iBAASA,OAHI;AAIbC,aAAKA,GAJQ;AAKbC,aAAKA,GALQ;AAMbC,gBAAQA,MANK;AAObsC,2BAAmBA,iBAPN;;AASb,YAAI/C,oBAAJ,GAA2B;AACzB,iBAAOA,oBAAP;AACD,SAXY;;AAab,YAAIkD,eAAJ,GAAsB;AACpB,iBAAOA,eAAP;AACD;AAfY,O","file":"dataProcessor.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from './utils';\n\n/**\n * Downsample datapoints series\n */\nfunction downsampleSeries(datapoints, time_to, ms_interval, func) {\n var downsampledSeries = [];\n var timeWindow = {\n from: time_to * 1000 - ms_interval,\n to: time_to * 1000\n };\n\n var points_sum = 0;\n var points_num = 0;\n var value_avg = 0;\n var frame = [];\n\n for (var i = datapoints.length - 1; i >= 0; i -= 1) {\n if (timeWindow.from < datapoints[i][1] && datapoints[i][1] <= timeWindow.to) {\n points_sum += datapoints[i][0];\n points_num++;\n frame.push(datapoints[i][0]);\n }\n else {\n value_avg = points_num ? points_sum / points_num : 0;\n\n if (func === \"max\") {\n downsampledSeries.push([_.max(frame), timeWindow.to]);\n }\n else if (func === \"min\") {\n downsampledSeries.push([_.min(frame), timeWindow.to]);\n }\n\n // avg by default\n else {\n downsampledSeries.push([value_avg, timeWindow.to]);\n }\n\n // Shift time window\n timeWindow.to = timeWindow.from;\n timeWindow.from -= ms_interval;\n\n points_sum = 0;\n points_num = 0;\n frame = [];\n\n // Process point again\n i++;\n }\n }\n return downsampledSeries.reverse();\n}\n\n/**\n * Group points by given time interval\n * datapoints: [[, ], ...]\n */\nfunction groupBy(interval, groupByCallback, datapoints) {\n var ms_interval = utils.parseInterval(interval);\n\n // Calculate frame timestamps\n var frames = _.groupBy(datapoints, function(point) {\n // Calculate time for group of points\n return Math.floor(point[1] / ms_interval) * ms_interval;\n });\n\n // frame: { '': [[, ], ...] }\n // return [{ '': }, { '': }, ...]\n var grouped = _.mapValues(frames, function(frame) {\n var points = _.map(frame, function(point) {\n return point[0];\n });\n return groupByCallback(points);\n });\n\n // Convert points to Grafana format\n return sortByTime(_.map(grouped, function(value, timestamp) {\n return [Number(value), Number(timestamp)];\n }));\n}\n\nfunction sumSeries(timeseries) {\n\n // Calculate new points for interpolation\n var new_timestamps = _.uniq(_.map(_.flatten(timeseries, true), function(point) {\n return point[1];\n }));\n new_timestamps = _.sortBy(new_timestamps);\n\n var interpolated_timeseries = _.map(timeseries, function(series) {\n var timestamps = _.map(series, function(point) {\n return point[1];\n });\n var new_points = _.map(_.difference(new_timestamps, timestamps), function(timestamp) {\n return [null, timestamp];\n });\n var new_series = series.concat(new_points);\n return sortByTime(new_series);\n });\n\n _.each(interpolated_timeseries, interpolateSeries);\n\n var new_timeseries = [];\n var sum;\n for (var i = new_timestamps.length - 1; i >= 0; i--) {\n sum = 0;\n for (var j = interpolated_timeseries.length - 1; j >= 0; j--) {\n sum += interpolated_timeseries[j][i][0];\n }\n new_timeseries.push([sum, new_timestamps[i]]);\n }\n\n return sortByTime(new_timeseries);\n}\n\nfunction limit(order, n, orderByFunc, timeseries) {\n let orderByCallback = aggregationFunctions[orderByFunc];\n let sortByIteratee = (ts) => {\n let values = _.map(ts.datapoints, (point) => {\n return point[0];\n });\n return orderByCallback(values);\n };\n let sortedTimeseries = _.sortBy(timeseries, sortByIteratee);\n if (order === 'bottom') {\n return sortedTimeseries.slice(0, n);\n } else {\n return sortedTimeseries.slice(-n);\n }\n}\n\nfunction AVERAGE(values) {\n var sum = 0;\n _.each(values, function(value) {\n sum += value;\n });\n return sum / values.length;\n}\n\nfunction MIN(values) {\n return _.min(values);\n}\n\nfunction MAX(values) {\n return _.max(values);\n}\n\nfunction MEDIAN(values) {\n var sorted = _.sortBy(values);\n return sorted[Math.floor(sorted.length / 2)];\n}\n\nfunction setAlias(alias, timeseries) {\n timeseries.target = alias;\n return timeseries;\n}\n\nfunction setAliasByRegex(alias, timeseries) {\n timeseries.target = extractText(timeseries.target, alias);\n return timeseries;\n}\n\nfunction extractText(str, pattern) {\n var extractPattern = new RegExp(pattern);\n var extractedValue = extractPattern.exec(str);\n extractedValue = extractedValue[0];\n return extractedValue;\n}\n\nfunction scale(factor, datapoints) {\n return _.map(datapoints, point => {\n return [\n point[0] * factor,\n point[1]\n ];\n });\n}\n\nfunction delta(datapoints) {\n let newSeries = [];\n let deltaValue;\n for (var i = 1; i < datapoints.length; i++) {\n deltaValue = datapoints[i][0] - datapoints[i - 1][0];\n newSeries.push([deltaValue, datapoints[i][1]]);\n }\n return newSeries;\n}\n\nfunction groupByWrapper(interval, groupFunc, datapoints) {\n var groupByCallback = aggregationFunctions[groupFunc];\n return groupBy(interval, groupByCallback, datapoints);\n}\n\nfunction aggregateByWrapper(interval, aggregateFunc, datapoints) {\n // Flatten all points in frame and then just use groupBy()\n var flattenedPoints = _.flatten(datapoints, true);\n var groupByCallback = aggregationFunctions[aggregateFunc];\n return groupBy(interval, groupByCallback, flattenedPoints);\n}\n\nfunction aggregateWrapper(groupByCallback, interval, datapoints) {\n var flattenedPoints = _.flatten(datapoints, true);\n return groupBy(interval, groupByCallback, flattenedPoints);\n}\n\nfunction sortByTime(series) {\n return _.sortBy(series, function(point) {\n return point[1];\n });\n}\n\n/**\n * Interpolate series with gaps\n */\nfunction interpolateSeries(series) {\n var left, right;\n\n // Interpolate series\n for (var i = series.length - 1; i >= 0; i--) {\n if (!series[i][0]) {\n left = findNearestLeft(series, series[i]);\n right = findNearestRight(series, series[i]);\n if (!left) {\n left = right;\n }\n if (!right) {\n right = left;\n }\n series[i][0] = linearInterpolation(series[i][1], left, right);\n }\n }\n return series;\n}\n\nfunction linearInterpolation(timestamp, left, right) {\n if (left[1] === right[1]) {\n return (left[0] + right[0]) / 2;\n } else {\n return (left[0] + (right[0] - left[0]) / (right[1] - left[1]) * (timestamp - left[1]));\n }\n}\n\nfunction findNearestRight(series, point) {\n var point_index = _.indexOf(series, point);\n var nearestRight;\n for (var i = point_index; i < series.length; i++) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return nearestRight;\n}\n\nfunction findNearestLeft(series, point) {\n var point_index = _.indexOf(series, point);\n var nearestLeft;\n for (var i = point_index; i > 0; i--) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return nearestLeft;\n}\n\nfunction timeShift(interval, range) {\n let shift = utils.parseTimeShiftInterval(interval) / 1000;\n return range.map(time => {\n return time - shift;\n });\n}\n\nfunction unShiftTimeSeries(interval, datapoints) {\n let unshift = utils.parseTimeShiftInterval(interval);\n return datapoints.map(dp => {\n return [\n dp[0],\n dp[1] + unshift\n ];\n });\n}\n\nlet metricFunctions = {\n groupBy: groupByWrapper,\n scale: scale,\n delta: delta,\n aggregateBy: aggregateByWrapper,\n average: _.partial(aggregateWrapper, AVERAGE),\n min: _.partial(aggregateWrapper, MIN),\n max: _.partial(aggregateWrapper, MAX),\n median: _.partial(aggregateWrapper, MEDIAN),\n sumSeries: sumSeries,\n top: _.partial(limit, 'top'),\n bottom: _.partial(limit, 'bottom'),\n timeShift: timeShift,\n setAlias: setAlias,\n setAliasByRegex: setAliasByRegex\n};\n\nlet aggregationFunctions = {\n avg: AVERAGE,\n min: MIN,\n max: MAX,\n median: MEDIAN\n};\n\nexport default {\n downsampleSeries: downsampleSeries,\n groupBy: groupBy,\n AVERAGE: AVERAGE,\n MIN: MIN,\n MAX: MAX,\n MEDIAN: MEDIAN,\n unShiftTimeSeries: unShiftTimeSeries,\n\n get aggregationFunctions() {\n return aggregationFunctions;\n },\n\n get metricFunctions() {\n return metricFunctions;\n }\n};\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/datasource.js b/dist/datasource-zabbix/datasource.js new file mode 100644 index 0000000..8c9c645 --- /dev/null +++ b/dist/datasource-zabbix/datasource.js @@ -0,0 +1,597 @@ +'use strict'; + +System.register(['lodash', 'app/core/utils/datemath', './utils', './migrations', './metricFunctions', './dataProcessor', './responseHandler', './zabbix.js', './zabbixAPICore.service.js'], function (_export, _context) { + "use strict"; + + var _, dateMath, utils, migrations, metricFunctions, dataProcessor, responseHandler, ZabbixAPIError, _slicedToArray, _createClass, ZabbixAPIDatasource; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function bindFunctionDefs(functionDefs, category) { + var aggregationFunctions = _.map(metricFunctions.getCategories()[category], 'name'); + var aggFuncDefs = _.filter(functionDefs, function (func) { + return _.includes(aggregationFunctions, func.def.name); + }); + + return _.map(aggFuncDefs, function (func) { + var funcInstance = metricFunctions.createFuncInstance(func.def, func.params); + return funcInstance.bindFunction(dataProcessor.metricFunctions); + }); + } + + function downsampleSeries(timeseries_data, options) { + return _.map(timeseries_data, function (timeseries) { + if (timeseries.datapoints.length > options.maxDataPoints) { + timeseries.datapoints = dataProcessor.groupBy(options.interval, dataProcessor.AVERAGE, timeseries.datapoints); + } + return timeseries; + }); + } + + function formatMetric(metricObj) { + return { + text: metricObj.name, + expandable: false + }; + } + + /** + * Custom formatter for template variables. + * Default Grafana "regex" formatter returns + * value1|value2 + * This formatter returns + * (value1|value2) + * This format needed for using in complex regex with + * template variables, for example + * /CPU $cpu_item.*time/ where $cpu_item is system,user,iowait + */ + function zabbixTemplateFormat(value) { + if (typeof value === 'string') { + return utils.escapeRegex(value); + } + + var escapedValues = _.map(value, utils.escapeRegex); + return '(' + escapedValues.join('|') + ')'; + } + + /** + * If template variables are used in request, replace it using regex format + * and wrap with '/' for proper multi-value work. Example: + * $variable selected as a, b, c + * We use filter $variable + * $variable -> a|b|c -> /a|b|c/ + * /$variable/ -> /a|b|c/ -> /a|b|c/ + */ + function replaceTemplateVars(templateSrv, target, scopedVars) { + var replacedTarget = templateSrv.replace(target, scopedVars, zabbixTemplateFormat); + if (target !== replacedTarget && !utils.isRegex(replacedTarget)) { + replacedTarget = '/^' + replacedTarget + '$/'; + } + return replacedTarget; + } + + function extractText(str, pattern, useCaptureGroups) { + var extractPattern = new RegExp(pattern); + var extractedValue = extractPattern.exec(str); + if (extractedValue) { + if (useCaptureGroups) { + extractedValue = extractedValue[1]; + } else { + extractedValue = extractedValue[0]; + } + } + return extractedValue; + } + + // Apply function one by one: + // sequence([a(), b(), c()]) = c(b(a())); + function sequence(funcsArray) { + return function (result) { + for (var i = 0; i < funcsArray.length; i++) { + result = funcsArray[i].call(this, result); + } + return result; + }; + } + + return { + setters: [function (_lodash) { + _ = _lodash.default; + }, function (_appCoreUtilsDatemath) { + dateMath = _appCoreUtilsDatemath; + }, function (_utils) { + utils = _utils; + }, function (_migrations) { + migrations = _migrations; + }, function (_metricFunctions) { + metricFunctions = _metricFunctions; + }, function (_dataProcessor) { + dataProcessor = _dataProcessor.default; + }, function (_responseHandler) { + responseHandler = _responseHandler.default; + }, function (_zabbixJs) {}, function (_zabbixAPICoreServiceJs) { + ZabbixAPIError = _zabbixAPICoreServiceJs.ZabbixAPIError; + }], + execute: function () { + _slicedToArray = function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i); + } else { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + }; + }(); + + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + _export('ZabbixAPIDatasource', ZabbixAPIDatasource = function () { + + /** @ngInject */ + function ZabbixAPIDatasource(instanceSettings, templateSrv, alertSrv, Zabbix) { + _classCallCheck(this, ZabbixAPIDatasource); + + this.templateSrv = templateSrv; + this.alertSrv = alertSrv; + + // General data source settings + this.name = instanceSettings.name; + this.url = instanceSettings.url; + this.basicAuth = instanceSettings.basicAuth; + this.withCredentials = instanceSettings.withCredentials; + + // Zabbix API credentials + this.username = instanceSettings.jsonData.username; + this.password = instanceSettings.jsonData.password; + + // Use trends instead history since specified time + this.trends = instanceSettings.jsonData.trends; + this.trendsFrom = instanceSettings.jsonData.trendsFrom || '7d'; + + // Set cache update interval + var ttl = instanceSettings.jsonData.cacheTTL || '1h'; + this.cacheTTL = utils.parseInterval(ttl); + + this.zabbix = new Zabbix(this.url, this.username, this.password, this.basicAuth, this.withCredentials, this.cacheTTL); + + // Use custom format for template variables + this.replaceTemplateVars = _.partial(replaceTemplateVars, this.templateSrv); + } + + //////////////////////// + // Datasource methods // + //////////////////////// + + /** + * Query panel data. Calls for each panel in dashboard. + * @param {Object} options Contains time range, targets and other info. + * @return {Object} Grafana metrics object with timeseries data for each target. + */ + + + _createClass(ZabbixAPIDatasource, [{ + key: 'query', + value: function query(options) { + var _this = this; + + var timeFrom = Math.ceil(dateMath.parse(options.range.from) / 1000); + var timeTo = Math.ceil(dateMath.parse(options.range.to) / 1000); + + var useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000); + var useTrends = timeFrom <= useTrendsFrom && this.trends; + + // Create request for each target + var promises = _.map(options.targets, function (target) { + // Prevent changes of original object + target = _.cloneDeep(target); + _this.replaceTargetVariables(target, options); + + // Apply Time-related functions (timeShift(), etc) + var timeFunctions = bindFunctionDefs(target.functions, 'Time'); + if (timeFunctions.length) { + var _sequence = sequence(timeFunctions)([timeFrom, timeTo]), + _sequence2 = _slicedToArray(_sequence, 2), + time_from = _sequence2[0], + time_to = _sequence2[1]; + + timeFrom = time_from; + timeTo = time_to; + } + + // Metrics or Text query mode + if (target.mode !== 1) { + // Migrate old targets + target = migrations.migrate(target); + + // Don't request undefined and hidden targets + if (target.hide || !target.group || !target.host || !target.item) { + return []; + } + + if (!target.mode || target.mode === 0) { + return _this.queryNumericData(target, timeFrom, timeTo, useTrends); + } else if (target.mode === 2) { + return _this.queryTextData(target, timeFrom, timeTo); + } + } + + // IT services mode + else if (target.mode === 1) { + // Don't show undefined and hidden targets + if (target.hide || !target.itservice || !target.slaProperty) { + return []; + } + + return _this.zabbix.getSLA(target.itservice.serviceid, timeFrom, timeTo).then(function (slaObject) { + return responseHandler.handleSLAResponse(target.itservice, target.slaProperty, slaObject); + }); + } + }); + + // Data for panel (all targets) + return Promise.all(_.flatten(promises)).then(_.flatten).then(function (timeseries_data) { + return downsampleSeries(timeseries_data, options); + }).then(function (data) { + return { data: data }; + }); + } + }, { + key: 'queryNumericData', + value: function queryNumericData(target, timeFrom, timeTo, useTrends) { + var _this2 = this; + + var options = { + itemtype: 'num' + }; + return this.zabbix.getItemsFromTarget(target, options).then(function (items) { + var getHistoryPromise = void 0; + + if (useTrends) { + (function () { + var valueType = _this2.getTrendValueType(target); + getHistoryPromise = _this2.zabbix.getTrend(items, timeFrom, timeTo).then(function (history) { + return responseHandler.handleTrends(history, items, valueType); + }); + })(); + } else { + // Use history + getHistoryPromise = _this2.zabbix.getHistory(items, timeFrom, timeTo).then(function (history) { + return responseHandler.handleHistory(history, items); + }); + } + + return getHistoryPromise.then(function (timeseries_data) { + return _this2.applyDataProcessingFunctions(timeseries_data, target); + }); + }); + } + }, { + key: 'getTrendValueType', + value: function getTrendValueType(target) { + // Find trendValue() function and get specified trend value + var trendFunctions = _.map(metricFunctions.getCategories()['Trends'], 'name'); + var trendValueFunc = _.find(target.functions, function (func) { + return _.includes(trendFunctions, func.def.name); + }); + return trendValueFunc ? trendValueFunc.params[0] : "avg"; + } + }, { + key: 'applyDataProcessingFunctions', + value: function applyDataProcessingFunctions(timeseries_data, target) { + var transformFunctions = bindFunctionDefs(target.functions, 'Transform'); + var aggregationFunctions = bindFunctionDefs(target.functions, 'Aggregate'); + var filterFunctions = bindFunctionDefs(target.functions, 'Filter'); + var aliasFunctions = bindFunctionDefs(target.functions, 'Alias'); + + // Apply transformation functions + timeseries_data = _.map(timeseries_data, function (timeseries) { + timeseries.datapoints = sequence(transformFunctions)(timeseries.datapoints); + return timeseries; + }); + + // Apply filter functions + if (filterFunctions.length) { + timeseries_data = sequence(filterFunctions)(timeseries_data); + } + + // Apply aggregations + if (aggregationFunctions.length) { + (function () { + var dp = _.map(timeseries_data, 'datapoints'); + dp = sequence(aggregationFunctions)(dp); + + var aggFuncNames = _.map(metricFunctions.getCategories()['Aggregate'], 'name'); + var lastAgg = _.findLast(target.functions, function (func) { + return _.includes(aggFuncNames, func.def.name); + }); + + timeseries_data = [{ + target: lastAgg.text, + datapoints: dp + }]; + })(); + } + + // Apply alias functions + _.forEach(timeseries_data, sequence(aliasFunctions)); + + // Apply Time-related functions (timeShift(), etc) + // Find timeShift() function and get specified trend value + this.applyTimeShiftFunction(timeseries_data, target); + + return timeseries_data; + } + }, { + key: 'applyTimeShiftFunction', + value: function applyTimeShiftFunction(timeseries_data, target) { + // Find timeShift() function and get specified interval + var timeShiftFunc = _.find(target.functions, function (func) { + return func.def.name === 'timeShift'; + }); + if (timeShiftFunc) { + (function () { + var shift = timeShiftFunc.params[0]; + _.forEach(timeseries_data, function (series) { + series.datapoints = dataProcessor.unShiftTimeSeries(shift, series.datapoints); + }); + })(); + } + } + }, { + key: 'queryTextData', + value: function queryTextData(target, timeFrom, timeTo) { + var _this3 = this; + + var options = { + itemtype: 'text' + }; + return this.zabbix.getItemsFromTarget(target, options).then(function (items) { + if (items.length) { + return _this3.zabbix.getHistory(items, timeFrom, timeTo).then(function (history) { + return responseHandler.convertHistory(history, items, false, function (point) { + var value = point.value; + + // Regex-based extractor + if (target.textFilter) { + value = extractText(point.value, target.textFilter, target.useCaptureGroups); + } + + return [value, point.clock * 1000]; + }); + }); + } else { + return Promise.resolve([]); + } + }); + } + }, { + key: 'testDatasource', + value: function testDatasource() { + var _this4 = this; + + var zabbixVersion = void 0; + return this.zabbix.getVersion().then(function (version) { + zabbixVersion = version; + return _this4.zabbix.login(); + }).then(function () { + return { + status: "success", + title: "Success", + message: "Zabbix API version: " + zabbixVersion + }; + }).catch(function (error) { + if (error instanceof ZabbixAPIError) { + return { + status: "error", + title: error.message, + message: error.data + }; + } else { + return { + status: "error", + title: "Connection failed", + message: "Could not connect to given url" + }; + } + }); + } + }, { + key: 'metricFindQuery', + value: function metricFindQuery(query) { + var _this5 = this; + + var result = void 0; + var parts = []; + + // Split query. Query structure: group.host.app.item + _.each(query.split('.'), function (part) { + part = _this5.replaceTemplateVars(part, {}); + + // Replace wildcard to regex + if (part === '*') { + part = '/.*/'; + } + parts.push(part); + }); + var template = _.zipObject(['group', 'host', 'app', 'item'], parts); + + // Get items + if (parts.length === 4) { + // Search for all items, even it's not belong to any application + if (template.app === '/.*/') { + template.app = ''; + } + result = this.zabbix.getItems(template.group, template.host, template.app, template.item); + } else if (parts.length === 3) { + // Get applications + result = this.zabbix.getApps(template.group, template.host, template.app); + } else if (parts.length === 2) { + // Get hosts + result = this.zabbix.getHosts(template.group, template.host); + } else if (parts.length === 1) { + // Get groups + result = this.zabbix.getGroups(template.group); + } else { + result = Promise.resolve([]); + } + + return result.then(function (metrics) { + return metrics.map(formatMetric); + }); + } + }, { + key: 'annotationQuery', + value: function annotationQuery(options) { + var _this6 = this; + + var timeFrom = Math.ceil(dateMath.parse(options.rangeRaw.from) / 1000); + var timeTo = Math.ceil(dateMath.parse(options.rangeRaw.to) / 1000); + var annotation = options.annotation; + var showOkEvents = annotation.showOkEvents ? [0, 1] : 1; + + // Show all triggers + var showTriggers = [0, 1]; + + var getTriggers = this.zabbix.getTriggers(this.replaceTemplateVars(annotation.group, {}), this.replaceTemplateVars(annotation.host, {}), this.replaceTemplateVars(annotation.application, {}), showTriggers); + + return getTriggers.then(function (triggers) { + + // Filter triggers by description + if (utils.isRegex(annotation.trigger)) { + triggers = _.filter(triggers, function (trigger) { + return utils.buildRegex(annotation.trigger).test(trigger.description); + }); + } else if (annotation.trigger) { + triggers = _.filter(triggers, function (trigger) { + return trigger.description === annotation.trigger; + }); + } + + // Remove events below the chose severity + triggers = _.filter(triggers, function (trigger) { + return Number(trigger.priority) >= Number(annotation.minseverity); + }); + + var objectids = _.map(triggers, 'triggerid'); + return _this6.zabbix.getEvents(objectids, timeFrom, timeTo, showOkEvents).then(function (events) { + var indexedTriggers = _.keyBy(triggers, 'triggerid'); + + // Hide acknowledged events if option enabled + if (annotation.hideAcknowledged) { + events = _.filter(events, function (event) { + return !event.acknowledges.length; + }); + } + + return _.map(events, function (event) { + var tags = void 0; + if (annotation.showHostname) { + tags = _.map(event.hosts, 'name'); + } + + // Show event type (OK or Problem) + var title = Number(event.value) ? 'Problem' : 'OK'; + + var formatted_acknowledges = utils.formatAcknowledges(event.acknowledges); + return { + annotation: annotation, + time: event.clock * 1000, + title: title, + tags: tags, + text: indexedTriggers[event.objectid].description + formatted_acknowledges + }; + }); + }); + }); + } + }, { + key: 'replaceTargetVariables', + value: function replaceTargetVariables(target, options) { + var _this7 = this; + + var parts = ['group', 'host', 'application', 'item']; + parts.forEach(function (p) { + if (target[p] && target[p].filter) { + target[p].filter = _this7.replaceTemplateVars(target[p].filter, options.scopedVars); + } + }); + target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars); + + _.forEach(target.functions, function (func) { + func.params = func.params.map(function (param) { + if (typeof param === 'number') { + return +_this7.templateSrv.replace(param.toString(), options.scopedVars); + } else { + return _this7.templateSrv.replace(param, options.scopedVars); + } + }); + }); + } + }]); + + return ZabbixAPIDatasource; + }()); + + _export('ZabbixAPIDatasource', ZabbixAPIDatasource); + + _export('zabbixTemplateFormat', zabbixTemplateFormat); + + // Fix for backward compatibility with lodash 2.4 + if (!_.includes) { + _.includes = _.contains; + } + if (!_.keyBy) { + _.keyBy = _.indexBy; + } + } + }; +}); +//# sourceMappingURL=datasource.js.map diff --git a/dist/datasource-zabbix/datasource.js.map b/dist/datasource-zabbix/datasource.js.map new file mode 100644 index 0000000..fca55f1 --- /dev/null +++ b/dist/datasource-zabbix/datasource.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/datasource.js"],"names":["bindFunctionDefs","functionDefs","category","aggregationFunctions","_","map","metricFunctions","getCategories","aggFuncDefs","filter","func","includes","def","name","funcInstance","createFuncInstance","params","bindFunction","dataProcessor","downsampleSeries","timeseries_data","options","timeseries","datapoints","length","maxDataPoints","groupBy","interval","AVERAGE","formatMetric","metricObj","text","expandable","zabbixTemplateFormat","value","utils","escapeRegex","escapedValues","join","replaceTemplateVars","templateSrv","target","scopedVars","replacedTarget","replace","isRegex","extractText","str","pattern","useCaptureGroups","extractPattern","RegExp","extractedValue","exec","sequence","funcsArray","result","i","call","dateMath","migrations","responseHandler","ZabbixAPIError","ZabbixAPIDatasource","instanceSettings","alertSrv","Zabbix","url","basicAuth","withCredentials","username","jsonData","password","trends","trendsFrom","ttl","cacheTTL","parseInterval","zabbix","partial","timeFrom","Math","ceil","parse","range","from","timeTo","to","useTrendsFrom","useTrends","promises","targets","cloneDeep","replaceTargetVariables","timeFunctions","functions","time_from","time_to","mode","migrate","hide","group","host","item","queryNumericData","queryTextData","itservice","slaProperty","getSLA","serviceid","then","handleSLAResponse","slaObject","Promise","all","flatten","data","itemtype","getItemsFromTarget","getHistoryPromise","valueType","getTrendValueType","getTrend","items","handleTrends","history","getHistory","handleHistory","applyDataProcessingFunctions","trendFunctions","trendValueFunc","find","transformFunctions","filterFunctions","aliasFunctions","dp","aggFuncNames","lastAgg","findLast","forEach","applyTimeShiftFunction","timeShiftFunc","shift","series","unShiftTimeSeries","convertHistory","point","textFilter","clock","resolve","zabbixVersion","getVersion","version","login","status","title","message","catch","error","query","parts","each","split","part","push","template","zipObject","app","getItems","getApps","getHosts","getGroups","metrics","rangeRaw","annotation","showOkEvents","showTriggers","getTriggers","application","trigger","triggers","buildRegex","test","description","Number","priority","minseverity","objectids","getEvents","indexedTriggers","keyBy","hideAcknowledged","events","event","acknowledges","tags","showHostname","hosts","formatted_acknowledges","formatAcknowledges","time","objectid","p","param","toString","contains","indexBy"],"mappings":"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","file":"datasource.js","sourcesContent":["//import angular from 'angular';\nimport _ from 'lodash';\nimport * as dateMath from 'app/core/utils/datemath';\nimport * as utils from './utils';\nimport * as migrations from './migrations';\nimport * as metricFunctions from './metricFunctions';\nimport dataProcessor from './dataProcessor';\nimport responseHandler from './responseHandler';\nimport './zabbix.js';\nimport {ZabbixAPIError} from './zabbixAPICore.service.js';\n\nclass ZabbixAPIDatasource {\n\n /** @ngInject */\n constructor(instanceSettings, templateSrv, alertSrv, Zabbix) {\n this.templateSrv = templateSrv;\n this.alertSrv = alertSrv;\n\n // General data source settings\n this.name = instanceSettings.name;\n this.url = instanceSettings.url;\n this.basicAuth = instanceSettings.basicAuth;\n this.withCredentials = instanceSettings.withCredentials;\n\n // Zabbix API credentials\n this.username = instanceSettings.jsonData.username;\n this.password = instanceSettings.jsonData.password;\n\n // Use trends instead history since specified time\n this.trends = instanceSettings.jsonData.trends;\n this.trendsFrom = instanceSettings.jsonData.trendsFrom || '7d';\n\n // Set cache update interval\n var ttl = instanceSettings.jsonData.cacheTTL || '1h';\n this.cacheTTL = utils.parseInterval(ttl);\n\n this.zabbix = new Zabbix(this.url, this.username, this.password, this.basicAuth, this.withCredentials, this.cacheTTL);\n\n // Use custom format for template variables\n this.replaceTemplateVars = _.partial(replaceTemplateVars, this.templateSrv);\n }\n\n ////////////////////////\n // Datasource methods //\n ////////////////////////\n\n /**\n * Query panel data. Calls for each panel in dashboard.\n * @param {Object} options Contains time range, targets and other info.\n * @return {Object} Grafana metrics object with timeseries data for each target.\n */\n query(options) {\n let timeFrom = Math.ceil(dateMath.parse(options.range.from) / 1000);\n let timeTo = Math.ceil(dateMath.parse(options.range.to) / 1000);\n\n let useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000);\n let useTrends = (timeFrom <= useTrendsFrom) && this.trends;\n\n // Create request for each target\n let promises = _.map(options.targets, target => {\n // Prevent changes of original object\n target = _.cloneDeep(target);\n this.replaceTargetVariables(target, options);\n\n // Apply Time-related functions (timeShift(), etc)\n let timeFunctions = bindFunctionDefs(target.functions, 'Time');\n if (timeFunctions.length) {\n const [time_from, time_to] = sequence(timeFunctions)([timeFrom, timeTo]);\n timeFrom = time_from;\n timeTo = time_to;\n }\n\n // Metrics or Text query mode\n if (target.mode !== 1) {\n // Migrate old targets\n target = migrations.migrate(target);\n\n // Don't request undefined and hidden targets\n if (target.hide || !target.group || !target.host || !target.item) {\n return [];\n }\n\n if (!target.mode || target.mode === 0) {\n return this.queryNumericData(target, timeFrom, timeTo, useTrends);\n } else if (target.mode === 2) {\n return this.queryTextData(target, timeFrom, timeTo);\n }\n }\n\n // IT services mode\n else if (target.mode === 1) {\n // Don't show undefined and hidden targets\n if (target.hide || !target.itservice || !target.slaProperty) {\n return [];\n }\n\n return this.zabbix.getSLA(target.itservice.serviceid, timeFrom, timeTo)\n .then(slaObject => {\n return responseHandler.handleSLAResponse(target.itservice, target.slaProperty, slaObject);\n });\n }\n });\n\n // Data for panel (all targets)\n return Promise.all(_.flatten(promises))\n .then(_.flatten)\n .then(timeseries_data => {\n return downsampleSeries(timeseries_data, options);\n })\n .then(data => {\n return { data: data };\n });\n }\n\n queryNumericData(target, timeFrom, timeTo, useTrends) {\n let options = {\n itemtype: 'num'\n };\n return this.zabbix.getItemsFromTarget(target, options)\n .then(items => {\n let getHistoryPromise;\n\n if (useTrends) {\n let valueType = this.getTrendValueType(target);\n getHistoryPromise = this.zabbix.getTrend(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.handleTrends(history, items, valueType);\n });\n } else {\n // Use history\n getHistoryPromise = this.zabbix.getHistory(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.handleHistory(history, items);\n });\n }\n\n return getHistoryPromise.then(timeseries_data => {\n return this.applyDataProcessingFunctions(timeseries_data, target);\n });\n });\n }\n\n getTrendValueType(target) {\n // Find trendValue() function and get specified trend value\n var trendFunctions = _.map(metricFunctions.getCategories()['Trends'], 'name');\n var trendValueFunc = _.find(target.functions, func => {\n return _.includes(trendFunctions, func.def.name);\n });\n return trendValueFunc ? trendValueFunc.params[0] : \"avg\";\n }\n\n applyDataProcessingFunctions(timeseries_data, target) {\n let transformFunctions = bindFunctionDefs(target.functions, 'Transform');\n let aggregationFunctions = bindFunctionDefs(target.functions, 'Aggregate');\n let filterFunctions = bindFunctionDefs(target.functions, 'Filter');\n let aliasFunctions = bindFunctionDefs(target.functions, 'Alias');\n\n // Apply transformation functions\n timeseries_data = _.map(timeseries_data, timeseries => {\n timeseries.datapoints = sequence(transformFunctions)(timeseries.datapoints);\n return timeseries;\n });\n\n // Apply filter functions\n if (filterFunctions.length) {\n timeseries_data = sequence(filterFunctions)(timeseries_data);\n }\n\n // Apply aggregations\n if (aggregationFunctions.length) {\n let dp = _.map(timeseries_data, 'datapoints');\n dp = sequence(aggregationFunctions)(dp);\n\n let aggFuncNames = _.map(metricFunctions.getCategories()['Aggregate'], 'name');\n let lastAgg = _.findLast(target.functions, func => {\n return _.includes(aggFuncNames, func.def.name);\n });\n\n timeseries_data = [{\n target: lastAgg.text,\n datapoints: dp\n }];\n }\n\n // Apply alias functions\n _.forEach(timeseries_data, sequence(aliasFunctions));\n\n // Apply Time-related functions (timeShift(), etc)\n // Find timeShift() function and get specified trend value\n this.applyTimeShiftFunction(timeseries_data, target);\n\n return timeseries_data;\n }\n\n applyTimeShiftFunction(timeseries_data, target) {\n // Find timeShift() function and get specified interval\n let timeShiftFunc = _.find(target.functions, (func) => {\n return func.def.name === 'timeShift';\n });\n if (timeShiftFunc) {\n let shift = timeShiftFunc.params[0];\n _.forEach(timeseries_data, (series) => {\n series.datapoints = dataProcessor.unShiftTimeSeries(shift, series.datapoints);\n });\n }\n }\n\n queryTextData(target, timeFrom, timeTo) {\n let options = {\n itemtype: 'text'\n };\n return this.zabbix.getItemsFromTarget(target, options)\n .then(items => {\n if (items.length) {\n return this.zabbix.getHistory(items, timeFrom, timeTo)\n .then(history => {\n return responseHandler.convertHistory(history, items, false, (point) => {\n let value = point.value;\n\n // Regex-based extractor\n if (target.textFilter) {\n value = extractText(point.value, target.textFilter, target.useCaptureGroups);\n }\n\n return [value, point.clock * 1000];\n });\n });\n } else {\n return Promise.resolve([]);\n }\n });\n }\n\n /**\n * Test connection to Zabbix API\n * @return {object} Connection status and Zabbix API version\n */\n testDatasource() {\n let zabbixVersion;\n return this.zabbix.getVersion()\n .then(version => {\n zabbixVersion = version;\n return this.zabbix.login();\n })\n .then(() => {\n return {\n status: \"success\",\n title: \"Success\",\n message: \"Zabbix API version: \" + zabbixVersion\n };\n })\n .catch(error => {\n if (error instanceof ZabbixAPIError) {\n return {\n status: \"error\",\n title: error.message,\n message: error.data\n };\n } else {\n return {\n status: \"error\",\n title: \"Connection failed\",\n message: \"Could not connect to given url\"\n };\n }\n });\n }\n\n ////////////////\n // Templating //\n ////////////////\n\n /**\n * Find metrics from templated request.\n *\n * @param {string} query Query from Templating\n * @return {string} Metric name - group, host, app or item or list\n * of metrics in \"{metric1,metcic2,...,metricN}\" format.\n */\n metricFindQuery(query) {\n let result;\n let parts = [];\n\n // Split query. Query structure: group.host.app.item\n _.each(query.split('.'), part => {\n part = this.replaceTemplateVars(part, {});\n\n // Replace wildcard to regex\n if (part === '*') {\n part = '/.*/';\n }\n parts.push(part);\n });\n let template = _.zipObject(['group', 'host', 'app', 'item'], parts);\n\n // Get items\n if (parts.length === 4) {\n // Search for all items, even it's not belong to any application\n if (template.app === '/.*/') {\n template.app = '';\n }\n result = this.zabbix.getItems(template.group, template.host, template.app, template.item);\n } else if (parts.length === 3) {\n // Get applications\n result = this.zabbix.getApps(template.group, template.host, template.app);\n } else if (parts.length === 2) {\n // Get hosts\n result = this.zabbix.getHosts(template.group, template.host);\n } else if (parts.length === 1) {\n // Get groups\n result = this.zabbix.getGroups(template.group);\n } else {\n result = Promise.resolve([]);\n }\n\n return result.then(metrics => {\n return metrics.map(formatMetric);\n });\n }\n\n /////////////////\n // Annotations //\n /////////////////\n\n annotationQuery(options) {\n var timeFrom = Math.ceil(dateMath.parse(options.rangeRaw.from) / 1000);\n var timeTo = Math.ceil(dateMath.parse(options.rangeRaw.to) / 1000);\n var annotation = options.annotation;\n var showOkEvents = annotation.showOkEvents ? [0, 1] : 1;\n\n // Show all triggers\n var showTriggers = [0, 1];\n\n var getTriggers = this.zabbix\n .getTriggers(this.replaceTemplateVars(annotation.group, {}),\n this.replaceTemplateVars(annotation.host, {}),\n this.replaceTemplateVars(annotation.application, {}),\n showTriggers);\n\n return getTriggers.then(triggers => {\n\n // Filter triggers by description\n if (utils.isRegex(annotation.trigger)) {\n triggers = _.filter(triggers, trigger => {\n return utils.buildRegex(annotation.trigger).test(trigger.description);\n });\n } else if (annotation.trigger) {\n triggers = _.filter(triggers, trigger => {\n return trigger.description === annotation.trigger;\n });\n }\n\n // Remove events below the chose severity\n triggers = _.filter(triggers, trigger => {\n return Number(trigger.priority) >= Number(annotation.minseverity);\n });\n\n var objectids = _.map(triggers, 'triggerid');\n return this.zabbix\n .getEvents(objectids, timeFrom, timeTo, showOkEvents)\n .then(events => {\n var indexedTriggers = _.keyBy(triggers, 'triggerid');\n\n // Hide acknowledged events if option enabled\n if (annotation.hideAcknowledged) {\n events = _.filter(events, event => {\n return !event.acknowledges.length;\n });\n }\n\n return _.map(events, event => {\n let tags;\n if (annotation.showHostname) {\n tags = _.map(event.hosts, 'name');\n }\n\n // Show event type (OK or Problem)\n let title = Number(event.value) ? 'Problem' : 'OK';\n\n let formatted_acknowledges = utils.formatAcknowledges(event.acknowledges);\n return {\n annotation: annotation,\n time: event.clock * 1000,\n title: title,\n tags: tags,\n text: indexedTriggers[event.objectid].description + formatted_acknowledges\n };\n });\n });\n });\n }\n\n // Replace template variables\n replaceTargetVariables(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n parts.forEach(p => {\n if (target[p] && target[p].filter) {\n target[p].filter = this.replaceTemplateVars(target[p].filter, options.scopedVars);\n }\n });\n target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars);\n\n _.forEach(target.functions, func => {\n func.params = func.params.map(param => {\n if (typeof param === 'number') {\n return +this.templateSrv.replace(param.toString(), options.scopedVars);\n } else {\n return this.templateSrv.replace(param, options.scopedVars);\n }\n });\n });\n }\n\n}\n\nfunction bindFunctionDefs(functionDefs, category) {\n var aggregationFunctions = _.map(metricFunctions.getCategories()[category], 'name');\n var aggFuncDefs = _.filter(functionDefs, function(func) {\n return _.includes(aggregationFunctions, func.def.name);\n });\n\n return _.map(aggFuncDefs, function(func) {\n var funcInstance = metricFunctions.createFuncInstance(func.def, func.params);\n return funcInstance.bindFunction(dataProcessor.metricFunctions);\n });\n}\n\nfunction downsampleSeries(timeseries_data, options) {\n return _.map(timeseries_data, timeseries => {\n if (timeseries.datapoints.length > options.maxDataPoints) {\n timeseries.datapoints = dataProcessor\n .groupBy(options.interval, dataProcessor.AVERAGE, timeseries.datapoints);\n }\n return timeseries;\n });\n}\n\nfunction formatMetric(metricObj) {\n return {\n text: metricObj.name,\n expandable: false\n };\n}\n\n/**\n * Custom formatter for template variables.\n * Default Grafana \"regex\" formatter returns\n * value1|value2\n * This formatter returns\n * (value1|value2)\n * This format needed for using in complex regex with\n * template variables, for example\n * /CPU $cpu_item.*time/ where $cpu_item is system,user,iowait\n */\nfunction zabbixTemplateFormat(value) {\n if (typeof value === 'string') {\n return utils.escapeRegex(value);\n }\n\n var escapedValues = _.map(value, utils.escapeRegex);\n return '(' + escapedValues.join('|') + ')';\n}\n\n/**\n * If template variables are used in request, replace it using regex format\n * and wrap with '/' for proper multi-value work. Example:\n * $variable selected as a, b, c\n * We use filter $variable\n * $variable -> a|b|c -> /a|b|c/\n * /$variable/ -> /a|b|c/ -> /a|b|c/\n */\nfunction replaceTemplateVars(templateSrv, target, scopedVars) {\n var replacedTarget = templateSrv.replace(target, scopedVars, zabbixTemplateFormat);\n if (target !== replacedTarget && !utils.isRegex(replacedTarget)) {\n replacedTarget = '/^' + replacedTarget + '$/';\n }\n return replacedTarget;\n}\n\nfunction extractText(str, pattern, useCaptureGroups) {\n let extractPattern = new RegExp(pattern);\n let extractedValue = extractPattern.exec(str);\n if (extractedValue) {\n if (useCaptureGroups) {\n extractedValue = extractedValue[1];\n } else {\n extractedValue = extractedValue[0];\n }\n }\n return extractedValue;\n}\n\n// Apply function one by one:\n// sequence([a(), b(), c()]) = c(b(a()));\nfunction 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\nexport {ZabbixAPIDatasource, zabbixTemplateFormat};\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.includes) {_.includes = _.contains;}\nif (!_.keyBy) {_.keyBy = _.indexBy;}\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/img/zabbix_app_logo.svg b/dist/datasource-zabbix/img/zabbix_app_logo.svg new file mode 100644 index 0000000..237247d --- /dev/null +++ b/dist/datasource-zabbix/img/zabbix_app_logo.svg @@ -0,0 +1,107 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/dist/datasource-zabbix/metric-function-editor.directive.js b/dist/datasource-zabbix/metric-function-editor.directive.js new file mode 100644 index 0000000..334e6d4 --- /dev/null +++ b/dist/datasource-zabbix/metric-function-editor.directive.js @@ -0,0 +1,251 @@ +'use strict'; + +System.register(['angular', 'lodash', 'jquery'], function (_export, _context) { + "use strict"; + + var angular, _, $; + + return { + setters: [function (_angular) { + angular = _angular.default; + }, function (_lodash) { + _ = _lodash.default; + }, function (_jquery) { + $ = _jquery.default; + }], + execute: function () { + + /** @ngInject */ + angular.module('grafana.directives').directive('metricFunctionEditor', function ($compile, templateSrv) { + + var funcSpanTemplate = '{{func.def.name}}('; + var paramTemplate = ''; + + var funcControlsTemplate = '
' + '' + '' + '' + '' + '
'; + + return { + restrict: 'A', + link: function postLink($scope, elem) { + var $funcLink = $(funcSpanTemplate); + var $funcControls = $(funcControlsTemplate); + var ctrl = $scope.ctrl; + var func = $scope.func; + var funcDef = func.def; + var scheduledRelink = false; + var paramCountAtLink = 0; + + function clickFuncParam(paramIndex) { + /*jshint validthis:true */ + + var $link = $(this); + var $input = $link.next(); + + $input.val(func.params[paramIndex]); + $input.css('width', $link.width() + 16 + 'px'); + + $link.hide(); + $input.show(); + $input.focus(); + $input.select(); + + var typeahead = $input.data('typeahead'); + if (typeahead) { + $input.val(''); + typeahead.lookup(); + } + } + + function scheduledRelinkIfNeeded() { + if (paramCountAtLink === func.params.length) { + return; + } + + if (!scheduledRelink) { + scheduledRelink = true; + setTimeout(function () { + relink(); + scheduledRelink = false; + }, 200); + } + } + + function inputBlur(paramIndex) { + /*jshint validthis:true */ + var $input = $(this); + var $link = $input.prev(); + var newValue = $input.val(); + + if (newValue !== '' || func.def.params[paramIndex].optional) { + $link.html(templateSrv.highlightVariablesAsHtml(newValue)); + + func.updateParam($input.val(), paramIndex); + scheduledRelinkIfNeeded(); + + $scope.$apply(function () { + ctrl.targetChanged(); + }); + + $input.hide(); + $link.show(); + } + } + + function inputKeyPress(paramIndex, e) { + /*jshint validthis:true */ + if (e.which === 13) { + inputBlur.call(this, paramIndex); + } + } + + function inputKeyDown() { + /*jshint validthis:true */ + this.style.width = (3 + this.value.length) * 8 + 'px'; + } + + function addTypeahead($input, paramIndex) { + $input.attr('data-provide', 'typeahead'); + + var options = funcDef.params[paramIndex].options; + if (funcDef.params[paramIndex].type === 'int' || funcDef.params[paramIndex].type === 'float') { + options = _.map(options, function (val) { + return val.toString(); + }); + } + + $input.typeahead({ + source: options, + minLength: 0, + items: 20, + updater: function updater(value) { + setTimeout(function () { + inputBlur.call($input[0], paramIndex); + }, 0); + return value; + } + }); + + var typeahead = $input.data('typeahead'); + typeahead.lookup = function () { + this.query = this.$element.val() || ''; + return this.process(this.source); + }; + } + + function toggleFuncControls() { + var targetDiv = elem.closest('.tight-form'); + + if (elem.hasClass('show-function-controls')) { + elem.removeClass('show-function-controls'); + targetDiv.removeClass('has-open-function'); + $funcControls.hide(); + return; + } + + elem.addClass('show-function-controls'); + targetDiv.addClass('has-open-function'); + + $funcControls.show(); + } + + function addElementsAndCompile() { + $funcControls.appendTo(elem); + $funcLink.appendTo(elem); + + _.each(funcDef.params, function (param, index) { + if (param.optional && func.params.length <= index) { + return; + } + + if (index > 0) { + $(', ').appendTo(elem); + } + + var paramValue = templateSrv.highlightVariablesAsHtml(func.params[index]); + var $paramLink = $('' + paramValue + ''); + var $input = $(paramTemplate); + + paramCountAtLink++; + + $paramLink.appendTo(elem); + $input.appendTo(elem); + + $input.blur(_.partial(inputBlur, index)); + $input.keyup(inputKeyDown); + $input.keypress(_.partial(inputKeyPress, index)); + $paramLink.click(_.partial(clickFuncParam, index)); + + if (funcDef.params[index].options) { + addTypeahead($input, index); + } + }); + + $(')').appendTo(elem); + + $compile(elem.contents())($scope); + } + + function ifJustAddedFocusFistParam() { + if ($scope.func.added) { + $scope.func.added = false; + setTimeout(function () { + elem.find('.graphite-func-param-link').first().click(); + }, 10); + } + } + + function registerFuncControlsToggle() { + $funcLink.click(toggleFuncControls); + } + + function registerFuncControlsActions() { + $funcControls.click(function (e) { + var $target = $(e.target); + if ($target.hasClass('fa-remove')) { + toggleFuncControls(); + $scope.$apply(function () { + ctrl.removeFunction($scope.func); + }); + return; + } + + if ($target.hasClass('fa-arrow-left')) { + $scope.$apply(function () { + _.move($scope.target.functions, $scope.$index, $scope.$index - 1); + ctrl.targetChanged(); + }); + return; + } + + if ($target.hasClass('fa-arrow-right')) { + $scope.$apply(function () { + _.move($scope.target.functions, $scope.$index, $scope.$index + 1); + ctrl.targetChanged(); + }); + return; + } + + if ($target.hasClass('fa-question-circle')) { + var docSite = "http://docs.grafana-zabbix.org/reference/functions/"; + window.open(docSite + '#' + funcDef.name.toLowerCase(), '_blank'); + return; + } + }); + } + + function relink() { + elem.children().remove(); + + addElementsAndCompile(); + ifJustAddedFocusFistParam(); + registerFuncControlsToggle(); + registerFuncControlsActions(); + } + + relink(); + } + }; + }); + } + }; +}); +//# sourceMappingURL=metric-function-editor.directive.js.map diff --git a/dist/datasource-zabbix/metric-function-editor.directive.js.map b/dist/datasource-zabbix/metric-function-editor.directive.js.map new file mode 100644 index 0000000..ca5b8ba --- /dev/null +++ b/dist/datasource-zabbix/metric-function-editor.directive.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/metric-function-editor.directive.js"],"names":["angular","_","$","module","directive","$compile","templateSrv","funcSpanTemplate","paramTemplate","funcControlsTemplate","restrict","link","postLink","$scope","elem","$funcLink","$funcControls","ctrl","func","funcDef","def","scheduledRelink","paramCountAtLink","clickFuncParam","paramIndex","$link","$input","next","val","params","css","width","hide","show","focus","select","typeahead","data","lookup","scheduledRelinkIfNeeded","length","setTimeout","relink","inputBlur","prev","newValue","optional","html","highlightVariablesAsHtml","updateParam","$apply","targetChanged","inputKeyPress","e","which","call","inputKeyDown","style","value","addTypeahead","attr","options","type","map","toString","source","minLength","items","updater","query","$element","process","toggleFuncControls","targetDiv","closest","hasClass","removeClass","addClass","addElementsAndCompile","appendTo","each","param","index","paramValue","$paramLink","blur","partial","keyup","keypress","click","contents","ifJustAddedFocusFistParam","added","find","first","registerFuncControlsToggle","registerFuncControlsActions","$target","target","removeFunction","move","functions","$index","docSite","window","open","name","toLowerCase","children","remove"],"mappings":"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","file":"metric-function-editor.directive.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport $ from 'jquery';\n\n/** @ngInject */\nangular\n .module('grafana.directives')\n .directive('metricFunctionEditor', function($compile, templateSrv) {\n\n var funcSpanTemplate = '{{func.def.name}}(';\n var paramTemplate = '';\n\n var funcControlsTemplate =\n '
' +\n '' +\n '' +\n '' +\n '' +\n '
';\n\n return {\n restrict: 'A',\n link: function postLink($scope, elem) {\n var $funcLink = $(funcSpanTemplate);\n var $funcControls = $(funcControlsTemplate);\n var ctrl = $scope.ctrl;\n var func = $scope.func;\n var funcDef = func.def;\n var scheduledRelink = false;\n var paramCountAtLink = 0;\n\n function clickFuncParam(paramIndex) {\n /*jshint validthis:true */\n\n var $link = $(this);\n var $input = $link.next();\n\n $input.val(func.params[paramIndex]);\n $input.css('width', ($link.width() + 16) + 'px');\n\n $link.hide();\n $input.show();\n $input.focus();\n $input.select();\n\n var typeahead = $input.data('typeahead');\n if (typeahead) {\n $input.val('');\n typeahead.lookup();\n }\n }\n\n function scheduledRelinkIfNeeded() {\n if (paramCountAtLink === func.params.length) {\n return;\n }\n\n if (!scheduledRelink) {\n scheduledRelink = true;\n setTimeout(function() {\n relink();\n scheduledRelink = false;\n }, 200);\n }\n }\n\n function inputBlur(paramIndex) {\n /*jshint validthis:true */\n var $input = $(this);\n var $link = $input.prev();\n var newValue = $input.val();\n\n if (newValue !== '' || func.def.params[paramIndex].optional) {\n $link.html(templateSrv.highlightVariablesAsHtml(newValue));\n\n func.updateParam($input.val(), paramIndex);\n scheduledRelinkIfNeeded();\n\n $scope.$apply(function() {\n ctrl.targetChanged();\n });\n\n $input.hide();\n $link.show();\n }\n }\n\n function inputKeyPress(paramIndex, e) {\n /*jshint validthis:true */\n if(e.which === 13) {\n inputBlur.call(this, paramIndex);\n }\n }\n\n function inputKeyDown() {\n /*jshint validthis:true */\n this.style.width = (3 + this.value.length) * 8 + 'px';\n }\n\n function addTypeahead($input, paramIndex) {\n $input.attr('data-provide', 'typeahead');\n\n var options = funcDef.params[paramIndex].options;\n if (funcDef.params[paramIndex].type === 'int' ||\n funcDef.params[paramIndex].type === 'float') {\n options = _.map(options, function(val) { return val.toString(); });\n }\n\n $input.typeahead({\n source: options,\n minLength: 0,\n items: 20,\n updater: function (value) {\n setTimeout(function() {\n inputBlur.call($input[0], paramIndex);\n }, 0);\n return value;\n }\n });\n\n var typeahead = $input.data('typeahead');\n typeahead.lookup = function () {\n this.query = this.$element.val() || '';\n return this.process(this.source);\n };\n }\n\n function toggleFuncControls() {\n var targetDiv = elem.closest('.tight-form');\n\n if (elem.hasClass('show-function-controls')) {\n elem.removeClass('show-function-controls');\n targetDiv.removeClass('has-open-function');\n $funcControls.hide();\n return;\n }\n\n elem.addClass('show-function-controls');\n targetDiv.addClass('has-open-function');\n\n $funcControls.show();\n }\n\n function addElementsAndCompile() {\n $funcControls.appendTo(elem);\n $funcLink.appendTo(elem);\n\n _.each(funcDef.params, function(param, index) {\n if (param.optional && func.params.length <= index) {\n return;\n }\n\n if (index > 0) {\n $(', ').appendTo(elem);\n }\n\n var paramValue = templateSrv.highlightVariablesAsHtml(func.params[index]);\n var $paramLink = $('' + paramValue + '');\n var $input = $(paramTemplate);\n\n paramCountAtLink++;\n\n $paramLink.appendTo(elem);\n $input.appendTo(elem);\n\n $input.blur(_.partial(inputBlur, index));\n $input.keyup(inputKeyDown);\n $input.keypress(_.partial(inputKeyPress, index));\n $paramLink.click(_.partial(clickFuncParam, index));\n\n if (funcDef.params[index].options) {\n addTypeahead($input, index);\n }\n\n });\n\n $(')').appendTo(elem);\n\n $compile(elem.contents())($scope);\n }\n\n function ifJustAddedFocusFistParam() {\n if ($scope.func.added) {\n $scope.func.added = false;\n setTimeout(function() {\n elem.find('.graphite-func-param-link').first().click();\n }, 10);\n }\n }\n\n function registerFuncControlsToggle() {\n $funcLink.click(toggleFuncControls);\n }\n\n function registerFuncControlsActions() {\n $funcControls.click(function(e) {\n var $target = $(e.target);\n if ($target.hasClass('fa-remove')) {\n toggleFuncControls();\n $scope.$apply(function() {\n ctrl.removeFunction($scope.func);\n });\n return;\n }\n\n if ($target.hasClass('fa-arrow-left')) {\n $scope.$apply(function() {\n _.move($scope.target.functions, $scope.$index, $scope.$index - 1);\n ctrl.targetChanged();\n });\n return;\n }\n\n if ($target.hasClass('fa-arrow-right')) {\n $scope.$apply(function() {\n _.move($scope.target.functions, $scope.$index, $scope.$index + 1);\n ctrl.targetChanged();\n });\n return;\n }\n\n if ($target.hasClass('fa-question-circle')) {\n var docSite = \"http://docs.grafana-zabbix.org/reference/functions/\";\n window.open(docSite + '#' + funcDef.name.toLowerCase(),'_blank');\n return;\n }\n });\n }\n\n function relink() {\n elem.children().remove();\n\n addElementsAndCompile();\n ifJustAddedFocusFistParam();\n registerFuncControlsToggle();\n registerFuncControlsActions();\n }\n\n relink();\n }\n };\n\n });\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/metricFunctions.js b/dist/datasource-zabbix/metricFunctions.js new file mode 100644 index 0000000..b03340c --- /dev/null +++ b/dist/datasource-zabbix/metricFunctions.js @@ -0,0 +1,315 @@ +'use strict'; + +System.register(['lodash', 'jquery'], function (_export, _context) { + "use strict"; + + var _, $, _createClass, index, categories, FuncInstance; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function addFuncDef(funcDef) { + funcDef.params = funcDef.params || []; + funcDef.defaultParams = funcDef.defaultParams || []; + + if (funcDef.category) { + categories[funcDef.category].push(funcDef); + } + index[funcDef.name] = funcDef; + index[funcDef.shortName || funcDef.name] = funcDef; + } + + // Transform + + function createFuncInstance(funcDef, params) { + if (_.isString(funcDef)) { + if (!index[funcDef]) { + throw { message: 'Method not found ' + name }; + } + funcDef = index[funcDef]; + } + return new FuncInstance(funcDef, params); + } + + _export('createFuncInstance', createFuncInstance); + + function getFuncDef(name) { + return index[name]; + } + + _export('getFuncDef', getFuncDef); + + function getCategories() { + return categories; + } + + _export('getCategories', getCategories); + + return { + setters: [function (_lodash) { + _ = _lodash.default; + }, function (_jquery) { + $ = _jquery.default; + }], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + index = []; + categories = { + Transform: [], + Aggregate: [], + Filter: [], + Trends: [], + Time: [], + Alias: [] + }; + addFuncDef({ + name: 'groupBy', + category: 'Transform', + params: [{ name: 'interval', type: 'string' }, { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: ['1m', 'avg'] + }); + + addFuncDef({ + name: 'scale', + category: 'Transform', + params: [{ name: 'factor', type: 'float', options: [100, 0.01, 10, -1] }], + defaultParams: [100] + }); + + addFuncDef({ + name: 'delta', + category: 'Transform', + params: [], + defaultParams: [] + }); + + // Aggregate + + addFuncDef({ + name: 'sumSeries', + category: 'Aggregate', + params: [], + defaultParams: [] + }); + + addFuncDef({ + name: 'median', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] + }); + + addFuncDef({ + name: 'average', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] + }); + + addFuncDef({ + name: 'min', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] + }); + + addFuncDef({ + name: 'max', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] + }); + + addFuncDef({ + name: 'aggregateBy', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }, { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: ['1m', 'avg'] + }); + + // Filter + + addFuncDef({ + name: 'top', + category: 'Filter', + params: [{ name: 'number', type: 'int' }, { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: [5, 'avg'] + }); + + addFuncDef({ + name: 'bottom', + category: 'Filter', + params: [{ name: 'number', type: 'int' }, { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: [5, 'avg'] + }); + + // Trends + + addFuncDef({ + name: 'trendValue', + category: 'Trends', + params: [{ name: 'type', type: 'string', options: ['avg', 'min', 'max'] }], + defaultParams: ['avg'] + }); + + // Time + + addFuncDef({ + name: 'timeShift', + category: 'Time', + params: [{ name: 'interval', type: 'string', options: ['24h', '7d', '1M', '+24h', '-24h'] }], + defaultParams: ['24h'] + }); + + //Alias + + addFuncDef({ + name: 'setAlias', + category: 'Alias', + params: [{ name: 'alias', type: 'string' }], + defaultParams: [] + }); + + addFuncDef({ + name: 'setAliasByRegex', + category: 'Alias', + params: [{ name: 'aliasByRegex', type: 'string' }], + defaultParams: [] + }); + + _.each(categories, function (funcList, catName) { + categories[catName] = _.sortBy(funcList, 'name'); + }); + + FuncInstance = function () { + function FuncInstance(funcDef, params) { + _classCallCheck(this, FuncInstance); + + this.def = funcDef; + + if (params) { + this.params = params; + } else { + // Create with default params + this.params = []; + this.params = funcDef.defaultParams.slice(0); + } + + this.updateText(); + } + + _createClass(FuncInstance, [{ + key: 'bindFunction', + value: function bindFunction(metricFunctions) { + var func = metricFunctions[this.def.name]; + if (func) { + + // Bind function arguments + var bindedFunc = func; + var param; + for (var i = 0; i < this.params.length; i++) { + param = this.params[i]; + + // Convert numeric params + if (this.def.params[i].type === 'int' || this.def.params[i].type === 'float') { + param = Number(param); + } + bindedFunc = _.partial(bindedFunc, param); + } + return bindedFunc; + } else { + throw { message: 'Method not found ' + this.def.name }; + } + } + }, { + key: 'render', + value: function render(metricExp) { + var str = this.def.name + '('; + var parameters = _.map(this.params, function (value, index) { + + var paramType = this.def.params[index].type; + if (paramType === 'int' || paramType === 'float' || paramType === 'value_or_series' || paramType === 'boolean') { + return value; + } else if (paramType === 'int_or_interval' && $.isNumeric(value)) { + return value; + } + + return "'" + value + "'"; + }, this); + + if (metricExp) { + parameters.unshift(metricExp); + } + + return str + parameters.join(', ') + ')'; + } + }, { + key: '_hasMultipleParamsInString', + value: function _hasMultipleParamsInString(strValue, index) { + if (strValue.indexOf(',') === -1) { + return false; + } + + return this.def.params[index + 1] && this.def.params[index + 1].optional; + } + }, { + key: 'updateParam', + value: function updateParam(strValue, index) { + // handle optional parameters + // if string contains ',' and next param is optional, split and update both + if (this._hasMultipleParamsInString(strValue, index)) { + _.each(strValue.split(','), function (partVal, idx) { + this.updateParam(partVal.trim(), idx); + }, this); + return; + } + + if (strValue === '' && this.def.params[index].optional) { + this.params.splice(index, 1); + } else { + this.params[index] = strValue; + } + + this.updateText(); + } + }, { + key: 'updateText', + value: function updateText() { + if (this.params.length === 0) { + this.text = this.def.name + '()'; + return; + } + + var text = this.def.name + '('; + text += this.params.join(', '); + text += ')'; + this.text = text; + } + }]); + + return FuncInstance; + }(); + } + }; +}); +//# sourceMappingURL=metricFunctions.js.map diff --git a/dist/datasource-zabbix/metricFunctions.js.map b/dist/datasource-zabbix/metricFunctions.js.map new file mode 100644 index 0000000..4f89c5e --- /dev/null +++ b/dist/datasource-zabbix/metricFunctions.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/metricFunctions.js"],"names":["addFuncDef","funcDef","params","defaultParams","category","categories","push","index","name","shortName","createFuncInstance","_","isString","message","FuncInstance","getFuncDef","getCategories","$","Transform","Aggregate","Filter","Trends","Time","Alias","type","options","each","funcList","catName","sortBy","def","slice","updateText","metricFunctions","func","bindedFunc","param","i","length","Number","partial","metricExp","str","parameters","map","value","paramType","isNumeric","unshift","join","strValue","indexOf","optional","_hasMultipleParamsInString","split","partVal","idx","updateParam","trim","splice","text"],"mappings":"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","file":"metricFunctions.js","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\n\nvar index = [];\nvar categories = {\n Transform: [],\n Aggregate: [],\n Filter: [],\n Trends: [],\n Time: [],\n Alias: []\n};\n\nfunction addFuncDef(funcDef) {\n funcDef.params = funcDef.params || [];\n funcDef.defaultParams = funcDef.defaultParams || [];\n\n if (funcDef.category) {\n categories[funcDef.category].push(funcDef);\n }\n index[funcDef.name] = funcDef;\n index[funcDef.shortName || funcDef.name] = funcDef;\n}\n\n// Transform\n\naddFuncDef({\n name: 'groupBy',\n category: 'Transform',\n params: [\n { name: 'interval', type: 'string'},\n { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] }\n ],\n defaultParams: ['1m', 'avg'],\n});\n\naddFuncDef({\n name: 'scale',\n category: 'Transform',\n params: [\n { name: 'factor', type: 'float', options: [100, 0.01, 10, -1]}\n ],\n defaultParams: [100],\n});\n\naddFuncDef({\n name: 'delta',\n category: 'Transform',\n params: [],\n defaultParams: [],\n});\n\n// Aggregate\n\naddFuncDef({\n name: 'sumSeries',\n category: 'Aggregate',\n params: [],\n defaultParams: [],\n});\n\naddFuncDef({\n name: 'median',\n category: 'Aggregate',\n params: [\n { name: 'interval', type: 'string'}\n ],\n defaultParams: ['1m'],\n});\n\naddFuncDef({\n name: 'average',\n category: 'Aggregate',\n params: [\n { name: 'interval', type: 'string' }\n ],\n defaultParams: ['1m'],\n});\n\naddFuncDef({\n name: 'min',\n category: 'Aggregate',\n params: [\n { name: 'interval', type: 'string' }\n ],\n defaultParams: ['1m'],\n});\n\naddFuncDef({\n name: 'max',\n category: 'Aggregate',\n params: [\n { name: 'interval', type: 'string' }\n ],\n defaultParams: ['1m'],\n});\n\naddFuncDef({\n name: 'aggregateBy',\n category: 'Aggregate',\n params: [\n { name: 'interval', type: 'string' },\n { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] }\n ],\n defaultParams: ['1m', 'avg'],\n});\n\n// Filter\n\naddFuncDef({\n name: 'top',\n category: 'Filter',\n params: [\n { name: 'number', type: 'int' },\n { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'median'] }\n ],\n defaultParams: [5, 'avg'],\n});\n\naddFuncDef({\n name: 'bottom',\n category: 'Filter',\n params: [\n { name: 'number', type: 'int' },\n { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'median'] }\n ],\n defaultParams: [5, 'avg'],\n});\n\n// Trends\n\naddFuncDef({\n name: 'trendValue',\n category: 'Trends',\n params: [\n { name: 'type', type: 'string', options: ['avg', 'min', 'max'] }\n ],\n defaultParams: ['avg'],\n});\n\n// Time\n\naddFuncDef({\n name: 'timeShift',\n category: 'Time',\n params: [\n { name: 'interval', type: 'string', options: ['24h', '7d', '1M', '+24h', '-24h']}\n ],\n defaultParams: ['24h'],\n});\n\n//Alias\n\naddFuncDef({\n name: 'setAlias',\n category: 'Alias',\n params: [\n { name: 'alias', type: 'string' }\n ],\n defaultParams: []\n});\n\naddFuncDef({\n name: 'setAliasByRegex',\n category: 'Alias',\n params: [\n { name: 'aliasByRegex', type: 'string' }\n ],\n defaultParams: []\n});\n\n_.each(categories, function(funcList, catName) {\n categories[catName] = _.sortBy(funcList, 'name');\n});\n\nclass FuncInstance {\n constructor(funcDef, params) {\n this.def = funcDef;\n\n if (params) {\n this.params = params;\n } else {\n // Create with default params\n this.params = [];\n this.params = funcDef.defaultParams.slice(0);\n }\n\n this.updateText();\n }\n\n bindFunction(metricFunctions) {\n var func = metricFunctions[this.def.name];\n if (func) {\n\n // Bind function arguments\n var bindedFunc = func;\n var param;\n for (var i = 0; i < this.params.length; i++) {\n param = this.params[i];\n\n // Convert numeric params\n if (this.def.params[i].type === 'int' ||\n this.def.params[i].type === 'float') {\n param = Number(param);\n }\n bindedFunc = _.partial(bindedFunc, param);\n }\n return bindedFunc;\n } else {\n throw { message: 'Method not found ' + this.def.name };\n }\n }\n\n render(metricExp) {\n var str = this.def.name + '(';\n var parameters = _.map(this.params, function(value, index) {\n\n var paramType = this.def.params[index].type;\n if (paramType === 'int' ||\n paramType === 'float' ||\n paramType === 'value_or_series' ||\n paramType === 'boolean') {\n return value;\n }\n else if (paramType === 'int_or_interval' && $.isNumeric(value)) {\n return value;\n }\n\n return \"'\" + value + \"'\";\n\n }, this);\n\n if (metricExp) {\n parameters.unshift(metricExp);\n }\n\n return str + parameters.join(', ') + ')';\n }\n\n _hasMultipleParamsInString(strValue, index) {\n if (strValue.indexOf(',') === -1) {\n return false;\n }\n\n return this.def.params[index + 1] && this.def.params[index + 1].optional;\n }\n\n updateParam(strValue, index) {\n // handle optional parameters\n // if string contains ',' and next param is optional, split and update both\n if (this._hasMultipleParamsInString(strValue, index)) {\n _.each(strValue.split(','), function(partVal, idx) {\n this.updateParam(partVal.trim(), idx);\n }, this);\n return;\n }\n\n if (strValue === '' && this.def.params[index].optional) {\n this.params.splice(index, 1);\n }\n else {\n this.params[index] = strValue;\n }\n\n this.updateText();\n }\n\n updateText() {\n if (this.params.length === 0) {\n this.text = this.def.name + '()';\n return;\n }\n\n var text = this.def.name + '(';\n text += this.params.join(', ');\n text += ')';\n this.text = text;\n }\n}\n\nexport function createFuncInstance(funcDef, params) {\n if (_.isString(funcDef)) {\n if (!index[funcDef]) {\n throw { message: 'Method not found ' + name };\n }\n funcDef = index[funcDef];\n }\n return new FuncInstance(funcDef, params);\n}\n\nexport function getFuncDef(name) {\n return index[name];\n}\n\nexport function getCategories() {\n return categories;\n}\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/migrations.js b/dist/datasource-zabbix/migrations.js new file mode 100644 index 0000000..1b10639 --- /dev/null +++ b/dist/datasource-zabbix/migrations.js @@ -0,0 +1,55 @@ +"use strict"; + +System.register([], function (_export, _context) { + "use strict"; + + /** + * Query format migration. + * This module can detect query format version and make migration. + */ + + function isGrafana2target(target) { + if (!target.mode || target.mode === 0 || target.mode === 2) { + if ((target.hostFilter || target.itemFilter || target.downsampleFunction || target.host && target.host.host) && target.item.filter === undefined && target.host.filter === undefined) { + return true; + } else { + return false; + } + } else { + return false; + } + } + + _export("isGrafana2target", isGrafana2target); + + function migrateFrom2To3version(target) { + target.group.filter = target.group.name === "*" ? "/.*/" : target.group.name; + target.host.filter = target.host.name === "*" ? convertToRegex(target.hostFilter) : target.host.name; + target.application.filter = target.application.name === "*" ? "" : target.application.name; + target.item.filter = target.item.name === "All" ? convertToRegex(target.itemFilter) : target.item.name; + return target; + } + _export("migrateFrom2To3version", migrateFrom2To3version); + + function migrate(target) { + if (isGrafana2target(target)) { + return migrateFrom2To3version(target); + } else { + return target; + } + } + + _export("migrate", migrate); + + function convertToRegex(str) { + if (str) { + return '/' + str + '/'; + } else { + return '/.*/'; + } + }return { + setters: [], + execute: function () {} + }; +}); +//# sourceMappingURL=migrations.js.map diff --git a/dist/datasource-zabbix/migrations.js.map b/dist/datasource-zabbix/migrations.js.map new file mode 100644 index 0000000..35917d4 --- /dev/null +++ b/dist/datasource-zabbix/migrations.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/migrations.js"],"names":["isGrafana2target","target","mode","hostFilter","itemFilter","downsampleFunction","host","item","filter","undefined","migrateFrom2To3version","group","name","convertToRegex","application","migrate","str"],"mappings":";;;;;AAAA;;;;;AAKO,WAASA,gBAAT,CAA0BC,MAA1B,EAAkC;AACvC,QAAI,CAACA,OAAOC,IAAR,IAAgBD,OAAOC,IAAP,KAAgB,CAAhC,IAAqCD,OAAOC,IAAP,KAAgB,CAAzD,EAA4D;AAC1D,UAAI,CAACD,OAAOE,UAAP,IAAqBF,OAAOG,UAA5B,IAA0CH,OAAOI,kBAAjD,IACAJ,OAAOK,IAAP,IAAeL,OAAOK,IAAP,CAAYA,IAD5B,KAECL,OAAOM,IAAP,CAAYC,MAAZ,KAAuBC,SAAvB,IAAoCR,OAAOK,IAAP,CAAYE,MAAZ,KAAuBC,SAFhE,EAE4E;AAC1E,eAAO,IAAP;AACD,OAJD,MAIO;AACL,eAAO,KAAP;AACD;AACF,KARD,MAQO;AACL,aAAO,KAAP;AACD;AACF;;8BAZeT,gB;;AAcT,WAASU,sBAAT,CAAgCT,MAAhC,EAAwC;AAC7CA,WAAOU,KAAP,CAAaH,MAAb,GAAsBP,OAAOU,KAAP,CAAaC,IAAb,KAAsB,GAAtB,GAA4B,MAA5B,GAAqCX,OAAOU,KAAP,CAAaC,IAAxE;AACAX,WAAOK,IAAP,CAAYE,MAAZ,GAAqBP,OAAOK,IAAP,CAAYM,IAAZ,KAAqB,GAArB,GAA2BC,eAAeZ,OAAOE,UAAtB,CAA3B,GAA+DF,OAAOK,IAAP,CAAYM,IAAhG;AACAX,WAAOa,WAAP,CAAmBN,MAAnB,GAA4BP,OAAOa,WAAP,CAAmBF,IAAnB,KAA4B,GAA5B,GAAkC,EAAlC,GAAuCX,OAAOa,WAAP,CAAmBF,IAAtF;AACAX,WAAOM,IAAP,CAAYC,MAAZ,GAAqBP,OAAOM,IAAP,CAAYK,IAAZ,KAAqB,KAArB,GAA6BC,eAAeZ,OAAOG,UAAtB,CAA7B,GAAiEH,OAAOM,IAAP,CAAYK,IAAlG;AACA,WAAOX,MAAP;AACD;oCANeS,sB;;AAQT,WAASK,OAAT,CAAiBd,MAAjB,EAAyB;AAC9B,QAAID,iBAAiBC,MAAjB,CAAJ,EAA8B;AAC5B,aAAOS,uBAAuBT,MAAvB,CAAP;AACD,KAFD,MAEO;AACL,aAAOA,MAAP;AACD;AACF;;qBANec,O;;AAQhB,WAASF,cAAT,CAAwBG,GAAxB,EAA6B;AAC3B,QAAIA,GAAJ,EAAS;AACP,aAAO,MAAMA,GAAN,GAAY,GAAnB;AACD,KAFD,MAEO;AACL,aAAO,MAAP;AACD;AACF,G","file":"migrations.js","sourcesContent":["/**\n * Query format migration.\n * This module can detect query format version and make migration.\n */\n\nexport function isGrafana2target(target) {\n if (!target.mode || target.mode === 0 || target.mode === 2) {\n if ((target.hostFilter || target.itemFilter || target.downsampleFunction ||\n (target.host && target.host.host)) &&\n (target.item.filter === undefined && target.host.filter === undefined)) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n\nexport function migrateFrom2To3version(target) {\n target.group.filter = target.group.name === \"*\" ? \"/.*/\" : target.group.name;\n target.host.filter = target.host.name === \"*\" ? convertToRegex(target.hostFilter) : target.host.name;\n target.application.filter = target.application.name === \"*\" ? \"\" : target.application.name;\n target.item.filter = target.item.name === \"All\" ? convertToRegex(target.itemFilter) : target.item.name;\n return target;\n}\n\nexport function migrate(target) {\n if (isGrafana2target(target)) {\n return migrateFrom2To3version(target);\n } else {\n return target;\n }\n}\n\nfunction convertToRegex(str) {\n if (str) {\n return '/' + str + '/';\n } else {\n return '/.*/';\n }\n}\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/module.js b/dist/datasource-zabbix/module.js new file mode 100644 index 0000000..2b772d3 --- /dev/null +++ b/dist/datasource-zabbix/module.js @@ -0,0 +1,51 @@ +'use strict'; + +System.register(['./datasource', './query.controller'], function (_export, _context) { + "use strict"; + + var ZabbixAPIDatasource, ZabbixQueryController, ZabbixConfigController, ZabbixQueryOptionsController, ZabbixAnnotationsQueryController; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + return { + setters: [function (_datasource) { + ZabbixAPIDatasource = _datasource.ZabbixAPIDatasource; + }, function (_queryController) { + ZabbixQueryController = _queryController.ZabbixQueryController; + }], + execute: function () { + _export('ConfigCtrl', ZabbixConfigController = function ZabbixConfigController() { + _classCallCheck(this, ZabbixConfigController); + }); + + ZabbixConfigController.templateUrl = 'datasource-zabbix/partials/config.html'; + + _export('QueryOptionsCtrl', ZabbixQueryOptionsController = function ZabbixQueryOptionsController() { + _classCallCheck(this, ZabbixQueryOptionsController); + }); + + ZabbixQueryOptionsController.templateUrl = 'datasource-zabbix/partials/query.options.html'; + + _export('AnnotationsQueryCtrl', ZabbixAnnotationsQueryController = function ZabbixAnnotationsQueryController() { + _classCallCheck(this, ZabbixAnnotationsQueryController); + }); + + ZabbixAnnotationsQueryController.templateUrl = 'datasource-zabbix/partials/annotations.editor.html'; + + _export('Datasource', ZabbixAPIDatasource); + + _export('ConfigCtrl', ZabbixConfigController); + + _export('QueryCtrl', ZabbixQueryController); + + _export('QueryOptionsCtrl', ZabbixQueryOptionsController); + + _export('AnnotationsQueryCtrl', ZabbixAnnotationsQueryController); + } + }; +}); +//# sourceMappingURL=module.js.map diff --git a/dist/datasource-zabbix/module.js.map b/dist/datasource-zabbix/module.js.map new file mode 100644 index 0000000..776f7e4 --- /dev/null +++ b/dist/datasource-zabbix/module.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/module.js"],"names":["ZabbixAPIDatasource","ZabbixQueryController","ZabbixConfigController","templateUrl","ZabbixQueryOptionsController","ZabbixAnnotationsQueryController"],"mappings":";;;;;;;;;;;;;;;AAAQA,yB,eAAAA,mB;;AACAC,2B,oBAAAA,qB;;;4BAEFC,sB;;;;AACNA,6BAAuBC,WAAvB,GAAqC,wCAArC;;kCAEMC,4B;;;;AACNA,mCAA6BD,WAA7B,GAA2C,+CAA3C;;sCAEME,gC;;;;AACNA,uCAAiCF,WAAjC,GAA+C,oDAA/C;;4BAGEH,mB;;4BACAE,sB;;2BACAD,qB;;kCACAG,4B;;sCACAC,gC","file":"module.js","sourcesContent":["import {ZabbixAPIDatasource} from './datasource';\nimport {ZabbixQueryController} from './query.controller';\n\nclass ZabbixConfigController {}\nZabbixConfigController.templateUrl = 'datasource-zabbix/partials/config.html';\n\nclass ZabbixQueryOptionsController {}\nZabbixQueryOptionsController.templateUrl = 'datasource-zabbix/partials/query.options.html';\n\nclass ZabbixAnnotationsQueryController {}\nZabbixAnnotationsQueryController.templateUrl = 'datasource-zabbix/partials/annotations.editor.html';\n\nexport {\n ZabbixAPIDatasource as Datasource,\n ZabbixConfigController as ConfigCtrl,\n ZabbixQueryController as QueryCtrl,\n ZabbixQueryOptionsController as QueryOptionsCtrl,\n ZabbixAnnotationsQueryController as AnnotationsQueryCtrl\n};\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/partials/annotations.editor.html b/dist/datasource-zabbix/partials/annotations.editor.html new file mode 100644 index 0000000..6e2e495 --- /dev/null +++ b/dist/datasource-zabbix/partials/annotations.editor.html @@ -0,0 +1,65 @@ +
+
Filter Triggers
+
+
+ Group + + +
+ +
+ Host + + +
+
+
+
+ Application + + +
+ +
+ Trigger + + +
+
+
+
+
+ Minimum severity +
+ +
+
+
+
+
Options
+
+ + + +
+
diff --git a/dist/datasource-zabbix/partials/config.html b/dist/datasource-zabbix/partials/config.html new file mode 100644 index 0000000..56d9129 --- /dev/null +++ b/dist/datasource-zabbix/partials/config.html @@ -0,0 +1,60 @@ + + + +
+

Zabbix API details

+ +
+ + Username + + + +
+ +
+ + Password + + + +
+ +
+
+ +
+ + +
+ + Use from + + + +
+
+ +
+ + Cache update interval + + + +
+
diff --git a/dist/datasource-zabbix/partials/query.editor.html b/dist/datasource-zabbix/partials/query.editor.html new file mode 100644 index 0000000..5a7df44 --- /dev/null +++ b/dist/datasource-zabbix/partials/query.editor.html @@ -0,0 +1,170 @@ + + +
+
+ +
+ +
+
+
+
+
+
+ + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+ + +
+ +
+ + +
+ +
+
+
+
+ +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+
+
+ + +
+ +
+ + +
+ + + +
+ +
diff --git a/dist/datasource-zabbix/partials/query.options.html b/dist/datasource-zabbix/partials/query.options.html new file mode 100644 index 0000000..9224822 --- /dev/null +++ b/dist/datasource-zabbix/partials/query.options.html @@ -0,0 +1,88 @@ +
+
+
+ Max data points + + +
+
+ +
+ +
+
+ +
+
Max data points
+
    +
  • Grafana-Zabbix plugin uses maxDataPoints parameter to consolidate the real number of values down to this + number +
  • +
  • If there are more real values, then by default they will be consolidated using averages
  • +
  • This could hide real peaks and max values in your series
  • +
  • Point consolidation will effect series legend values (min,max,total,current)
  • +
  • If you override maxDataPoint and set a high value performance can be severely effected
  • +
+
+ +
+
IT services
+
    +
  • Select "IT services" in targets menu to activate IT services mode.
  • +
+
+ +
+
IT service property
+
    +
  • Zabbix returns the following availability information about IT service
  • +
  • Status - current status of the IT service
  • +
  • SLA - SLA for the given time interval
  • +
  • OK time - time the service was in OK state, in seconds
  • +
  • Problem time - time the service was in problem state, in seconds
  • +
  • Down time - time the service was in scheduled downtime, in seconds
  • +
+
+ +
+
Text filter
+
    +
  • Use regex to extract a part of the returned value.
  • +
+
+
+
diff --git a/dist/datasource-zabbix/plugin.json b/dist/datasource-zabbix/plugin.json new file mode 100644 index 0000000..c7cfe7f --- /dev/null +++ b/dist/datasource-zabbix/plugin.json @@ -0,0 +1,19 @@ +{ + "type": "datasource", + "name": "Zabbix", + "id": "alexanderzobnin-zabbix-datasource", + + "metrics": true, + "annotations": true, + + "info": { + "author": { + "name": "Alexander Zobnin", + "url": "https://github.com/alexanderzobnin/grafana-zabbix" + }, + "logos": { + "small": "img/zabbix_app_logo.svg", + "large": "img/zabbix_app_logo.svg" + } + } +} diff --git a/dist/datasource-zabbix/query.controller.js b/dist/datasource-zabbix/query.controller.js new file mode 100644 index 0000000..0b2cb4e --- /dev/null +++ b/dist/datasource-zabbix/query.controller.js @@ -0,0 +1,376 @@ +'use strict'; + +System.register(['app/plugins/sdk', 'angular', 'lodash', './utils', './metricFunctions', './migrations', './add-metric-function.directive', './metric-function-editor.directive', './css/query-editor.css!'], function (_export, _context) { + "use strict"; + + var QueryCtrl, angular, _, utils, metricFunctions, migrations, _createClass, ZabbixQueryController; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _possibleConstructorReturn(self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + } + + function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + 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; + }, function (_angular) { + angular = _angular.default; + }, function (_lodash) { + _ = _lodash.default; + }, function (_utils) { + utils = _utils; + }, function (_metricFunctions) { + metricFunctions = _metricFunctions; + }, function (_migrations) { + migrations = _migrations; + }, function (_addMetricFunctionDirective) {}, function (_metricFunctionEditorDirective) {}, function (_cssQueryEditorCss) {}], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + _export('ZabbixQueryController', ZabbixQueryController = function (_QueryCtrl) { + _inherits(ZabbixQueryController, _QueryCtrl); + + // ZabbixQueryCtrl constructor + function ZabbixQueryController($scope, $injector, $rootScope, $sce, templateSrv) { + _classCallCheck(this, ZabbixQueryController); + + var _this = _possibleConstructorReturn(this, (ZabbixQueryController.__proto__ || Object.getPrototypeOf(ZabbixQueryController)).call(this, $scope, $injector)); + + _this.zabbix = _this.datasource.zabbix; + + // Use custom format for template variables + _this.replaceTemplateVars = _this.datasource.replaceTemplateVars; + _this.templateSrv = templateSrv; + + _this.editorModes = { + 0: { value: 'num', text: 'Metrics', mode: 0 }, + 1: { value: 'itservice', text: 'IT Services', mode: 1 }, + 2: { value: 'text', text: 'Text', mode: 2 } + }; + + // 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'); + + // Update metric suggestion when template variable was changed + $rootScope.$on('template-variable-value-updated', function () { + return _this.onVariableChange(); + }); + + // Update metrics when item selected from dropdown + $scope.$on('typeahead-updated', function () { + _this.onTargetBlur(); + }); + + _this.init = function () { + var target = this.target; + + // Migrate old targets + target = migrations.migrate(target); + + var scopeDefaults = { + metric: {}, + oldTarget: _.cloneDeep(this.target), + queryOptionsText: this.renderQueryOptionsText() + }; + _.defaults(this, scopeDefaults); + + // Load default values + var targetDefaults = { + mode: 0, + group: { filter: "" }, + host: { filter: "" }, + application: { filter: "" }, + item: { filter: "" }, + functions: [], + options: { + showDisabledItems: false + } + }; + _.defaults(target, targetDefaults); + + // Create function instances from saved JSON + target.functions = _.map(target.functions, function (func) { + return metricFunctions.createFuncInstance(func.def, func.params); + }); + + if (target.mode === 0 || target.mode === 2) { + + this.downsampleFunctionList = [{ name: "avg", value: "avg" }, { name: "min", value: "min" }, { name: "max", value: "max" }]; + + this.initFilters(); + } else if (target.mode === 1) { + this.slaPropertyList = [{ name: "Status", property: "status" }, { name: "SLA", property: "sla" }, { name: "OK time", property: "okTime" }, { name: "Problem time", property: "problemTime" }, { name: "Down time", property: "downtimeTime" }]; + this.itserviceList = [{ name: "test" }]; + this.updateITServiceList(); + } + }; + + _this.init(); + return _this; + } + + _createClass(ZabbixQueryController, [{ + key: 'initFilters', + value: function initFilters() { + var itemtype = this.editorModes[this.target.mode].value; + return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps(), this.suggestItems(itemtype)]); + } + }, { + key: 'suggestGroups', + value: function suggestGroups() { + var _this2 = this; + + return this.zabbix.getAllGroups().then(function (groups) { + _this2.metric.groupList = groups; + return groups; + }); + } + }, { + key: 'suggestHosts', + value: function suggestHosts() { + var _this3 = this; + + var groupFilter = this.replaceTemplateVars(this.target.group.filter); + return this.zabbix.getAllHosts(groupFilter).then(function (hosts) { + _this3.metric.hostList = hosts; + return hosts; + }); + } + }, { + key: 'suggestApps', + value: function suggestApps() { + var _this4 = this; + + var groupFilter = this.replaceTemplateVars(this.target.group.filter); + var hostFilter = this.replaceTemplateVars(this.target.host.filter); + return this.zabbix.getAllApps(groupFilter, hostFilter).then(function (apps) { + _this4.metric.appList = apps; + return apps; + }); + } + }, { + key: 'suggestItems', + value: function suggestItems() { + var _this5 = this; + + var itemtype = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'num'; + + var groupFilter = this.replaceTemplateVars(this.target.group.filter); + var hostFilter = this.replaceTemplateVars(this.target.host.filter); + var appFilter = this.replaceTemplateVars(this.target.application.filter); + var options = { + itemtype: itemtype, + showDisabledItems: this.target.options.showDisabledItems + }; + + return this.zabbix.getAllItems(groupFilter, hostFilter, appFilter, options).then(function (items) { + _this5.metric.itemList = items; + return items; + }); + } + }, { + key: 'isRegex', + value: function isRegex(str) { + return utils.isRegex(str); + } + }, { + key: 'isVariable', + value: function isVariable(str) { + return utils.isTemplateVariable(str, this.templateSrv.variables); + } + }, { + key: 'onTargetBlur', + value: function onTargetBlur() { + var newTarget = _.cloneDeep(this.target); + if (!_.isEqual(this.oldTarget, this.target)) { + this.oldTarget = newTarget; + this.targetChanged(); + } + } + }, { + key: 'onVariableChange', + value: function onVariableChange() { + if (this.isContainsVariables()) { + this.targetChanged(); + } + } + }, { + key: 'isContainsVariables', + value: function isContainsVariables() { + var _this6 = this; + + return _.some(['group', 'host', 'application'], function (field) { + if (_this6.target[field] && _this6.target[field].filter) { + return utils.isTemplateVariable(_this6.target[field].filter, _this6.templateSrv.variables); + } else { + return false; + } + }); + } + }, { + key: 'parseTarget', + value: function parseTarget() {} + // Parse target + + + // Validate target and set validation info + + }, { + key: 'validateTarget', + value: function validateTarget() { + // validate + } + }, { + key: 'targetChanged', + value: function targetChanged() { + this.initFilters(); + this.parseTarget(); + this.panelCtrl.refresh(); + } + }, { + key: 'addFunction', + value: function addFunction(funcDef) { + var newFunc = metricFunctions.createFuncInstance(funcDef); + newFunc.added = true; + this.target.functions.push(newFunc); + + this.moveAliasFuncLast(); + + if (newFunc.params.length && newFunc.added || newFunc.def.params.length === 0) { + this.targetChanged(); + } + } + }, { + key: 'removeFunction', + value: function removeFunction(func) { + this.target.functions = _.without(this.target.functions, func); + this.targetChanged(); + } + }, { + key: 'moveAliasFuncLast', + value: function moveAliasFuncLast() { + var aliasFunc = _.find(this.target.functions, function (func) { + return func.def.name === 'alias' || func.def.name === 'aliasByNode' || func.def.name === 'aliasByMetric'; + }); + + if (aliasFunc) { + this.target.functions = _.without(this.target.functions, aliasFunc); + this.target.functions.push(aliasFunc); + } + } + }, { + key: 'toggleQueryOptions', + value: function toggleQueryOptions() { + this.showQueryOptions = !this.showQueryOptions; + } + }, { + key: 'onQueryOptionChange', + value: function onQueryOptionChange() { + this.queryOptionsText = this.renderQueryOptionsText(); + this.onTargetBlur(); + } + }, { + key: 'renderQueryOptionsText', + value: function renderQueryOptionsText() { + var optionsMap = { + showDisabledItems: "Show disabled items" + }; + var options = []; + _.forOwn(this.target.options, function (value, key) { + if (value) { + if (value === true) { + // Show only option name (if enabled) for boolean options + options.push(optionsMap[key]); + } else { + // Show "option = value" for another options + options.push(optionsMap[key] + " = " + value); + } + } + }); + return "Options: " + options.join(', '); + } + }, { + key: 'switchEditorMode', + value: function switchEditorMode(mode) { + this.target.mode = mode; + this.init(); + } + }, { + key: 'updateITServiceList', + value: function updateITServiceList() { + var _this7 = this; + + this.zabbix.getITService().then(function (iteservices) { + _this7.itserviceList = []; + _this7.itserviceList = _this7.itserviceList.concat(iteservices); + }); + } + }, { + key: 'selectITService', + value: function selectITService() { + if (!_.isEqual(this.oldTarget, this.target) && _.isEmpty(this.target.errors)) { + this.oldTarget = angular.copy(this.target); + this.panelCtrl.refresh(); + } + } + }]); + + return ZabbixQueryController; + }(QueryCtrl)); + + _export('ZabbixQueryController', ZabbixQueryController); + + // Set templateUrl as static property + ZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html'; + } + }; +}); +//# sourceMappingURL=query.controller.js.map diff --git a/dist/datasource-zabbix/query.controller.js.map b/dist/datasource-zabbix/query.controller.js.map new file mode 100644 index 0000000..75433c9 --- /dev/null +++ b/dist/datasource-zabbix/query.controller.js.map @@ -0,0 +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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiTA;AACA,WAASA,cAAT,CAAwBC,KAAxB,EAA+BC,UAA/B,EAA2C;AACzC,WAAOC,EAAEC,IAAF,CAAOD,EAAEE,GAAF,CAAMJ,MAAMK,MAAN,CAAaJ,UAAb,CAAN,EAAgC,MAAhC,CAAP,CAAP;AACD;;;AApTOK,e,kBAAAA,S;;AACDC,a;;AACAL,O;;AACKM,W;;AACAC,qB;;AACAC,gB;;;;;;;;;;;;;;;;;;;;;uCAOCC,qB;;;AAEX;AACA,uCAAYC,MAAZ,EAAoBC,SAApB,EAA+BC,UAA/B,EAA2CC,IAA3C,EAAiDC,WAAjD,EAA8D;AAAA;;AAAA,oJACtDJ,MADsD,EAC9CC,SAD8C;;AAE5D,gBAAKI,MAAL,GAAc,MAAKC,UAAL,CAAgBD,MAA9B;;AAEA;AACA,gBAAKE,mBAAL,GAA2B,MAAKD,UAAL,CAAgBC,mBAA3C;AACA,gBAAKH,WAAL,GAAmBA,WAAnB;;AAEA,gBAAKI,WAAL,GAAmB;AACjB,eAAG,EAACC,OAAO,KAAR,EAAeC,MAAM,SAArB,EAAgCC,MAAM,CAAtC,EADc;AAEjB,eAAG,EAACF,OAAO,WAAR,EAAqBC,MAAM,aAA3B,EAA0CC,MAAM,CAAhD,EAFc;AAGjB,eAAG,EAACF,OAAO,MAAR,EAAgBC,MAAM,MAAtB,EAA8BC,MAAM,CAApC;AAHc,WAAnB;;AAMA;AACA,gBAAKC,aAAL,GAAqBtB,EAAEuB,OAAF,CAAU1B,cAAV,SAAgC,WAAhC,CAArB;AACA,gBAAK2B,YAAL,GAAoBxB,EAAEuB,OAAF,CAAU1B,cAAV,SAAgC,UAAhC,CAApB;AACA,gBAAK4B,mBAAL,GAA2BzB,EAAEuB,OAAF,CAAU1B,cAAV,SAAgC,SAAhC,CAA3B;AACA,gBAAK6B,YAAL,GAAoB1B,EAAEuB,OAAF,CAAU1B,cAAV,SAAgC,UAAhC,CAApB;;AAEA;AACAe,qBAAWe,GAAX,CAAe,iCAAf,EAAkD;AAAA,mBAAM,MAAKC,gBAAL,EAAN;AAAA,WAAlD;;AAEA;AACAlB,iBAAOiB,GAAP,CAAW,mBAAX,EAAgC,YAAM;AACpC,kBAAKE,YAAL;AACD,WAFD;;AAIA,gBAAKC,IAAL,GAAY,YAAW;AACrB,gBAAIC,SAAS,KAAKA,MAAlB;;AAEA;AACAA,qBAASvB,WAAWwB,OAAX,CAAmBD,MAAnB,CAAT;;AAEA,gBAAIE,gBAAgB;AAClB9B,sBAAQ,EADU;AAElB+B,yBAAWlC,EAAEmC,SAAF,CAAY,KAAKJ,MAAjB,CAFO;AAGlBK,gCAAkB,KAAKC,sBAAL;AAHA,aAApB;AAKArC,cAAEsC,QAAF,CAAW,IAAX,EAAiBL,aAAjB;;AAEA;AACA,gBAAIM,iBAAiB;AACnBlB,oBAAM,CADa;AAEnBmB,qBAAO,EAAEC,QAAQ,EAAV,EAFY;AAGnBC,oBAAM,EAAED,QAAQ,EAAV,EAHa;AAInBE,2BAAa,EAAEF,QAAQ,EAAV,EAJM;AAKnBG,oBAAM,EAAEH,QAAQ,EAAV,EALa;AAMnBI,yBAAW,EANQ;AAOnBC,uBAAS;AACPC,mCAAmB;AADZ;AAPU,aAArB;AAWA/C,cAAEsC,QAAF,CAAWP,MAAX,EAAmBQ,cAAnB;;AAEA;AACAR,mBAAOc,SAAP,GAAmB7C,EAAEE,GAAF,CAAM6B,OAAOc,SAAb,EAAwB,UAASG,IAAT,EAAe;AACxD,qBAAOzC,gBAAgB0C,kBAAhB,CAAmCD,KAAKE,GAAxC,EAA6CF,KAAKG,MAAlD,CAAP;AACD,aAFkB,CAAnB;;AAIA,gBAAIpB,OAAOV,IAAP,KAAgB,CAAhB,IACAU,OAAOV,IAAP,KAAgB,CADpB,EACuB;;AAErB,mBAAK+B,sBAAL,GAA8B,CAC5B,EAACC,MAAM,KAAP,EAAclC,OAAO,KAArB,EAD4B,EAE5B,EAACkC,MAAM,KAAP,EAAclC,OAAO,KAArB,EAF4B,EAG5B,EAACkC,MAAM,KAAP,EAAclC,OAAO,KAArB,EAH4B,CAA9B;;AAMA,mBAAKmC,WAAL;AACD,aAVD,MAWK,IAAIvB,OAAOV,IAAP,KAAgB,CAApB,EAAuB;AAC1B,mBAAKkC,eAAL,GAAuB,CACrB,EAACF,MAAM,QAAP,EAAiBG,UAAU,QAA3B,EADqB,EAErB,EAACH,MAAM,KAAP,EAAcG,UAAU,KAAxB,EAFqB,EAGrB,EAACH,MAAM,SAAP,EAAkBG,UAAU,QAA5B,EAHqB,EAIrB,EAACH,MAAM,cAAP,EAAuBG,UAAU,aAAjC,EAJqB,EAKrB,EAACH,MAAM,WAAP,EAAoBG,UAAU,cAA9B,EALqB,CAAvB;AAOA,mBAAKC,aAAL,GAAqB,CAAC,EAACJ,MAAM,MAAP,EAAD,CAArB;AACA,mBAAKK,mBAAL;AACD;AACF,WAtDD;;AAwDA,gBAAK5B,IAAL;AApF4D;AAqF7D;;;;wCAEa;AACZ,gBAAI6B,WAAW,KAAKzC,WAAL,CAAiB,KAAKa,MAAL,CAAYV,IAA7B,EAAmCF,KAAlD;AACA,mBAAOyC,QAAQC,GAAR,CAAY,CACjB,KAAKC,aAAL,EADiB,EAEjB,KAAKC,YAAL,EAFiB,EAGjB,KAAKC,WAAL,EAHiB,EAIjB,KAAKC,YAAL,CAAkBN,QAAlB,CAJiB,CAAZ,CAAP;AAMD;;;0CAEe;AAAA;;AACd,mBAAO,KAAK5C,MAAL,CAAYmD,YAAZ,GACNC,IADM,CACD,kBAAU;AACd,qBAAKhE,MAAL,CAAYiE,SAAZ,GAAwBC,MAAxB;AACA,qBAAOA,MAAP;AACD,aAJM,CAAP;AAKD;;;yCAEc;AAAA;;AACb,gBAAIC,cAAc,KAAKrD,mBAAL,CAAyB,KAAKc,MAAL,CAAYS,KAAZ,CAAkBC,MAA3C,CAAlB;AACA,mBAAO,KAAK1B,MAAL,CAAYwD,WAAZ,CAAwBD,WAAxB,EACNH,IADM,CACD,iBAAS;AACb,qBAAKhE,MAAL,CAAYqE,QAAZ,GAAuBC,KAAvB;AACA,qBAAOA,KAAP;AACD,aAJM,CAAP;AAKD;;;wCAEa;AAAA;;AACZ,gBAAIH,cAAc,KAAKrD,mBAAL,CAAyB,KAAKc,MAAL,CAAYS,KAAZ,CAAkBC,MAA3C,CAAlB;AACA,gBAAIiC,aAAa,KAAKzD,mBAAL,CAAyB,KAAKc,MAAL,CAAYW,IAAZ,CAAiBD,MAA1C,CAAjB;AACA,mBAAO,KAAK1B,MAAL,CAAY4D,UAAZ,CAAuBL,WAAvB,EAAoCI,UAApC,EACNP,IADM,CACD,gBAAQ;AACZ,qBAAKhE,MAAL,CAAYyE,OAAZ,GAAsBC,IAAtB;AACA,qBAAOA,IAAP;AACD,aAJM,CAAP;AAKD;;;yCAE8B;AAAA;;AAAA,gBAAlBlB,QAAkB,uEAAP,KAAO;;AAC7B,gBAAIW,cAAc,KAAKrD,mBAAL,CAAyB,KAAKc,MAAL,CAAYS,KAAZ,CAAkBC,MAA3C,CAAlB;AACA,gBAAIiC,aAAa,KAAKzD,mBAAL,CAAyB,KAAKc,MAAL,CAAYW,IAAZ,CAAiBD,MAA1C,CAAjB;AACA,gBAAIqC,YAAY,KAAK7D,mBAAL,CAAyB,KAAKc,MAAL,CAAYY,WAAZ,CAAwBF,MAAjD,CAAhB;AACA,gBAAIK,UAAU;AACZa,wBAAUA,QADE;AAEZZ,iCAAmB,KAAKhB,MAAL,CAAYe,OAAZ,CAAoBC;AAF3B,aAAd;;AAKA,mBAAO,KAAKhC,MAAL,CACNgE,WADM,CACMT,WADN,EACmBI,UADnB,EAC+BI,SAD/B,EAC0ChC,OAD1C,EAENqB,IAFM,CAED,iBAAS;AACb,qBAAKhE,MAAL,CAAY6E,QAAZ,GAAuBC,KAAvB;AACA,qBAAOA,KAAP;AACD,aALM,CAAP;AAMD;;;kCAEOC,G,EAAK;AACX,mBAAO5E,MAAM6E,OAAN,CAAcD,GAAd,CAAP;AACD;;;qCAEUA,G,EAAK;AACd,mBAAO5E,MAAM8E,kBAAN,CAAyBF,GAAzB,EAA8B,KAAKpE,WAAL,CAAiBuE,SAA/C,CAAP;AACD;;;yCAEc;AACb,gBAAIC,YAAYtF,EAAEmC,SAAF,CAAY,KAAKJ,MAAjB,CAAhB;AACA,gBAAI,CAAC/B,EAAEuF,OAAF,CAAU,KAAKrD,SAAf,EAA0B,KAAKH,MAA/B,CAAL,EAA6C;AAC3C,mBAAKG,SAAL,GAAiBoD,SAAjB;AACA,mBAAKE,aAAL;AACD;AACF;;;6CAEkB;AACjB,gBAAI,KAAKC,mBAAL,EAAJ,EAAgC;AAC9B,mBAAKD,aAAL;AACD;AACF;;;gDAKqB;AAAA;;AACpB,mBAAOxF,EAAE0F,IAAF,CAAO,CAAC,OAAD,EAAU,MAAV,EAAkB,aAAlB,CAAP,EAAyC,iBAAS;AACvD,kBAAI,OAAK3D,MAAL,CAAY4D,KAAZ,KAAsB,OAAK5D,MAAL,CAAY4D,KAAZ,EAAmBlD,MAA7C,EAAqD;AACnD,uBAAOnC,MAAM8E,kBAAN,CAAyB,OAAKrD,MAAL,CAAY4D,KAAZ,EAAmBlD,MAA5C,EAAoD,OAAK3B,WAAL,CAAiBuE,SAArE,CAAP;AACD,eAFD,MAEO;AACL,uBAAO,KAAP;AACD;AACF,aANM,CAAP;AAOD;;;wCAEa,CAEb;AADC;;;AAGF;;;;2CACiB;AACf;AACD;;;0CAEe;AACd,iBAAK/B,WAAL;AACA,iBAAKsC,WAAL;AACA,iBAAKC,SAAL,CAAeC,OAAf;AACD;;;sCAEWC,O,EAAS;AACnB,gBAAIC,UAAUzF,gBAAgB0C,kBAAhB,CAAmC8C,OAAnC,CAAd;AACAC,oBAAQC,KAAR,GAAgB,IAAhB;AACA,iBAAKlE,MAAL,CAAYc,SAAZ,CAAsBqD,IAAtB,CAA2BF,OAA3B;;AAEA,iBAAKG,iBAAL;;AAEA,gBAAIH,QAAQ7C,MAAR,CAAeiD,MAAf,IAAyBJ,QAAQC,KAAjC,IACAD,QAAQ9C,GAAR,CAAYC,MAAZ,CAAmBiD,MAAnB,KAA8B,CADlC,EACqC;AACnC,mBAAKZ,aAAL;AACD;AACF;;;yCAEcxC,I,EAAM;AACnB,iBAAKjB,MAAL,CAAYc,SAAZ,GAAwB7C,EAAEqG,OAAF,CAAU,KAAKtE,MAAL,CAAYc,SAAtB,EAAiCG,IAAjC,CAAxB;AACA,iBAAKwC,aAAL;AACD;;;8CAEmB;AAClB,gBAAIc,YAAYtG,EAAEuG,IAAF,CAAO,KAAKxE,MAAL,CAAYc,SAAnB,EAA8B,UAASG,IAAT,EAAe;AAC3D,qBAAOA,KAAKE,GAAL,CAASG,IAAT,KAAkB,OAAlB,IACLL,KAAKE,GAAL,CAASG,IAAT,KAAkB,aADb,IAELL,KAAKE,GAAL,CAASG,IAAT,KAAkB,eAFpB;AAGD,aAJe,CAAhB;;AAMA,gBAAIiD,SAAJ,EAAe;AACb,mBAAKvE,MAAL,CAAYc,SAAZ,GAAwB7C,EAAEqG,OAAF,CAAU,KAAKtE,MAAL,CAAYc,SAAtB,EAAiCyD,SAAjC,CAAxB;AACA,mBAAKvE,MAAL,CAAYc,SAAZ,CAAsBqD,IAAtB,CAA2BI,SAA3B;AACD;AACF;;;+CAEoB;AACnB,iBAAKE,gBAAL,GAAwB,CAAC,KAAKA,gBAA9B;AACD;;;gDAEqB;AACpB,iBAAKpE,gBAAL,GAAwB,KAAKC,sBAAL,EAAxB;AACA,iBAAKR,YAAL;AACD;;;mDAEwB;AACvB,gBAAI4E,aAAa;AACf1D,iCAAmB;AADJ,aAAjB;AAGA,gBAAID,UAAU,EAAd;AACA9C,cAAE0G,MAAF,CAAS,KAAK3E,MAAL,CAAYe,OAArB,EAA8B,UAAC3B,KAAD,EAAQwF,GAAR,EAAgB;AAC5C,kBAAIxF,KAAJ,EAAW;AACT,oBAAIA,UAAU,IAAd,EAAoB;AAClB;AACA2B,0BAAQoD,IAAR,CAAaO,WAAWE,GAAX,CAAb;AACD,iBAHD,MAGO;AACL;AACA7D,0BAAQoD,IAAR,CAAaO,WAAWE,GAAX,IAAkB,KAAlB,GAA0BxF,KAAvC;AACD;AACF;AACF,aAVD;AAWA,mBAAO,cAAc2B,QAAQ8D,IAAR,CAAa,IAAb,CAArB;AACD;;;2CASgBvF,I,EAAM;AACrB,iBAAKU,MAAL,CAAYV,IAAZ,GAAmBA,IAAnB;AACA,iBAAKS,IAAL;AACD;;;gDASqB;AAAA;;AACpB,iBAAKf,MAAL,CAAY8F,YAAZ,GAA2B1C,IAA3B,CAAgC,UAAC2C,WAAD,EAAiB;AAC/C,qBAAKrD,aAAL,GAAqB,EAArB;AACA,qBAAKA,aAAL,GAAqB,OAAKA,aAAL,CAAmBsD,MAAnB,CAA0BD,WAA1B,CAArB;AACD,aAHD;AAID;;;4CAKiB;AAChB,gBAAI,CAAC9G,EAAEuF,OAAF,CAAU,KAAKrD,SAAf,EAA0B,KAAKH,MAA/B,CAAD,IAA2C/B,EAAEgH,OAAF,CAAU,KAAKjF,MAAL,CAAYkF,MAAtB,CAA/C,EAA8E;AAC5E,mBAAK/E,SAAL,GAAiB7B,QAAQ6G,IAAR,CAAa,KAAKnF,MAAlB,CAAjB;AACA,mBAAK8D,SAAL,CAAeC,OAAf;AACD;AACF;;;;QA/RwC1F,S;;;;AAkS3C;AACAK,4BAAsB0G,WAAtB,GAAoC,8CAApC","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 diff --git a/dist/datasource-zabbix/responseHandler.js b/dist/datasource-zabbix/responseHandler.js new file mode 100644 index 0000000..7e6518a --- /dev/null +++ b/dist/datasource-zabbix/responseHandler.js @@ -0,0 +1,113 @@ +'use strict'; + +System.register(['lodash'], function (_export, _context) { + "use strict"; + + var _; + + /** + * Convert Zabbix API history.get response to Grafana format + * + * @return {Array} Array of timeseries in Grafana format + * { + * target: "Metric name", + * datapoints: [[, ], ...] + * } + */ + function convertHistory(history, items, addHostName, convertPointCallback) { + /** + * Response should be in the format: + * data: [ + * { + * target: "Metric name", + * datapoints: [[, ], ...] + * }, ... + * ] + */ + + // Group history by itemid + var grouped_history = _.groupBy(history, 'itemid'); + var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid'); //uniqBy is needed to deduplicate + + return _.map(grouped_history, function (hist, itemid) { + var item = _.find(items, { 'itemid': itemid }); + var alias = item.name; + if (_.keys(hosts).length > 1 && addHostName) { + //only when actual multi hosts selected + var host = _.find(hosts, { 'hostid': item.hostid }); + alias = host.name + ": " + alias; + } + return { + target: alias, + datapoints: _.map(hist, convertPointCallback) + }; + }); + } + + function handleHistory(history, items) { + var addHostName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + return convertHistory(history, items, addHostName, convertHistoryPoint); + }function handleTrends(history, items, valueType) { + var addHostName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + + var convertPointCallback = _.partial(convertTrendPoint, valueType); + return convertHistory(history, items, addHostName, convertPointCallback); + } + + function handleSLAResponse(itservice, slaProperty, slaObject) { + var targetSLA = slaObject[itservice.serviceid].sla[0]; + if (slaProperty.property === 'status') { + var targetStatus = parseInt(slaObject[itservice.serviceid].status); + return { + target: itservice.name + ' ' + slaProperty.name, + datapoints: [[targetStatus, targetSLA.to * 1000]] + }; + } else { + return { + target: itservice.name + ' ' + slaProperty.name, + datapoints: [[targetSLA[slaProperty.property], targetSLA.from * 1000], [targetSLA[slaProperty.property], targetSLA.to * 1000]] + }; + } + }function convertHistoryPoint(point) { + // Value must be a number for properly work + return [Number(point.value), point.clock * 1000]; + } + + function convertTrendPoint(valueType, point) { + var value; + switch (valueType) { + case "min": + value = point.value_min; + break; + case "max": + value = point.value_max; + break; + case "avg": + value = point.value_avg; + break; + default: + value = point.value_avg; + } + + return [Number(value), point.clock * 1000]; + }return { + setters: [function (_lodash) { + _ = _lodash.default; + }], + execute: function () { + _export('default', { + handleHistory: handleHistory, + convertHistory: convertHistory, + handleTrends: handleTrends, + handleSLAResponse: handleSLAResponse + }); + + // Fix for backward compatibility with lodash 2.4 + if (!_.uniqBy) { + _.uniqBy = _.uniq; + } + } + }; +}); +//# sourceMappingURL=responseHandler.js.map diff --git a/dist/datasource-zabbix/responseHandler.js.map b/dist/datasource-zabbix/responseHandler.js.map new file mode 100644 index 0000000..0106190 --- /dev/null +++ b/dist/datasource-zabbix/responseHandler.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/responseHandler.js"],"names":["convertHistory","history","items","addHostName","convertPointCallback","grouped_history","_","groupBy","hosts","uniqBy","flatten","map","hist","itemid","item","find","alias","name","keys","length","host","hostid","target","datapoints","handleHistory","convertHistoryPoint","handleTrends","valueType","partial","convertTrendPoint","handleSLAResponse","itservice","slaProperty","slaObject","targetSLA","serviceid","sla","property","targetStatus","parseInt","status","to","from","point","Number","value","clock","value_min","value_max","value_avg","uniq"],"mappings":"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","file":"responseHandler.js","sourcesContent":["import _ from 'lodash';\n\n/**\n * Convert Zabbix API history.get response to Grafana format\n *\n * @return {Array} Array of timeseries in Grafana format\n * {\n * target: \"Metric name\",\n * datapoints: [[, ], ...]\n * }\n */\nfunction convertHistory(history, items, addHostName, convertPointCallback) {\n /**\n * Response should be in the format:\n * data: [\n * {\n * target: \"Metric name\",\n * datapoints: [[, ], ...]\n * }, ...\n * ]\n */\n\n // Group history by itemid\n var grouped_history = _.groupBy(history, 'itemid');\n var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid'); //uniqBy is needed to deduplicate\n\n return _.map(grouped_history, function(hist, itemid) {\n var item = _.find(items, {'itemid': itemid});\n var alias = item.name;\n if (_.keys(hosts).length > 1 && addHostName) { //only when actual multi hosts selected\n var host = _.find(hosts, {'hostid': item.hostid});\n alias = host.name + \": \" + alias;\n }\n return {\n target: alias,\n datapoints: _.map(hist, convertPointCallback)\n };\n });\n}\n\nfunction handleHistory(history, items, addHostName = true) {\n return convertHistory(history, items, addHostName, convertHistoryPoint);\n}\n\nfunction handleTrends(history, items, valueType, addHostName = true) {\n var convertPointCallback = _.partial(convertTrendPoint, valueType);\n return convertHistory(history, items, addHostName, convertPointCallback);\n}\n\nfunction handleSLAResponse(itservice, slaProperty, slaObject) {\n var targetSLA = slaObject[itservice.serviceid].sla[0];\n if (slaProperty.property === 'status') {\n var targetStatus = parseInt(slaObject[itservice.serviceid].status);\n return {\n target: itservice.name + ' ' + slaProperty.name,\n datapoints: [\n [targetStatus, targetSLA.to * 1000]\n ]\n };\n } else {\n return {\n target: itservice.name + ' ' + slaProperty.name,\n datapoints: [\n [targetSLA[slaProperty.property], targetSLA.from * 1000],\n [targetSLA[slaProperty.property], targetSLA.to * 1000]\n ]\n };\n }\n}\n\nfunction convertHistoryPoint(point) {\n // Value must be a number for properly work\n return [\n Number(point.value),\n point.clock * 1000\n ];\n}\n\nfunction convertTrendPoint(valueType, point) {\n var value;\n switch (valueType) {\n case \"min\":\n value = point.value_min;\n break;\n case \"max\":\n value = point.value_max;\n break;\n case \"avg\":\n value = point.value_avg;\n break;\n default:\n value = point.value_avg;\n }\n\n return [\n Number(value),\n point.clock * 1000\n ];\n}\n\nexport default {\n handleHistory: handleHistory,\n convertHistory: convertHistory,\n handleTrends: handleTrends,\n handleSLAResponse: handleSLAResponse\n};\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.uniqBy) {_.uniqBy = _.uniq;}\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/specs/datasource_specs.js b/dist/datasource-zabbix/specs/datasource_specs.js new file mode 100644 index 0000000..6b4dc45 --- /dev/null +++ b/dist/datasource-zabbix/specs/datasource_specs.js @@ -0,0 +1,230 @@ +import {Datasource} from "../module"; +import {zabbixTemplateFormat} from "../datasource"; +import Q from "q"; +import sinon from 'sinon'; +import _ from 'lodash'; + +describe('ZabbixDatasource', () => { + let ctx = {}; + let defined = sinon.match.defined; + + beforeEach(() => { + ctx.instanceSettings = { + jsonData: { + username: 'zabbix', + password: 'zabbix', + trends: true, + trendsFrom: '7d' + } + }; + ctx.templateSrv = {}; + ctx.alertSrv = {}; + ctx.zabbix = () => {}; + + ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.alertSrv, ctx.zabbix); + }); + + describe('When querying data', () => { + beforeEach(() => { + ctx.ds.replaceTemplateVars = (str) => str; + }); + + ctx.options = { + targets: [ + { + group: {filter: ""}, + host: {filter: ""}, + application: {filter: ""}, + item: {filter: ""} + } + ], + range: {from: 'now-7d', to: 'now'} + }; + + it('should return an empty array when no targets are set', (done) => { + let options = { + targets: [], + range: {from: 'now-6h', to: 'now'} + }; + ctx.ds.query(options).then(result => { + expect(result.data).to.have.length(0); + done(); + }); + }); + + it('should use trends if it enabled and time more than trendsFrom', (done) => { + let ranges = ['now-7d', 'now-168h', 'now-1M', 'now-1y']; + + _.forEach(ranges, range => { + ctx.options.range.from = range; + ctx.ds.queryNumericData = sinon.spy(); + ctx.ds.query(ctx.options); + + // Check that useTrends options is true + expect(ctx.ds.queryNumericData) + .to.have.been.calledWith(defined, defined, defined, true); + }); + + done(); + }); + + it('shouldnt use trends if it enabled and time less than trendsFrom', (done) => { + let ranges = ['now-6d', 'now-167h', 'now-1h', 'now-30m', 'now-30s']; + + _.forEach(ranges, range => { + ctx.options.range.from = range; + ctx.ds.queryNumericData = sinon.spy(); + ctx.ds.query(ctx.options); + + // Check that useTrends options is false + expect(ctx.ds.queryNumericData) + .to.have.been.calledWith(defined, defined, defined, false); + }); + done(); + }); + + }); + + describe('When replacing template variables', () => { + + function testReplacingVariable(target, varValue, expectedResult, done) { + ctx.ds.templateSrv.replace = () => { + return zabbixTemplateFormat(varValue); + }; + + let result = ctx.ds.replaceTemplateVars(target); + expect(result).to.equal(expectedResult); + done(); + } + + /* + * Alphanumerics, spaces, dots, dashes and underscores + * are allowed in Zabbix host name. + * 'AaBbCc0123 .-_' + */ + it('should return properly escaped regex', (done) => { + let target = '$host'; + let template_var_value = 'AaBbCc0123 .-_'; + let expected_result = '/^AaBbCc0123 \\.-_$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + + /* + * Single-value variable + * $host = backend01 + * $host => /^backend01|backend01$/ + */ + it('should return proper regex for single value', (done) => { + let target = '$host'; + let template_var_value = 'backend01'; + let expected_result = '/^backend01$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + + /* + * Multi-value variable + * $host = [backend01, backend02] + * $host => /^(backend01|backend01)$/ + */ + it('should return proper regex for multi-value', (done) => { + let target = '$host'; + let template_var_value = ['backend01', 'backend02']; + let expected_result = '/^(backend01|backend02)$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + }); + + describe('When invoking metricFindQuery()', () => { + beforeEach(() => { + ctx.ds.replaceTemplateVars = (str) => str; + ctx.ds.zabbix = { + getGroups: () => Q.when([]), + getHosts: () => Q.when([]), + getApps: () => Q.when([]), + getItems: () => Q.when([]) + }; + }); + + it('should return groups', (done) => { + const tests = [ + {query: '*', expect: '/.*/'}, + {query: '', expect: ''}, + {query: 'Backend', expect: 'Backend'}, + {query: 'Back*', expect: 'Back*'} + ]; + + let getGroups = sinon.spy(ctx.ds.zabbix, 'getGroups'); + for (const test of tests) { + ctx.ds.metricFindQuery(test.query); + expect(getGroups).to.have.been.calledWith(test.expect); + getGroups.reset(); + } + done(); + }); + + it('should return hosts', (done) => { + const tests = [ + {query: '*.*', expect: '/.*/'}, + {query: '.', expect: ''}, + {query: 'Backend.*', expect: 'Backend'}, + {query: 'Back*.', expect: 'Back*'} + ]; + + let getHosts = sinon.spy(ctx.ds.zabbix, 'getHosts'); + for (const test of tests) { + ctx.ds.metricFindQuery(test.query); + expect(getHosts).to.have.been.calledWith(test.expect); + getHosts.reset(); + } + done(); + }); + + it('should return applications', (done) => { + const tests = [ + {query: '*.*.*', expect: ['/.*/', '/.*/']}, + {query: '.*.', expect: ['', '/.*/']}, + {query: 'Backend.backend01.*', expect: ['Backend', 'backend01']}, + {query: 'Back*.*.', expect: ['Back*', '/.*/']} + ]; + + let getApps = sinon.spy(ctx.ds.zabbix, 'getApps'); + for (const test of tests) { + ctx.ds.metricFindQuery(test.query); + expect(getApps).to.have.been.calledWith(test.expect[0], test.expect[1]); + getApps.reset(); + } + done(); + }); + + it('should return items', (done) => { + const tests = [ + {query: '*.*.*.*', expect: ['/.*/', '/.*/', '']}, + {query: '.*.*.*', expect: ['', '/.*/', '']}, + {query: 'Backend.backend01.*.*', expect: ['Backend', 'backend01', '']}, + {query: 'Back*.*.cpu.*', expect: ['Back*', '/.*/', 'cpu']} + ]; + + let getItems = sinon.spy(ctx.ds.zabbix, 'getItems'); + for (const test of tests) { + ctx.ds.metricFindQuery(test.query); + expect(getItems) + .to.have.been.calledWith(test.expect[0], test.expect[1], test.expect[2]); + getItems.reset(); + } + done(); + }); + + it('should invoke method with proper arguments', (done) => { + let query = '*.*'; + + let getHosts = sinon.spy(ctx.ds.zabbix, 'getHosts'); + ctx.ds.metricFindQuery(query); + expect(getHosts).to.have.been.calledWith('/.*/'); + done(); + }); + }); + +}); diff --git a/dist/datasource-zabbix/specs/modules/datemath.js b/dist/datasource-zabbix/specs/modules/datemath.js new file mode 100644 index 0000000..efbf0bf --- /dev/null +++ b/dist/datasource-zabbix/specs/modules/datemath.js @@ -0,0 +1,111 @@ +import _ from 'lodash'; +import moment from 'moment'; + +var units = ['y', 'M', 'w', 'd', 'h', 'm', 's']; + +export function parse(text, roundUp) { + if (!text) { return undefined; } + if (moment.isMoment(text)) { return text; } + if (_.isDate(text)) { return moment(text); } + + var time; + var mathString = ''; + var index; + var parseString; + + if (text.substring(0, 3) === 'now') { + time = moment(); + mathString = text.substring('now'.length); + } else { + index = text.indexOf('||'); + if (index === -1) { + parseString = text; + mathString = ''; // nothing else + } else { + parseString = text.substring(0, index); + mathString = text.substring(index + 2); + } + // We're going to just require ISO8601 timestamps, k? + time = moment(parseString, moment.ISO_8601); + } + + if (!mathString.length) { + return time; + } + + return parseDateMath(mathString, time, roundUp); +} + +export function isValid(text) { + var date = parse(text); + if (!date) { + return false; + } + + if (moment.isMoment(date)) { + return date.isValid(); + } + + return false; +} + +export function parseDateMath(mathString, time, roundUp) { + var dateTime = time; + var i = 0; + var len = mathString.length; + + while (i < len) { + var c = mathString.charAt(i++); + var type; + var num; + var unit; + + if (c === '/') { + type = 0; + } else if (c === '+') { + type = 1; + } else if (c === '-') { + type = 2; + } else { + return undefined; + } + + if (isNaN(mathString.charAt(i))) { + num = 1; + } else if (mathString.length === 2) { + num = mathString.charAt(i); + } else { + var numFrom = i; + while (!isNaN(mathString.charAt(i))) { + i++; + if (i > 10) { return undefined; } + } + num = parseInt(mathString.substring(numFrom, i), 10); + } + + if (type === 0) { + // rounding is only allowed on whole, single, units (eg M or 1M, not 0.5M or 2M) + if (num !== 1) { + return undefined; + } + } + unit = mathString.charAt(i++); + + if (!_.includes(units, unit)) { + return undefined; + } else { + if (type === 0) { + if (roundUp) { + dateTime.endOf(unit); + } else { + dateTime.startOf(unit); + } + } else if (type === 1) { + dateTime.add(num, unit); + } else if (type === 2) { + dateTime.subtract(num, unit); + } + } + } + return dateTime; +} diff --git a/dist/datasource-zabbix/specs/test-main.js b/dist/datasource-zabbix/specs/test-main.js new file mode 100644 index 0000000..cdaec55 --- /dev/null +++ b/dist/datasource-zabbix/specs/test-main.js @@ -0,0 +1,49 @@ +// JSHint options +/* globals global: false */ + +import prunk from 'prunk'; +import {jsdom} from 'jsdom'; +import chai from 'chai'; +// import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; +import * as dateMath from './modules/datemath'; + +// Mock angular module +var angularMocks = { + module: function() { + return { + directive: function() {}, + service: function() {}, + factory: function() {} + }; + } +}; + +var datemathMock = { + parse: dateMath.parse, + parseDateMath: dateMath.parseDateMath, + isValid: dateMath.isValid +}; + +// Mock Grafana modules that are not available outside of the core project +// Required for loading module.js +prunk.mock('./css/query-editor.css!', 'no css, dude.'); +prunk.mock('app/plugins/sdk', { + QueryCtrl: null +}); +prunk.mock('app/core/utils/datemath', datemathMock); +prunk.mock('angular', angularMocks); +prunk.mock('jquery', 'module not found'); + +// Setup jsdom +// Required for loading angularjs +global.document = jsdom(''); +global.window = global.document.parentWindow; +global.navigator = window.navigator = {}; +global.Node = window.Node; + +// Setup Chai +chai.should(); +chai.use(sinonChai); +global.assert = chai.assert; +global.expect = chai.expect; diff --git a/dist/datasource-zabbix/utils.js b/dist/datasource-zabbix/utils.js new file mode 100644 index 0000000..4db6fb0 --- /dev/null +++ b/dist/datasource-zabbix/utils.js @@ -0,0 +1,169 @@ +'use strict'; + +System.register(['lodash', 'moment'], function (_export, _context) { + "use strict"; + + var _, moment, regexPattern; + + /** + * Expand Zabbix item name + * + * @param {string} name item name, ie "CPU $2 time" + * @param {string} key item key, ie system.cpu.util[,system,avg1] + * @return {string} expanded name, ie "CPU system time" + */ + function expandItemName(name, key) { + + // extract params from key: + // "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"] + var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(','); + + // replace item parameters + for (var i = key_params.length; i >= 1; i--) { + name = name.replace('$' + i, key_params[i - 1]); + } + return name; + } + + // Pattern for testing regex + + _export('expandItemName', expandItemName); + + function isRegex(str) { + return regexPattern.test(str); + } + + _export('isRegex', isRegex); + + function isTemplateVariable(str, templateVariables) { + var variablePattern = /^\$\w+/; + if (variablePattern.test(str)) { + var variables = _.map(templateVariables, function (variable) { + return '$' + variable.name; + }); + return _.includes(variables, str); + } else { + return false; + } + } + + _export('isTemplateVariable', isTemplateVariable); + + function buildRegex(str) { + var matches = str.match(regexPattern); + var pattern = matches[1]; + var flags = matches[2] !== "" ? matches[2] : undefined; + return new RegExp(pattern, flags); + } + + // Need for template variables replace + // From Grafana's templateSrv.js + + _export('buildRegex', buildRegex); + + function escapeRegex(value) { + return value.replace(/[\\^$*+?.()|[\]{}\/]/g, '\\$&'); + } + + _export('escapeRegex', escapeRegex); + + function parseInterval(interval) { + var intervalPattern = /(^[\d]+)(y|M|w|d|h|m|s)/g; + var momentInterval = intervalPattern.exec(interval); + return moment.duration(Number(momentInterval[1]), momentInterval[2]).valueOf(); + } + + _export('parseInterval', parseInterval); + + function parseTimeShiftInterval(interval) { + var intervalPattern = /^([\+\-]*)([\d]+)(y|M|w|d|h|m|s)/g; + var momentInterval = intervalPattern.exec(interval); + var duration = 0; + + if (momentInterval[1] === '+') { + duration = 0 - moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf(); + } else { + duration = moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf(); + } + + return duration; + } + + /** + * Format acknowledges. + * + * @param {array} acknowledges array of Zabbix acknowledge objects + * @return {string} HTML-formatted table + */ + + _export('parseTimeShiftInterval', parseTimeShiftInterval); + + function formatAcknowledges(acknowledges) { + if (acknowledges.length) { + var formatted_acknowledges = '

Acknowledges:
' + ''; + _.each(_.map(acknowledges, function (ack) { + var timestamp = moment.unix(ack.clock); + return ''; + }), function (ack) { + formatted_acknowledges = formatted_acknowledges.concat(ack); + }); + formatted_acknowledges = formatted_acknowledges.concat('
TimeUserComments
' + timestamp.format("DD MMM YYYY HH:mm:ss") + '' + ack.alias + ' (' + ack.name + ' ' + ack.surname + ')' + '' + ack.message + '
'); + return formatted_acknowledges; + } else { + return ''; + } + } + + _export('formatAcknowledges', formatAcknowledges); + + function convertToZabbixAPIUrl(url) { + var zabbixAPIUrlPattern = /.*api_jsonrpc.php$/; + var trimSlashPattern = /(.*?)[\/]*$/; + if (url.match(zabbixAPIUrlPattern)) { + return url; + } else { + return url.replace(trimSlashPattern, "$1"); + } + } + + /** + * Wrap function to prevent multiple calls + * when waiting for result. + */ + + _export('convertToZabbixAPIUrl', convertToZabbixAPIUrl); + + function callOnce(func, promiseKeeper) { + return function () { + if (!promiseKeeper) { + promiseKeeper = Promise.resolve(func.apply(this, arguments).then(function (result) { + promiseKeeper = null; + return result; + })); + } + return promiseKeeper; + }; + } + + // Fix for backward compatibility with lodash 2.4 + + _export('callOnce', callOnce); + + return { + setters: [function (_lodash) { + _ = _lodash.default; + }, function (_moment) { + moment = _moment.default; + }], + execute: function () { + _export('regexPattern', regexPattern = /^\/(.*)\/([gmi]*)$/m); + + _export('regexPattern', regexPattern); + + if (!_.includes) { + _.includes = _.contains; + } + } + }; +}); +//# sourceMappingURL=utils.js.map diff --git a/dist/datasource-zabbix/utils.js.map b/dist/datasource-zabbix/utils.js.map new file mode 100644 index 0000000..bfec5a5 --- /dev/null +++ b/dist/datasource-zabbix/utils.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/utils.js"],"names":["expandItemName","name","key","key_params","substring","indexOf","lastIndexOf","split","i","length","replace","isRegex","str","regexPattern","test","isTemplateVariable","templateVariables","variablePattern","variables","_","map","variable","includes","buildRegex","matches","match","pattern","flags","undefined","RegExp","escapeRegex","value","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","result","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 var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(',');\n\n // replace item parameters\n for (var i = key_params.length; i >= 1; i--) {\n name = name.replace('$' + i, key_params[i - 1]);\n }\n return name;\n}\n\n// Pattern for testing regex\nexport var 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:
'\n + '';\n _.each(_.map(acknowledges, function (ack) {\n var timestamp = moment.unix(ack.clock);\n return '';\n }), function (ack) {\n formatted_acknowledges = formatted_acknowledges.concat(ack);\n });\n formatted_acknowledges = formatted_acknowledges.concat('
TimeUserComments
' + timestamp.format(\"DD MMM YYYY HH:mm:ss\") + '' + ack.alias\n + ' (' + ack.name + ' ' + ack.surname + ')' + '' + ack.message + '
');\n return formatted_acknowledges;\n } else {\n return '';\n }\n}\n\nexport function convertToZabbixAPIUrl(url) {\n var zabbixAPIUrlPattern = /.*api_jsonrpc.php$/;\n var trimSlashPattern = /(.*?)[\\/]*$/;\n if (url.match(zabbixAPIUrlPattern)) {\n return url;\n } else {\n return url.replace(trimSlashPattern, \"$1\");\n }\n}\n\n/**\n * Wrap function to prevent multiple calls\n * when waiting for result.\n */\nexport function callOnce(func, promiseKeeper) {\n return function() {\n if (!promiseKeeper) {\n promiseKeeper = Promise.resolve(\n func.apply(this, arguments)\n .then(result => {\n promiseKeeper = null;\n return result;\n })\n );\n }\n return promiseKeeper;\n };\n}\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.includes) {\n _.includes = _.contains;\n}\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/zabbix.js b/dist/datasource-zabbix/zabbix.js new file mode 100644 index 0000000..83e8875 --- /dev/null +++ b/dist/datasource-zabbix/zabbix.js @@ -0,0 +1,278 @@ +'use strict'; + +System.register(['angular', 'lodash', './utils', './zabbixAPI.service.js', './zabbixCachingProxy.service.js'], function (_export, _context) { + "use strict"; + + var angular, _, utils, _createClass; + + function _toConsumableArray(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { + arr2[i] = arr[i]; + } + + return arr2; + } else { + return Array.from(arr); + } + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + // Use factory() instead service() for multiple data sources support. + // Each Zabbix data source instance should initialize its own API instance. + + /** @ngInject */ + function ZabbixFactory(zabbixAPIService, ZabbixCachingProxy) { + var Zabbix = function () { + function Zabbix(url, username, password, basicAuth, withCredentials, cacheTTL) { + _classCallCheck(this, Zabbix); + + // Initialize Zabbix API + var ZabbixAPI = zabbixAPIService; + this.zabbixAPI = new ZabbixAPI(url, username, password, basicAuth, withCredentials); + + // Initialize caching proxy for requests + var cacheOptions = { + enabled: true, + ttl: cacheTTL + }; + this.cachingProxy = new ZabbixCachingProxy(this.zabbixAPI, cacheOptions); + + // Proxy methods + this.getHistory = this.cachingProxy.getHistory.bind(this.cachingProxy); + + this.getTrend = this.zabbixAPI.getTrend.bind(this.zabbixAPI); + this.getEvents = this.zabbixAPI.getEvents.bind(this.zabbixAPI); + this.getAcknowledges = this.zabbixAPI.getAcknowledges.bind(this.zabbixAPI); + this.getITService = this.zabbixAPI.getITService.bind(this.zabbixAPI); + this.getSLA = this.zabbixAPI.getSLA.bind(this.zabbixAPI); + this.getVersion = this.zabbixAPI.getVersion.bind(this.zabbixAPI); + this.login = this.zabbixAPI.login.bind(this.zabbixAPI); + } + + _createClass(Zabbix, [{ + key: 'getItemsFromTarget', + value: function getItemsFromTarget(target, options) { + var parts = ['group', 'host', 'application', 'item']; + var filters = _.map(parts, function (p) { + return target[p].filter; + }); + return this.getItems.apply(this, _toConsumableArray(filters).concat([options])); + } + }, { + key: 'getAllGroups', + value: function getAllGroups() { + return this.cachingProxy.getGroups(); + } + }, { + key: 'getGroups', + value: function getGroups(groupFilter) { + return this.getAllGroups().then(function (groups) { + return findByFilter(groups, groupFilter); + }); + } + }, { + key: 'getAllHosts', + value: function getAllHosts(groupFilter) { + var _this = this; + + return this.getGroups(groupFilter).then(function (groups) { + var groupids = _.map(groups, 'groupid'); + return _this.cachingProxy.getHosts(groupids); + }); + } + }, { + key: 'getHosts', + value: function getHosts(groupFilter, hostFilter) { + return this.getAllHosts(groupFilter).then(function (hosts) { + return findByFilter(hosts, hostFilter); + }); + } + }, { + key: 'getAllApps', + value: function getAllApps(groupFilter, hostFilter) { + var _this2 = this; + + return this.getHosts(groupFilter, hostFilter).then(function (hosts) { + var hostids = _.map(hosts, 'hostid'); + return _this2.cachingProxy.getApps(hostids); + }); + } + }, { + key: 'getApps', + value: function getApps(groupFilter, hostFilter, appFilter) { + var _this3 = this; + + return this.getHosts(groupFilter, hostFilter).then(function (hosts) { + var hostids = _.map(hosts, 'hostid'); + if (appFilter) { + return _this3.cachingProxy.getApps(hostids).then(function (apps) { + return filterByQuery(apps, appFilter); + }); + } else { + return { + appFilterEmpty: true, + hostids: hostids + }; + } + }); + } + }, { + key: 'getAllItems', + value: function getAllItems(groupFilter, hostFilter, appFilter) { + var _this4 = 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.cachingProxy.getItems(apps.hostids, undefined, options.itemtype); + } else { + var appids = _.map(apps, 'applicationid'); + return _this4.cachingProxy.getItems(undefined, appids, options.itemtype); + } + }).then(function (items) { + if (!options.showDisabledItems) { + items = _.filter(items, { 'status': '0' }); + } + return items; + }); + } + }, { + key: 'getItems', + value: function getItems(groupFilter, hostFilter, appFilter, itemFilter) { + var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + + return this.getAllItems(groupFilter, hostFilter, appFilter, options).then(function (items) { + return filterByQuery(items, itemFilter); + }); + } + }, { + key: 'getTriggers', + value: function getTriggers(groupFilter, hostFilter, appFilter, showTriggers) { + var _this5 = this; + + var promises = [this.getGroups(groupFilter), this.getHosts(groupFilter, hostFilter), this.getApps(groupFilter, hostFilter, appFilter)]; + + return Promise.all(promises).then(function (results) { + var filteredGroups = results[0]; + var filteredHosts = results[1]; + var filteredApps = results[2]; + var query = {}; + + if (appFilter) { + query.applicationids = _.flatten(_.map(filteredApps, 'applicationid')); + } + if (hostFilter) { + query.hostids = _.map(filteredHosts, 'hostid'); + } + if (groupFilter) { + query.groupids = _.map(filteredGroups, 'groupid'); + } + + return query; + }).then(function (query) { + return _this5.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, showTriggers); + }); + } + }]); + + return Zabbix; + }(); + + return Zabbix; + } + + /////////////////////////////////////////////////////////////////////////////// + + /** + * Find group, host, app or item by given name. + * @param list list of groups, apps or other + * @param name visible name + * @return array with finded element or undefined + */ + function findByName(list, name) { + var finded = _.find(list, { 'name': name }); + if (finded) { + return [finded]; + } else { + return undefined; + } + } + + /** + * Different hosts can contains applications and items with same name. + * For this reason use _.filter, which return all elements instead _.find, + * which return only first finded. + * @param {[type]} list list of elements + * @param {[type]} name app name + * @return {[type]} array with finded element or undefined + */ + function filterByName(list, name) { + var finded = _.filter(list, { 'name': name }); + if (finded) { + return finded; + } else { + return undefined; + } + } + + function filterByRegex(list, regex) { + var filterPattern = utils.buildRegex(regex); + return _.filter(list, function (zbx_obj) { + return filterPattern.test(zbx_obj.name); + }); + } + + function findByFilter(list, filter) { + if (utils.isRegex(filter)) { + return filterByRegex(list, filter); + } else { + return findByName(list, filter); + } + } + + function filterByQuery(list, filter) { + if (utils.isRegex(filter)) { + return filterByRegex(list, filter); + } else { + return filterByName(list, filter); + } + } + return { + setters: [function (_angular) { + angular = _angular.default; + }, function (_lodash) { + _ = _lodash.default; + }, function (_utils) { + utils = _utils; + }, function (_zabbixAPIServiceJs) {}, function (_zabbixCachingProxyServiceJs) {}], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + angular.module('grafana.services').factory('Zabbix', ZabbixFactory); + } + }; +}); +//# sourceMappingURL=zabbix.js.map diff --git a/dist/datasource-zabbix/zabbix.js.map b/dist/datasource-zabbix/zabbix.js.map new file mode 100644 index 0000000..8450b5d --- /dev/null +++ b/dist/datasource-zabbix/zabbix.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/zabbix.js"],"names":["ZabbixFactory","zabbixAPIService","ZabbixCachingProxy","Zabbix","url","username","password","basicAuth","withCredentials","cacheTTL","ZabbixAPI","zabbixAPI","cacheOptions","enabled","ttl","cachingProxy","getHistory","bind","getTrend","getEvents","getAcknowledges","getITService","getSLA","getVersion","login","target","options","parts","filters","_","map","p","filter","getItems","getGroups","groupFilter","getAllGroups","then","findByFilter","groups","groupids","getHosts","hostFilter","getAllHosts","hosts","hostids","getApps","appFilter","filterByQuery","apps","appFilterEmpty","undefined","itemtype","appids","showDisabledItems","items","itemFilter","getAllItems","showTriggers","promises","Promise","all","filteredGroups","results","filteredHosts","filteredApps","query","applicationids","flatten","getTriggers","findByName","list","name","finded","find","filterByName","filterByRegex","regex","filterPattern","utils","buildRegex","zbx_obj","test","isRegex","angular","module","factory"],"mappings":"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","file":"zabbix.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPI.service.js';\nimport './zabbixCachingProxy.service.js';\n\n// Use factory() instead service() for multiple data sources support.\n// Each Zabbix data source instance should initialize its own API instance.\n\n/** @ngInject */\nfunction ZabbixFactory(zabbixAPIService, ZabbixCachingProxy) {\n\n class Zabbix {\n constructor(url, username, password, basicAuth, withCredentials, cacheTTL) {\n\n // Initialize Zabbix API\n var ZabbixAPI = zabbixAPIService;\n this.zabbixAPI = new ZabbixAPI(url, username, password, basicAuth, withCredentials);\n\n // Initialize caching proxy for requests\n let cacheOptions = {\n enabled: true,\n ttl: cacheTTL\n };\n this.cachingProxy = new ZabbixCachingProxy(this.zabbixAPI, cacheOptions);\n\n // Proxy methods\n this.getHistory = this.cachingProxy.getHistory.bind(this.cachingProxy);\n\n this.getTrend = this.zabbixAPI.getTrend.bind(this.zabbixAPI);\n this.getEvents = this.zabbixAPI.getEvents.bind(this.zabbixAPI);\n this.getAcknowledges = this.zabbixAPI.getAcknowledges.bind(this.zabbixAPI);\n this.getITService = this.zabbixAPI.getITService.bind(this.zabbixAPI);\n this.getSLA = this.zabbixAPI.getSLA.bind(this.zabbixAPI);\n this.getVersion = this.zabbixAPI.getVersion.bind(this.zabbixAPI);\n this.login = this.zabbixAPI.login.bind(this.zabbixAPI);\n }\n\n getItemsFromTarget(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n let filters = _.map(parts, p => target[p].filter);\n return this.getItems(...filters, options);\n }\n\n getAllGroups() {\n return this.cachingProxy.getGroups();\n }\n\n getGroups(groupFilter) {\n return this.getAllGroups()\n .then(groups => findByFilter(groups, groupFilter));\n }\n\n /**\n * Get list of host belonging to given groups.\n */\n getAllHosts(groupFilter) {\n return this.getGroups(groupFilter)\n .then(groups => {\n let groupids = _.map(groups, 'groupid');\n return this.cachingProxy.getHosts(groupids);\n });\n }\n\n getHosts(groupFilter, hostFilter) {\n return this.getAllHosts(groupFilter)\n .then(hosts => findByFilter(hosts, hostFilter));\n }\n\n /**\n * Get list of applications belonging to given groups and hosts.\n */\n getAllApps(groupFilter, hostFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n return this.cachingProxy.getApps(hostids);\n });\n }\n\n getApps(groupFilter, hostFilter, appFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n if (appFilter) {\n return this.cachingProxy.getApps(hostids)\n .then(apps => filterByQuery(apps, appFilter));\n } else {\n return {\n appFilterEmpty: true,\n hostids: hostids\n };\n }\n });\n }\n\n getAllItems(groupFilter, hostFilter, appFilter, options = {}) {\n return this.getApps(groupFilter, hostFilter, appFilter)\n .then(apps => {\n if (apps.appFilterEmpty) {\n return this.cachingProxy.getItems(apps.hostids, undefined, options.itemtype);\n } else {\n let appids = _.map(apps, 'applicationid');\n return this.cachingProxy.getItems(undefined, appids, options.itemtype);\n }\n })\n .then(items => {\n if (!options.showDisabledItems) {\n items = _.filter(items, {'status': '0'});\n }\n return items;\n });\n }\n\n getItems(groupFilter, hostFilter, appFilter, itemFilter, options = {}) {\n return this.getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => filterByQuery(items, itemFilter));\n }\n\n /**\n * Build query - convert target filters to array of Zabbix items\n */\n getTriggers(groupFilter, hostFilter, appFilter, showTriggers) {\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\n .getTriggers(query.groupids, query.hostids, query.applicationids, showTriggers);\n });\n }\n }\n\n return Zabbix;\n}\n\nangular\n .module('grafana.services')\n .factory('Zabbix', ZabbixFactory);\n\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Find group, host, app or item by given name.\n * @param list list of groups, apps or other\n * @param name visible name\n * @return array with finded element or undefined\n */\nfunction findByName(list, name) {\n var finded = _.find(list, {'name': name});\n if (finded) {\n return [finded];\n } else {\n return undefined;\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 undefined\n */\nfunction filterByName(list, name) {\n var finded = _.filter(list, {'name': name});\n if (finded) {\n return finded;\n } else {\n return undefined;\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"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/zabbixAPI.service.js b/dist/datasource-zabbix/zabbixAPI.service.js new file mode 100644 index 0000000..83395c3 --- /dev/null +++ b/dist/datasource-zabbix/zabbixAPI.service.js @@ -0,0 +1,397 @@ +'use strict'; + +System.register(['angular', 'lodash', './utils', './zabbixAPICore.service'], function (_export, _context) { + "use strict"; + + var angular, _, utils, _createClass; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + /** @ngInject */ + function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) { + var ZabbixAPI = function () { + function ZabbixAPI(api_url, username, password, basicAuth, withCredentials) { + _classCallCheck(this, ZabbixAPI); + + this.url = api_url; + this.username = username; + this.password = password; + this.auth = ""; + + this.requestOptions = { + basicAuth: basicAuth, + withCredentials: withCredentials + }; + + this.loginPromise = null; + this.loginErrorCount = 0; + this.maxLoginAttempts = 3; + + this.alertSrv = alertSrv; + this.zabbixAPICore = zabbixAPICoreService; + + this.getTrend = this.getTrend_ZBXNEXT1193; + //getTrend = getTrend_30; + } + + ////////////////////////// + // Core method wrappers // + ////////////////////////// + + _createClass(ZabbixAPI, [{ + key: 'request', + value: function request(method, params) { + var _this = this; + + return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth).catch(function (error) { + if (isNotAuthorized(error.data)) { + // Handle auth errors + _this.loginErrorCount++; + if (_this.loginErrorCount > _this.maxLoginAttempts) { + _this.loginErrorCount = 0; + return null; + } else { + return _this.loginOnce().then(function () { + return _this.request(method, params); + }); + } + } else { + // Handle API errors + var message = error.data ? error.data : error.statusText; + _this.alertAPIError(message); + } + }); + } + }, { + key: 'alertAPIError', + value: function alertAPIError(message) { + var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5000; + + this.alertSrv.set("Zabbix API Error", message, 'error', timeout); + } + }, { + key: 'loginOnce', + value: function loginOnce() { + var _this2 = this; + + if (!this.loginPromise) { + this.loginPromise = Promise.resolve(this.login().then(function (auth) { + _this2.auth = auth; + _this2.loginPromise = null; + return auth; + })); + } + return this.loginPromise; + } + }, { + key: 'login', + value: function login() { + return this.zabbixAPICore.login(this.url, this.username, this.password, this.requestOptions); + } + }, { + key: 'getVersion', + value: function getVersion() { + return this.zabbixAPICore.getVersion(this.url, this.requestOptions); + } + }, { + key: 'acknowledgeEvent', + value: function acknowledgeEvent(eventid, message) { + var params = { + eventids: eventid, + message: message + }; + + return this.request('event.acknowledge', params); + } + }, { + key: 'getGroups', + value: function getGroups() { + var params = { + output: ['name'], + sortfield: 'name', + real_hosts: true + }; + + return this.request('hostgroup.get', params); + } + }, { + key: 'getHosts', + value: function getHosts(groupids) { + var params = { + output: ['name', 'host'], + sortfield: 'name' + }; + if (groupids) { + params.groupids = groupids; + } + + return this.request('host.get', params); + } + }, { + key: 'getApps', + value: function getApps(hostids) { + var params = { + output: ['applicationid', 'name'], + hostids: hostids + }; + + return this.request('application.get', params); + } + }, { + key: 'getItems', + value: function getItems(hostids, appids, itemtype) { + var params = { + output: ['name', 'key_', 'value_type', 'hostid', 'status', 'state'], + sortfield: 'name', + webitems: true, + filter: {}, + selectHosts: ['hostid', 'name'] + }; + if (hostids) { + params.hostids = hostids; + } + if (appids) { + params.applicationids = appids; + } + if (itemtype === 'num') { + // Return only numeric metrics + params.filter.value_type = [0, 3]; + } + if (itemtype === 'text') { + // Return only text metrics + params.filter.value_type = [1, 2, 4]; + } + + return this.request('item.get', params).then(expandItems); + + function expandItems(items) { + items.forEach(function (item) { + item.item = item.name; + item.name = utils.expandItemName(item.item, item.key_); + return item; + }); + return items; + } + } + }, { + key: 'getLastValue', + value: function getLastValue(itemid) { + var params = { + output: ['lastvalue'], + itemids: itemid + }; + return this.request('item.get', params).then(function (items) { + return items.length ? items[0].lastvalue : null; + }); + } + }, { + key: 'getHistory', + value: function getHistory(items, timeFrom, timeTill) { + var _this3 = this; + + // Group items by value type and perform request for each value type + var grouped_items = _.groupBy(items, 'value_type'); + var promises = _.map(grouped_items, function (items, value_type) { + var itemids = _.map(items, 'itemid'); + var params = { + output: 'extend', + history: value_type, + itemids: itemids, + sortfield: 'clock', + sortorder: 'ASC', + time_from: timeFrom + }; + + // Relative queries (e.g. last hour) don't include an end time + if (timeTill) { + params.time_till = timeTill; + } + + return _this3.request('history.get', params); + }); + + return Promise.all(promises).then(_.flatten); + } + }, { + key: 'getTrend_ZBXNEXT1193', + value: function getTrend_ZBXNEXT1193(items, timeFrom, timeTill) { + var _this4 = this; + + // Group items by value type and perform request for each value type + var grouped_items = _.groupBy(items, 'value_type'); + var promises = _.map(grouped_items, function (items, value_type) { + var itemids = _.map(items, 'itemid'); + var params = { + output: 'extend', + trend: value_type, + itemids: itemids, + sortfield: 'clock', + sortorder: 'ASC', + time_from: timeFrom + }; + + // Relative queries (e.g. last hour) don't include an end time + if (timeTill) { + params.time_till = timeTill; + } + + return _this4.request('trend.get', params); + }); + + return Promise.all(promises).then(_.flatten); + } + }, { + key: 'getTrend_30', + value: function getTrend_30(items, time_from, time_till, value_type) { + var self = this; + var itemids = _.map(items, 'itemid'); + + var params = { + output: ["itemid", "clock", value_type], + itemids: itemids, + time_from: time_from + }; + + // Relative queries (e.g. last hour) don't include an end time + if (time_till) { + params.time_till = time_till; + } + + return self.request('trend.get', params); + } + }, { + key: 'getITService', + value: function getITService(serviceids) { + var params = { + output: 'extend', + serviceids: serviceids + }; + return this.request('service.get', params); + } + }, { + key: 'getSLA', + value: function getSLA(serviceids, timeFrom, timeTo) { + var params = { + serviceids: serviceids, + intervals: [{ + from: timeFrom, + to: timeTo + }] + }; + return this.request('service.getsla', params); + } + }, { + key: 'getTriggers', + value: function getTriggers(groupids, hostids, applicationids, showTriggers, timeFrom, timeTo) { + var params = { + output: 'extend', + groupids: groupids, + hostids: hostids, + applicationids: applicationids, + expandDescription: true, + expandData: true, + expandComment: true, + monitored: true, + skipDependent: true, + //only_true: true, + filter: { + value: 1 + }, + selectGroups: ['name'], + selectHosts: ['name', 'host'], + selectItems: ['name', 'key_', 'lastvalue'], + selectLastEvent: 'extend' + }; + + if (showTriggers) { + params.filter.value = showTriggers; + } + + if (timeFrom || timeTo) { + params.lastChangeSince = timeFrom; + params.lastChangeTill = timeTo; + } + + return this.request('trigger.get', params); + } + }, { + key: 'getEvents', + value: function getEvents(objectids, timeFrom, timeTo, showEvents) { + var params = { + output: 'extend', + time_from: timeFrom, + time_till: timeTo, + objectids: objectids, + select_acknowledges: 'extend', + selectHosts: 'extend', + value: showEvents + }; + + return this.request('event.get', params); + } + }, { + key: 'getAcknowledges', + value: function getAcknowledges(eventids) { + var params = { + output: 'extend', + eventids: eventids, + preservekeys: true, + select_acknowledges: 'extend', + sortfield: 'clock', + sortorder: 'DESC' + }; + + return this.request('event.get', params).then(function (events) { + return _.filter(events, function (event) { + return event.acknowledges.length; + }); + }); + } + }]); + + return ZabbixAPI; + }(); + + return ZabbixAPI; + } + + function isNotAuthorized(message) { + return message === "Session terminated, re-login, please." || message === "Not authorised." || message === "Not authorized."; + } + + return { + setters: [function (_angular) { + angular = _angular.default; + }, function (_lodash) { + _ = _lodash.default; + }, function (_utils) { + utils = _utils; + }, function (_zabbixAPICoreService) {}], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + angular.module('grafana.services').factory('zabbixAPIService', ZabbixAPIServiceFactory); + } + }; +}); +//# sourceMappingURL=zabbixAPI.service.js.map diff --git a/dist/datasource-zabbix/zabbixAPI.service.js.map b/dist/datasource-zabbix/zabbixAPI.service.js.map new file mode 100644 index 0000000..5d8dfe9 --- /dev/null +++ b/dist/datasource-zabbix/zabbixAPI.service.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPI.service.js"],"names":["ZabbixAPIServiceFactory","alertSrv","zabbixAPICoreService","ZabbixAPI","api_url","username","password","basicAuth","withCredentials","url","auth","requestOptions","loginPromise","loginErrorCount","maxLoginAttempts","zabbixAPICore","getTrend","getTrend_ZBXNEXT1193","method","params","request","catch","isNotAuthorized","error","data","loginOnce","then","message","statusText","alertAPIError","timeout","set","Promise","resolve","login","getVersion","eventid","eventids","output","sortfield","real_hosts","groupids","hostids","appids","itemtype","webitems","filter","selectHosts","applicationids","value_type","expandItems","items","forEach","item","name","utils","expandItemName","key_","itemid","itemids","length","lastvalue","timeFrom","timeTill","grouped_items","_","groupBy","promises","map","history","sortorder","time_from","time_till","all","flatten","trend","self","serviceids","timeTo","intervals","from","to","showTriggers","expandDescription","expandData","expandComment","monitored","skipDependent","value","selectGroups","selectItems","selectLastEvent","lastChangeSince","lastChangeTill","objectids","showEvents","select_acknowledges","preservekeys","events","event","acknowledges","angular","module","factory"],"mappings":"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","file":"zabbixAPI.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport * as utils from './utils';\nimport './zabbixAPICore.service';\n\n/** @ngInject */\nfunction ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) {\n\n /**\n * Zabbix API Wrapper.\n * Creates Zabbix API instance with given parameters (url, credentials and other).\n * Wraps API calls and provides high-level methods.\n */\n class ZabbixAPI {\n\n constructor(api_url, username, password, basicAuth, withCredentials) {\n this.url = api_url;\n this.username = username;\n this.password = password;\n this.auth = \"\";\n\n this.requestOptions = {\n basicAuth: basicAuth,\n withCredentials: withCredentials\n };\n\n this.loginPromise = null;\n this.loginErrorCount = 0;\n this.maxLoginAttempts = 3;\n\n this.alertSrv = alertSrv;\n this.zabbixAPICore = zabbixAPICoreService;\n\n this.getTrend = this.getTrend_ZBXNEXT1193;\n //getTrend = getTrend_30;\n }\n\n //////////////////////////\n // Core method wrappers //\n //////////////////////////\n\n request(method, params) {\n return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth)\n .catch(error => {\n if (isNotAuthorized(error.data)) {\n // Handle auth errors\n this.loginErrorCount++;\n if (this.loginErrorCount > this.maxLoginAttempts) {\n this.loginErrorCount = 0;\n return null;\n } else {\n return this.loginOnce()\n .then(() => this.request(method, params));\n }\n } else {\n // Handle API errors\n let message = error.data ? error.data : error.statusText;\n this.alertAPIError(message);\n }\n });\n }\n\n alertAPIError(message, timeout = 5000) {\n this.alertSrv.set(\n \"Zabbix API Error\",\n message,\n 'error',\n timeout\n );\n }\n\n /**\n * When API unauthenticated or auth token expired each request produce login()\n * call. But auth token is common to all requests. This function wraps login() method\n * and call it once. If login() already called just wait for it (return its promise).\n * @return login promise\n */\n loginOnce() {\n if (!this.loginPromise) {\n this.loginPromise = Promise.resolve(\n this.login().then(auth => {\n this.auth = auth;\n this.loginPromise = null;\n return auth;\n })\n );\n }\n return this.loginPromise;\n }\n\n /**\n * Get authentication token.\n */\n login() {\n return this.zabbixAPICore.login(this.url, this.username, this.password, this.requestOptions);\n }\n\n /**\n * Get Zabbix API version\n */\n getVersion() {\n return this.zabbixAPICore.getVersion(this.url, this.requestOptions);\n }\n\n ////////////////////////////////\n // Zabbix API method wrappers //\n ////////////////////////////////\n\n acknowledgeEvent(eventid, message) {\n var params = {\n eventids: eventid,\n message: message\n };\n\n return this.request('event.acknowledge', params);\n }\n\n getGroups() {\n var params = {\n output: ['name'],\n sortfield: 'name',\n real_hosts: true\n };\n\n return this.request('hostgroup.get', params);\n }\n\n getHosts(groupids) {\n var params = {\n output: ['name', 'host'],\n sortfield: 'name'\n };\n if (groupids) {\n params.groupids = groupids;\n }\n\n return this.request('host.get', params);\n }\n\n getApps(hostids) {\n var params = {\n output: ['applicationid', 'name'],\n hostids: hostids\n };\n\n return this.request('application.get', params);\n }\n\n /**\n * Get Zabbix items\n * @param {[type]} hostids host ids\n * @param {[type]} appids application ids\n * @param {String} itemtype 'num' or 'text'\n * @return {[type]} array of items\n */\n getItems(hostids, appids, itemtype) {\n var params = {\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n sortfield: 'name',\n webitems: true,\n filter: {},\n selectHosts: [\n 'hostid',\n 'name'\n ]\n };\n if (hostids) {\n params.hostids = hostids;\n }\n if (appids) {\n params.applicationids = appids;\n }\n if (itemtype === 'num') {\n // Return only numeric metrics\n params.filter.value_type = [0, 3];\n }\n if (itemtype === 'text') {\n // Return only text metrics\n params.filter.value_type = [1, 2, 4];\n }\n\n return this.request('item.get', params)\n .then(expandItems);\n\n function expandItems(items) {\n items.forEach(item => {\n item.item = item.name;\n item.name = utils.expandItemName(item.item, item.key_);\n return item;\n });\n return items;\n }\n }\n\n getLastValue(itemid) {\n var params = {\n output: ['lastvalue'],\n itemids: itemid\n };\n return this.request('item.get', params)\n .then(items => items.length ? items[0].lastvalue : null);\n }\n\n /**\n * Perform history query from Zabbix API\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} timeFrom Time in seconds\n * @param {Number} timeTill Time in seconds\n * @return {Array} Array of Zabbix history objects\n */\n getHistory(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n history: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('history.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n /**\n * Perform trends query from Zabbix API\n * Use trends api extension from ZBXNEXT-1193 patch.\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} time_from Time in seconds\n * @param {Number} time_till Time in seconds\n * @return {Array} Array of Zabbix trend objects\n */\n getTrend_ZBXNEXT1193(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n trend: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('trend.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getTrend_30(items, time_from, time_till, value_type) {\n var self = this;\n var itemids = _.map(items, 'itemid');\n\n var params = {\n output: [\"itemid\",\n \"clock\",\n value_type\n ],\n itemids: itemids,\n time_from: time_from\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (time_till) {\n params.time_till = time_till;\n }\n\n return self.request('trend.get', params);\n }\n\n getITService(serviceids) {\n var params = {\n output: 'extend',\n serviceids: serviceids\n };\n return this.request('service.get', params);\n }\n\n getSLA(serviceids, timeFrom, timeTo) {\n var params = {\n serviceids: serviceids,\n intervals: [{\n from: timeFrom,\n to: timeTo\n }]\n };\n return this.request('service.getsla', params);\n }\n\n getTriggers(groupids, hostids, applicationids, showTriggers, timeFrom, timeTo) {\n var params = {\n output: 'extend',\n groupids: groupids,\n hostids: hostids,\n applicationids: applicationids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n filter: {\n value: 1\n },\n selectGroups: ['name'],\n selectHosts: ['name', 'host'],\n selectItems: ['name', 'key_', 'lastvalue'],\n selectLastEvent: 'extend'\n };\n\n if (showTriggers) {\n params.filter.value = showTriggers;\n }\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n\n getEvents(objectids, timeFrom, timeTo, showEvents) {\n var params = {\n output: 'extend',\n time_from: timeFrom,\n time_till: timeTo,\n objectids: objectids,\n select_acknowledges: 'extend',\n selectHosts: 'extend',\n value: showEvents\n };\n\n return this.request('event.get', params);\n }\n\n getAcknowledges(eventids) {\n var params = {\n output: 'extend',\n eventids: eventids,\n preservekeys: true,\n select_acknowledges: 'extend',\n sortfield: 'clock',\n sortorder: 'DESC'\n };\n\n return this.request('event.get', params)\n .then(events => {\n return _.filter(events, (event) => event.acknowledges.length);\n });\n }\n\n }\n\n return ZabbixAPI;\n}\n\nfunction isNotAuthorized(message) {\n return (\n message === \"Session terminated, re-login, please.\" ||\n message === \"Not authorised.\" ||\n message === \"Not authorized.\"\n );\n}\n\nangular\n .module('grafana.services')\n .factory('zabbixAPIService', ZabbixAPIServiceFactory);\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/zabbixAPICore.service.js b/dist/datasource-zabbix/zabbixAPICore.service.js new file mode 100644 index 0000000..1391f8c --- /dev/null +++ b/dist/datasource-zabbix/zabbixAPICore.service.js @@ -0,0 +1,150 @@ +'use strict'; + +System.register(['angular'], function (_export, _context) { + "use strict"; + + var angular, _createClass, ZabbixAPICoreService, ZabbixAPIError; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + return { + setters: [function (_angular) { + angular = _angular.default; + }], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + ZabbixAPICoreService = function () { + + /** @ngInject */ + function ZabbixAPICoreService(backendSrv) { + _classCallCheck(this, ZabbixAPICoreService); + + this.backendSrv = backendSrv; + } + + /** + * Request data from Zabbix API + * @return {object} response.result + */ + + + _createClass(ZabbixAPICoreService, [{ + key: 'request', + value: function request(api_url, method, params, options, auth) { + var requestData = { + jsonrpc: '2.0', + method: method, + params: params, + id: 1 + }; + + if (auth === "") { + // Reject immediately if not authenticated + return Promise.reject(new ZabbixAPIError({ data: "Not authorised." })); + } else if (auth) { + // Set auth parameter only if it needed + requestData.auth = auth; + } + + var requestOptions = { + method: 'POST', + url: api_url, + data: requestData, + headers: { + 'Content-Type': 'application/json' + } + }; + + // Set request options for basic auth + if (options.basicAuth || options.withCredentials) { + requestOptions.withCredentials = true; + } + if (options.basicAuth) { + requestOptions.headers.Authorization = options.basicAuth; + } + + return this.datasourceRequest(requestOptions); + } + }, { + key: 'datasourceRequest', + value: function datasourceRequest(requestOptions) { + return this.backendSrv.datasourceRequest(requestOptions).then(function (response) { + if (!response.data) { + return Promise.reject(new ZabbixAPIError({ data: "General Error, no data" })); + } else if (response.data.error) { + + // Handle Zabbix API errors + return Promise.reject(new ZabbixAPIError(response.data.error)); + } + + // Success + return response.data.result; + }); + } + }, { + key: 'login', + value: function login(api_url, username, password, options) { + var params = { + user: username, + password: password + }; + return this.request(api_url, 'user.login', params, options, null); + } + }, { + key: 'getVersion', + value: function getVersion(api_url, options) { + return this.request(api_url, 'apiinfo.version', [], options); + } + }]); + + return ZabbixAPICoreService; + }(); + + _export('ZabbixAPIError', ZabbixAPIError = function () { + function ZabbixAPIError(error) { + _classCallCheck(this, ZabbixAPIError); + + this.code = error.code; + this.name = error.data; + this.message = error.data; + this.data = error.data; + } + + _createClass(ZabbixAPIError, [{ + key: 'toString', + value: function toString() { + return this.name + ": " + this.message; + } + }]); + + return ZabbixAPIError; + }()); + + _export('ZabbixAPIError', ZabbixAPIError); + + angular.module('grafana.services').service('zabbixAPICoreService', ZabbixAPICoreService); + } + }; +}); +//# sourceMappingURL=zabbixAPICore.service.js.map diff --git a/dist/datasource-zabbix/zabbixAPICore.service.js.map b/dist/datasource-zabbix/zabbixAPICore.service.js.map new file mode 100644 index 0000000..042c8b7 --- /dev/null +++ b/dist/datasource-zabbix/zabbixAPICore.service.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/zabbixAPICore.service.js"],"names":["angular","ZabbixAPICoreService","backendSrv","api_url","method","params","options","auth","requestData","jsonrpc","id","Promise","reject","ZabbixAPIError","data","requestOptions","url","headers","basicAuth","withCredentials","Authorization","datasourceRequest","then","response","error","result","username","password","user","request","code","name","message","module","service"],"mappings":";;;;;;;;;;;;;;;AAIOA,a;;;;;;;;;;;;;;;;;;;;;AAEDC,0B;;AAEJ;AACA,sCAAYC,UAAZ,EAAwB;AAAA;;AACtB,eAAKA,UAAL,GAAkBA,UAAlB;AACD;;AAED;;;;;;;;kCAIQC,O,EAASC,M,EAAQC,M,EAAQC,O,EAASC,I,EAAM;AAC9C,gBAAIC,cAAc;AAChBC,uBAAS,KADO;AAEhBL,sBAAQA,MAFQ;AAGhBC,sBAAQA,MAHQ;AAIhBK,kBAAI;AAJY,aAAlB;;AAOA,gBAAIH,SAAS,EAAb,EAAiB;AACf;AACA,qBAAOI,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmB,EAACC,MAAM,iBAAP,EAAnB,CAAf,CAAP;AACD,aAHD,MAGO,IAAIP,IAAJ,EAAU;AACf;AACAC,0BAAYD,IAAZ,GAAmBA,IAAnB;AACD;;AAED,gBAAIQ,iBAAiB;AACnBX,sBAAQ,MADW;AAEnBY,mBAAKb,OAFc;AAGnBW,oBAAMN,WAHa;AAInBS,uBAAS;AACP,gCAAgB;AADT;AAJU,aAArB;;AASA;AACA,gBAAIX,QAAQY,SAAR,IAAqBZ,QAAQa,eAAjC,EAAkD;AAChDJ,6BAAeI,eAAf,GAAiC,IAAjC;AACD;AACD,gBAAIb,QAAQY,SAAZ,EAAuB;AACrBH,6BAAeE,OAAf,CAAuBG,aAAvB,GAAuCd,QAAQY,SAA/C;AACD;;AAED,mBAAO,KAAKG,iBAAL,CAAuBN,cAAvB,CAAP;AACD;;;4CAEiBA,c,EAAgB;AAChC,mBAAO,KAAKb,UAAL,CAAgBmB,iBAAhB,CAAkCN,cAAlC,EACNO,IADM,CACD,oBAAY;AAChB,kBAAI,CAACC,SAAST,IAAd,EAAoB;AAClB,uBAAOH,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmB,EAACC,MAAM,wBAAP,EAAnB,CAAf,CAAP;AACD,eAFD,MAEO,IAAIS,SAAST,IAAT,CAAcU,KAAlB,EAAyB;;AAE9B;AACA,uBAAOb,QAAQC,MAAR,CAAe,IAAIC,cAAJ,CAAmBU,SAAST,IAAT,CAAcU,KAAjC,CAAf,CAAP;AACD;;AAED;AACA,qBAAOD,SAAST,IAAT,CAAcW,MAArB;AACD,aAZM,CAAP;AAaD;;;gCAMKtB,O,EAASuB,Q,EAAUC,Q,EAAUrB,O,EAAS;AAC1C,gBAAID,SAAS;AACXuB,oBAAMF,QADK;AAEXC,wBAAUA;AAFC,aAAb;AAIA,mBAAO,KAAKE,OAAL,CAAa1B,OAAb,EAAsB,YAAtB,EAAoCE,MAApC,EAA4CC,OAA5C,EAAqD,IAArD,CAAP;AACD;;;qCAMUH,O,EAASG,O,EAAS;AAC3B,mBAAO,KAAKuB,OAAL,CAAa1B,OAAb,EAAsB,iBAAtB,EAAyC,EAAzC,EAA6CG,OAA7C,CAAP;AACD;;;;;;gCAIUO,c;AACX,gCAAYW,KAAZ,EAAmB;AAAA;;AACjB,eAAKM,IAAL,GAAYN,MAAMM,IAAlB;AACA,eAAKC,IAAL,GAAYP,MAAMV,IAAlB;AACA,eAAKkB,OAAL,GAAeR,MAAMV,IAArB;AACA,eAAKA,IAAL,GAAYU,MAAMV,IAAlB;AACD;;;;qCAEU;AACT,mBAAO,KAAKiB,IAAL,GAAY,IAAZ,GAAmB,KAAKC,OAA/B;AACD;;;;;;;;AAGHhC,cACGiC,MADH,CACU,kBADV,EAEGC,OAFH,CAEW,sBAFX,EAEmCjC,oBAFnC","file":"zabbixAPICore.service.js","sourcesContent":["/**\n * General Zabbix API methods\n */\n\nimport angular from 'angular';\n\nclass ZabbixAPICoreService {\n\n /** @ngInject */\n constructor(backendSrv) {\n this.backendSrv = backendSrv;\n }\n\n /**\n * Request data from Zabbix API\n * @return {object} response.result\n */\n request(api_url, method, params, options, auth) {\n let requestData = {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: 1\n };\n\n if (auth === \"\") {\n // Reject immediately if not authenticated\n return Promise.reject(new ZabbixAPIError({data: \"Not authorised.\"}));\n } else if (auth) {\n // Set auth parameter only if it needed\n requestData.auth = auth;\n }\n\n let requestOptions = {\n method: 'POST',\n url: api_url,\n data: requestData,\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n // Set request options for basic auth\n if (options.basicAuth || options.withCredentials) {\n requestOptions.withCredentials = true;\n }\n if (options.basicAuth) {\n requestOptions.headers.Authorization = options.basicAuth;\n }\n\n return this.datasourceRequest(requestOptions);\n }\n\n datasourceRequest(requestOptions) {\n return this.backendSrv.datasourceRequest(requestOptions)\n .then(response => {\n if (!response.data) {\n return Promise.reject(new ZabbixAPIError({data: \"General Error, no data\"}));\n } else if (response.data.error) {\n\n // Handle Zabbix API errors\n return Promise.reject(new ZabbixAPIError(response.data.error));\n }\n\n // Success\n return response.data.result;\n });\n }\n\n /**\n * Get authentication token.\n * @return {string} auth token\n */\n login(api_url, username, password, options) {\n let params = {\n user: username,\n password: password\n };\n return this.request(api_url, 'user.login', params, options, null);\n }\n\n /**\n * Get Zabbix API version\n * Matches the version of Zabbix starting from Zabbix 2.0.4\n */\n getVersion(api_url, options) {\n return this.request(api_url, 'apiinfo.version', [], options);\n }\n}\n\n// Define zabbix API exception type\nexport class ZabbixAPIError {\n constructor(error) {\n this.code = error.code;\n this.name = error.data;\n this.message = error.data;\n this.data = error.data;\n }\n\n toString() {\n return this.name + \": \" + this.message;\n }\n}\n\nangular\n .module('grafana.services')\n .service('zabbixAPICoreService', ZabbixAPICoreService);\n"]} \ No newline at end of file diff --git a/dist/datasource-zabbix/zabbixCachingProxy.service.js b/dist/datasource-zabbix/zabbixCachingProxy.service.js new file mode 100644 index 0000000..3847c4c --- /dev/null +++ b/dist/datasource-zabbix/zabbixCachingProxy.service.js @@ -0,0 +1,243 @@ +'use strict'; + +System.register(['angular', 'lodash'], function (_export, _context) { + "use strict"; + + var angular, _, _createClass; + + function _toConsumableArray(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { + arr2[i] = arr[i]; + } + + return arr2; + } else { + return Array.from(arr); + } + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + // Use factory() instead service() for multiple datasources support. + // Each datasource instance must initialize its own cache. + + /** @ngInject */ + function ZabbixCachingProxyFactory() { + var ZabbixCachingProxy = function () { + function ZabbixCachingProxy(zabbixAPI, cacheOptions) { + _classCallCheck(this, ZabbixCachingProxy); + + this.zabbixAPI = zabbixAPI; + this.cacheEnabled = cacheOptions.enabled; + this.ttl = cacheOptions.ttl || 600000; // 10 minutes by default + + // Internal objects for data storing + this.cache = { + groups: {}, + hosts: {}, + applications: {}, + items: {}, + history: {}, + trends: {} + }; + + this.historyPromises = {}; + + // Don't run duplicated history requests + this.getHistory = callAPIRequestOnce(_.bind(this.zabbixAPI.getHistory, this.zabbixAPI), this.historyPromises, getHistoryRequestHash); + + // Don't run duplicated requests + this.groupPromises = {}; + this.getGroupsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getGroups, this.zabbixAPI), this.groupPromises, getRequestHash); + + this.hostPromises = {}; + this.getHostsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getHosts, this.zabbixAPI), this.hostPromises, getRequestHash); + + this.appPromises = {}; + this.getAppsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getApps, this.zabbixAPI), this.appPromises, getRequestHash); + + this.itemPromises = {}; + this.getItemsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getItems, this.zabbixAPI), this.itemPromises, getRequestHash); + } + + _createClass(ZabbixCachingProxy, [{ + key: 'isExpired', + value: function isExpired(cacheObject) { + if (cacheObject) { + var object_age = Date.now() - cacheObject.timestamp; + return !(cacheObject.timestamp && object_age < this.ttl); + } else { + return true; + } + } + }, { + key: 'proxyRequest', + value: function proxyRequest(request, params, cacheObject) { + var hash = getRequestHash(params); + if (this.cacheEnabled && !this.isExpired(cacheObject[hash])) { + return Promise.resolve(cacheObject[hash].value); + } else { + return request.apply(undefined, _toConsumableArray(params)).then(function (result) { + cacheObject[hash] = { + value: result, + timestamp: Date.now() + }; + return result; + }); + } + } + }, { + key: 'getGroups', + value: function getGroups() { + return this.proxyRequest(this.getGroupsOnce, [], this.cache.groups); + } + }, { + key: 'getHosts', + value: function getHosts(groupids) { + return this.proxyRequest(this.getHostsOnce, [groupids], this.cache.hosts); + } + }, { + key: 'getApps', + value: function getApps(hostids) { + return this.proxyRequest(this.getAppsOnce, [hostids], this.cache.applications); + } + }, { + key: 'getItems', + value: function getItems(hostids, appids, itemtype) { + var params = [hostids, appids, itemtype]; + return this.proxyRequest(this.getItemsOnce, params, this.cache.items); + } + }, { + key: 'getHistoryFromCache', + value: function getHistoryFromCache(items, time_from, time_till) { + var historyStorage = this.cache.history; + var full_history; + var expired = _.filter(_.keyBy(items, 'itemid'), function (item, itemid) { + return !historyStorage[itemid]; + }); + if (expired.length) { + return this.zabbixAPI.getHistory(expired, time_from, time_till).then(function (history) { + var grouped_history = _.groupBy(history, 'itemid'); + _.forEach(expired, function (item) { + var itemid = item.itemid; + historyStorage[itemid] = item; + historyStorage[itemid].time_from = time_from; + historyStorage[itemid].time_till = time_till; + historyStorage[itemid].history = grouped_history[itemid]; + }); + full_history = _.map(items, function (item) { + return historyStorage[item.itemid].history; + }); + return _.flatten(full_history, true); + }); + } else { + full_history = _.map(items, function (item) { + return historyStorage[item.itemid].history; + }); + return Promise.resolve(_.flatten(full_history, true)); + } + } + }, { + key: 'getHistoryFromAPI', + value: function getHistoryFromAPI(items, time_from, time_till) { + return this.zabbixAPI.getHistory(items, time_from, time_till); + } + }]); + + return ZabbixCachingProxy; + }(); + + return ZabbixCachingProxy; + } + + /** + * Wrap zabbix API request to prevent multiple calls + * with same params when waiting for result. + */ + function callAPIRequestOnce(func, promiseKeeper, argsHashFunc) { + return function () { + var hash = argsHashFunc(arguments); + if (!promiseKeeper[hash]) { + promiseKeeper[hash] = Promise.resolve(func.apply(this, arguments).then(function (result) { + promiseKeeper[hash] = null; + return result; + })); + } + return promiseKeeper[hash]; + }; + } + + function getRequestHash(args) { + var requestStamp = _.map(args, function (arg) { + if (arg === undefined) { + return 'undefined'; + } else { + if (_.isArray(arg)) { + return arg.sort().toString(); + } else { + return arg.toString(); + } + } + }).join(); + return requestStamp.getHash(); + } + + function getHistoryRequestHash(args) { + var itemids = _.map(args[0], 'itemid'); + var stamp = itemids.join() + args[1] + args[2]; + return stamp.getHash(); + } + + return { + setters: [function (_angular) { + angular = _angular.default; + }, function (_lodash) { + _ = _lodash.default; + }], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + angular.module('grafana.services').factory('ZabbixCachingProxy', ZabbixCachingProxyFactory);String.prototype.getHash = function () { + var hash = 0, + i, + chr, + len; + if (this.length !== 0) { + for (i = 0, len = this.length; i < len; i++) { + chr = this.charCodeAt(i); + hash = (hash << 5) - hash + chr; + hash |= 0; // Convert to 32bit integer + } + } + return hash; + }; + + // Fix for backward compatibility with lodash 2.4 + if (!_.keyBy) { + _.keyBy = _.indexBy; + } + } + }; +}); +//# sourceMappingURL=zabbixCachingProxy.service.js.map diff --git a/dist/datasource-zabbix/zabbixCachingProxy.service.js.map b/dist/datasource-zabbix/zabbixCachingProxy.service.js.map new file mode 100644 index 0000000..e4ba4b1 --- /dev/null +++ b/dist/datasource-zabbix/zabbixCachingProxy.service.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/datasource-zabbix/zabbixCachingProxy.service.js"],"names":["ZabbixCachingProxyFactory","ZabbixCachingProxy","zabbixAPI","cacheOptions","cacheEnabled","enabled","ttl","cache","groups","hosts","applications","items","history","trends","historyPromises","getHistory","callAPIRequestOnce","_","bind","getHistoryRequestHash","groupPromises","getGroupsOnce","getGroups","getRequestHash","hostPromises","getHostsOnce","getHosts","appPromises","getAppsOnce","getApps","itemPromises","getItemsOnce","getItems","cacheObject","object_age","Date","now","timestamp","request","params","hash","isExpired","Promise","resolve","value","then","result","proxyRequest","groupids","hostids","appids","itemtype","time_from","time_till","historyStorage","full_history","expired","filter","keyBy","item","itemid","length","grouped_history","groupBy","forEach","map","flatten","func","promiseKeeper","argsHashFunc","arguments","apply","args","requestStamp","arg","undefined","isArray","sort","toString","join","getHash","itemids","stamp","angular","module","factory","String","prototype","i","chr","len","charCodeAt","indexBy"],"mappings":"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","file":"zabbixCachingProxy.service.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\n\n// Use factory() instead service() for multiple datasources support.\n// Each datasource instance must initialize its own cache.\n\n/** @ngInject */\nfunction ZabbixCachingProxyFactory() {\n\n class ZabbixCachingProxy {\n constructor(zabbixAPI, cacheOptions) {\n this.zabbixAPI = zabbixAPI;\n this.cacheEnabled = cacheOptions.enabled;\n this.ttl = cacheOptions.ttl || 600000; // 10 minutes by default\n\n // Internal objects for data storing\n this.cache = {\n groups: {},\n hosts: {},\n applications: {},\n items: {},\n history: {},\n trends: {}\n };\n\n this.historyPromises = {};\n\n // Don't run duplicated history requests\n this.getHistory = callAPIRequestOnce(_.bind(this.zabbixAPI.getHistory, this.zabbixAPI),\n this.historyPromises, getHistoryRequestHash);\n\n // Don't run duplicated requests\n this.groupPromises = {};\n this.getGroupsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getGroups, this.zabbixAPI),\n this.groupPromises, getRequestHash);\n\n this.hostPromises = {};\n this.getHostsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getHosts, this.zabbixAPI),\n this.hostPromises, getRequestHash);\n\n this.appPromises = {};\n this.getAppsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getApps, this.zabbixAPI),\n this.appPromises, getRequestHash);\n\n this.itemPromises = {};\n this.getItemsOnce = callAPIRequestOnce(_.bind(this.zabbixAPI.getItems, this.zabbixAPI),\n this.itemPromises, getRequestHash);\n }\n\n isExpired(cacheObject) {\n if (cacheObject) {\n let object_age = Date.now() - cacheObject.timestamp;\n return !(cacheObject.timestamp && object_age < this.ttl);\n } else {\n return true;\n }\n }\n\n /**\n * Check that result is present in cache and up to date\n * or send request to API.\n */\n proxyRequest(request, params, cacheObject) {\n let hash = getRequestHash(params);\n if (this.cacheEnabled && !this.isExpired(cacheObject[hash])) {\n return Promise.resolve(cacheObject[hash].value);\n } else {\n return request(...params)\n .then(result => {\n cacheObject[hash] = {\n value: result,\n timestamp: Date.now()\n };\n return result;\n });\n }\n }\n\n getGroups() {\n return this.proxyRequest(this.getGroupsOnce, [], this.cache.groups);\n }\n\n getHosts(groupids) {\n return this.proxyRequest(this.getHostsOnce, [groupids], this.cache.hosts);\n }\n\n getApps(hostids) {\n return this.proxyRequest(this.getAppsOnce, [hostids], this.cache.applications);\n }\n\n getItems(hostids, appids, itemtype) {\n let params = [hostids, appids, itemtype];\n return this.proxyRequest(this.getItemsOnce, params, this.cache.items);\n }\n\n getHistoryFromCache(items, time_from, time_till) {\n var historyStorage = this.cache.history;\n var full_history;\n var expired = _.filter(_.keyBy(items, 'itemid'), (item, itemid) => {\n return !historyStorage[itemid];\n });\n if (expired.length) {\n return this.zabbixAPI.getHistory(expired, time_from, time_till).then(function(history) {\n var grouped_history = _.groupBy(history, 'itemid');\n _.forEach(expired, item => {\n var itemid = item.itemid;\n historyStorage[itemid] = item;\n historyStorage[itemid].time_from = time_from;\n historyStorage[itemid].time_till = time_till;\n historyStorage[itemid].history = grouped_history[itemid];\n });\n full_history = _.map(items, item => {\n return historyStorage[item.itemid].history;\n });\n return _.flatten(full_history, true);\n });\n } else {\n full_history = _.map(items, function(item) {\n return historyStorage[item.itemid].history;\n });\n return Promise.resolve(_.flatten(full_history, true));\n }\n }\n\n getHistoryFromAPI(items, time_from, time_till) {\n return this.zabbixAPI.getHistory(items, time_from, time_till);\n }\n }\n\n return ZabbixCachingProxy;\n}\n\nangular\n .module('grafana.services')\n .factory('ZabbixCachingProxy', ZabbixCachingProxyFactory);\n\n/**\n * Wrap zabbix API request to prevent multiple calls\n * with same params when waiting for result.\n */\nfunction callAPIRequestOnce(func, promiseKeeper, argsHashFunc) {\n return function() {\n var hash = argsHashFunc(arguments);\n if (!promiseKeeper[hash]) {\n promiseKeeper[hash] = Promise.resolve(\n func.apply(this, arguments)\n .then(result => {\n promiseKeeper[hash] = null;\n return result;\n })\n );\n }\n return promiseKeeper[hash];\n };\n}\n\nfunction getRequestHash(args) {\n var requestStamp = _.map(args, arg => {\n if (arg === undefined) {\n return 'undefined';\n } else {\n if (_.isArray(arg)) {\n return arg.sort().toString();\n } else {\n return arg.toString();\n }\n }\n }).join();\n return requestStamp.getHash();\n}\n\nfunction getHistoryRequestHash(args) {\n let itemids = _.map(args[0], 'itemid');\n let stamp = itemids.join() + args[1] + args[2];\n return stamp.getHash();\n}\n\nString.prototype.getHash = function() {\n var hash = 0, i, chr, len;\n if (this.length !== 0) {\n for (i = 0, len = this.length; i < len; i++) {\n chr = this.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n};\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.keyBy) {_.keyBy = _.indexBy;}\n"]} \ No newline at end of file diff --git a/dist/img/screenshot-annotations.png b/dist/img/screenshot-annotations.png new file mode 100644 index 0000000000000000000000000000000000000000..8bedea3ace05df59ebb0cb05952a07c138e3282d GIT binary patch literal 177280 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
0=Z6OUrdTJK)|1g9` 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�AAY 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

nTs>Wv{s6nWT~d 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

3nTka$N`uO%H`@O>InIPn{g^sEL2&o>@VVw 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�FVs#an82H4!HSJ!FQNXyF&e{66=ZVY2-_KLLCh6 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 Da;nG1 literal 0 HcmV?d00001 diff --git a/dist/img/screenshot-triggers.png b/dist/img/screenshot-triggers.png new file mode 100644 index 0000000000000000000000000000000000000000..002e518063b35e0eb03b6267b006fa9c3cde4581 GIT binary patch literal 171803 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 literal 0 HcmV?d00001 diff --git a/dist/img/zabbix_app_logo.svg b/dist/img/zabbix_app_logo.svg new file mode 100644 index 0000000..237247d --- /dev/null +++ b/dist/img/zabbix_app_logo.svg @@ -0,0 +1,107 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/dist/module.js b/dist/module.js new file mode 100644 index 0000000..ac2080f --- /dev/null +++ b/dist/module.js @@ -0,0 +1,16 @@ +'use strict'; + +System.register(['./components/config'], function (_export, _context) { + "use strict"; + + var ZabbixAppConfigCtrl; + return { + setters: [function (_componentsConfig) { + ZabbixAppConfigCtrl = _componentsConfig.ZabbixAppConfigCtrl; + }], + execute: function () { + _export('ConfigCtrl', ZabbixAppConfigCtrl); + } + }; +}); +//# sourceMappingURL=module.js.map diff --git a/dist/module.js.map b/dist/module.js.map new file mode 100644 index 0000000..aad765d --- /dev/null +++ b/dist/module.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/module.js"],"names":["ZabbixAppConfigCtrl"],"mappings":";;;;;;;;AAAQA,yB,qBAAAA,mB;;;4BAGNA,mB","file":"module.js","sourcesContent":["import {ZabbixAppConfigCtrl} from './components/config';\n\nexport {\n ZabbixAppConfigCtrl as ConfigCtrl\n};\n"]} \ No newline at end of file diff --git a/dist/panel-triggers/ack-tooltip.directive.js b/dist/panel-triggers/ack-tooltip.directive.js new file mode 100644 index 0000000..614da93 --- /dev/null +++ b/dist/panel-triggers/ack-tooltip.directive.js @@ -0,0 +1,126 @@ +'use strict'; + +System.register(['angular', 'jquery', 'tether-drop'], function (_export, _context) { + "use strict"; + + var angular, $, Drop; + return { + setters: [function (_angular) { + angular = _angular.default; + }, function (_jquery) { + $ = _jquery.default; + }, function (_tetherDrop) { + Drop = _tetherDrop.default; + }], + execute: function () { + + /** @ngInject */ + angular.module('grafana.directives').directive('ackTooltip', function ($sanitize, $compile) { + var buttonTemplate = ''; + + return { + scope: { + ack: "=", + trigger: "=", + onAck: "=", + context: "=" + }, + link: function link(scope, element) { + var acknowledges = scope.ack; + var $button = $(buttonTemplate); + $button.appendTo(element); + + $button.click(function () { + var tooltip = '

'; + + if (acknowledges && acknowledges.length) { + tooltip += '' + '' + '' + '' + ''; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = acknowledges[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var ack = _step.value; + + tooltip += '' + '' + ''; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + tooltip += '
TimeUserComments
' + ack.time + '' + ack.user + '' + ack.message + '
'; + } else { + tooltip += 'Add acknowledge'; + } + + var addAckButtonTemplate = '
' + '
'; + tooltip += addAckButtonTemplate; + tooltip += '
'; + + var drop = new Drop({ + target: element[0], + content: tooltip, + position: "bottom left", + classes: 'drop-popover ack-tooltip', + openOn: 'hover', + hoverCloseDelay: 500, + tetherOptions: { + constraints: [{ to: 'window', pin: true, attachment: "both" }] + } + }); + + drop.open(); + drop.on('close', closeDrop); + + $('#add-acknowledge-btn').on('click', onAddAckButtonClick); + + function onAddAckButtonClick() { + var inputTemplate = '
' + '' + '' + '
'; + + var $input = $(inputTemplate); + var $addAckButton = $('.ack-tooltip .ack-add-button'); + $addAckButton.replaceWith($input); + $('.ack-tooltip #cancel-ack-button').on('click', onAckCancelButtonClick); + $('.ack-tooltip #send-ack-button').on('click', onAckSendlButtonClick); + } + + function onAckCancelButtonClick() { + $('.ack-tooltip .ack-input-group').replaceWith(addAckButtonTemplate); + $('#add-acknowledge-btn').on('click', onAddAckButtonClick); + } + + function onAckSendlButtonClick() { + var message = $('.ack-tooltip #ack-message')[0].value; + var onAck = scope.onAck.bind(scope.context); + onAck(scope.trigger, message).then(function () { + closeDrop(); + }); + } + + function closeDrop() { + setTimeout(function () { + drop.destroy(); + }); + } + }); + + $compile(element.contents())(scope); + } + }; + }); + } + }; +}); +//# sourceMappingURL=ack-tooltip.directive.js.map diff --git a/dist/panel-triggers/ack-tooltip.directive.js.map b/dist/panel-triggers/ack-tooltip.directive.js.map new file mode 100644 index 0000000..0281afe --- /dev/null +++ b/dist/panel-triggers/ack-tooltip.directive.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/panel-triggers/ack-tooltip.directive.js"],"names":["angular","$","Drop","module","directive","$sanitize","$compile","buttonTemplate","scope","ack","trigger","onAck","context","link","element","acknowledges","$button","appendTo","click","tooltip","length","time","user","message","addAckButtonTemplate","drop","target","content","position","classes","openOn","hoverCloseDelay","tetherOptions","constraints","to","pin","attachment","open","on","closeDrop","onAddAckButtonClick","inputTemplate","$input","$addAckButton","replaceWith","onAckCancelButtonClick","onAckSendlButtonClick","value","bind","then","setTimeout","destroy","contents"],"mappings":"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","file":"ack-tooltip.directive.js","sourcesContent":["import angular from 'angular';\nimport $ from 'jquery';\nimport Drop from 'tether-drop';\n\n/** @ngInject */\nangular\n .module('grafana.directives')\n .directive('ackTooltip', function($sanitize, $compile) {\n let buttonTemplate = '
';\n\n return {\n scope: {\n ack: \"=\",\n trigger: \"=\",\n onAck: \"=\",\n context: \"=\"\n },\n link: function(scope, element) {\n let acknowledges = scope.ack;\n let $button = $(buttonTemplate);\n $button.appendTo(element);\n\n $button.click(function() {\n let tooltip = '
';\n\n if (acknowledges && acknowledges.length) {\n tooltip += '' +\n '' +\n '' +\n '' +\n '';\n for (let ack of acknowledges) {\n tooltip += '' +\n '' +\n '';\n }\n tooltip += '
TimeUserComments
' + ack.time + '' + ack.user + '' + ack.message + '
';\n } else {\n tooltip += 'Add acknowledge';\n }\n\n let addAckButtonTemplate = '
' +\n '
';\n tooltip += addAckButtonTemplate;\n tooltip += '
';\n\n let drop = new Drop({\n target: element[0],\n content: tooltip,\n position: \"bottom left\",\n classes: 'drop-popover ack-tooltip',\n openOn: 'hover',\n hoverCloseDelay: 500,\n tetherOptions: {\n constraints: [{to: 'window', pin: true, attachment: \"both\"}]\n }\n });\n\n drop.open();\n drop.on('close', closeDrop);\n\n $('#add-acknowledge-btn').on('click', onAddAckButtonClick);\n\n function onAddAckButtonClick() {\n let inputTemplate = '
' +\n '' +\n '' +\n '
';\n\n let $input = $(inputTemplate);\n let $addAckButton = $('.ack-tooltip .ack-add-button');\n $addAckButton.replaceWith($input);\n $('.ack-tooltip #cancel-ack-button').on('click', onAckCancelButtonClick);\n $('.ack-tooltip #send-ack-button').on('click', onAckSendlButtonClick);\n }\n\n function onAckCancelButtonClick() {\n $('.ack-tooltip .ack-input-group').replaceWith(addAckButtonTemplate);\n $('#add-acknowledge-btn').on('click', onAddAckButtonClick);\n }\n\n function onAckSendlButtonClick() {\n let message = $('.ack-tooltip #ack-message')[0].value;\n let onAck = scope.onAck.bind(scope.context);\n onAck(scope.trigger, message).then(() => {\n closeDrop();\n });\n }\n\n function closeDrop() {\n setTimeout(function() {\n drop.destroy();\n });\n }\n\n });\n\n $compile(element.contents())(scope);\n }\n };\n });\n"]} \ No newline at end of file diff --git a/dist/panel-triggers/css/panel_triggers.css b/dist/panel-triggers/css/panel_triggers.css new file mode 100644 index 0000000..c705db7 --- /dev/null +++ b/dist/panel-triggers/css/panel_triggers.css @@ -0,0 +1,96 @@ +.triggers-panel-wrapper .panel-content { + padding: 0; } + +.triggers-panel-wrapper .panel-title-container { + padding-bottom: 4px; } + +.triggers-panel-scroll { + overflow: auto; } + +.triggers-panel-container { + padding-top: 2.2em; + position: relative; } + +.triggers-panel-footer { + text-align: center; + font-size: 90%; + line-height: 2px; } + .triggers-panel-footer ul { + position: relative; + display: inline-block; + margin-left: 0; + margin-bottom: 0; } + .triggers-panel-footer ul > li { + display: inline; } + .triggers-panel-footer ul > li > a { + float: left; + padding: 4px 12px; + text-decoration: none; + border-left-width: 0; } + .triggers-panel-footer ul > li > a:hover { + background-color: #333; } + .triggers-panel-footer ul > li > a.active { + font-weight: bold; + color: #33B5E5; } + +.triggers-panel-table { + width: 100%; + border-collapse: collapse; } + .triggers-panel-table th { + padding: 0; } + .triggers-panel-table th:first-child .triggers-panel-table-header-inner { + padding-left: 15px; } + .triggers-panel-table td { + padding: 0.45em 0 0.45em 1.1em; + border-bottom: 2px solid #141414; + border-right: 2px solid #141414; } + .triggers-panel-table td:first-child { + padding-left: 15px; } + .triggers-panel-table td:last-child { + border-right: none; } + +.triggers-panel-header-bg { + background: #242222; + border-top: 2px solid #141414; + border-bottom: 2px solid #141414; + height: 2.0em; + position: absolute; + top: 0; + right: 0; + left: 0; } + +.triggers-panel-table-header-inner { + padding: 0.45em 0 0.45em 1.1em; + text-align: left; + color: #33B5E5; + position: absolute; + top: 0; } + +.triggers-panel-width-hack { + visibility: hidden; + height: 0px; + line-height: 0px; } + +.ack-tooltip .drop-content { + max-width: 70rem !important; + min-width: 30rem !important; } + +.ack-tooltip .ack-comments { + width: 60%; } + +.ack-tooltip .ack-add-button { + padding-top: 1rem; } + +.ack-tooltip table td, .ack-tooltip th { + padding-right: 1rem; } + +.ack-tooltip .ack-input-group { + padding-top: 1rem; } + .ack-tooltip .ack-input-group input { + border: 1px solid; + border-radius: 2px; + width: 50%; } + .ack-tooltip .ack-input-group button { + margin-left: 1rem; } + +/*# sourceMappingURL=panel_triggers.css.map */ \ No newline at end of file diff --git a/dist/panel-triggers/css/panel_triggers.css.map b/dist/panel-triggers/css/panel_triggers.css.map new file mode 100644 index 0000000..b4ec92b --- /dev/null +++ b/dist/panel-triggers/css/panel_triggers.css.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "file": "panel_triggers.css", + "sources": [ + "../../../src/panel-triggers/sass/panel_triggers.scss" + ], + "mappings": "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", + "names": [] +} \ No newline at end of file diff --git a/dist/panel-triggers/editor.html b/dist/panel-triggers/editor.html new file mode 100644 index 0000000..ee1b24b --- /dev/null +++ b/dist/panel-triggers/editor.html @@ -0,0 +1,256 @@ +
+
+
Select triggers
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+ +
+
Data source
+
+
+
+ +
+
+
+
+
+ +
+
+
Options
+
+
+ +
+ +
+
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
Show fields
+
+ + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+
+
Customize triggers severity and colors
+
+
+ + + + + +
+ + +
+ +
+
+ + + + + +
+
+
+
+ + + + + +
+ + +
+
+
diff --git a/dist/panel-triggers/editor.js b/dist/panel-triggers/editor.js new file mode 100644 index 0000000..ea74521 --- /dev/null +++ b/dist/panel-triggers/editor.js @@ -0,0 +1,225 @@ +'use strict'; + +System.register(['lodash', '../datasource-zabbix/utils', '../datasource-zabbix/css/query-editor.css!'], function (_export, _context) { + "use strict"; + + var _, utils, _createClass, TriggerPanelEditorCtrl; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + // Get list of metric names for bs-typeahead directive + function getMetricNames(scope, metricList) { + return _.uniq(_.map(scope.metric[metricList], 'name')); + } + + function triggerPanelEditor() { + return { + restrict: 'E', + scope: true, + templateUrl: 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/editor.html', + controller: TriggerPanelEditorCtrl + }; + } + + _export('triggerPanelEditor', triggerPanelEditor); + + return { + setters: [function (_lodash) { + _ = _lodash.default; + }, function (_datasourceZabbixUtils) { + utils = _datasourceZabbixUtils; + }, function (_datasourceZabbixCssQueryEditorCss) {}], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + TriggerPanelEditorCtrl = function () { + + /** @ngInject */ + function TriggerPanelEditorCtrl($scope, $rootScope, uiSegmentSrv, datasourceSrv, templateSrv, popoverSrv) { + var _this = this; + + _classCallCheck(this, TriggerPanelEditorCtrl); + + $scope.editor = this; + this.panelCtrl = $scope.ctrl; + this.panel = this.panelCtrl.panel; + + this.datasourceSrv = datasourceSrv; + this.templateSrv = templateSrv; + this.popoverSrv = popoverSrv; + + // Map functions for bs-typeahead + this.getGroupNames = _.partial(getMetricNames, this, 'groupList'); + this.getHostNames = _.partial(getMetricNames, this, 'hostList'); + this.getApplicationNames = _.partial(getMetricNames, this, 'appList'); + + // Update metric suggestion when template variable was changed + $rootScope.$on('template-variable-value-updated', function () { + return _this.onVariableChange(); + }); + + this.ackFilters = ['all triggers', 'unacknowledged', 'acknowledged']; + + this.sortByFields = [{ text: 'last change', value: 'lastchange' }, { text: 'severity', value: 'priority' }]; + + this.showEventsFields = [{ text: 'All', value: [0, 1] }, { text: 'OK', value: [0] }, { text: 'Problems', value: 1 }]; + + // Load scope defaults + var scopeDefaults = { + metric: {}, + inputStyles: {}, + oldTarget: _.cloneDeep(this.panel.triggers) + }; + _.defaults(this, scopeDefaults); + + // Set default datasource + this.datasources = _.map(this.getZabbixDataSources(), 'name'); + if (!this.panel.datasource) { + this.panel.datasource = this.datasources[0]; + } + // Load datasource + this.datasourceSrv.get(this.panel.datasource).then(function (datasource) { + _this.datasource = datasource; + _this.zabbix = datasource.zabbix; + _this.queryBuilder = datasource.queryBuilder; + _this.initFilters(); + _this.panelCtrl.refresh(); + }); + } + + _createClass(TriggerPanelEditorCtrl, [{ + key: 'initFilters', + value: function initFilters() { + return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps()]); + } + }, { + key: 'suggestGroups', + value: function suggestGroups() { + var _this2 = this; + + return this.zabbix.getAllGroups().then(function (groups) { + _this2.metric.groupList = groups; + return groups; + }); + } + }, { + key: 'suggestHosts', + value: function suggestHosts() { + var _this3 = this; + + var groupFilter = this.datasource.replaceTemplateVars(this.panel.triggers.group.filter); + return this.zabbix.getAllHosts(groupFilter).then(function (hosts) { + _this3.metric.hostList = hosts; + return hosts; + }); + } + }, { + key: 'suggestApps', + value: function suggestApps() { + var _this4 = this; + + var groupFilter = this.datasource.replaceTemplateVars(this.panel.triggers.group.filter); + var hostFilter = this.datasource.replaceTemplateVars(this.panel.triggers.host.filter); + return this.zabbix.getAllApps(groupFilter, hostFilter).then(function (apps) { + _this4.metric.appList = apps; + return apps; + }); + } + }, { + key: 'onVariableChange', + value: function onVariableChange() { + if (this.isContainsVariables()) { + this.targetChanged(); + } + } + }, { + key: 'isContainsVariables', + value: function isContainsVariables() { + var _this5 = this; + + return _.some(['group', 'host', 'application'], function (field) { + return utils.isTemplateVariable(_this5.panel.triggers[field].filter, _this5.templateSrv.variables); + }); + } + }, { + key: 'targetChanged', + value: function targetChanged() { + this.initFilters(); + this.panelCtrl.refresh(); + } + }, { + key: 'parseTarget', + value: function parseTarget() { + this.initFilters(); + var newTarget = _.cloneDeep(this.panel.triggers); + if (!_.isEqual(this.oldTarget, this.panel.triggers)) { + this.oldTarget = newTarget; + this.panelCtrl.refresh(); + } + } + }, { + key: 'refreshTriggerSeverity', + value: function refreshTriggerSeverity() { + _.each(this.triggerList, function (trigger) { + trigger.color = this.panel.triggerSeverity[trigger.priority].color; + trigger.severity = this.panel.triggerSeverity[trigger.priority].severity; + }); + this.panelCtrl.refresh(); + } + }, { + key: 'datasourceChanged', + value: function datasourceChanged() { + this.panelCtrl.refresh(); + } + }, { + key: 'changeTriggerSeverityColor', + value: function changeTriggerSeverityColor(trigger, color) { + this.panel.triggerSeverity[trigger.priority].color = color; + this.refreshTriggerSeverity(); + } + }, { + key: 'isRegex', + value: function isRegex(str) { + return utils.isRegex(str); + } + }, { + key: 'isVariable', + value: function isVariable(str) { + return utils.isTemplateVariable(str, this.templateSrv.variables); + } + }, { + key: 'getZabbixDataSources', + value: function getZabbixDataSources() { + var ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource'; + return _.filter(this.datasourceSrv.getMetricSources(), function (datasource) { + return datasource.meta.id === ZABBIX_DS_ID && datasource.value; + }); + } + }]); + + return TriggerPanelEditorCtrl; + }(); + } + }; +}); +//# sourceMappingURL=editor.js.map diff --git a/dist/panel-triggers/editor.js.map b/dist/panel-triggers/editor.js.map new file mode 100644 index 0000000..d016fb8 --- /dev/null +++ b/dist/panel-triggers/editor.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/panel-triggers/editor.js"],"names":["getMetricNames","scope","metricList","_","uniq","map","metric","triggerPanelEditor","restrict","templateUrl","controller","TriggerPanelEditorCtrl","utils","$scope","$rootScope","uiSegmentSrv","datasourceSrv","templateSrv","popoverSrv","editor","panelCtrl","ctrl","panel","getGroupNames","partial","getHostNames","getApplicationNames","$on","onVariableChange","ackFilters","sortByFields","text","value","showEventsFields","scopeDefaults","inputStyles","oldTarget","cloneDeep","triggers","defaults","datasources","getZabbixDataSources","datasource","get","then","zabbix","queryBuilder","initFilters","refresh","Promise","all","suggestGroups","suggestHosts","suggestApps","getAllGroups","groupList","groups","groupFilter","replaceTemplateVars","group","filter","getAllHosts","hostList","hosts","hostFilter","host","getAllApps","appList","apps","isContainsVariables","targetChanged","some","isTemplateVariable","field","variables","newTarget","isEqual","each","triggerList","trigger","color","triggerSeverity","priority","severity","refreshTriggerSeverity","str","isRegex","ZABBIX_DS_ID","getMetricSources","meta","id"],"mappings":"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","file":"editor.js","sourcesContent":["/**\n * Grafana-Zabbix\n * Zabbix plugin for Grafana.\n * http://github.com/alexanderzobnin/grafana-zabbix\n *\n * Trigger panel.\n * This feature sponsored by CORE IT\n * http://www.coreit.fr\n *\n * Copyright 2015 Alexander Zobnin alexanderzobnin@gmail.com\n * Licensed under the Apache License, Version 2.0\n */\n\nimport _ from 'lodash';\nimport * as utils from '../datasource-zabbix/utils';\n\nimport '../datasource-zabbix/css/query-editor.css!';\n\nclass TriggerPanelEditorCtrl {\n\n /** @ngInject */\n constructor($scope, $rootScope, uiSegmentSrv, datasourceSrv, templateSrv, popoverSrv) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl;\n this.panel = this.panelCtrl.panel;\n\n this.datasourceSrv = datasourceSrv;\n this.templateSrv = templateSrv;\n this.popoverSrv = popoverSrv;\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\n // Update metric suggestion when template variable was changed\n $rootScope.$on('template-variable-value-updated', () => this.onVariableChange());\n\n this.ackFilters = [\n 'all triggers',\n 'unacknowledged',\n 'acknowledged'\n ];\n\n this.sortByFields = [\n { text: 'last change', value: 'lastchange' },\n { text: 'severity', value: 'priority' }\n ];\n\n this.showEventsFields = [\n { text: 'All', value: [0,1] },\n { text: 'OK', value: [0] },\n { text: 'Problems', value: 1 }\n ];\n\n // Load scope defaults\n var scopeDefaults = {\n metric: {},\n inputStyles: {},\n oldTarget: _.cloneDeep(this.panel.triggers)\n };\n _.defaults(this, scopeDefaults);\n\n // Set default datasource\n this.datasources = _.map(this.getZabbixDataSources(), 'name');\n if (!this.panel.datasource) {\n this.panel.datasource = this.datasources[0];\n }\n // Load datasource\n this.datasourceSrv.get(this.panel.datasource)\n .then(datasource => {\n this.datasource = datasource;\n this.zabbix = datasource.zabbix;\n this.queryBuilder = datasource.queryBuilder;\n this.initFilters();\n this.panelCtrl.refresh();\n });\n }\n\n initFilters() {\n return Promise.all([\n this.suggestGroups(),\n this.suggestHosts(),\n this.suggestApps()\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.datasource.replaceTemplateVars(this.panel.triggers.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.datasource.replaceTemplateVars(this.panel.triggers.group.filter);\n let hostFilter = this.datasource.replaceTemplateVars(this.panel.triggers.host.filter);\n return this.zabbix.getAllApps(groupFilter, hostFilter)\n .then(apps => {\n this.metric.appList = apps;\n return apps;\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 return utils.isTemplateVariable(this.panel.triggers[field].filter, this.templateSrv.variables);\n });\n }\n\n targetChanged() {\n this.initFilters();\n this.panelCtrl.refresh();\n }\n\n parseTarget() {\n this.initFilters();\n var newTarget = _.cloneDeep(this.panel.triggers);\n if (!_.isEqual(this.oldTarget, this.panel.triggers)) {\n this.oldTarget = newTarget;\n this.panelCtrl.refresh();\n }\n }\n\n refreshTriggerSeverity() {\n _.each(this.triggerList, function(trigger) {\n trigger.color = this.panel.triggerSeverity[trigger.priority].color;\n trigger.severity = this.panel.triggerSeverity[trigger.priority].severity;\n });\n this.panelCtrl.refresh();\n }\n\n datasourceChanged() {\n this.panelCtrl.refresh();\n }\n\n changeTriggerSeverityColor(trigger, color) {\n this.panel.triggerSeverity[trigger.priority].color = color;\n this.refreshTriggerSeverity();\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 getZabbixDataSources() {\n let ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource';\n return _.filter(this.datasourceSrv.getMetricSources(), datasource => {\n return datasource.meta.id === ZABBIX_DS_ID && datasource.value;\n });\n }\n}\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\nexport function triggerPanelEditor() {\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/editor.html',\n controller: TriggerPanelEditorCtrl,\n };\n}\n"]} \ No newline at end of file diff --git a/dist/panel-triggers/module.html b/dist/panel-triggers/module.html new file mode 100644 index 0000000..23c3ce0 --- /dev/null +++ b/dist/panel-triggers/module.html @@ -0,0 +1,124 @@ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ Host +
+
+
+ Technical Name +
+
+
Status
+
+
Severity
+
+
Issue
+
+
Last change
+
+
Age
+
+
Info
+
+
+ {{trigger.host}} +
+
+
+ {{trigger.hostTechName}} +
+
+
+ {{ctrl.triggerStatusMap[trigger.value]}} +
+
+
+ {{trigger.severity}} +
+
+
+ {{trigger.description}} + + + +
+ + +
+
+ {{trigger.comments}} +
+
+
+ {{trigger.lastchange}} + + {{trigger.age}} + + + + + + + + + + + + + + + +
+
+
+ diff --git a/dist/panel-triggers/module.js b/dist/panel-triggers/module.js new file mode 100644 index 0000000..3c764d3 --- /dev/null +++ b/dist/panel-triggers/module.js @@ -0,0 +1,321 @@ +'use strict'; + +System.register(['lodash', 'moment', '../datasource-zabbix/utils', 'app/plugins/sdk', './editor', './ack-tooltip.directive', './css/panel_triggers.css!'], function (_export, _context) { + "use strict"; + + var _, moment, utils, MetricsPanelCtrl, triggerPanelEditor, _createClass, defaultSeverity, panelDefaults, triggerStatusMap, defaultTimeFormat, TriggerPanelCtrl; + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _possibleConstructorReturn(self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + } + + function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + } + + function filterTriggers(triggers, triggerFilter) { + if (utils.isRegex(triggerFilter)) { + return _.filter(triggers, function (trigger) { + return utils.buildRegex(triggerFilter).test(trigger.description); + }); + } else { + return _.filter(triggers, function (trigger) { + return trigger.description === triggerFilter; + }); + } + } + + return { + setters: [function (_lodash) { + _ = _lodash.default; + }, function (_moment) { + moment = _moment.default; + }, function (_datasourceZabbixUtils) { + utils = _datasourceZabbixUtils; + }, function (_appPluginsSdk) { + MetricsPanelCtrl = _appPluginsSdk.MetricsPanelCtrl; + }, function (_editor) { + triggerPanelEditor = _editor.triggerPanelEditor; + }, function (_ackTooltipDirective) {}, function (_cssPanel_triggersCss) {}], + execute: function () { + _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + defaultSeverity = [{ priority: 0, severity: 'Not classified', color: '#B7DBAB', show: true }, { priority: 1, severity: 'Information', color: '#82B5D8', show: true }, { priority: 2, severity: 'Warning', color: '#E5AC0E', show: true }, { priority: 3, severity: 'Average', color: '#C15C17', show: true }, { priority: 4, severity: 'High', color: '#BF1B00', show: true }, { priority: 5, severity: 'Disaster', color: '#890F02', show: true }]; + panelDefaults = { + datasource: null, + triggers: { + group: { filter: "" }, + host: { filter: "" }, + application: { filter: "" }, + trigger: { filter: "" } + }, + hostField: true, + statusField: false, + severityField: false, + lastChangeField: true, + ageField: true, + infoField: true, + limit: 10, + showTriggers: 'all triggers', + sortTriggersBy: { text: 'last change', value: 'lastchange' }, + showEvents: { text: 'Problems', value: '1' }, + triggerSeverity: defaultSeverity, + okEventColor: 'rgba(0, 245, 153, 0.45)', + ackEventColor: 'rgba(0, 0, 0, 0)' + }; + triggerStatusMap = { + '0': 'OK', + '1': 'Problem' + }; + defaultTimeFormat = "DD MMM YYYY HH:mm:ss"; + + _export('PanelCtrl', _export('TriggerPanelCtrl', TriggerPanelCtrl = function (_MetricsPanelCtrl) { + _inherits(TriggerPanelCtrl, _MetricsPanelCtrl); + + /** @ngInject */ + function TriggerPanelCtrl($scope, $injector, $element, datasourceSrv, templateSrv, contextSrv) { + _classCallCheck(this, TriggerPanelCtrl); + + var _this = _possibleConstructorReturn(this, (TriggerPanelCtrl.__proto__ || Object.getPrototypeOf(TriggerPanelCtrl)).call(this, $scope, $injector)); + + _this.datasourceSrv = datasourceSrv; + _this.templateSrv = templateSrv; + _this.contextSrv = contextSrv; + _this.triggerStatusMap = triggerStatusMap; + _this.defaultTimeFormat = defaultTimeFormat; + + // Load panel defaults + // _.cloneDeep() need for prevent changing shared defaultSeverity. + // Load object "by value" istead "by reference". + _.defaults(_this.panel, _.cloneDeep(panelDefaults)); + + _this.triggerList = []; + _this.refreshData(); + return _this; + } + + /** + * Override onInitMetricsPanelEditMode() method from MetricsPanelCtrl. + * We don't need metric editor from Metrics Panel. + */ + + + _createClass(TriggerPanelCtrl, [{ + key: 'onInitMetricsPanelEditMode', + value: function onInitMetricsPanelEditMode() { + this.addEditorTab('Options', triggerPanelEditor, 2); + } + }, { + key: 'refresh', + value: function refresh() { + this.onMetricsPanelRefresh(); + } + }, { + key: 'onMetricsPanelRefresh', + value: function onMetricsPanelRefresh() { + // ignore fetching data if another panel is in fullscreen + if (this.otherPanelInFullscreenMode()) { + return; + } + + this.refreshData(); + } + }, { + key: 'refreshData', + value: function refreshData() { + // clear loading/error state + delete this.error; + this.loading = true; + this.setTimeQueryStart(); + + var self = this; + + // Load datasource + return this.datasourceSrv.get(this.panel.datasource).then(function (datasource) { + var zabbix = datasource.zabbix; + var showEvents = self.panel.showEvents.value; + var triggerFilter = self.panel.triggers; + + // Replace template variables + var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter); + var hostFilter = datasource.replaceTemplateVars(triggerFilter.host.filter); + var appFilter = datasource.replaceTemplateVars(triggerFilter.application.filter); + + var getTriggers = zabbix.getTriggers(groupFilter, hostFilter, appFilter, showEvents); + return getTriggers.then(function (triggers) { + return _.map(triggers, function (trigger) { + var triggerObj = trigger; + + // Format last change and age + trigger.lastchangeUnix = Number(trigger.lastchange); + var timestamp = moment.unix(trigger.lastchangeUnix); + if (self.panel.customLastChangeFormat) { + // User defined format + triggerObj.lastchange = timestamp.format(self.panel.lastChangeFormat); + } else { + triggerObj.lastchange = timestamp.format(self.defaultTimeFormat); + } + triggerObj.age = timestamp.fromNow(true); + + // Set host that the trigger belongs + if (trigger.hosts.length) { + triggerObj.host = trigger.hosts[0].name; + triggerObj.hostTechName = trigger.hosts[0].host; + } + + // Set color + if (trigger.value === '1') { + // Problem state + triggerObj.color = self.panel.triggerSeverity[trigger.priority].color; + } else { + // OK state + triggerObj.color = self.panel.okEventColor; + } + + triggerObj.severity = self.panel.triggerSeverity[trigger.priority].severity; + return triggerObj; + }); + }).then(function (triggerList) { + + // Request acknowledges for trigger + var eventids = _.map(triggerList, function (trigger) { + return trigger.lastEvent.eventid; + }); + + return zabbix.getAcknowledges(eventids).then(function (events) { + + // Map events to triggers + _.each(triggerList, function (trigger) { + var event = _.find(events, function (event) { + return event.eventid === trigger.lastEvent.eventid; + }); + + if (event) { + trigger.acknowledges = _.map(event.acknowledges, function (ack) { + var timestamp = moment.unix(ack.clock); + if (self.panel.customLastChangeFormat) { + ack.time = timestamp.format(self.panel.lastChangeFormat); + } else { + ack.time = timestamp.format(self.defaultTimeFormat); + } + ack.user = ack.alias + ' (' + ack.name + ' ' + ack.surname + ')'; + return ack; + }); + + // Mark acknowledged triggers with different color + if (self.panel.markAckEvents && trigger.acknowledges.length) { + trigger.color = self.panel.ackEventColor; + } + } + }); + + // Filter triggers by description + var triggerFilter = self.panel.triggers.trigger.filter; + if (triggerFilter) { + triggerList = filterTriggers(triggerList, triggerFilter); + } + + // Filter acknowledged triggers + if (self.panel.showTriggers === 'unacknowledged') { + triggerList = _.filter(triggerList, function (trigger) { + return !trigger.acknowledges; + }); + } else if (self.panel.showTriggers === 'acknowledged') { + triggerList = _.filter(triggerList, 'acknowledges'); + } else { + triggerList = triggerList; + } + + // Filter triggers by severity + triggerList = _.filter(triggerList, function (trigger) { + return self.panel.triggerSeverity[trigger.priority].show; + }); + + // Sort triggers + if (self.panel.sortTriggersBy.value === 'priority') { + triggerList = _.sortBy(triggerList, 'priority').reverse(); + } else { + triggerList = _.sortBy(triggerList, 'lastchangeUnix').reverse(); + } + + // Limit triggers number + self.triggerList = triggerList.slice(0, self.panel.limit); + + // Notify panel that request is finished + self.setTimeQueryEnd(); + self.loading = false; + }); + }); + }); + } + }, { + key: 'switchComment', + value: function switchComment(trigger) { + trigger.showComment = !trigger.showComment; + } + }, { + key: 'acknowledgeTrigger', + value: function acknowledgeTrigger(trigger, message) { + var _this2 = this; + + var eventid = trigger.lastEvent.eventid; + var grafana_user = this.contextSrv.user.name; + var ack_message = grafana_user + ' (Grafana): ' + message; + return this.datasourceSrv.get(this.panel.datasource).then(function (datasource) { + var zabbixAPI = datasource.zabbix.zabbixAPI; + return zabbixAPI.acknowledgeEvent(eventid, ack_message).then(function () { + _this2.refresh(); + }); + }); + } + }]); + + return TriggerPanelCtrl; + }(MetricsPanelCtrl))); + + TriggerPanelCtrl.templateUrl = 'panel-triggers/module.html'; + _export('TriggerPanelCtrl', TriggerPanelCtrl); + + _export('PanelCtrl', TriggerPanelCtrl); + } + }; +}); +//# sourceMappingURL=module.js.map diff --git a/dist/panel-triggers/module.js.map b/dist/panel-triggers/module.js.map new file mode 100644 index 0000000..75455e9 --- /dev/null +++ b/dist/panel-triggers/module.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/panel-triggers/module.js"],"names":["filterTriggers","triggers","triggerFilter","utils","isRegex","_","filter","trigger","buildRegex","test","description","moment","MetricsPanelCtrl","triggerPanelEditor","defaultSeverity","priority","severity","color","show","panelDefaults","datasource","group","host","application","hostField","statusField","severityField","lastChangeField","ageField","infoField","limit","showTriggers","sortTriggersBy","text","value","showEvents","triggerSeverity","okEventColor","ackEventColor","triggerStatusMap","defaultTimeFormat","TriggerPanelCtrl","$scope","$injector","$element","datasourceSrv","templateSrv","contextSrv","defaults","panel","cloneDeep","triggerList","refreshData","addEditorTab","onMetricsPanelRefresh","otherPanelInFullscreenMode","error","loading","setTimeQueryStart","self","get","then","zabbix","groupFilter","replaceTemplateVars","hostFilter","appFilter","getTriggers","map","triggerObj","lastchangeUnix","Number","lastchange","timestamp","unix","customLastChangeFormat","format","lastChangeFormat","age","fromNow","hosts","length","name","hostTechName","eventids","lastEvent","eventid","getAcknowledges","each","event","find","events","acknowledges","ack","clock","time","user","alias","surname","markAckEvents","sortBy","reverse","slice","setTimeQueryEnd","showComment","message","grafana_user","ack_message","zabbixAPI","acknowledgeEvent","refresh","templateUrl"],"mappings":"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","file":"module.js","sourcesContent":["/**\n * Grafana-Zabbix\n * Zabbix plugin for Grafana.\n * http://github.com/alexanderzobnin/grafana-zabbix\n *\n * Trigger panel.\n * This feature sponsored by CORE IT\n * http://www.coreit.fr\n *\n * Copyright 2015 Alexander Zobnin alexanderzobnin@gmail.com\n * Licensed under the Apache License, Version 2.0\n */\n\nimport _ from 'lodash';\nimport moment from 'moment';\nimport * as utils from '../datasource-zabbix/utils';\nimport {MetricsPanelCtrl} from 'app/plugins/sdk';\nimport {triggerPanelEditor} from './editor';\nimport './ack-tooltip.directive';\nimport './css/panel_triggers.css!';\n\nvar defaultSeverity = [\n { priority: 0, severity: 'Not classified', color: '#B7DBAB', show: true },\n { priority: 1, severity: 'Information', color: '#82B5D8', show: true },\n { priority: 2, severity: 'Warning', color: '#E5AC0E', show: true },\n { priority: 3, severity: 'Average', color: '#C15C17', show: true },\n { priority: 4, severity: 'High', color: '#BF1B00', show: true },\n { priority: 5, severity: 'Disaster', color: '#890F02', show: true }\n];\n\nvar panelDefaults = {\n datasource: null,\n triggers: {\n group: {filter: \"\"},\n host: {filter: \"\"},\n application: {filter: \"\"},\n trigger: {filter: \"\"}\n },\n hostField: true,\n statusField: false,\n severityField: false,\n lastChangeField: true,\n ageField: true,\n infoField: true,\n limit: 10,\n showTriggers: 'all triggers',\n sortTriggersBy: { text: 'last change', value: 'lastchange' },\n showEvents: { text: 'Problems', value: '1' },\n triggerSeverity: defaultSeverity,\n okEventColor: 'rgba(0, 245, 153, 0.45)',\n ackEventColor: 'rgba(0, 0, 0, 0)'\n};\n\nvar triggerStatusMap = {\n '0': 'OK',\n '1': 'Problem'\n};\n\nvar defaultTimeFormat = \"DD MMM YYYY HH:mm:ss\";\n\nclass TriggerPanelCtrl extends MetricsPanelCtrl {\n\n /** @ngInject */\n constructor($scope, $injector, $element, datasourceSrv, templateSrv, contextSrv) {\n super($scope, $injector);\n this.datasourceSrv = datasourceSrv;\n this.templateSrv = templateSrv;\n this.contextSrv = contextSrv;\n this.triggerStatusMap = triggerStatusMap;\n this.defaultTimeFormat = defaultTimeFormat;\n\n // Load panel defaults\n // _.cloneDeep() need for prevent changing shared defaultSeverity.\n // Load object \"by value\" istead \"by reference\".\n _.defaults(this.panel, _.cloneDeep(panelDefaults));\n\n this.triggerList = [];\n this.refreshData();\n }\n\n /**\n * Override onInitMetricsPanelEditMode() method from MetricsPanelCtrl.\n * We don't need metric editor from Metrics Panel.\n */\n onInitMetricsPanelEditMode() {\n this.addEditorTab('Options', triggerPanelEditor, 2);\n }\n\n refresh() {\n this.onMetricsPanelRefresh();\n }\n\n onMetricsPanelRefresh() {\n // ignore fetching data if another panel is in fullscreen\n if (this.otherPanelInFullscreenMode()) { return; }\n\n this.refreshData();\n }\n\n refreshData() {\n // clear loading/error state\n delete this.error;\n this.loading = true;\n this.setTimeQueryStart();\n\n var self = this;\n\n // Load datasource\n return this.datasourceSrv.get(this.panel.datasource)\n .then(datasource => {\n var zabbix = datasource.zabbix;\n var showEvents = self.panel.showEvents.value;\n var triggerFilter = self.panel.triggers;\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 var getTriggers = zabbix.getTriggers(groupFilter, hostFilter, appFilter, showEvents);\n return getTriggers.then(triggers => {\n return _.map(triggers, trigger => {\n let triggerObj = trigger;\n\n // Format last change and age\n trigger.lastchangeUnix = Number(trigger.lastchange);\n let timestamp = moment.unix(trigger.lastchangeUnix);\n if (self.panel.customLastChangeFormat) {\n // User defined format\n triggerObj.lastchange = timestamp.format(self.panel.lastChangeFormat);\n } else {\n triggerObj.lastchange = timestamp.format(self.defaultTimeFormat);\n }\n triggerObj.age = timestamp.fromNow(true);\n\n // Set host that the trigger belongs\n if (trigger.hosts.length) {\n triggerObj.host = trigger.hosts[0].name;\n triggerObj.hostTechName = trigger.hosts[0].host;\n }\n\n // Set color\n if (trigger.value === '1') {\n // Problem state\n triggerObj.color = self.panel.triggerSeverity[trigger.priority].color;\n } else {\n // OK state\n triggerObj.color = self.panel.okEventColor;\n }\n\n triggerObj.severity = self.panel.triggerSeverity[trigger.priority].severity;\n return triggerObj;\n });\n })\n .then(triggerList => {\n\n // Request acknowledges for trigger\n var eventids = _.map(triggerList, trigger => {\n return trigger.lastEvent.eventid;\n });\n\n return 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, ack => {\n let timestamp = moment.unix(ack.clock);\n if (self.panel.customLastChangeFormat) {\n ack.time = timestamp.format(self.panel.lastChangeFormat);\n } else {\n ack.time = timestamp.format(self.defaultTimeFormat);\n }\n ack.user = ack.alias + ' (' + ack.name + ' ' + ack.surname + ')';\n return ack;\n });\n\n // Mark acknowledged triggers with different color\n if (self.panel.markAckEvents && trigger.acknowledges.length) {\n trigger.color = self.panel.ackEventColor;\n }\n }\n });\n\n // Filter triggers by description\n var triggerFilter = self.panel.triggers.trigger.filter;\n if (triggerFilter) {\n triggerList = filterTriggers(triggerList, triggerFilter);\n }\n\n // Filter acknowledged triggers\n if (self.panel.showTriggers === 'unacknowledged') {\n triggerList = _.filter(triggerList, trigger => {\n return !trigger.acknowledges;\n });\n } else if (self.panel.showTriggers === 'acknowledged') {\n triggerList = _.filter(triggerList, 'acknowledges');\n } else {\n triggerList = triggerList;\n }\n\n // Filter triggers by severity\n triggerList = _.filter(triggerList, trigger => {\n return self.panel.triggerSeverity[trigger.priority].show;\n });\n\n // Sort triggers\n if (self.panel.sortTriggersBy.value === 'priority') {\n triggerList = _.sortBy(triggerList, 'priority').reverse();\n } else {\n triggerList = _.sortBy(triggerList, 'lastchangeUnix').reverse();\n }\n\n // Limit triggers number\n self.triggerList = triggerList.slice(0, self.panel.limit);\n\n // Notify panel that request is finished\n self.setTimeQueryEnd();\n self.loading = false;\n });\n });\n });\n }\n\n switchComment(trigger) {\n trigger.showComment = !trigger.showComment;\n }\n\n acknowledgeTrigger(trigger, message) {\n let eventid = trigger.lastEvent.eventid;\n let grafana_user = this.contextSrv.user.name;\n let ack_message = grafana_user + ' (Grafana): ' + message;\n return this.datasourceSrv.get(this.panel.datasource)\n .then(datasource => {\n let zabbixAPI = datasource.zabbix.zabbixAPI;\n return zabbixAPI.acknowledgeEvent(eventid, ack_message)\n .then(() => {\n this.refresh();\n });\n });\n }\n}\n\nTriggerPanelCtrl.templateUrl = 'panel-triggers/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\nexport {\n TriggerPanelCtrl,\n TriggerPanelCtrl as PanelCtrl\n};\n"]} \ No newline at end of file diff --git a/dist/panel-triggers/plugin.json b/dist/panel-triggers/plugin.json new file mode 100644 index 0000000..d4c3ef8 --- /dev/null +++ b/dist/panel-triggers/plugin.json @@ -0,0 +1,12 @@ +{ + "type": "panel", + "name": "Zabbix Triggers", + "id": "alexanderzobnin-zabbix-triggers-panel", + + "info": { + "author": { + "name": "Alexander Zobnin", + "url": "https://github.com/alexanderzobnin/grafana-zabbix" + } + } +} diff --git a/dist/plugin.json b/dist/plugin.json new file mode 100644 index 0000000..0db8b1f --- /dev/null +++ b/dist/plugin.json @@ -0,0 +1,65 @@ +{ + "type": "app", + "name": "Zabbix", + "id": "alexanderzobnin-zabbix-app", + + "css": { + "dark": "css/dark.css", + "light": "css/light.css" + }, + + "info": { + "description": "Zabbix plugin for Grafana", + "author": { + "name": "Alexander Zobnin", + "url": "https://github.com/alexanderzobnin" + }, + "keywords": ["zabbix"], + "logos": { + "small": "img/zabbix_app_logo.svg", + "large": "img/zabbix_app_logo.svg" + }, + "links": [ + {"name": "GitHub", "url": "https://github.com/alexanderzobnin/grafana-zabbix"}, + {"name": "Docs", "url": "http://docs.grafana-zabbix.org"}, + {"name": "License", "url": "https://github.com/alexanderzobnin/grafana-zabbix/blob/master/LICENSE.md"} + ], + "screenshots": [ + {"name": "Showcase", "path": "img/screenshot-showcase.png"}, + {"name": "Dashboard", "path": "img/screenshot-dashboard01.png"}, + {"name": "Annotations", "path": "img/screenshot-annotations.png"}, + {"name": "Metric Editor", "path": "img/screenshot-metric_editor.png"}, + {"name": "Triggers", "path": "img/screenshot-triggers.png"} + ], + "version": "3.2.0", + "updated": "2016-12-20" + }, + + "includes": [ + { + "type": "datasource", + "name": "Zabbix Datasource" + }, + { + "type": "panel", + "name": "Triggers Panel" + }, + { + "type": "dashboard", + "name": "Zabbix Server Dashboard", + "path": "dashboards/zabbix_server_dashboard.json", + "addToNav": true + }, + { + "type": "dashboard", + "name": "Template Linux Server", + "path": "dashboards/template_linux_server.json", + "addToNav": true + } + ], + + "dependencies": { + "grafanaVersion": "3.x.x", + "plugins": [] + } +} diff --git a/dist/test/components/config.js b/dist/test/components/config.js new file mode 100644 index 0000000..ad0987c --- /dev/null +++ b/dist/test/components/config.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ZabbixAppConfigCtrl = exports.ZabbixAppConfigCtrl = function ZabbixAppConfigCtrl() { + _classCallCheck(this, ZabbixAppConfigCtrl); +}; + +ZabbixAppConfigCtrl.templateUrl = 'components/config.html'; diff --git a/dist/test/datasource-zabbix/add-metric-function.directive.js b/dist/test/datasource-zabbix/add-metric-function.directive.js new file mode 100644 index 0000000..26b55cc --- /dev/null +++ b/dist/test/datasource-zabbix/add-metric-function.directive.js @@ -0,0 +1,116 @@ +'use strict'; + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _jquery = require('jquery'); + +var _jquery2 = _interopRequireDefault(_jquery); + +var _metricFunctions = require('./metricFunctions'); + +var metricFunctions = _interopRequireWildcard(_metricFunctions); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** @ngInject */ +_angular2.default.module('grafana.directives').directive('addMetricFunction', function ($compile) { + var inputTemplate = ''; + + var buttonTemplate = '' + ''; + + return { + link: function link($scope, elem) { + var categories = metricFunctions.getCategories(); + var allFunctions = getAllFunctionNames(categories); + + $scope.functionMenu = createFunctionDropDownMenu(categories); + + var $input = (0, _jquery2.default)(inputTemplate); + var $button = (0, _jquery2.default)(buttonTemplate); + $input.appendTo(elem); + $button.appendTo(elem); + + $input.attr('data-provide', 'typeahead'); + $input.typeahead({ + source: allFunctions, + minLength: 1, + items: 10, + updater: function updater(value) { + var funcDef = metricFunctions.getFuncDef(value); + if (!funcDef) { + // try find close match + value = value.toLowerCase(); + funcDef = _lodash2.default.find(allFunctions, function (funcName) { + return funcName.toLowerCase().indexOf(value) === 0; + }); + + if (!funcDef) { + return; + } + } + + $scope.$apply(function () { + $scope.addFunction(funcDef); + }); + + $input.trigger('blur'); + return ''; + } + }); + + $button.click(function () { + $button.hide(); + $input.show(); + $input.focus(); + }); + + $input.keyup(function () { + elem.toggleClass('open', $input.val() === ''); + }); + + $input.blur(function () { + // clicking the function dropdown menu wont + // work if you remove class at once + setTimeout(function () { + $input.val(''); + $input.hide(); + $button.show(); + elem.removeClass('open'); + }, 200); + }); + + $compile(elem.contents())($scope); + } + }; +}); + +function getAllFunctionNames(categories) { + return _lodash2.default.reduce(categories, function (list, category) { + _lodash2.default.each(category, function (func) { + list.push(func.name); + }); + return list; + }, []); +} + +function createFunctionDropDownMenu(categories) { + return _lodash2.default.map(categories, function (list, category) { + return { + text: category, + submenu: _lodash2.default.map(list, function (value) { + return { + text: value.name, + click: "ctrl.addFunction('" + value.name + "')" + }; + }) + }; + }); +} diff --git a/dist/test/datasource-zabbix/dataProcessor.js b/dist/test/datasource-zabbix/dataProcessor.js new file mode 100644 index 0000000..2ce1585 --- /dev/null +++ b/dist/test/datasource-zabbix/dataProcessor.js @@ -0,0 +1,330 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Downsample datapoints series + */ +function downsampleSeries(datapoints, time_to, ms_interval, func) { + var downsampledSeries = []; + var timeWindow = { + from: time_to * 1000 - ms_interval, + to: time_to * 1000 + }; + + var points_sum = 0; + var points_num = 0; + var value_avg = 0; + var frame = []; + + for (var i = datapoints.length - 1; i >= 0; i -= 1) { + if (timeWindow.from < datapoints[i][1] && datapoints[i][1] <= timeWindow.to) { + points_sum += datapoints[i][0]; + points_num++; + frame.push(datapoints[i][0]); + } else { + value_avg = points_num ? points_sum / points_num : 0; + + if (func === "max") { + downsampledSeries.push([_lodash2.default.max(frame), timeWindow.to]); + } else if (func === "min") { + downsampledSeries.push([_lodash2.default.min(frame), timeWindow.to]); + } + + // avg by default + else { + downsampledSeries.push([value_avg, timeWindow.to]); + } + + // Shift time window + timeWindow.to = timeWindow.from; + timeWindow.from -= ms_interval; + + points_sum = 0; + points_num = 0; + frame = []; + + // Process point again + i++; + } + } + return downsampledSeries.reverse(); +} + +/** + * Group points by given time interval + * datapoints: [[, ], ...] + */ +function groupBy(interval, groupByCallback, datapoints) { + var ms_interval = utils.parseInterval(interval); + + // Calculate frame timestamps + var frames = _lodash2.default.groupBy(datapoints, function (point) { + // Calculate time for group of points + return Math.floor(point[1] / ms_interval) * ms_interval; + }); + + // frame: { '': [[, ], ...] } + // return [{ '': }, { '': }, ...] + var grouped = _lodash2.default.mapValues(frames, function (frame) { + var points = _lodash2.default.map(frame, function (point) { + return point[0]; + }); + return groupByCallback(points); + }); + + // Convert points to Grafana format + return sortByTime(_lodash2.default.map(grouped, function (value, timestamp) { + return [Number(value), Number(timestamp)]; + })); +} + +function sumSeries(timeseries) { + + // Calculate new points for interpolation + var new_timestamps = _lodash2.default.uniq(_lodash2.default.map(_lodash2.default.flatten(timeseries, true), function (point) { + return point[1]; + })); + new_timestamps = _lodash2.default.sortBy(new_timestamps); + + var interpolated_timeseries = _lodash2.default.map(timeseries, function (series) { + var timestamps = _lodash2.default.map(series, function (point) { + return point[1]; + }); + var new_points = _lodash2.default.map(_lodash2.default.difference(new_timestamps, timestamps), function (timestamp) { + return [null, timestamp]; + }); + var new_series = series.concat(new_points); + return sortByTime(new_series); + }); + + _lodash2.default.each(interpolated_timeseries, interpolateSeries); + + var new_timeseries = []; + var sum; + for (var i = new_timestamps.length - 1; i >= 0; i--) { + sum = 0; + for (var j = interpolated_timeseries.length - 1; j >= 0; j--) { + sum += interpolated_timeseries[j][i][0]; + } + new_timeseries.push([sum, new_timestamps[i]]); + } + + return sortByTime(new_timeseries); +} + +function limit(order, n, orderByFunc, timeseries) { + var orderByCallback = aggregationFunctions[orderByFunc]; + var sortByIteratee = function sortByIteratee(ts) { + var values = _lodash2.default.map(ts.datapoints, function (point) { + return point[0]; + }); + return orderByCallback(values); + }; + var sortedTimeseries = _lodash2.default.sortBy(timeseries, sortByIteratee); + if (order === 'bottom') { + return sortedTimeseries.slice(0, n); + } else { + return sortedTimeseries.slice(-n); + } +} + +function AVERAGE(values) { + var sum = 0; + _lodash2.default.each(values, function (value) { + sum += value; + }); + return sum / values.length; +} + +function MIN(values) { + return _lodash2.default.min(values); +} + +function MAX(values) { + return _lodash2.default.max(values); +} + +function MEDIAN(values) { + var sorted = _lodash2.default.sortBy(values); + return sorted[Math.floor(sorted.length / 2)]; +} + +function setAlias(alias, timeseries) { + timeseries.target = alias; + return timeseries; +} + +function setAliasByRegex(alias, timeseries) { + timeseries.target = extractText(timeseries.target, alias); + return timeseries; +} + +function extractText(str, pattern) { + var extractPattern = new RegExp(pattern); + var extractedValue = extractPattern.exec(str); + extractedValue = extractedValue[0]; + return extractedValue; +} + +function scale(factor, datapoints) { + return _lodash2.default.map(datapoints, function (point) { + return [point[0] * factor, point[1]]; + }); +} + +function delta(datapoints) { + var newSeries = []; + var deltaValue = void 0; + for (var i = 1; i < datapoints.length; i++) { + deltaValue = datapoints[i][0] - datapoints[i - 1][0]; + newSeries.push([deltaValue, datapoints[i][1]]); + } + return newSeries; +} + +function groupByWrapper(interval, groupFunc, datapoints) { + var groupByCallback = aggregationFunctions[groupFunc]; + return groupBy(interval, groupByCallback, datapoints); +} + +function aggregateByWrapper(interval, aggregateFunc, datapoints) { + // Flatten all points in frame and then just use groupBy() + var flattenedPoints = _lodash2.default.flatten(datapoints, true); + var groupByCallback = aggregationFunctions[aggregateFunc]; + return groupBy(interval, groupByCallback, flattenedPoints); +} + +function aggregateWrapper(groupByCallback, interval, datapoints) { + var flattenedPoints = _lodash2.default.flatten(datapoints, true); + return groupBy(interval, groupByCallback, flattenedPoints); +} + +function sortByTime(series) { + return _lodash2.default.sortBy(series, function (point) { + return point[1]; + }); +} + +/** + * Interpolate series with gaps + */ +function interpolateSeries(series) { + var left, right; + + // Interpolate series + for (var i = series.length - 1; i >= 0; i--) { + if (!series[i][0]) { + left = findNearestLeft(series, series[i]); + right = findNearestRight(series, series[i]); + if (!left) { + left = right; + } + if (!right) { + right = left; + } + series[i][0] = linearInterpolation(series[i][1], left, right); + } + } + return series; +} + +function linearInterpolation(timestamp, left, right) { + if (left[1] === right[1]) { + return (left[0] + right[0]) / 2; + } else { + return left[0] + (right[0] - left[0]) / (right[1] - left[1]) * (timestamp - left[1]); + } +} + +function findNearestRight(series, point) { + var point_index = _lodash2.default.indexOf(series, point); + var nearestRight; + for (var i = point_index; i < series.length; i++) { + if (series[i][0] !== null) { + return series[i]; + } + } + return nearestRight; +} + +function findNearestLeft(series, point) { + var point_index = _lodash2.default.indexOf(series, point); + var nearestLeft; + for (var i = point_index; i > 0; i--) { + if (series[i][0] !== null) { + return series[i]; + } + } + return nearestLeft; +} + +function timeShift(interval, range) { + var shift = utils.parseTimeShiftInterval(interval) / 1000; + return range.map(function (time) { + return time - shift; + }); +} + +function unShiftTimeSeries(interval, datapoints) { + var unshift = utils.parseTimeShiftInterval(interval); + return datapoints.map(function (dp) { + return [dp[0], dp[1] + unshift]; + }); +} + +var metricFunctions = { + groupBy: groupByWrapper, + scale: scale, + delta: delta, + aggregateBy: aggregateByWrapper, + average: _lodash2.default.partial(aggregateWrapper, AVERAGE), + min: _lodash2.default.partial(aggregateWrapper, MIN), + max: _lodash2.default.partial(aggregateWrapper, MAX), + median: _lodash2.default.partial(aggregateWrapper, MEDIAN), + sumSeries: sumSeries, + top: _lodash2.default.partial(limit, 'top'), + bottom: _lodash2.default.partial(limit, 'bottom'), + timeShift: timeShift, + setAlias: setAlias, + setAliasByRegex: setAliasByRegex +}; + +var aggregationFunctions = { + avg: AVERAGE, + min: MIN, + max: MAX, + median: MEDIAN +}; + +exports.default = { + downsampleSeries: downsampleSeries, + groupBy: groupBy, + AVERAGE: AVERAGE, + MIN: MIN, + MAX: MAX, + MEDIAN: MEDIAN, + unShiftTimeSeries: unShiftTimeSeries, + + get aggregationFunctions() { + return aggregationFunctions; + }, + + get metricFunctions() { + return metricFunctions; + } +}; diff --git a/dist/test/datasource-zabbix/datasource.js b/dist/test/datasource-zabbix/datasource.js new file mode 100644 index 0000000..2ecc64a --- /dev/null +++ b/dist/test/datasource-zabbix/datasource.js @@ -0,0 +1,582 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.zabbixTemplateFormat = exports.ZabbixAPIDatasource = undefined; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); //import angular from 'angular'; + + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _datemath = require('app/core/utils/datemath'); + +var dateMath = _interopRequireWildcard(_datemath); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +var _migrations = require('./migrations'); + +var migrations = _interopRequireWildcard(_migrations); + +var _metricFunctions = require('./metricFunctions'); + +var metricFunctions = _interopRequireWildcard(_metricFunctions); + +var _dataProcessor = require('./dataProcessor'); + +var _dataProcessor2 = _interopRequireDefault(_dataProcessor); + +var _responseHandler = require('./responseHandler'); + +var _responseHandler2 = _interopRequireDefault(_responseHandler); + +require('./zabbix.js'); + +var _zabbixAPICoreService = require('./zabbixAPICore.service.js'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ZabbixAPIDatasource = function () { + + /** @ngInject */ + function ZabbixAPIDatasource(instanceSettings, templateSrv, alertSrv, Zabbix) { + _classCallCheck(this, ZabbixAPIDatasource); + + this.templateSrv = templateSrv; + this.alertSrv = alertSrv; + + // General data source settings + this.name = instanceSettings.name; + this.url = instanceSettings.url; + this.basicAuth = instanceSettings.basicAuth; + this.withCredentials = instanceSettings.withCredentials; + + // Zabbix API credentials + this.username = instanceSettings.jsonData.username; + this.password = instanceSettings.jsonData.password; + + // Use trends instead history since specified time + this.trends = instanceSettings.jsonData.trends; + this.trendsFrom = instanceSettings.jsonData.trendsFrom || '7d'; + + // Set cache update interval + var ttl = instanceSettings.jsonData.cacheTTL || '1h'; + this.cacheTTL = utils.parseInterval(ttl); + + this.zabbix = new Zabbix(this.url, this.username, this.password, this.basicAuth, this.withCredentials, this.cacheTTL); + + // Use custom format for template variables + this.replaceTemplateVars = _lodash2.default.partial(replaceTemplateVars, this.templateSrv); + } + + //////////////////////// + // Datasource methods // + //////////////////////// + + /** + * Query panel data. Calls for each panel in dashboard. + * @param {Object} options Contains time range, targets and other info. + * @return {Object} Grafana metrics object with timeseries data for each target. + */ + + + _createClass(ZabbixAPIDatasource, [{ + key: 'query', + value: function query(options) { + var _this = this; + + var timeFrom = Math.ceil(dateMath.parse(options.range.from) / 1000); + var timeTo = Math.ceil(dateMath.parse(options.range.to) / 1000); + + var useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000); + var useTrends = timeFrom <= useTrendsFrom && this.trends; + + // Create request for each target + var promises = _lodash2.default.map(options.targets, function (target) { + // Prevent changes of original object + target = _lodash2.default.cloneDeep(target); + _this.replaceTargetVariables(target, options); + + // Apply Time-related functions (timeShift(), etc) + var timeFunctions = bindFunctionDefs(target.functions, 'Time'); + if (timeFunctions.length) { + var _sequence = sequence(timeFunctions)([timeFrom, timeTo]), + _sequence2 = _slicedToArray(_sequence, 2), + time_from = _sequence2[0], + time_to = _sequence2[1]; + + timeFrom = time_from; + timeTo = time_to; + } + + // Metrics or Text query mode + if (target.mode !== 1) { + // Migrate old targets + target = migrations.migrate(target); + + // Don't request undefined and hidden targets + if (target.hide || !target.group || !target.host || !target.item) { + return []; + } + + if (!target.mode || target.mode === 0) { + return _this.queryNumericData(target, timeFrom, timeTo, useTrends); + } else if (target.mode === 2) { + return _this.queryTextData(target, timeFrom, timeTo); + } + } + + // IT services mode + else if (target.mode === 1) { + // Don't show undefined and hidden targets + if (target.hide || !target.itservice || !target.slaProperty) { + return []; + } + + return _this.zabbix.getSLA(target.itservice.serviceid, timeFrom, timeTo).then(function (slaObject) { + return _responseHandler2.default.handleSLAResponse(target.itservice, target.slaProperty, slaObject); + }); + } + }); + + // Data for panel (all targets) + return Promise.all(_lodash2.default.flatten(promises)).then(_lodash2.default.flatten).then(function (timeseries_data) { + return downsampleSeries(timeseries_data, options); + }).then(function (data) { + return { data: data }; + }); + } + }, { + key: 'queryNumericData', + value: function queryNumericData(target, timeFrom, timeTo, useTrends) { + var _this2 = this; + + var options = { + itemtype: 'num' + }; + return this.zabbix.getItemsFromTarget(target, options).then(function (items) { + var getHistoryPromise = void 0; + + if (useTrends) { + (function () { + var valueType = _this2.getTrendValueType(target); + getHistoryPromise = _this2.zabbix.getTrend(items, timeFrom, timeTo).then(function (history) { + return _responseHandler2.default.handleTrends(history, items, valueType); + }); + })(); + } else { + // Use history + getHistoryPromise = _this2.zabbix.getHistory(items, timeFrom, timeTo).then(function (history) { + return _responseHandler2.default.handleHistory(history, items); + }); + } + + return getHistoryPromise.then(function (timeseries_data) { + return _this2.applyDataProcessingFunctions(timeseries_data, target); + }); + }); + } + }, { + key: 'getTrendValueType', + value: function getTrendValueType(target) { + // Find trendValue() function and get specified trend value + var trendFunctions = _lodash2.default.map(metricFunctions.getCategories()['Trends'], 'name'); + var trendValueFunc = _lodash2.default.find(target.functions, function (func) { + return _lodash2.default.includes(trendFunctions, func.def.name); + }); + return trendValueFunc ? trendValueFunc.params[0] : "avg"; + } + }, { + key: 'applyDataProcessingFunctions', + value: function applyDataProcessingFunctions(timeseries_data, target) { + var transformFunctions = bindFunctionDefs(target.functions, 'Transform'); + var aggregationFunctions = bindFunctionDefs(target.functions, 'Aggregate'); + var filterFunctions = bindFunctionDefs(target.functions, 'Filter'); + var aliasFunctions = bindFunctionDefs(target.functions, 'Alias'); + + // Apply transformation functions + timeseries_data = _lodash2.default.map(timeseries_data, function (timeseries) { + timeseries.datapoints = sequence(transformFunctions)(timeseries.datapoints); + return timeseries; + }); + + // Apply filter functions + if (filterFunctions.length) { + timeseries_data = sequence(filterFunctions)(timeseries_data); + } + + // Apply aggregations + if (aggregationFunctions.length) { + (function () { + var dp = _lodash2.default.map(timeseries_data, 'datapoints'); + dp = sequence(aggregationFunctions)(dp); + + var aggFuncNames = _lodash2.default.map(metricFunctions.getCategories()['Aggregate'], 'name'); + var lastAgg = _lodash2.default.findLast(target.functions, function (func) { + return _lodash2.default.includes(aggFuncNames, func.def.name); + }); + + timeseries_data = [{ + target: lastAgg.text, + datapoints: dp + }]; + })(); + } + + // Apply alias functions + _lodash2.default.forEach(timeseries_data, sequence(aliasFunctions)); + + // Apply Time-related functions (timeShift(), etc) + // Find timeShift() function and get specified trend value + this.applyTimeShiftFunction(timeseries_data, target); + + return timeseries_data; + } + }, { + key: 'applyTimeShiftFunction', + value: function applyTimeShiftFunction(timeseries_data, target) { + // Find timeShift() function and get specified interval + var timeShiftFunc = _lodash2.default.find(target.functions, function (func) { + return func.def.name === 'timeShift'; + }); + if (timeShiftFunc) { + (function () { + var shift = timeShiftFunc.params[0]; + _lodash2.default.forEach(timeseries_data, function (series) { + series.datapoints = _dataProcessor2.default.unShiftTimeSeries(shift, series.datapoints); + }); + })(); + } + } + }, { + key: 'queryTextData', + value: function queryTextData(target, timeFrom, timeTo) { + var _this3 = this; + + var options = { + itemtype: 'text' + }; + return this.zabbix.getItemsFromTarget(target, options).then(function (items) { + if (items.length) { + return _this3.zabbix.getHistory(items, timeFrom, timeTo).then(function (history) { + return _responseHandler2.default.convertHistory(history, items, false, function (point) { + var value = point.value; + + // Regex-based extractor + if (target.textFilter) { + value = extractText(point.value, target.textFilter, target.useCaptureGroups); + } + + return [value, point.clock * 1000]; + }); + }); + } else { + return Promise.resolve([]); + } + }); + } + + /** + * Test connection to Zabbix API + * @return {object} Connection status and Zabbix API version + */ + + }, { + key: 'testDatasource', + value: function testDatasource() { + var _this4 = this; + + var zabbixVersion = void 0; + return this.zabbix.getVersion().then(function (version) { + zabbixVersion = version; + return _this4.zabbix.login(); + }).then(function () { + return { + status: "success", + title: "Success", + message: "Zabbix API version: " + zabbixVersion + }; + }).catch(function (error) { + if (error instanceof _zabbixAPICoreService.ZabbixAPIError) { + return { + status: "error", + title: error.message, + message: error.data + }; + } else { + return { + status: "error", + title: "Connection failed", + message: "Could not connect to given url" + }; + } + }); + } + + //////////////// + // Templating // + //////////////// + + /** + * Find metrics from templated request. + * + * @param {string} query Query from Templating + * @return {string} Metric name - group, host, app or item or list + * of metrics in "{metric1,metcic2,...,metricN}" format. + */ + + }, { + key: 'metricFindQuery', + value: function metricFindQuery(query) { + var _this5 = this; + + var result = void 0; + var parts = []; + + // Split query. Query structure: group.host.app.item + _lodash2.default.each(query.split('.'), function (part) { + part = _this5.replaceTemplateVars(part, {}); + + // Replace wildcard to regex + if (part === '*') { + part = '/.*/'; + } + parts.push(part); + }); + var template = _lodash2.default.zipObject(['group', 'host', 'app', 'item'], parts); + + // Get items + if (parts.length === 4) { + // Search for all items, even it's not belong to any application + if (template.app === '/.*/') { + template.app = ''; + } + result = this.zabbix.getItems(template.group, template.host, template.app, template.item); + } else if (parts.length === 3) { + // Get applications + result = this.zabbix.getApps(template.group, template.host, template.app); + } else if (parts.length === 2) { + // Get hosts + result = this.zabbix.getHosts(template.group, template.host); + } else if (parts.length === 1) { + // Get groups + result = this.zabbix.getGroups(template.group); + } else { + result = Promise.resolve([]); + } + + return result.then(function (metrics) { + return metrics.map(formatMetric); + }); + } + + ///////////////// + // Annotations // + ///////////////// + + }, { + key: 'annotationQuery', + value: function annotationQuery(options) { + var _this6 = this; + + var timeFrom = Math.ceil(dateMath.parse(options.rangeRaw.from) / 1000); + var timeTo = Math.ceil(dateMath.parse(options.rangeRaw.to) / 1000); + var annotation = options.annotation; + var showOkEvents = annotation.showOkEvents ? [0, 1] : 1; + + // Show all triggers + var showTriggers = [0, 1]; + + var getTriggers = this.zabbix.getTriggers(this.replaceTemplateVars(annotation.group, {}), this.replaceTemplateVars(annotation.host, {}), this.replaceTemplateVars(annotation.application, {}), showTriggers); + + return getTriggers.then(function (triggers) { + + // Filter triggers by description + if (utils.isRegex(annotation.trigger)) { + triggers = _lodash2.default.filter(triggers, function (trigger) { + return utils.buildRegex(annotation.trigger).test(trigger.description); + }); + } else if (annotation.trigger) { + triggers = _lodash2.default.filter(triggers, function (trigger) { + return trigger.description === annotation.trigger; + }); + } + + // Remove events below the chose severity + triggers = _lodash2.default.filter(triggers, function (trigger) { + return Number(trigger.priority) >= Number(annotation.minseverity); + }); + + var objectids = _lodash2.default.map(triggers, 'triggerid'); + return _this6.zabbix.getEvents(objectids, timeFrom, timeTo, showOkEvents).then(function (events) { + var indexedTriggers = _lodash2.default.keyBy(triggers, 'triggerid'); + + // Hide acknowledged events if option enabled + if (annotation.hideAcknowledged) { + events = _lodash2.default.filter(events, function (event) { + return !event.acknowledges.length; + }); + } + + return _lodash2.default.map(events, function (event) { + var tags = void 0; + if (annotation.showHostname) { + tags = _lodash2.default.map(event.hosts, 'name'); + } + + // Show event type (OK or Problem) + var title = Number(event.value) ? 'Problem' : 'OK'; + + var formatted_acknowledges = utils.formatAcknowledges(event.acknowledges); + return { + annotation: annotation, + time: event.clock * 1000, + title: title, + tags: tags, + text: indexedTriggers[event.objectid].description + formatted_acknowledges + }; + }); + }); + }); + } + + // Replace template variables + + }, { + key: 'replaceTargetVariables', + value: function replaceTargetVariables(target, options) { + var _this7 = this; + + var parts = ['group', 'host', 'application', 'item']; + parts.forEach(function (p) { + if (target[p] && target[p].filter) { + target[p].filter = _this7.replaceTemplateVars(target[p].filter, options.scopedVars); + } + }); + target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars); + + _lodash2.default.forEach(target.functions, function (func) { + func.params = func.params.map(function (param) { + if (typeof param === 'number') { + return +_this7.templateSrv.replace(param.toString(), options.scopedVars); + } else { + return _this7.templateSrv.replace(param, options.scopedVars); + } + }); + }); + } + }]); + + return ZabbixAPIDatasource; +}(); + +function bindFunctionDefs(functionDefs, category) { + var aggregationFunctions = _lodash2.default.map(metricFunctions.getCategories()[category], 'name'); + var aggFuncDefs = _lodash2.default.filter(functionDefs, function (func) { + return _lodash2.default.includes(aggregationFunctions, func.def.name); + }); + + return _lodash2.default.map(aggFuncDefs, function (func) { + var funcInstance = metricFunctions.createFuncInstance(func.def, func.params); + return funcInstance.bindFunction(_dataProcessor2.default.metricFunctions); + }); +} + +function downsampleSeries(timeseries_data, options) { + return _lodash2.default.map(timeseries_data, function (timeseries) { + if (timeseries.datapoints.length > options.maxDataPoints) { + timeseries.datapoints = _dataProcessor2.default.groupBy(options.interval, _dataProcessor2.default.AVERAGE, timeseries.datapoints); + } + return timeseries; + }); +} + +function formatMetric(metricObj) { + return { + text: metricObj.name, + expandable: false + }; +} + +/** + * Custom formatter for template variables. + * Default Grafana "regex" formatter returns + * value1|value2 + * This formatter returns + * (value1|value2) + * This format needed for using in complex regex with + * template variables, for example + * /CPU $cpu_item.*time/ where $cpu_item is system,user,iowait + */ +function zabbixTemplateFormat(value) { + if (typeof value === 'string') { + return utils.escapeRegex(value); + } + + var escapedValues = _lodash2.default.map(value, utils.escapeRegex); + return '(' + escapedValues.join('|') + ')'; +} + +/** + * If template variables are used in request, replace it using regex format + * and wrap with '/' for proper multi-value work. Example: + * $variable selected as a, b, c + * We use filter $variable + * $variable -> a|b|c -> /a|b|c/ + * /$variable/ -> /a|b|c/ -> /a|b|c/ + */ +function replaceTemplateVars(templateSrv, target, scopedVars) { + var replacedTarget = templateSrv.replace(target, scopedVars, zabbixTemplateFormat); + if (target !== replacedTarget && !utils.isRegex(replacedTarget)) { + replacedTarget = '/^' + replacedTarget + '$/'; + } + return replacedTarget; +} + +function extractText(str, pattern, useCaptureGroups) { + var extractPattern = new RegExp(pattern); + var extractedValue = extractPattern.exec(str); + if (extractedValue) { + if (useCaptureGroups) { + extractedValue = extractedValue[1]; + } else { + extractedValue = extractedValue[0]; + } + } + return extractedValue; +} + +// Apply function one by one: +// sequence([a(), b(), c()]) = c(b(a())); +function sequence(funcsArray) { + return function (result) { + for (var i = 0; i < funcsArray.length; i++) { + result = funcsArray[i].call(this, result); + } + return result; + }; +} + +exports.ZabbixAPIDatasource = ZabbixAPIDatasource; +exports.zabbixTemplateFormat = zabbixTemplateFormat; + +// Fix for backward compatibility with lodash 2.4 + +if (!_lodash2.default.includes) { + _lodash2.default.includes = _lodash2.default.contains; +} +if (!_lodash2.default.keyBy) { + _lodash2.default.keyBy = _lodash2.default.indexBy; +} diff --git a/dist/test/datasource-zabbix/metric-function-editor.directive.js b/dist/test/datasource-zabbix/metric-function-editor.directive.js new file mode 100644 index 0000000..02135e9 --- /dev/null +++ b/dist/test/datasource-zabbix/metric-function-editor.directive.js @@ -0,0 +1,246 @@ +'use strict'; + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _jquery = require('jquery'); + +var _jquery2 = _interopRequireDefault(_jquery); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** @ngInject */ +_angular2.default.module('grafana.directives').directive('metricFunctionEditor', function ($compile, templateSrv) { + + var funcSpanTemplate = '{{func.def.name}}('; + var paramTemplate = ''; + + var funcControlsTemplate = '
' + '' + '' + '' + '' + '
'; + + return { + restrict: 'A', + link: function postLink($scope, elem) { + var $funcLink = (0, _jquery2.default)(funcSpanTemplate); + var $funcControls = (0, _jquery2.default)(funcControlsTemplate); + var ctrl = $scope.ctrl; + var func = $scope.func; + var funcDef = func.def; + var scheduledRelink = false; + var paramCountAtLink = 0; + + function clickFuncParam(paramIndex) { + /*jshint validthis:true */ + + var $link = (0, _jquery2.default)(this); + var $input = $link.next(); + + $input.val(func.params[paramIndex]); + $input.css('width', $link.width() + 16 + 'px'); + + $link.hide(); + $input.show(); + $input.focus(); + $input.select(); + + var typeahead = $input.data('typeahead'); + if (typeahead) { + $input.val(''); + typeahead.lookup(); + } + } + + function scheduledRelinkIfNeeded() { + if (paramCountAtLink === func.params.length) { + return; + } + + if (!scheduledRelink) { + scheduledRelink = true; + setTimeout(function () { + relink(); + scheduledRelink = false; + }, 200); + } + } + + function inputBlur(paramIndex) { + /*jshint validthis:true */ + var $input = (0, _jquery2.default)(this); + var $link = $input.prev(); + var newValue = $input.val(); + + if (newValue !== '' || func.def.params[paramIndex].optional) { + $link.html(templateSrv.highlightVariablesAsHtml(newValue)); + + func.updateParam($input.val(), paramIndex); + scheduledRelinkIfNeeded(); + + $scope.$apply(function () { + ctrl.targetChanged(); + }); + + $input.hide(); + $link.show(); + } + } + + function inputKeyPress(paramIndex, e) { + /*jshint validthis:true */ + if (e.which === 13) { + inputBlur.call(this, paramIndex); + } + } + + function inputKeyDown() { + /*jshint validthis:true */ + this.style.width = (3 + this.value.length) * 8 + 'px'; + } + + function addTypeahead($input, paramIndex) { + $input.attr('data-provide', 'typeahead'); + + var options = funcDef.params[paramIndex].options; + if (funcDef.params[paramIndex].type === 'int' || funcDef.params[paramIndex].type === 'float') { + options = _lodash2.default.map(options, function (val) { + return val.toString(); + }); + } + + $input.typeahead({ + source: options, + minLength: 0, + items: 20, + updater: function updater(value) { + setTimeout(function () { + inputBlur.call($input[0], paramIndex); + }, 0); + return value; + } + }); + + var typeahead = $input.data('typeahead'); + typeahead.lookup = function () { + this.query = this.$element.val() || ''; + return this.process(this.source); + }; + } + + function toggleFuncControls() { + var targetDiv = elem.closest('.tight-form'); + + if (elem.hasClass('show-function-controls')) { + elem.removeClass('show-function-controls'); + targetDiv.removeClass('has-open-function'); + $funcControls.hide(); + return; + } + + elem.addClass('show-function-controls'); + targetDiv.addClass('has-open-function'); + + $funcControls.show(); + } + + function addElementsAndCompile() { + $funcControls.appendTo(elem); + $funcLink.appendTo(elem); + + _lodash2.default.each(funcDef.params, function (param, index) { + if (param.optional && func.params.length <= index) { + return; + } + + if (index > 0) { + (0, _jquery2.default)(', ').appendTo(elem); + } + + var paramValue = templateSrv.highlightVariablesAsHtml(func.params[index]); + var $paramLink = (0, _jquery2.default)('' + paramValue + ''); + var $input = (0, _jquery2.default)(paramTemplate); + + paramCountAtLink++; + + $paramLink.appendTo(elem); + $input.appendTo(elem); + + $input.blur(_lodash2.default.partial(inputBlur, index)); + $input.keyup(inputKeyDown); + $input.keypress(_lodash2.default.partial(inputKeyPress, index)); + $paramLink.click(_lodash2.default.partial(clickFuncParam, index)); + + if (funcDef.params[index].options) { + addTypeahead($input, index); + } + }); + + (0, _jquery2.default)(')').appendTo(elem); + + $compile(elem.contents())($scope); + } + + function ifJustAddedFocusFistParam() { + if ($scope.func.added) { + $scope.func.added = false; + setTimeout(function () { + elem.find('.graphite-func-param-link').first().click(); + }, 10); + } + } + + function registerFuncControlsToggle() { + $funcLink.click(toggleFuncControls); + } + + function registerFuncControlsActions() { + $funcControls.click(function (e) { + var $target = (0, _jquery2.default)(e.target); + if ($target.hasClass('fa-remove')) { + toggleFuncControls(); + $scope.$apply(function () { + ctrl.removeFunction($scope.func); + }); + return; + } + + if ($target.hasClass('fa-arrow-left')) { + $scope.$apply(function () { + _lodash2.default.move($scope.target.functions, $scope.$index, $scope.$index - 1); + ctrl.targetChanged(); + }); + return; + } + + if ($target.hasClass('fa-arrow-right')) { + $scope.$apply(function () { + _lodash2.default.move($scope.target.functions, $scope.$index, $scope.$index + 1); + ctrl.targetChanged(); + }); + return; + } + + if ($target.hasClass('fa-question-circle')) { + var docSite = "http://docs.grafana-zabbix.org/reference/functions/"; + window.open(docSite + '#' + funcDef.name.toLowerCase(), '_blank'); + return; + } + }); + } + + function relink() { + elem.children().remove(); + + addElementsAndCompile(); + ifJustAddedFocusFistParam(); + registerFuncControlsToggle(); + registerFuncControlsActions(); + } + + relink(); + } + }; +}); diff --git a/dist/test/datasource-zabbix/metricFunctions.js b/dist/test/datasource-zabbix/metricFunctions.js new file mode 100644 index 0000000..1a54a57 --- /dev/null +++ b/dist/test/datasource-zabbix/metricFunctions.js @@ -0,0 +1,292 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +exports.createFuncInstance = createFuncInstance; +exports.getFuncDef = getFuncDef; +exports.getCategories = getCategories; + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _jquery = require('jquery'); + +var _jquery2 = _interopRequireDefault(_jquery); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var index = []; +var categories = { + Transform: [], + Aggregate: [], + Filter: [], + Trends: [], + Time: [], + Alias: [] +}; + +function addFuncDef(funcDef) { + funcDef.params = funcDef.params || []; + funcDef.defaultParams = funcDef.defaultParams || []; + + if (funcDef.category) { + categories[funcDef.category].push(funcDef); + } + index[funcDef.name] = funcDef; + index[funcDef.shortName || funcDef.name] = funcDef; +} + +// Transform + +addFuncDef({ + name: 'groupBy', + category: 'Transform', + params: [{ name: 'interval', type: 'string' }, { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: ['1m', 'avg'] +}); + +addFuncDef({ + name: 'scale', + category: 'Transform', + params: [{ name: 'factor', type: 'float', options: [100, 0.01, 10, -1] }], + defaultParams: [100] +}); + +addFuncDef({ + name: 'delta', + category: 'Transform', + params: [], + defaultParams: [] +}); + +// Aggregate + +addFuncDef({ + name: 'sumSeries', + category: 'Aggregate', + params: [], + defaultParams: [] +}); + +addFuncDef({ + name: 'median', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] +}); + +addFuncDef({ + name: 'average', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] +}); + +addFuncDef({ + name: 'min', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] +}); + +addFuncDef({ + name: 'max', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }], + defaultParams: ['1m'] +}); + +addFuncDef({ + name: 'aggregateBy', + category: 'Aggregate', + params: [{ name: 'interval', type: 'string' }, { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: ['1m', 'avg'] +}); + +// Filter + +addFuncDef({ + name: 'top', + category: 'Filter', + params: [{ name: 'number', type: 'int' }, { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: [5, 'avg'] +}); + +addFuncDef({ + name: 'bottom', + category: 'Filter', + params: [{ name: 'number', type: 'int' }, { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'median'] }], + defaultParams: [5, 'avg'] +}); + +// Trends + +addFuncDef({ + name: 'trendValue', + category: 'Trends', + params: [{ name: 'type', type: 'string', options: ['avg', 'min', 'max'] }], + defaultParams: ['avg'] +}); + +// Time + +addFuncDef({ + name: 'timeShift', + category: 'Time', + params: [{ name: 'interval', type: 'string', options: ['24h', '7d', '1M', '+24h', '-24h'] }], + defaultParams: ['24h'] +}); + +//Alias + +addFuncDef({ + name: 'setAlias', + category: 'Alias', + params: [{ name: 'alias', type: 'string' }], + defaultParams: [] +}); + +addFuncDef({ + name: 'setAliasByRegex', + category: 'Alias', + params: [{ name: 'aliasByRegex', type: 'string' }], + defaultParams: [] +}); + +_lodash2.default.each(categories, function (funcList, catName) { + categories[catName] = _lodash2.default.sortBy(funcList, 'name'); +}); + +var FuncInstance = function () { + function FuncInstance(funcDef, params) { + _classCallCheck(this, FuncInstance); + + this.def = funcDef; + + if (params) { + this.params = params; + } else { + // Create with default params + this.params = []; + this.params = funcDef.defaultParams.slice(0); + } + + this.updateText(); + } + + _createClass(FuncInstance, [{ + key: 'bindFunction', + value: function bindFunction(metricFunctions) { + var func = metricFunctions[this.def.name]; + if (func) { + + // Bind function arguments + var bindedFunc = func; + var param; + for (var i = 0; i < this.params.length; i++) { + param = this.params[i]; + + // Convert numeric params + if (this.def.params[i].type === 'int' || this.def.params[i].type === 'float') { + param = Number(param); + } + bindedFunc = _lodash2.default.partial(bindedFunc, param); + } + return bindedFunc; + } else { + throw { message: 'Method not found ' + this.def.name }; + } + } + }, { + key: 'render', + value: function render(metricExp) { + var str = this.def.name + '('; + var parameters = _lodash2.default.map(this.params, function (value, index) { + + var paramType = this.def.params[index].type; + if (paramType === 'int' || paramType === 'float' || paramType === 'value_or_series' || paramType === 'boolean') { + return value; + } else if (paramType === 'int_or_interval' && _jquery2.default.isNumeric(value)) { + return value; + } + + return "'" + value + "'"; + }, this); + + if (metricExp) { + parameters.unshift(metricExp); + } + + return str + parameters.join(', ') + ')'; + } + }, { + key: '_hasMultipleParamsInString', + value: function _hasMultipleParamsInString(strValue, index) { + if (strValue.indexOf(',') === -1) { + return false; + } + + return this.def.params[index + 1] && this.def.params[index + 1].optional; + } + }, { + key: 'updateParam', + value: function updateParam(strValue, index) { + // handle optional parameters + // if string contains ',' and next param is optional, split and update both + if (this._hasMultipleParamsInString(strValue, index)) { + _lodash2.default.each(strValue.split(','), function (partVal, idx) { + this.updateParam(partVal.trim(), idx); + }, this); + return; + } + + if (strValue === '' && this.def.params[index].optional) { + this.params.splice(index, 1); + } else { + this.params[index] = strValue; + } + + this.updateText(); + } + }, { + key: 'updateText', + value: function updateText() { + if (this.params.length === 0) { + this.text = this.def.name + '()'; + return; + } + + var text = this.def.name + '('; + text += this.params.join(', '); + text += ')'; + this.text = text; + } + }]); + + return FuncInstance; +}(); + +function createFuncInstance(funcDef, params) { + if (_lodash2.default.isString(funcDef)) { + if (!index[funcDef]) { + throw { message: 'Method not found ' + name }; + } + funcDef = index[funcDef]; + } + return new FuncInstance(funcDef, params); +} + +function getFuncDef(name) { + return index[name]; +} + +function getCategories() { + return categories; +} diff --git a/dist/test/datasource-zabbix/migrations.js b/dist/test/datasource-zabbix/migrations.js new file mode 100644 index 0000000..dc422c0 --- /dev/null +++ b/dist/test/datasource-zabbix/migrations.js @@ -0,0 +1,48 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isGrafana2target = isGrafana2target; +exports.migrateFrom2To3version = migrateFrom2To3version; +exports.migrate = migrate; +/** + * Query format migration. + * This module can detect query format version and make migration. + */ + +function isGrafana2target(target) { + if (!target.mode || target.mode === 0 || target.mode === 2) { + if ((target.hostFilter || target.itemFilter || target.downsampleFunction || target.host && target.host.host) && target.item.filter === undefined && target.host.filter === undefined) { + return true; + } else { + return false; + } + } else { + return false; + } +} + +function migrateFrom2To3version(target) { + target.group.filter = target.group.name === "*" ? "/.*/" : target.group.name; + target.host.filter = target.host.name === "*" ? convertToRegex(target.hostFilter) : target.host.name; + target.application.filter = target.application.name === "*" ? "" : target.application.name; + target.item.filter = target.item.name === "All" ? convertToRegex(target.itemFilter) : target.item.name; + return target; +} + +function migrate(target) { + if (isGrafana2target(target)) { + return migrateFrom2To3version(target); + } else { + return target; + } +} + +function convertToRegex(str) { + if (str) { + return '/' + str + '/'; + } else { + return '/.*/'; + } +} diff --git a/dist/test/datasource-zabbix/module.js b/dist/test/datasource-zabbix/module.js new file mode 100644 index 0000000..10f88d0 --- /dev/null +++ b/dist/test/datasource-zabbix/module.js @@ -0,0 +1,36 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.AnnotationsQueryCtrl = exports.QueryOptionsCtrl = exports.QueryCtrl = exports.ConfigCtrl = exports.Datasource = undefined; + +var _datasource = require('./datasource'); + +var _query = require('./query.controller'); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ZabbixConfigController = function ZabbixConfigController() { + _classCallCheck(this, ZabbixConfigController); +}; + +ZabbixConfigController.templateUrl = 'datasource-zabbix/partials/config.html'; + +var ZabbixQueryOptionsController = function ZabbixQueryOptionsController() { + _classCallCheck(this, ZabbixQueryOptionsController); +}; + +ZabbixQueryOptionsController.templateUrl = 'datasource-zabbix/partials/query.options.html'; + +var ZabbixAnnotationsQueryController = function ZabbixAnnotationsQueryController() { + _classCallCheck(this, ZabbixAnnotationsQueryController); +}; + +ZabbixAnnotationsQueryController.templateUrl = 'datasource-zabbix/partials/annotations.editor.html'; + +exports.Datasource = _datasource.ZabbixAPIDatasource; +exports.ConfigCtrl = ZabbixConfigController; +exports.QueryCtrl = _query.ZabbixQueryController; +exports.QueryOptionsCtrl = ZabbixQueryOptionsController; +exports.AnnotationsQueryCtrl = ZabbixAnnotationsQueryController; diff --git a/dist/test/datasource-zabbix/query.controller.js b/dist/test/datasource-zabbix/query.controller.js new file mode 100644 index 0000000..24542f5 --- /dev/null +++ b/dist/test/datasource-zabbix/query.controller.js @@ -0,0 +1,378 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ZabbixQueryController = undefined; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _sdk = require('app/plugins/sdk'); + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +var _metricFunctions = require('./metricFunctions'); + +var metricFunctions = _interopRequireWildcard(_metricFunctions); + +var _migrations = require('./migrations'); + +var migrations = _interopRequireWildcard(_migrations); + +require('./add-metric-function.directive'); + +require('./metric-function-editor.directive'); + +require('./css/query-editor.css!'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ZabbixQueryController = exports.ZabbixQueryController = function (_QueryCtrl) { + _inherits(ZabbixQueryController, _QueryCtrl); + + // ZabbixQueryCtrl constructor + function ZabbixQueryController($scope, $injector, $rootScope, $sce, templateSrv) { + _classCallCheck(this, ZabbixQueryController); + + var _this = _possibleConstructorReturn(this, (ZabbixQueryController.__proto__ || Object.getPrototypeOf(ZabbixQueryController)).call(this, $scope, $injector)); + + _this.zabbix = _this.datasource.zabbix; + + // Use custom format for template variables + _this.replaceTemplateVars = _this.datasource.replaceTemplateVars; + _this.templateSrv = templateSrv; + + _this.editorModes = { + 0: { value: 'num', text: 'Metrics', mode: 0 }, + 1: { value: 'itservice', text: 'IT Services', mode: 1 }, + 2: { value: 'text', text: 'Text', mode: 2 } + }; + + // 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'); + + // Update metric suggestion when template variable was changed + $rootScope.$on('template-variable-value-updated', function () { + return _this.onVariableChange(); + }); + + // Update metrics when item selected from dropdown + $scope.$on('typeahead-updated', function () { + _this.onTargetBlur(); + }); + + _this.init = function () { + var target = this.target; + + // Migrate old targets + target = migrations.migrate(target); + + var scopeDefaults = { + metric: {}, + oldTarget: _lodash2.default.cloneDeep(this.target), + queryOptionsText: this.renderQueryOptionsText() + }; + _lodash2.default.defaults(this, scopeDefaults); + + // Load default values + var targetDefaults = { + mode: 0, + group: { filter: "" }, + host: { filter: "" }, + application: { filter: "" }, + item: { filter: "" }, + functions: [], + options: { + showDisabledItems: false + } + }; + _lodash2.default.defaults(target, targetDefaults); + + // Create function instances from saved JSON + target.functions = _lodash2.default.map(target.functions, function (func) { + return metricFunctions.createFuncInstance(func.def, func.params); + }); + + if (target.mode === 0 || target.mode === 2) { + + this.downsampleFunctionList = [{ name: "avg", value: "avg" }, { name: "min", value: "min" }, { name: "max", value: "max" }]; + + this.initFilters(); + } else if (target.mode === 1) { + this.slaPropertyList = [{ name: "Status", property: "status" }, { name: "SLA", property: "sla" }, { name: "OK time", property: "okTime" }, { name: "Problem time", property: "problemTime" }, { name: "Down time", property: "downtimeTime" }]; + this.itserviceList = [{ name: "test" }]; + this.updateITServiceList(); + } + }; + + _this.init(); + return _this; + } + + _createClass(ZabbixQueryController, [{ + key: 'initFilters', + value: function initFilters() { + var itemtype = this.editorModes[this.target.mode].value; + return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps(), this.suggestItems(itemtype)]); + } + }, { + key: 'suggestGroups', + value: function suggestGroups() { + var _this2 = this; + + return this.zabbix.getAllGroups().then(function (groups) { + _this2.metric.groupList = groups; + return groups; + }); + } + }, { + key: 'suggestHosts', + value: function suggestHosts() { + var _this3 = this; + + var groupFilter = this.replaceTemplateVars(this.target.group.filter); + return this.zabbix.getAllHosts(groupFilter).then(function (hosts) { + _this3.metric.hostList = hosts; + return hosts; + }); + } + }, { + key: 'suggestApps', + value: function suggestApps() { + var _this4 = this; + + var groupFilter = this.replaceTemplateVars(this.target.group.filter); + var hostFilter = this.replaceTemplateVars(this.target.host.filter); + return this.zabbix.getAllApps(groupFilter, hostFilter).then(function (apps) { + _this4.metric.appList = apps; + return apps; + }); + } + }, { + key: 'suggestItems', + value: function suggestItems() { + var _this5 = this; + + var itemtype = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'num'; + + var groupFilter = this.replaceTemplateVars(this.target.group.filter); + var hostFilter = this.replaceTemplateVars(this.target.host.filter); + var appFilter = this.replaceTemplateVars(this.target.application.filter); + var options = { + itemtype: itemtype, + showDisabledItems: this.target.options.showDisabledItems + }; + + return this.zabbix.getAllItems(groupFilter, hostFilter, appFilter, options).then(function (items) { + _this5.metric.itemList = items; + return items; + }); + } + }, { + key: 'isRegex', + value: function isRegex(str) { + return utils.isRegex(str); + } + }, { + key: 'isVariable', + value: function isVariable(str) { + return utils.isTemplateVariable(str, this.templateSrv.variables); + } + }, { + key: 'onTargetBlur', + value: function onTargetBlur() { + var newTarget = _lodash2.default.cloneDeep(this.target); + if (!_lodash2.default.isEqual(this.oldTarget, this.target)) { + this.oldTarget = newTarget; + this.targetChanged(); + } + } + }, { + key: 'onVariableChange', + value: function onVariableChange() { + if (this.isContainsVariables()) { + this.targetChanged(); + } + } + + /** + * Check query for template variables + */ + + }, { + key: 'isContainsVariables', + value: function isContainsVariables() { + var _this6 = this; + + return _lodash2.default.some(['group', 'host', 'application'], function (field) { + if (_this6.target[field] && _this6.target[field].filter) { + return utils.isTemplateVariable(_this6.target[field].filter, _this6.templateSrv.variables); + } else { + return false; + } + }); + } + }, { + key: 'parseTarget', + value: function parseTarget() {} + // Parse target + + + // Validate target and set validation info + + }, { + key: 'validateTarget', + value: function validateTarget() { + // validate + } + }, { + key: 'targetChanged', + value: function targetChanged() { + this.initFilters(); + this.parseTarget(); + this.panelCtrl.refresh(); + } + }, { + key: 'addFunction', + value: function addFunction(funcDef) { + var newFunc = metricFunctions.createFuncInstance(funcDef); + newFunc.added = true; + this.target.functions.push(newFunc); + + this.moveAliasFuncLast(); + + if (newFunc.params.length && newFunc.added || newFunc.def.params.length === 0) { + this.targetChanged(); + } + } + }, { + key: 'removeFunction', + value: function removeFunction(func) { + this.target.functions = _lodash2.default.without(this.target.functions, func); + this.targetChanged(); + } + }, { + key: 'moveAliasFuncLast', + value: function moveAliasFuncLast() { + var aliasFunc = _lodash2.default.find(this.target.functions, function (func) { + return func.def.name === 'alias' || func.def.name === 'aliasByNode' || func.def.name === 'aliasByMetric'; + }); + + if (aliasFunc) { + this.target.functions = _lodash2.default.without(this.target.functions, aliasFunc); + this.target.functions.push(aliasFunc); + } + } + }, { + key: 'toggleQueryOptions', + value: function toggleQueryOptions() { + this.showQueryOptions = !this.showQueryOptions; + } + }, { + key: 'onQueryOptionChange', + value: function onQueryOptionChange() { + this.queryOptionsText = this.renderQueryOptionsText(); + this.onTargetBlur(); + } + }, { + key: 'renderQueryOptionsText', + value: function renderQueryOptionsText() { + var optionsMap = { + showDisabledItems: "Show disabled items" + }; + var options = []; + _lodash2.default.forOwn(this.target.options, function (value, key) { + if (value) { + if (value === true) { + // Show only option name (if enabled) for boolean options + options.push(optionsMap[key]); + } else { + // Show "option = value" for another options + options.push(optionsMap[key] + " = " + value); + } + } + }); + return "Options: " + options.join(', '); + } + + /** + * Switch query editor to specified mode. + * Modes: + * 0 - items + * 1 - IT services + * 2 - Text metrics + */ + + }, { + key: 'switchEditorMode', + value: function switchEditorMode(mode) { + this.target.mode = mode; + this.init(); + } + + ///////////////// + // IT Services // + ///////////////// + + /** + * Update list of IT services + */ + + }, { + key: 'updateITServiceList', + value: function updateITServiceList() { + var _this7 = this; + + this.zabbix.getITService().then(function (iteservices) { + _this7.itserviceList = []; + _this7.itserviceList = _this7.itserviceList.concat(iteservices); + }); + } + + /** + * Call when IT service is selected. + */ + + }, { + key: 'selectITService', + value: function selectITService() { + if (!_lodash2.default.isEqual(this.oldTarget, this.target) && _lodash2.default.isEmpty(this.target.errors)) { + this.oldTarget = _angular2.default.copy(this.target); + this.panelCtrl.refresh(); + } + } + }]); + + return ZabbixQueryController; +}(_sdk.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 _lodash2.default.uniq(_lodash2.default.map(scope.metric[metricList], 'name')); +} diff --git a/dist/test/datasource-zabbix/responseHandler.js b/dist/test/datasource-zabbix/responseHandler.js new file mode 100644 index 0000000..8bad6f4 --- /dev/null +++ b/dist/test/datasource-zabbix/responseHandler.js @@ -0,0 +1,116 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Convert Zabbix API history.get response to Grafana format + * + * @return {Array} Array of timeseries in Grafana format + * { + * target: "Metric name", + * datapoints: [[, ], ...] + * } + */ +function convertHistory(history, items, addHostName, convertPointCallback) { + /** + * Response should be in the format: + * data: [ + * { + * target: "Metric name", + * datapoints: [[, ], ...] + * }, ... + * ] + */ + + // Group history by itemid + var grouped_history = _lodash2.default.groupBy(history, 'itemid'); + var hosts = _lodash2.default.uniqBy(_lodash2.default.flatten(_lodash2.default.map(items, 'hosts')), 'hostid'); //uniqBy is needed to deduplicate + + return _lodash2.default.map(grouped_history, function (hist, itemid) { + var item = _lodash2.default.find(items, { 'itemid': itemid }); + var alias = item.name; + if (_lodash2.default.keys(hosts).length > 1 && addHostName) { + //only when actual multi hosts selected + var host = _lodash2.default.find(hosts, { 'hostid': item.hostid }); + alias = host.name + ": " + alias; + } + return { + target: alias, + datapoints: _lodash2.default.map(hist, convertPointCallback) + }; + }); +} + +function handleHistory(history, items) { + var addHostName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + return convertHistory(history, items, addHostName, convertHistoryPoint); +} + +function handleTrends(history, items, valueType) { + var addHostName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + + var convertPointCallback = _lodash2.default.partial(convertTrendPoint, valueType); + return convertHistory(history, items, addHostName, convertPointCallback); +} + +function handleSLAResponse(itservice, slaProperty, slaObject) { + var targetSLA = slaObject[itservice.serviceid].sla[0]; + if (slaProperty.property === 'status') { + var targetStatus = parseInt(slaObject[itservice.serviceid].status); + return { + target: itservice.name + ' ' + slaProperty.name, + datapoints: [[targetStatus, targetSLA.to * 1000]] + }; + } else { + return { + target: itservice.name + ' ' + slaProperty.name, + datapoints: [[targetSLA[slaProperty.property], targetSLA.from * 1000], [targetSLA[slaProperty.property], targetSLA.to * 1000]] + }; + } +} + +function convertHistoryPoint(point) { + // Value must be a number for properly work + return [Number(point.value), point.clock * 1000]; +} + +function convertTrendPoint(valueType, point) { + var value; + switch (valueType) { + case "min": + value = point.value_min; + break; + case "max": + value = point.value_max; + break; + case "avg": + value = point.value_avg; + break; + default: + value = point.value_avg; + } + + return [Number(value), point.clock * 1000]; +} + +exports.default = { + handleHistory: handleHistory, + convertHistory: convertHistory, + handleTrends: handleTrends, + handleSLAResponse: handleSLAResponse +}; + +// Fix for backward compatibility with lodash 2.4 + +if (!_lodash2.default.uniqBy) { + _lodash2.default.uniqBy = _lodash2.default.uniq; +} diff --git a/dist/test/datasource-zabbix/specs/datasource_specs.js b/dist/test/datasource-zabbix/specs/datasource_specs.js new file mode 100644 index 0000000..f34a105 --- /dev/null +++ b/dist/test/datasource-zabbix/specs/datasource_specs.js @@ -0,0 +1,317 @@ +"use strict"; + +var _module = require("../module"); + +var _datasource = require("../datasource"); + +var _q = require("q"); + +var _q2 = _interopRequireDefault(_q); + +var _sinon = require("sinon"); + +var _sinon2 = _interopRequireDefault(_sinon); + +var _lodash = require("lodash"); + +var _lodash2 = _interopRequireDefault(_lodash); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +describe('ZabbixDatasource', function () { + var ctx = {}; + var defined = _sinon2.default.match.defined; + + beforeEach(function () { + ctx.instanceSettings = { + jsonData: { + username: 'zabbix', + password: 'zabbix', + trends: true, + trendsFrom: '7d' + } + }; + ctx.templateSrv = {}; + ctx.alertSrv = {}; + ctx.zabbix = function () {}; + + ctx.ds = new _module.Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.alertSrv, ctx.zabbix); + }); + + describe('When querying data', function () { + beforeEach(function () { + ctx.ds.replaceTemplateVars = function (str) { + return str; + }; + }); + + ctx.options = { + targets: [{ + group: { filter: "" }, + host: { filter: "" }, + application: { filter: "" }, + item: { filter: "" } + }], + range: { from: 'now-7d', to: 'now' } + }; + + it('should return an empty array when no targets are set', function (done) { + var options = { + targets: [], + range: { from: 'now-6h', to: 'now' } + }; + ctx.ds.query(options).then(function (result) { + expect(result.data).to.have.length(0); + done(); + }); + }); + + it('should use trends if it enabled and time more than trendsFrom', function (done) { + var ranges = ['now-7d', 'now-168h', 'now-1M', 'now-1y']; + + _lodash2.default.forEach(ranges, function (range) { + ctx.options.range.from = range; + ctx.ds.queryNumericData = _sinon2.default.spy(); + ctx.ds.query(ctx.options); + + // Check that useTrends options is true + expect(ctx.ds.queryNumericData).to.have.been.calledWith(defined, defined, defined, true); + }); + + done(); + }); + + it('shouldnt use trends if it enabled and time less than trendsFrom', function (done) { + var ranges = ['now-6d', 'now-167h', 'now-1h', 'now-30m', 'now-30s']; + + _lodash2.default.forEach(ranges, function (range) { + ctx.options.range.from = range; + ctx.ds.queryNumericData = _sinon2.default.spy(); + ctx.ds.query(ctx.options); + + // Check that useTrends options is false + expect(ctx.ds.queryNumericData).to.have.been.calledWith(defined, defined, defined, false); + }); + done(); + }); + }); + + describe('When replacing template variables', function () { + + function testReplacingVariable(target, varValue, expectedResult, done) { + ctx.ds.templateSrv.replace = function () { + return (0, _datasource.zabbixTemplateFormat)(varValue); + }; + + var result = ctx.ds.replaceTemplateVars(target); + expect(result).to.equal(expectedResult); + done(); + } + + /* + * Alphanumerics, spaces, dots, dashes and underscores + * are allowed in Zabbix host name. + * 'AaBbCc0123 .-_' + */ + it('should return properly escaped regex', function (done) { + var target = '$host'; + var template_var_value = 'AaBbCc0123 .-_'; + var expected_result = '/^AaBbCc0123 \\.-_$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + + /* + * Single-value variable + * $host = backend01 + * $host => /^backend01|backend01$/ + */ + it('should return proper regex for single value', function (done) { + var target = '$host'; + var template_var_value = 'backend01'; + var expected_result = '/^backend01$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + + /* + * Multi-value variable + * $host = [backend01, backend02] + * $host => /^(backend01|backend01)$/ + */ + it('should return proper regex for multi-value', function (done) { + var target = '$host'; + var template_var_value = ['backend01', 'backend02']; + var expected_result = '/^(backend01|backend02)$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + }); + + describe('When invoking metricFindQuery()', function () { + beforeEach(function () { + ctx.ds.replaceTemplateVars = function (str) { + return str; + }; + ctx.ds.zabbix = { + getGroups: function getGroups() { + return _q2.default.when([]); + }, + getHosts: function getHosts() { + return _q2.default.when([]); + }, + getApps: function getApps() { + return _q2.default.when([]); + }, + getItems: function getItems() { + return _q2.default.when([]); + } + }; + }); + + it('should return groups', function (done) { + var tests = [{ query: '*', expect: '/.*/' }, { query: '', expect: '' }, { query: 'Backend', expect: 'Backend' }, { query: 'Back*', expect: 'Back*' }]; + + var getGroups = _sinon2.default.spy(ctx.ds.zabbix, 'getGroups'); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = tests[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var test = _step.value; + + ctx.ds.metricFindQuery(test.query); + expect(getGroups).to.have.been.calledWith(test.expect); + getGroups.reset(); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + done(); + }); + + it('should return hosts', function (done) { + var tests = [{ query: '*.*', expect: '/.*/' }, { query: '.', expect: '' }, { query: 'Backend.*', expect: 'Backend' }, { query: 'Back*.', expect: 'Back*' }]; + + var getHosts = _sinon2.default.spy(ctx.ds.zabbix, 'getHosts'); + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = tests[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var test = _step2.value; + + ctx.ds.metricFindQuery(test.query); + expect(getHosts).to.have.been.calledWith(test.expect); + getHosts.reset(); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + done(); + }); + + it('should return applications', function (done) { + var tests = [{ query: '*.*.*', expect: ['/.*/', '/.*/'] }, { query: '.*.', expect: ['', '/.*/'] }, { query: 'Backend.backend01.*', expect: ['Backend', 'backend01'] }, { query: 'Back*.*.', expect: ['Back*', '/.*/'] }]; + + var getApps = _sinon2.default.spy(ctx.ds.zabbix, 'getApps'); + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = tests[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var test = _step3.value; + + ctx.ds.metricFindQuery(test.query); + expect(getApps).to.have.been.calledWith(test.expect[0], test.expect[1]); + getApps.reset(); + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + done(); + }); + + it('should return items', function (done) { + var tests = [{ query: '*.*.*.*', expect: ['/.*/', '/.*/', ''] }, { query: '.*.*.*', expect: ['', '/.*/', ''] }, { query: 'Backend.backend01.*.*', expect: ['Backend', 'backend01', ''] }, { query: 'Back*.*.cpu.*', expect: ['Back*', '/.*/', 'cpu'] }]; + + var getItems = _sinon2.default.spy(ctx.ds.zabbix, 'getItems'); + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = tests[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var test = _step4.value; + + ctx.ds.metricFindQuery(test.query); + expect(getItems).to.have.been.calledWith(test.expect[0], test.expect[1], test.expect[2]); + getItems.reset(); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + + done(); + }); + + it('should invoke method with proper arguments', function (done) { + var query = '*.*'; + + var getHosts = _sinon2.default.spy(ctx.ds.zabbix, 'getHosts'); + ctx.ds.metricFindQuery(query); + expect(getHosts).to.have.been.calledWith('/.*/'); + done(); + }); + }); +}); diff --git a/dist/test/datasource-zabbix/specs/modules/datemath.js b/dist/test/datasource-zabbix/specs/modules/datemath.js new file mode 100644 index 0000000..063ad04 --- /dev/null +++ b/dist/test/datasource-zabbix/specs/modules/datemath.js @@ -0,0 +1,135 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parse = parse; +exports.isValid = isValid; +exports.parseDateMath = parseDateMath; + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _moment = require('moment'); + +var _moment2 = _interopRequireDefault(_moment); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var units = ['y', 'M', 'w', 'd', 'h', 'm', 's']; + +function parse(text, roundUp) { + if (!text) { + return undefined; + } + if (_moment2.default.isMoment(text)) { + return text; + } + if (_lodash2.default.isDate(text)) { + return (0, _moment2.default)(text); + } + + var time; + var mathString = ''; + var index; + var parseString; + + if (text.substring(0, 3) === 'now') { + time = (0, _moment2.default)(); + mathString = text.substring('now'.length); + } else { + index = text.indexOf('||'); + if (index === -1) { + parseString = text; + mathString = ''; // nothing else + } else { + parseString = text.substring(0, index); + mathString = text.substring(index + 2); + } + // We're going to just require ISO8601 timestamps, k? + time = (0, _moment2.default)(parseString, _moment2.default.ISO_8601); + } + + if (!mathString.length) { + return time; + } + + return parseDateMath(mathString, time, roundUp); +} + +function isValid(text) { + var date = parse(text); + if (!date) { + return false; + } + + if (_moment2.default.isMoment(date)) { + return date.isValid(); + } + + return false; +} + +function parseDateMath(mathString, time, roundUp) { + var dateTime = time; + var i = 0; + var len = mathString.length; + + while (i < len) { + var c = mathString.charAt(i++); + var type; + var num; + var unit; + + if (c === '/') { + type = 0; + } else if (c === '+') { + type = 1; + } else if (c === '-') { + type = 2; + } else { + return undefined; + } + + if (isNaN(mathString.charAt(i))) { + num = 1; + } else if (mathString.length === 2) { + num = mathString.charAt(i); + } else { + var numFrom = i; + while (!isNaN(mathString.charAt(i))) { + i++; + if (i > 10) { + return undefined; + } + } + num = parseInt(mathString.substring(numFrom, i), 10); + } + + if (type === 0) { + // rounding is only allowed on whole, single, units (eg M or 1M, not 0.5M or 2M) + if (num !== 1) { + return undefined; + } + } + unit = mathString.charAt(i++); + + if (!_lodash2.default.includes(units, unit)) { + return undefined; + } else { + if (type === 0) { + if (roundUp) { + dateTime.endOf(unit); + } else { + dateTime.startOf(unit); + } + } else if (type === 1) { + dateTime.add(num, unit); + } else if (type === 2) { + dateTime.subtract(num, unit); + } + } + } + return dateTime; +} diff --git a/dist/test/datasource-zabbix/specs/test-main.js b/dist/test/datasource-zabbix/specs/test-main.js new file mode 100644 index 0000000..a80d33a --- /dev/null +++ b/dist/test/datasource-zabbix/specs/test-main.js @@ -0,0 +1,66 @@ +'use strict'; + +var _prunk = require('prunk'); + +var _prunk2 = _interopRequireDefault(_prunk); + +var _jsdom = require('jsdom'); + +var _chai = require('chai'); + +var _chai2 = _interopRequireDefault(_chai); + +var _sinonChai = require('sinon-chai'); + +var _sinonChai2 = _interopRequireDefault(_sinonChai); + +var _datemath = require('./modules/datemath'); + +var dateMath = _interopRequireWildcard(_datemath); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Mock angular module + +// import sinon from 'sinon'; +var angularMocks = { + module: function module() { + return { + directive: function directive() {}, + service: function service() {}, + factory: function factory() {} + }; + } +}; // JSHint options +/* globals global: false */ + +var datemathMock = { + parse: dateMath.parse, + parseDateMath: dateMath.parseDateMath, + isValid: dateMath.isValid +}; + +// Mock Grafana modules that are not available outside of the core project +// Required for loading module.js +_prunk2.default.mock('./css/query-editor.css!', 'no css, dude.'); +_prunk2.default.mock('app/plugins/sdk', { + QueryCtrl: null +}); +_prunk2.default.mock('app/core/utils/datemath', datemathMock); +_prunk2.default.mock('angular', angularMocks); +_prunk2.default.mock('jquery', 'module not found'); + +// Setup jsdom +// Required for loading angularjs +global.document = (0, _jsdom.jsdom)(''); +global.window = global.document.parentWindow; +global.navigator = window.navigator = {}; +global.Node = window.Node; + +// Setup Chai +_chai2.default.should(); +_chai2.default.use(_sinonChai2.default); +global.assert = _chai2.default.assert; +global.expect = _chai2.default.expect; diff --git a/dist/test/datasource-zabbix/utils.js b/dist/test/datasource-zabbix/utils.js new file mode 100644 index 0000000..36eceb9 --- /dev/null +++ b/dist/test/datasource-zabbix/utils.js @@ -0,0 +1,151 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.regexPattern = undefined; +exports.expandItemName = expandItemName; +exports.isRegex = isRegex; +exports.isTemplateVariable = isTemplateVariable; +exports.buildRegex = buildRegex; +exports.escapeRegex = escapeRegex; +exports.parseInterval = parseInterval; +exports.parseTimeShiftInterval = parseTimeShiftInterval; +exports.formatAcknowledges = formatAcknowledges; +exports.convertToZabbixAPIUrl = convertToZabbixAPIUrl; +exports.callOnce = callOnce; + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _moment = require('moment'); + +var _moment2 = _interopRequireDefault(_moment); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Expand Zabbix item name + * + * @param {string} name item name, ie "CPU $2 time" + * @param {string} key item key, ie system.cpu.util[,system,avg1] + * @return {string} expanded name, ie "CPU system time" + */ +function expandItemName(name, key) { + + // extract params from key: + // "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"] + var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(','); + + // replace item parameters + for (var i = key_params.length; i >= 1; i--) { + name = name.replace('$' + i, key_params[i - 1]); + } + return name; +} + +// Pattern for testing regex +var regexPattern = exports.regexPattern = /^\/(.*)\/([gmi]*)$/m; + +function isRegex(str) { + return regexPattern.test(str); +} + +function isTemplateVariable(str, templateVariables) { + var variablePattern = /^\$\w+/; + if (variablePattern.test(str)) { + var variables = _lodash2.default.map(templateVariables, function (variable) { + return '$' + variable.name; + }); + return _lodash2.default.includes(variables, str); + } else { + return false; + } +} + +function buildRegex(str) { + var matches = str.match(regexPattern); + var pattern = matches[1]; + var flags = matches[2] !== "" ? matches[2] : undefined; + return new RegExp(pattern, flags); +} + +// Need for template variables replace +// From Grafana's templateSrv.js +function escapeRegex(value) { + return value.replace(/[\\^$*+?.()|[\]{}\/]/g, '\\$&'); +} + +function parseInterval(interval) { + var intervalPattern = /(^[\d]+)(y|M|w|d|h|m|s)/g; + var momentInterval = intervalPattern.exec(interval); + return _moment2.default.duration(Number(momentInterval[1]), momentInterval[2]).valueOf(); +} + +function parseTimeShiftInterval(interval) { + var intervalPattern = /^([\+\-]*)([\d]+)(y|M|w|d|h|m|s)/g; + var momentInterval = intervalPattern.exec(interval); + var duration = 0; + + if (momentInterval[1] === '+') { + duration = 0 - _moment2.default.duration(Number(momentInterval[2]), momentInterval[3]).valueOf(); + } else { + duration = _moment2.default.duration(Number(momentInterval[2]), momentInterval[3]).valueOf(); + } + + return duration; +} + +/** + * Format acknowledges. + * + * @param {array} acknowledges array of Zabbix acknowledge objects + * @return {string} HTML-formatted table + */ +function formatAcknowledges(acknowledges) { + if (acknowledges.length) { + var formatted_acknowledges = '

Acknowledges:
' + ''; + _lodash2.default.each(_lodash2.default.map(acknowledges, function (ack) { + var timestamp = _moment2.default.unix(ack.clock); + return ''; + }), function (ack) { + formatted_acknowledges = formatted_acknowledges.concat(ack); + }); + formatted_acknowledges = formatted_acknowledges.concat('
TimeUserComments
' + timestamp.format("DD MMM YYYY HH:mm:ss") + '' + ack.alias + ' (' + ack.name + ' ' + ack.surname + ')' + '' + ack.message + '
'); + return formatted_acknowledges; + } else { + return ''; + } +} + +function convertToZabbixAPIUrl(url) { + var zabbixAPIUrlPattern = /.*api_jsonrpc.php$/; + var trimSlashPattern = /(.*?)[\/]*$/; + if (url.match(zabbixAPIUrlPattern)) { + return url; + } else { + return url.replace(trimSlashPattern, "$1"); + } +} + +/** + * Wrap function to prevent multiple calls + * when waiting for result. + */ +function callOnce(func, promiseKeeper) { + return function () { + if (!promiseKeeper) { + promiseKeeper = Promise.resolve(func.apply(this, arguments).then(function (result) { + promiseKeeper = null; + return result; + })); + } + return promiseKeeper; + }; +} + +// Fix for backward compatibility with lodash 2.4 +if (!_lodash2.default.includes) { + _lodash2.default.includes = _lodash2.default.contains; +} diff --git a/dist/test/datasource-zabbix/zabbix.js b/dist/test/datasource-zabbix/zabbix.js new file mode 100644 index 0000000..627d107 --- /dev/null +++ b/dist/test/datasource-zabbix/zabbix.js @@ -0,0 +1,266 @@ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +require('./zabbixAPI.service.js'); + +require('./zabbixCachingProxy.service.js'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +// Use factory() instead service() for multiple data sources support. +// Each Zabbix data source instance should initialize its own API instance. + +/** @ngInject */ +function ZabbixFactory(zabbixAPIService, ZabbixCachingProxy) { + var Zabbix = function () { + function Zabbix(url, username, password, basicAuth, withCredentials, cacheTTL) { + _classCallCheck(this, Zabbix); + + // Initialize Zabbix API + var ZabbixAPI = zabbixAPIService; + this.zabbixAPI = new ZabbixAPI(url, username, password, basicAuth, withCredentials); + + // Initialize caching proxy for requests + var cacheOptions = { + enabled: true, + ttl: cacheTTL + }; + this.cachingProxy = new ZabbixCachingProxy(this.zabbixAPI, cacheOptions); + + // Proxy methods + this.getHistory = this.cachingProxy.getHistory.bind(this.cachingProxy); + + this.getTrend = this.zabbixAPI.getTrend.bind(this.zabbixAPI); + this.getEvents = this.zabbixAPI.getEvents.bind(this.zabbixAPI); + this.getAcknowledges = this.zabbixAPI.getAcknowledges.bind(this.zabbixAPI); + this.getITService = this.zabbixAPI.getITService.bind(this.zabbixAPI); + this.getSLA = this.zabbixAPI.getSLA.bind(this.zabbixAPI); + this.getVersion = this.zabbixAPI.getVersion.bind(this.zabbixAPI); + this.login = this.zabbixAPI.login.bind(this.zabbixAPI); + } + + _createClass(Zabbix, [{ + key: 'getItemsFromTarget', + value: function getItemsFromTarget(target, options) { + var parts = ['group', 'host', 'application', 'item']; + var filters = _lodash2.default.map(parts, function (p) { + return target[p].filter; + }); + return this.getItems.apply(this, _toConsumableArray(filters).concat([options])); + } + }, { + key: 'getAllGroups', + value: function getAllGroups() { + return this.cachingProxy.getGroups(); + } + }, { + key: 'getGroups', + value: function getGroups(groupFilter) { + return this.getAllGroups().then(function (groups) { + return findByFilter(groups, groupFilter); + }); + } + + /** + * Get list of host belonging to given groups. + */ + + }, { + key: 'getAllHosts', + value: function getAllHosts(groupFilter) { + var _this = this; + + return this.getGroups(groupFilter).then(function (groups) { + var groupids = _lodash2.default.map(groups, 'groupid'); + return _this.cachingProxy.getHosts(groupids); + }); + } + }, { + key: 'getHosts', + value: function getHosts(groupFilter, hostFilter) { + return this.getAllHosts(groupFilter).then(function (hosts) { + return findByFilter(hosts, hostFilter); + }); + } + + /** + * Get list of applications belonging to given groups and hosts. + */ + + }, { + key: 'getAllApps', + value: function getAllApps(groupFilter, hostFilter) { + var _this2 = this; + + return this.getHosts(groupFilter, hostFilter).then(function (hosts) { + var hostids = _lodash2.default.map(hosts, 'hostid'); + return _this2.cachingProxy.getApps(hostids); + }); + } + }, { + key: 'getApps', + value: function getApps(groupFilter, hostFilter, appFilter) { + var _this3 = this; + + return this.getHosts(groupFilter, hostFilter).then(function (hosts) { + var hostids = _lodash2.default.map(hosts, 'hostid'); + if (appFilter) { + return _this3.cachingProxy.getApps(hostids).then(function (apps) { + return filterByQuery(apps, appFilter); + }); + } else { + return { + appFilterEmpty: true, + hostids: hostids + }; + } + }); + } + }, { + key: 'getAllItems', + value: function getAllItems(groupFilter, hostFilter, appFilter) { + var _this4 = 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.cachingProxy.getItems(apps.hostids, undefined, options.itemtype); + } else { + var appids = _lodash2.default.map(apps, 'applicationid'); + return _this4.cachingProxy.getItems(undefined, appids, options.itemtype); + } + }).then(function (items) { + if (!options.showDisabledItems) { + items = _lodash2.default.filter(items, { 'status': '0' }); + } + return items; + }); + } + }, { + key: 'getItems', + value: function getItems(groupFilter, hostFilter, appFilter, itemFilter) { + var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + + return this.getAllItems(groupFilter, hostFilter, appFilter, options).then(function (items) { + return filterByQuery(items, itemFilter); + }); + } + + /** + * Build query - convert target filters to array of Zabbix items + */ + + }, { + key: 'getTriggers', + value: function getTriggers(groupFilter, hostFilter, appFilter, showTriggers) { + var _this5 = this; + + var promises = [this.getGroups(groupFilter), this.getHosts(groupFilter, hostFilter), this.getApps(groupFilter, hostFilter, appFilter)]; + + return Promise.all(promises).then(function (results) { + var filteredGroups = results[0]; + var filteredHosts = results[1]; + var filteredApps = results[2]; + var query = {}; + + if (appFilter) { + query.applicationids = _lodash2.default.flatten(_lodash2.default.map(filteredApps, 'applicationid')); + } + if (hostFilter) { + query.hostids = _lodash2.default.map(filteredHosts, 'hostid'); + } + if (groupFilter) { + query.groupids = _lodash2.default.map(filteredGroups, 'groupid'); + } + + return query; + }).then(function (query) { + return _this5.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, showTriggers); + }); + } + }]); + + return Zabbix; + }(); + + return Zabbix; +} + +_angular2.default.module('grafana.services').factory('Zabbix', ZabbixFactory); + +/////////////////////////////////////////////////////////////////////////////// + +/** + * Find group, host, app or item by given name. + * @param list list of groups, apps or other + * @param name visible name + * @return array with finded element or undefined + */ +function findByName(list, name) { + var finded = _lodash2.default.find(list, { 'name': name }); + if (finded) { + return [finded]; + } else { + return undefined; + } +} + +/** + * Different hosts can contains applications and items with same name. + * For this reason use _.filter, which return all elements instead _.find, + * which return only first finded. + * @param {[type]} list list of elements + * @param {[type]} name app name + * @return {[type]} array with finded element or undefined + */ +function filterByName(list, name) { + var finded = _lodash2.default.filter(list, { 'name': name }); + if (finded) { + return finded; + } else { + return undefined; + } +} + +function filterByRegex(list, regex) { + var filterPattern = utils.buildRegex(regex); + return _lodash2.default.filter(list, function (zbx_obj) { + return filterPattern.test(zbx_obj.name); + }); +} + +function findByFilter(list, filter) { + if (utils.isRegex(filter)) { + return filterByRegex(list, filter); + } else { + return findByName(list, filter); + } +} + +function filterByQuery(list, filter) { + if (utils.isRegex(filter)) { + return filterByRegex(list, filter); + } else { + return filterByName(list, filter); + } +} diff --git a/dist/test/datasource-zabbix/zabbixAPI.service.js b/dist/test/datasource-zabbix/zabbixAPI.service.js new file mode 100644 index 0000000..cd82a13 --- /dev/null +++ b/dist/test/datasource-zabbix/zabbixAPI.service.js @@ -0,0 +1,436 @@ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +require('./zabbixAPICore.service'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** @ngInject */ +function ZabbixAPIServiceFactory(alertSrv, zabbixAPICoreService) { + + /** + * Zabbix API Wrapper. + * Creates Zabbix API instance with given parameters (url, credentials and other). + * Wraps API calls and provides high-level methods. + */ + var ZabbixAPI = function () { + function ZabbixAPI(api_url, username, password, basicAuth, withCredentials) { + _classCallCheck(this, ZabbixAPI); + + this.url = api_url; + this.username = username; + this.password = password; + this.auth = ""; + + this.requestOptions = { + basicAuth: basicAuth, + withCredentials: withCredentials + }; + + this.loginPromise = null; + this.loginErrorCount = 0; + this.maxLoginAttempts = 3; + + this.alertSrv = alertSrv; + this.zabbixAPICore = zabbixAPICoreService; + + this.getTrend = this.getTrend_ZBXNEXT1193; + //getTrend = getTrend_30; + } + + ////////////////////////// + // Core method wrappers // + ////////////////////////// + + _createClass(ZabbixAPI, [{ + key: 'request', + value: function request(method, params) { + var _this = this; + + return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth).catch(function (error) { + if (isNotAuthorized(error.data)) { + // Handle auth errors + _this.loginErrorCount++; + if (_this.loginErrorCount > _this.maxLoginAttempts) { + _this.loginErrorCount = 0; + return null; + } else { + return _this.loginOnce().then(function () { + return _this.request(method, params); + }); + } + } else { + // Handle API errors + var message = error.data ? error.data : error.statusText; + _this.alertAPIError(message); + } + }); + } + }, { + key: 'alertAPIError', + value: function alertAPIError(message) { + var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5000; + + this.alertSrv.set("Zabbix API Error", message, 'error', timeout); + } + + /** + * When API unauthenticated or auth token expired each request produce login() + * call. But auth token is common to all requests. This function wraps login() method + * and call it once. If login() already called just wait for it (return its promise). + * @return login promise + */ + + }, { + key: 'loginOnce', + value: function loginOnce() { + var _this2 = this; + + if (!this.loginPromise) { + this.loginPromise = Promise.resolve(this.login().then(function (auth) { + _this2.auth = auth; + _this2.loginPromise = null; + return auth; + })); + } + return this.loginPromise; + } + + /** + * Get authentication token. + */ + + }, { + key: 'login', + value: function login() { + return this.zabbixAPICore.login(this.url, this.username, this.password, this.requestOptions); + } + + /** + * Get Zabbix API version + */ + + }, { + key: 'getVersion', + value: function getVersion() { + return this.zabbixAPICore.getVersion(this.url, this.requestOptions); + } + + //////////////////////////////// + // Zabbix API method wrappers // + //////////////////////////////// + + }, { + key: 'acknowledgeEvent', + value: function acknowledgeEvent(eventid, message) { + var params = { + eventids: eventid, + message: message + }; + + return this.request('event.acknowledge', params); + } + }, { + key: 'getGroups', + value: function getGroups() { + var params = { + output: ['name'], + sortfield: 'name', + real_hosts: true + }; + + return this.request('hostgroup.get', params); + } + }, { + key: 'getHosts', + value: function getHosts(groupids) { + var params = { + output: ['name', 'host'], + sortfield: 'name' + }; + if (groupids) { + params.groupids = groupids; + } + + return this.request('host.get', params); + } + }, { + key: 'getApps', + value: function getApps(hostids) { + var params = { + output: ['applicationid', 'name'], + hostids: hostids + }; + + return this.request('application.get', params); + } + + /** + * Get Zabbix items + * @param {[type]} hostids host ids + * @param {[type]} appids application ids + * @param {String} itemtype 'num' or 'text' + * @return {[type]} array of items + */ + + }, { + key: 'getItems', + value: function getItems(hostids, appids, itemtype) { + var params = { + output: ['name', 'key_', 'value_type', 'hostid', 'status', 'state'], + sortfield: 'name', + webitems: true, + filter: {}, + selectHosts: ['hostid', 'name'] + }; + if (hostids) { + params.hostids = hostids; + } + if (appids) { + params.applicationids = appids; + } + if (itemtype === 'num') { + // Return only numeric metrics + params.filter.value_type = [0, 3]; + } + if (itemtype === 'text') { + // Return only text metrics + params.filter.value_type = [1, 2, 4]; + } + + return this.request('item.get', params).then(expandItems); + + function expandItems(items) { + items.forEach(function (item) { + item.item = item.name; + item.name = utils.expandItemName(item.item, item.key_); + return item; + }); + return items; + } + } + }, { + key: 'getLastValue', + value: function getLastValue(itemid) { + var params = { + output: ['lastvalue'], + itemids: itemid + }; + return this.request('item.get', params).then(function (items) { + return items.length ? items[0].lastvalue : null; + }); + } + + /** + * Perform history query from Zabbix API + * + * @param {Array} items Array of Zabbix item objects + * @param {Number} timeFrom Time in seconds + * @param {Number} timeTill Time in seconds + * @return {Array} Array of Zabbix history objects + */ + + }, { + key: 'getHistory', + value: function getHistory(items, timeFrom, timeTill) { + var _this3 = this; + + // Group items by value type and perform request for each value type + var grouped_items = _lodash2.default.groupBy(items, 'value_type'); + var promises = _lodash2.default.map(grouped_items, function (items, value_type) { + var itemids = _lodash2.default.map(items, 'itemid'); + var params = { + output: 'extend', + history: value_type, + itemids: itemids, + sortfield: 'clock', + sortorder: 'ASC', + time_from: timeFrom + }; + + // Relative queries (e.g. last hour) don't include an end time + if (timeTill) { + params.time_till = timeTill; + } + + return _this3.request('history.get', params); + }); + + return Promise.all(promises).then(_lodash2.default.flatten); + } + + /** + * Perform trends query from Zabbix API + * Use trends api extension from ZBXNEXT-1193 patch. + * + * @param {Array} items Array of Zabbix item objects + * @param {Number} time_from Time in seconds + * @param {Number} time_till Time in seconds + * @return {Array} Array of Zabbix trend objects + */ + + }, { + key: 'getTrend_ZBXNEXT1193', + value: function getTrend_ZBXNEXT1193(items, timeFrom, timeTill) { + var _this4 = this; + + // Group items by value type and perform request for each value type + var grouped_items = _lodash2.default.groupBy(items, 'value_type'); + var promises = _lodash2.default.map(grouped_items, function (items, value_type) { + var itemids = _lodash2.default.map(items, 'itemid'); + var params = { + output: 'extend', + trend: value_type, + itemids: itemids, + sortfield: 'clock', + sortorder: 'ASC', + time_from: timeFrom + }; + + // Relative queries (e.g. last hour) don't include an end time + if (timeTill) { + params.time_till = timeTill; + } + + return _this4.request('trend.get', params); + }); + + return Promise.all(promises).then(_lodash2.default.flatten); + } + }, { + key: 'getTrend_30', + value: function getTrend_30(items, time_from, time_till, value_type) { + var self = this; + var itemids = _lodash2.default.map(items, 'itemid'); + + var params = { + output: ["itemid", "clock", value_type], + itemids: itemids, + time_from: time_from + }; + + // Relative queries (e.g. last hour) don't include an end time + if (time_till) { + params.time_till = time_till; + } + + return self.request('trend.get', params); + } + }, { + key: 'getITService', + value: function getITService(serviceids) { + var params = { + output: 'extend', + serviceids: serviceids + }; + return this.request('service.get', params); + } + }, { + key: 'getSLA', + value: function getSLA(serviceids, timeFrom, timeTo) { + var params = { + serviceids: serviceids, + intervals: [{ + from: timeFrom, + to: timeTo + }] + }; + return this.request('service.getsla', params); + } + }, { + key: 'getTriggers', + value: function getTriggers(groupids, hostids, applicationids, showTriggers, timeFrom, timeTo) { + var params = { + output: 'extend', + groupids: groupids, + hostids: hostids, + applicationids: applicationids, + expandDescription: true, + expandData: true, + expandComment: true, + monitored: true, + skipDependent: true, + //only_true: true, + filter: { + value: 1 + }, + selectGroups: ['name'], + selectHosts: ['name', 'host'], + selectItems: ['name', 'key_', 'lastvalue'], + selectLastEvent: 'extend' + }; + + if (showTriggers) { + params.filter.value = showTriggers; + } + + if (timeFrom || timeTo) { + params.lastChangeSince = timeFrom; + params.lastChangeTill = timeTo; + } + + return this.request('trigger.get', params); + } + }, { + key: 'getEvents', + value: function getEvents(objectids, timeFrom, timeTo, showEvents) { + var params = { + output: 'extend', + time_from: timeFrom, + time_till: timeTo, + objectids: objectids, + select_acknowledges: 'extend', + selectHosts: 'extend', + value: showEvents + }; + + return this.request('event.get', params); + } + }, { + key: 'getAcknowledges', + value: function getAcknowledges(eventids) { + var params = { + output: 'extend', + eventids: eventids, + preservekeys: true, + select_acknowledges: 'extend', + sortfield: 'clock', + sortorder: 'DESC' + }; + + return this.request('event.get', params).then(function (events) { + return _lodash2.default.filter(events, function (event) { + return event.acknowledges.length; + }); + }); + } + }]); + + return ZabbixAPI; + }(); + + return ZabbixAPI; +} + +function isNotAuthorized(message) { + return message === "Session terminated, re-login, please." || message === "Not authorised." || message === "Not authorized."; +} + +_angular2.default.module('grafana.services').factory('zabbixAPIService', ZabbixAPIServiceFactory); diff --git a/dist/test/datasource-zabbix/zabbixAPICore.service.js b/dist/test/datasource-zabbix/zabbixAPICore.service.js new file mode 100644 index 0000000..075f149 --- /dev/null +++ b/dist/test/datasource-zabbix/zabbixAPICore.service.js @@ -0,0 +1,142 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ZabbixAPIError = undefined; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /** + * General Zabbix API methods + */ + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ZabbixAPICoreService = function () { + + /** @ngInject */ + function ZabbixAPICoreService(backendSrv) { + _classCallCheck(this, ZabbixAPICoreService); + + this.backendSrv = backendSrv; + } + + /** + * Request data from Zabbix API + * @return {object} response.result + */ + + + _createClass(ZabbixAPICoreService, [{ + key: 'request', + value: function request(api_url, method, params, options, auth) { + var requestData = { + jsonrpc: '2.0', + method: method, + params: params, + id: 1 + }; + + if (auth === "") { + // Reject immediately if not authenticated + return Promise.reject(new ZabbixAPIError({ data: "Not authorised." })); + } else if (auth) { + // Set auth parameter only if it needed + requestData.auth = auth; + } + + var requestOptions = { + method: 'POST', + url: api_url, + data: requestData, + headers: { + 'Content-Type': 'application/json' + } + }; + + // Set request options for basic auth + if (options.basicAuth || options.withCredentials) { + requestOptions.withCredentials = true; + } + if (options.basicAuth) { + requestOptions.headers.Authorization = options.basicAuth; + } + + return this.datasourceRequest(requestOptions); + } + }, { + key: 'datasourceRequest', + value: function datasourceRequest(requestOptions) { + return this.backendSrv.datasourceRequest(requestOptions).then(function (response) { + if (!response.data) { + return Promise.reject(new ZabbixAPIError({ data: "General Error, no data" })); + } else if (response.data.error) { + + // Handle Zabbix API errors + return Promise.reject(new ZabbixAPIError(response.data.error)); + } + + // Success + return response.data.result; + }); + } + + /** + * Get authentication token. + * @return {string} auth token + */ + + }, { + key: 'login', + value: function login(api_url, username, password, options) { + var params = { + user: username, + password: password + }; + return this.request(api_url, 'user.login', params, options, null); + } + + /** + * Get Zabbix API version + * Matches the version of Zabbix starting from Zabbix 2.0.4 + */ + + }, { + key: 'getVersion', + value: function getVersion(api_url, options) { + return this.request(api_url, 'apiinfo.version', [], options); + } + }]); + + return ZabbixAPICoreService; +}(); + +// Define zabbix API exception type + + +var ZabbixAPIError = exports.ZabbixAPIError = function () { + function ZabbixAPIError(error) { + _classCallCheck(this, ZabbixAPIError); + + this.code = error.code; + this.name = error.data; + this.message = error.data; + this.data = error.data; + } + + _createClass(ZabbixAPIError, [{ + key: 'toString', + value: function toString() { + return this.name + ": " + this.message; + } + }]); + + return ZabbixAPIError; +}(); + +_angular2.default.module('grafana.services').service('zabbixAPICoreService', ZabbixAPICoreService); diff --git a/dist/test/datasource-zabbix/zabbixCachingProxy.service.js b/dist/test/datasource-zabbix/zabbixCachingProxy.service.js new file mode 100644 index 0000000..a378045 --- /dev/null +++ b/dist/test/datasource-zabbix/zabbixCachingProxy.service.js @@ -0,0 +1,215 @@ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +// Use factory() instead service() for multiple datasources support. +// Each datasource instance must initialize its own cache. + +/** @ngInject */ +function ZabbixCachingProxyFactory() { + var ZabbixCachingProxy = function () { + function ZabbixCachingProxy(zabbixAPI, cacheOptions) { + _classCallCheck(this, ZabbixCachingProxy); + + this.zabbixAPI = zabbixAPI; + this.cacheEnabled = cacheOptions.enabled; + this.ttl = cacheOptions.ttl || 600000; // 10 minutes by default + + // Internal objects for data storing + this.cache = { + groups: {}, + hosts: {}, + applications: {}, + items: {}, + history: {}, + trends: {} + }; + + this.historyPromises = {}; + + // Don't run duplicated history requests + this.getHistory = callAPIRequestOnce(_lodash2.default.bind(this.zabbixAPI.getHistory, this.zabbixAPI), this.historyPromises, getHistoryRequestHash); + + // Don't run duplicated requests + this.groupPromises = {}; + this.getGroupsOnce = callAPIRequestOnce(_lodash2.default.bind(this.zabbixAPI.getGroups, this.zabbixAPI), this.groupPromises, getRequestHash); + + this.hostPromises = {}; + this.getHostsOnce = callAPIRequestOnce(_lodash2.default.bind(this.zabbixAPI.getHosts, this.zabbixAPI), this.hostPromises, getRequestHash); + + this.appPromises = {}; + this.getAppsOnce = callAPIRequestOnce(_lodash2.default.bind(this.zabbixAPI.getApps, this.zabbixAPI), this.appPromises, getRequestHash); + + this.itemPromises = {}; + this.getItemsOnce = callAPIRequestOnce(_lodash2.default.bind(this.zabbixAPI.getItems, this.zabbixAPI), this.itemPromises, getRequestHash); + } + + _createClass(ZabbixCachingProxy, [{ + key: 'isExpired', + value: function isExpired(cacheObject) { + if (cacheObject) { + var object_age = Date.now() - cacheObject.timestamp; + return !(cacheObject.timestamp && object_age < this.ttl); + } else { + return true; + } + } + + /** + * Check that result is present in cache and up to date + * or send request to API. + */ + + }, { + key: 'proxyRequest', + value: function proxyRequest(request, params, cacheObject) { + var hash = getRequestHash(params); + if (this.cacheEnabled && !this.isExpired(cacheObject[hash])) { + return Promise.resolve(cacheObject[hash].value); + } else { + return request.apply(undefined, _toConsumableArray(params)).then(function (result) { + cacheObject[hash] = { + value: result, + timestamp: Date.now() + }; + return result; + }); + } + } + }, { + key: 'getGroups', + value: function getGroups() { + return this.proxyRequest(this.getGroupsOnce, [], this.cache.groups); + } + }, { + key: 'getHosts', + value: function getHosts(groupids) { + return this.proxyRequest(this.getHostsOnce, [groupids], this.cache.hosts); + } + }, { + key: 'getApps', + value: function getApps(hostids) { + return this.proxyRequest(this.getAppsOnce, [hostids], this.cache.applications); + } + }, { + key: 'getItems', + value: function getItems(hostids, appids, itemtype) { + var params = [hostids, appids, itemtype]; + return this.proxyRequest(this.getItemsOnce, params, this.cache.items); + } + }, { + key: 'getHistoryFromCache', + value: function getHistoryFromCache(items, time_from, time_till) { + var historyStorage = this.cache.history; + var full_history; + var expired = _lodash2.default.filter(_lodash2.default.keyBy(items, 'itemid'), function (item, itemid) { + return !historyStorage[itemid]; + }); + if (expired.length) { + return this.zabbixAPI.getHistory(expired, time_from, time_till).then(function (history) { + var grouped_history = _lodash2.default.groupBy(history, 'itemid'); + _lodash2.default.forEach(expired, function (item) { + var itemid = item.itemid; + historyStorage[itemid] = item; + historyStorage[itemid].time_from = time_from; + historyStorage[itemid].time_till = time_till; + historyStorage[itemid].history = grouped_history[itemid]; + }); + full_history = _lodash2.default.map(items, function (item) { + return historyStorage[item.itemid].history; + }); + return _lodash2.default.flatten(full_history, true); + }); + } else { + full_history = _lodash2.default.map(items, function (item) { + return historyStorage[item.itemid].history; + }); + return Promise.resolve(_lodash2.default.flatten(full_history, true)); + } + } + }, { + key: 'getHistoryFromAPI', + value: function getHistoryFromAPI(items, time_from, time_till) { + return this.zabbixAPI.getHistory(items, time_from, time_till); + } + }]); + + return ZabbixCachingProxy; + }(); + + return ZabbixCachingProxy; +} + +_angular2.default.module('grafana.services').factory('ZabbixCachingProxy', ZabbixCachingProxyFactory); + +/** + * Wrap zabbix API request to prevent multiple calls + * with same params when waiting for result. + */ +function callAPIRequestOnce(func, promiseKeeper, argsHashFunc) { + return function () { + var hash = argsHashFunc(arguments); + if (!promiseKeeper[hash]) { + promiseKeeper[hash] = Promise.resolve(func.apply(this, arguments).then(function (result) { + promiseKeeper[hash] = null; + return result; + })); + } + return promiseKeeper[hash]; + }; +} + +function getRequestHash(args) { + var requestStamp = _lodash2.default.map(args, function (arg) { + if (arg === undefined) { + return 'undefined'; + } else { + if (_lodash2.default.isArray(arg)) { + return arg.sort().toString(); + } else { + return arg.toString(); + } + } + }).join(); + return requestStamp.getHash(); +} + +function getHistoryRequestHash(args) { + var itemids = _lodash2.default.map(args[0], 'itemid'); + var stamp = itemids.join() + args[1] + args[2]; + return stamp.getHash(); +} + +String.prototype.getHash = function () { + var hash = 0, + i, + chr, + len; + if (this.length !== 0) { + for (i = 0, len = this.length; i < len; i++) { + chr = this.charCodeAt(i); + hash = (hash << 5) - hash + chr; + hash |= 0; // Convert to 32bit integer + } + } + return hash; +}; + +// Fix for backward compatibility with lodash 2.4 +if (!_lodash2.default.keyBy) { + _lodash2.default.keyBy = _lodash2.default.indexBy; +} diff --git a/dist/test/module.js b/dist/test/module.js new file mode 100644 index 0000000..ac26ed7 --- /dev/null +++ b/dist/test/module.js @@ -0,0 +1,10 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ConfigCtrl = undefined; + +var _config = require('./components/config'); + +exports.ConfigCtrl = _config.ZabbixAppConfigCtrl; diff --git a/dist/test/panel-triggers/ack-tooltip.directive.js b/dist/test/panel-triggers/ack-tooltip.directive.js new file mode 100644 index 0000000..e74683e --- /dev/null +++ b/dist/test/panel-triggers/ack-tooltip.directive.js @@ -0,0 +1,122 @@ +'use strict'; + +var _angular = require('angular'); + +var _angular2 = _interopRequireDefault(_angular); + +var _jquery = require('jquery'); + +var _jquery2 = _interopRequireDefault(_jquery); + +var _tetherDrop = require('tether-drop'); + +var _tetherDrop2 = _interopRequireDefault(_tetherDrop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** @ngInject */ +_angular2.default.module('grafana.directives').directive('ackTooltip', function ($sanitize, $compile) { + var buttonTemplate = '
'; + + return { + scope: { + ack: "=", + trigger: "=", + onAck: "=", + context: "=" + }, + link: function link(scope, element) { + var acknowledges = scope.ack; + var $button = (0, _jquery2.default)(buttonTemplate); + $button.appendTo(element); + + $button.click(function () { + var tooltip = '
'; + + if (acknowledges && acknowledges.length) { + tooltip += '' + '' + '' + '' + ''; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = acknowledges[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var ack = _step.value; + + tooltip += '' + '' + ''; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + tooltip += '
TimeUserComments
' + ack.time + '' + ack.user + '' + ack.message + '
'; + } else { + tooltip += 'Add acknowledge'; + } + + var addAckButtonTemplate = '
' + '
'; + tooltip += addAckButtonTemplate; + tooltip += '
'; + + var drop = new _tetherDrop2.default({ + target: element[0], + content: tooltip, + position: "bottom left", + classes: 'drop-popover ack-tooltip', + openOn: 'hover', + hoverCloseDelay: 500, + tetherOptions: { + constraints: [{ to: 'window', pin: true, attachment: "both" }] + } + }); + + drop.open(); + drop.on('close', closeDrop); + + (0, _jquery2.default)('#add-acknowledge-btn').on('click', onAddAckButtonClick); + + function onAddAckButtonClick() { + var inputTemplate = '
' + '' + '' + '
'; + + var $input = (0, _jquery2.default)(inputTemplate); + var $addAckButton = (0, _jquery2.default)('.ack-tooltip .ack-add-button'); + $addAckButton.replaceWith($input); + (0, _jquery2.default)('.ack-tooltip #cancel-ack-button').on('click', onAckCancelButtonClick); + (0, _jquery2.default)('.ack-tooltip #send-ack-button').on('click', onAckSendlButtonClick); + } + + function onAckCancelButtonClick() { + (0, _jquery2.default)('.ack-tooltip .ack-input-group').replaceWith(addAckButtonTemplate); + (0, _jquery2.default)('#add-acknowledge-btn').on('click', onAddAckButtonClick); + } + + function onAckSendlButtonClick() { + var message = (0, _jquery2.default)('.ack-tooltip #ack-message')[0].value; + var onAck = scope.onAck.bind(scope.context); + onAck(scope.trigger, message).then(function () { + closeDrop(); + }); + } + + function closeDrop() { + setTimeout(function () { + drop.destroy(); + }); + } + }); + + $compile(element.contents())(scope); + } + }; +}); diff --git a/dist/test/panel-triggers/editor.js b/dist/test/panel-triggers/editor.js new file mode 100644 index 0000000..ceb50a8 --- /dev/null +++ b/dist/test/panel-triggers/editor.js @@ -0,0 +1,225 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /** + * Grafana-Zabbix + * Zabbix plugin for Grafana. + * http://github.com/alexanderzobnin/grafana-zabbix + * + * Trigger panel. + * This feature sponsored by CORE IT + * http://www.coreit.fr + * + * Copyright 2015 Alexander Zobnin alexanderzobnin@gmail.com + * Licensed under the Apache License, Version 2.0 + */ + +exports.triggerPanelEditor = triggerPanelEditor; + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _utils = require('../datasource-zabbix/utils'); + +var utils = _interopRequireWildcard(_utils); + +require('../datasource-zabbix/css/query-editor.css!'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var TriggerPanelEditorCtrl = function () { + + /** @ngInject */ + function TriggerPanelEditorCtrl($scope, $rootScope, uiSegmentSrv, datasourceSrv, templateSrv, popoverSrv) { + var _this = this; + + _classCallCheck(this, TriggerPanelEditorCtrl); + + $scope.editor = this; + this.panelCtrl = $scope.ctrl; + this.panel = this.panelCtrl.panel; + + this.datasourceSrv = datasourceSrv; + this.templateSrv = templateSrv; + this.popoverSrv = popoverSrv; + + // 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'); + + // Update metric suggestion when template variable was changed + $rootScope.$on('template-variable-value-updated', function () { + return _this.onVariableChange(); + }); + + this.ackFilters = ['all triggers', 'unacknowledged', 'acknowledged']; + + this.sortByFields = [{ text: 'last change', value: 'lastchange' }, { text: 'severity', value: 'priority' }]; + + this.showEventsFields = [{ text: 'All', value: [0, 1] }, { text: 'OK', value: [0] }, { text: 'Problems', value: 1 }]; + + // Load scope defaults + var scopeDefaults = { + metric: {}, + inputStyles: {}, + oldTarget: _lodash2.default.cloneDeep(this.panel.triggers) + }; + _lodash2.default.defaults(this, scopeDefaults); + + // Set default datasource + this.datasources = _lodash2.default.map(this.getZabbixDataSources(), 'name'); + if (!this.panel.datasource) { + this.panel.datasource = this.datasources[0]; + } + // Load datasource + this.datasourceSrv.get(this.panel.datasource).then(function (datasource) { + _this.datasource = datasource; + _this.zabbix = datasource.zabbix; + _this.queryBuilder = datasource.queryBuilder; + _this.initFilters(); + _this.panelCtrl.refresh(); + }); + } + + _createClass(TriggerPanelEditorCtrl, [{ + key: 'initFilters', + value: function initFilters() { + return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps()]); + } + }, { + key: 'suggestGroups', + value: function suggestGroups() { + var _this2 = this; + + return this.zabbix.getAllGroups().then(function (groups) { + _this2.metric.groupList = groups; + return groups; + }); + } + }, { + key: 'suggestHosts', + value: function suggestHosts() { + var _this3 = this; + + var groupFilter = this.datasource.replaceTemplateVars(this.panel.triggers.group.filter); + return this.zabbix.getAllHosts(groupFilter).then(function (hosts) { + _this3.metric.hostList = hosts; + return hosts; + }); + } + }, { + key: 'suggestApps', + value: function suggestApps() { + var _this4 = this; + + var groupFilter = this.datasource.replaceTemplateVars(this.panel.triggers.group.filter); + var hostFilter = this.datasource.replaceTemplateVars(this.panel.triggers.host.filter); + return this.zabbix.getAllApps(groupFilter, hostFilter).then(function (apps) { + _this4.metric.appList = apps; + return apps; + }); + } + }, { + key: 'onVariableChange', + value: function onVariableChange() { + if (this.isContainsVariables()) { + this.targetChanged(); + } + } + + /** + * Check query for template variables + */ + + }, { + key: 'isContainsVariables', + value: function isContainsVariables() { + var _this5 = this; + + return _lodash2.default.some(['group', 'host', 'application'], function (field) { + return utils.isTemplateVariable(_this5.panel.triggers[field].filter, _this5.templateSrv.variables); + }); + } + }, { + key: 'targetChanged', + value: function targetChanged() { + this.initFilters(); + this.panelCtrl.refresh(); + } + }, { + key: 'parseTarget', + value: function parseTarget() { + this.initFilters(); + var newTarget = _lodash2.default.cloneDeep(this.panel.triggers); + if (!_lodash2.default.isEqual(this.oldTarget, this.panel.triggers)) { + this.oldTarget = newTarget; + this.panelCtrl.refresh(); + } + } + }, { + key: 'refreshTriggerSeverity', + value: function refreshTriggerSeverity() { + _lodash2.default.each(this.triggerList, function (trigger) { + trigger.color = this.panel.triggerSeverity[trigger.priority].color; + trigger.severity = this.panel.triggerSeverity[trigger.priority].severity; + }); + this.panelCtrl.refresh(); + } + }, { + key: 'datasourceChanged', + value: function datasourceChanged() { + this.panelCtrl.refresh(); + } + }, { + key: 'changeTriggerSeverityColor', + value: function changeTriggerSeverityColor(trigger, color) { + this.panel.triggerSeverity[trigger.priority].color = color; + this.refreshTriggerSeverity(); + } + }, { + key: 'isRegex', + value: function isRegex(str) { + return utils.isRegex(str); + } + }, { + key: 'isVariable', + value: function isVariable(str) { + return utils.isTemplateVariable(str, this.templateSrv.variables); + } + }, { + key: 'getZabbixDataSources', + value: function getZabbixDataSources() { + var ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource'; + return _lodash2.default.filter(this.datasourceSrv.getMetricSources(), function (datasource) { + return datasource.meta.id === ZABBIX_DS_ID && datasource.value; + }); + } + }]); + + return TriggerPanelEditorCtrl; +}(); + +// Get list of metric names for bs-typeahead directive + + +function getMetricNames(scope, metricList) { + return _lodash2.default.uniq(_lodash2.default.map(scope.metric[metricList], 'name')); +} + +function triggerPanelEditor() { + return { + restrict: 'E', + scope: true, + templateUrl: 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/editor.html', + controller: TriggerPanelEditorCtrl + }; +} diff --git a/dist/test/panel-triggers/module.js b/dist/test/panel-triggers/module.js new file mode 100644 index 0000000..c1542a4 --- /dev/null +++ b/dist/test/panel-triggers/module.js @@ -0,0 +1,302 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PanelCtrl = exports.TriggerPanelCtrl = undefined; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _moment = require('moment'); + +var _moment2 = _interopRequireDefault(_moment); + +var _utils = require('../datasource-zabbix/utils'); + +var utils = _interopRequireWildcard(_utils); + +var _sdk = require('app/plugins/sdk'); + +var _editor = require('./editor'); + +require('./ack-tooltip.directive'); + +require('./css/panel_triggers.css!'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** + * Grafana-Zabbix + * Zabbix plugin for Grafana. + * http://github.com/alexanderzobnin/grafana-zabbix + * + * Trigger panel. + * This feature sponsored by CORE IT + * http://www.coreit.fr + * + * Copyright 2015 Alexander Zobnin alexanderzobnin@gmail.com + * Licensed under the Apache License, Version 2.0 + */ + +var defaultSeverity = [{ priority: 0, severity: 'Not classified', color: '#B7DBAB', show: true }, { priority: 1, severity: 'Information', color: '#82B5D8', show: true }, { priority: 2, severity: 'Warning', color: '#E5AC0E', show: true }, { priority: 3, severity: 'Average', color: '#C15C17', show: true }, { priority: 4, severity: 'High', color: '#BF1B00', show: true }, { priority: 5, severity: 'Disaster', color: '#890F02', show: true }]; + +var panelDefaults = { + datasource: null, + triggers: { + group: { filter: "" }, + host: { filter: "" }, + application: { filter: "" }, + trigger: { filter: "" } + }, + hostField: true, + statusField: false, + severityField: false, + lastChangeField: true, + ageField: true, + infoField: true, + limit: 10, + showTriggers: 'all triggers', + sortTriggersBy: { text: 'last change', value: 'lastchange' }, + showEvents: { text: 'Problems', value: '1' }, + triggerSeverity: defaultSeverity, + okEventColor: 'rgba(0, 245, 153, 0.45)', + ackEventColor: 'rgba(0, 0, 0, 0)' +}; + +var triggerStatusMap = { + '0': 'OK', + '1': 'Problem' +}; + +var defaultTimeFormat = "DD MMM YYYY HH:mm:ss"; + +var TriggerPanelCtrl = function (_MetricsPanelCtrl) { + _inherits(TriggerPanelCtrl, _MetricsPanelCtrl); + + /** @ngInject */ + function TriggerPanelCtrl($scope, $injector, $element, datasourceSrv, templateSrv, contextSrv) { + _classCallCheck(this, TriggerPanelCtrl); + + var _this = _possibleConstructorReturn(this, (TriggerPanelCtrl.__proto__ || Object.getPrototypeOf(TriggerPanelCtrl)).call(this, $scope, $injector)); + + _this.datasourceSrv = datasourceSrv; + _this.templateSrv = templateSrv; + _this.contextSrv = contextSrv; + _this.triggerStatusMap = triggerStatusMap; + _this.defaultTimeFormat = defaultTimeFormat; + + // Load panel defaults + // _.cloneDeep() need for prevent changing shared defaultSeverity. + // Load object "by value" istead "by reference". + _lodash2.default.defaults(_this.panel, _lodash2.default.cloneDeep(panelDefaults)); + + _this.triggerList = []; + _this.refreshData(); + return _this; + } + + /** + * Override onInitMetricsPanelEditMode() method from MetricsPanelCtrl. + * We don't need metric editor from Metrics Panel. + */ + + + _createClass(TriggerPanelCtrl, [{ + key: 'onInitMetricsPanelEditMode', + value: function onInitMetricsPanelEditMode() { + this.addEditorTab('Options', _editor.triggerPanelEditor, 2); + } + }, { + key: 'refresh', + value: function refresh() { + this.onMetricsPanelRefresh(); + } + }, { + key: 'onMetricsPanelRefresh', + value: function onMetricsPanelRefresh() { + // ignore fetching data if another panel is in fullscreen + if (this.otherPanelInFullscreenMode()) { + return; + } + + this.refreshData(); + } + }, { + key: 'refreshData', + value: function refreshData() { + // clear loading/error state + delete this.error; + this.loading = true; + this.setTimeQueryStart(); + + var self = this; + + // Load datasource + return this.datasourceSrv.get(this.panel.datasource).then(function (datasource) { + var zabbix = datasource.zabbix; + var showEvents = self.panel.showEvents.value; + var triggerFilter = self.panel.triggers; + + // Replace template variables + var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter); + var hostFilter = datasource.replaceTemplateVars(triggerFilter.host.filter); + var appFilter = datasource.replaceTemplateVars(triggerFilter.application.filter); + + var getTriggers = zabbix.getTriggers(groupFilter, hostFilter, appFilter, showEvents); + return getTriggers.then(function (triggers) { + return _lodash2.default.map(triggers, function (trigger) { + var triggerObj = trigger; + + // Format last change and age + trigger.lastchangeUnix = Number(trigger.lastchange); + var timestamp = _moment2.default.unix(trigger.lastchangeUnix); + if (self.panel.customLastChangeFormat) { + // User defined format + triggerObj.lastchange = timestamp.format(self.panel.lastChangeFormat); + } else { + triggerObj.lastchange = timestamp.format(self.defaultTimeFormat); + } + triggerObj.age = timestamp.fromNow(true); + + // Set host that the trigger belongs + if (trigger.hosts.length) { + triggerObj.host = trigger.hosts[0].name; + triggerObj.hostTechName = trigger.hosts[0].host; + } + + // Set color + if (trigger.value === '1') { + // Problem state + triggerObj.color = self.panel.triggerSeverity[trigger.priority].color; + } else { + // OK state + triggerObj.color = self.panel.okEventColor; + } + + triggerObj.severity = self.panel.triggerSeverity[trigger.priority].severity; + return triggerObj; + }); + }).then(function (triggerList) { + + // Request acknowledges for trigger + var eventids = _lodash2.default.map(triggerList, function (trigger) { + return trigger.lastEvent.eventid; + }); + + return zabbix.getAcknowledges(eventids).then(function (events) { + + // Map events to triggers + _lodash2.default.each(triggerList, function (trigger) { + var event = _lodash2.default.find(events, function (event) { + return event.eventid === trigger.lastEvent.eventid; + }); + + if (event) { + trigger.acknowledges = _lodash2.default.map(event.acknowledges, function (ack) { + var timestamp = _moment2.default.unix(ack.clock); + if (self.panel.customLastChangeFormat) { + ack.time = timestamp.format(self.panel.lastChangeFormat); + } else { + ack.time = timestamp.format(self.defaultTimeFormat); + } + ack.user = ack.alias + ' (' + ack.name + ' ' + ack.surname + ')'; + return ack; + }); + + // Mark acknowledged triggers with different color + if (self.panel.markAckEvents && trigger.acknowledges.length) { + trigger.color = self.panel.ackEventColor; + } + } + }); + + // Filter triggers by description + var triggerFilter = self.panel.triggers.trigger.filter; + if (triggerFilter) { + triggerList = filterTriggers(triggerList, triggerFilter); + } + + // Filter acknowledged triggers + if (self.panel.showTriggers === 'unacknowledged') { + triggerList = _lodash2.default.filter(triggerList, function (trigger) { + return !trigger.acknowledges; + }); + } else if (self.panel.showTriggers === 'acknowledged') { + triggerList = _lodash2.default.filter(triggerList, 'acknowledges'); + } else { + triggerList = triggerList; + } + + // Filter triggers by severity + triggerList = _lodash2.default.filter(triggerList, function (trigger) { + return self.panel.triggerSeverity[trigger.priority].show; + }); + + // Sort triggers + if (self.panel.sortTriggersBy.value === 'priority') { + triggerList = _lodash2.default.sortBy(triggerList, 'priority').reverse(); + } else { + triggerList = _lodash2.default.sortBy(triggerList, 'lastchangeUnix').reverse(); + } + + // Limit triggers number + self.triggerList = triggerList.slice(0, self.panel.limit); + + // Notify panel that request is finished + self.setTimeQueryEnd(); + self.loading = false; + }); + }); + }); + } + }, { + key: 'switchComment', + value: function switchComment(trigger) { + trigger.showComment = !trigger.showComment; + } + }, { + key: 'acknowledgeTrigger', + value: function acknowledgeTrigger(trigger, message) { + var _this2 = this; + + var eventid = trigger.lastEvent.eventid; + var grafana_user = this.contextSrv.user.name; + var ack_message = grafana_user + ' (Grafana): ' + message; + return this.datasourceSrv.get(this.panel.datasource).then(function (datasource) { + var zabbixAPI = datasource.zabbix.zabbixAPI; + return zabbixAPI.acknowledgeEvent(eventid, ack_message).then(function () { + _this2.refresh(); + }); + }); + } + }]); + + return TriggerPanelCtrl; +}(_sdk.MetricsPanelCtrl); + +TriggerPanelCtrl.templateUrl = 'panel-triggers/module.html'; + +function filterTriggers(triggers, triggerFilter) { + if (utils.isRegex(triggerFilter)) { + return _lodash2.default.filter(triggers, function (trigger) { + return utils.buildRegex(triggerFilter).test(trigger.description); + }); + } else { + return _lodash2.default.filter(triggers, function (trigger) { + return trigger.description === triggerFilter; + }); + } +} + +exports.TriggerPanelCtrl = TriggerPanelCtrl; +exports.PanelCtrl = TriggerPanelCtrl; From b98b9fedce8bcc07a6d05a326447e39b715dde54 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 2 Feb 2017 11:46:12 +0300 Subject: [PATCH 06/10] Update docs (deprecate special repo with builded plugin). --- docs/sources/installation/index.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/sources/installation/index.md b/docs/sources/installation/index.md index 0c3f0ad..28b77cd 100644 --- a/docs/sources/installation/index.md +++ b/docs/sources/installation/index.md @@ -23,7 +23,27 @@ service grafana-server restart Read more about installing plugins in [Grafana docs](http://docs.grafana.org/plugins/installation/) +## From github repo +Just clone plugin repo into your plugin directory +```sh +cd /var/lib/grafana/plugins +git clone https://github.com/alexanderzobnin/grafana-zabbix +``` + +Then restart grafana server. +```sh +service grafana-server restart +``` + +Using this way you can easy upgrade plugin just running +```sh +cd /var/lib/grafana/plugins/grafana-zabbix-app +git pull +service grafana-server restart +``` + ## From special repo +**WARNING!** This way is deprecated. Now main repo (https://github.com/alexanderzobnin/grafana-zabbix) contains builded pludin. You can use [grafana-zabbix-app](https://github.com/alexanderzobnin/grafana-zabbix-app) repo, which contains latest builded version of plugin. @@ -72,5 +92,4 @@ Restart Grafana server ```sh service grafana-server restart -systemctl restart grafana-server ``` From 9cd4e6f23a0b0a75493f9e4687f87c38fe3586a5 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 2 Feb 2017 12:12:10 +0300 Subject: [PATCH 07/10] Add docs building instructions. --- docs/README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 0be8737..837f516 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1 +1,21 @@ -# Grafana-Zabbix Documentation \ No newline at end of file +# Grafana-Zabbix Documentation + +## Building docs +To build this docs on your computer you need [git-lfs](https://git-lfs.github.com/) and [mkdocs](http://www.mkdocs.org/) installed. + +Clone repo +``` +git clone https://github.com/alexanderzobnin/grafana-zabbix +``` +Check images in `docs/sources/img/`. If this folder is empty, run +``` +git lfs fetch --all +``` + +Build docs +``` +cd docs/ +mkdocs build --clean +``` + +Built docs will be placed in `site/` directory. From 86e5a872f219a184f71a9171cc7d939f438a0dc2 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 2 Feb 2017 12:18:24 +0300 Subject: [PATCH 08/10] Fix typo in docs. --- docs/sources/installation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/installation/index.md b/docs/sources/installation/index.md index 28b77cd..d41438a 100644 --- a/docs/sources/installation/index.md +++ b/docs/sources/installation/index.md @@ -43,7 +43,7 @@ service grafana-server restart ``` ## From special repo -**WARNING!** This way is deprecated. Now main repo (https://github.com/alexanderzobnin/grafana-zabbix) contains builded pludin. +**WARNING!** This way is deprecated. Now main repo (https://github.com/alexanderzobnin/grafana-zabbix) contains builded plugin. You can use [grafana-zabbix-app](https://github.com/alexanderzobnin/grafana-zabbix-app) repo, which contains latest builded version of plugin. From 24026ae5aab17cc38d5ffd9a1852aa93e75ceae6 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 2 Feb 2017 12:34:17 +0300 Subject: [PATCH 09/10] Bump version up to 3.2.1 --- src/plugin.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugin.json b/src/plugin.json index 0db8b1f..79b3bf0 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -31,8 +31,8 @@ {"name": "Metric Editor", "path": "img/screenshot-metric_editor.png"}, {"name": "Triggers", "path": "img/screenshot-triggers.png"} ], - "version": "3.2.0", - "updated": "2016-12-20" + "version": "3.2.1", + "updated": "2016-02-02" }, "includes": [ From ad6614eacd2b94eedbd0671b1d1a0f2002ade056 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 2 Feb 2017 13:16:36 +0300 Subject: [PATCH 10/10] Fix update date. --- dist/plugin.json | 4 ++-- src/plugin.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/plugin.json b/dist/plugin.json index 0db8b1f..a652194 100644 --- a/dist/plugin.json +++ b/dist/plugin.json @@ -31,8 +31,8 @@ {"name": "Metric Editor", "path": "img/screenshot-metric_editor.png"}, {"name": "Triggers", "path": "img/screenshot-triggers.png"} ], - "version": "3.2.0", - "updated": "2016-12-20" + "version": "3.2.1", + "updated": "2017-02-02" }, "includes": [ diff --git a/src/plugin.json b/src/plugin.json index 79b3bf0..a652194 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -32,7 +32,7 @@ {"name": "Triggers", "path": "img/screenshot-triggers.png"} ], "version": "3.2.1", - "updated": "2016-02-02" + "updated": "2017-02-02" }, "includes": [

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 z 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 z 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ΜwE5PG#kxBR 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%0ALzIpNRnKD2|2az0yzCkOP_}6K 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 h(#8K@ri&kFjJx-U0oRqR;@hhWG{|6bBsI>q9 literal 0 HcmV?d00001 diff --git a/dist/img/screenshot-dashboard01.png b/dist/img/screenshot-dashboard01.png new file mode 100644 index 0000000000000000000000000000000000000000..64ad1ac4c72a3817e672e606797af50ce7d60295 GIT binary patch literal 380288 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 z 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