diff --git a/.gitignore b/.gitignore
index dbb0ecd..8a651e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,7 +30,8 @@ awsconfig
/tmp
vendor/phantomjs/phantomjs
-# dist/
+# Built plugin
+dist/
# locally required config files
public/css/*.min.css
diff --git a/dist/README.md b/dist/README.md
deleted file mode 100644
index 625f818..0000000
--- a/dist/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Zabbix plugin for Grafana
-
-[](https://github.com/alexanderzobnin/grafana-zabbix/releases)
-[](https://github.com/alexanderzobnin/grafana-zabbix/blob/master/CHANGELOG.md)
-[](http://docs.grafana-zabbix.org)
-
-Visualize your Zabbix metrics with the leading open source software for time series analytics.
-
-### Live Demo
-
-See all features overview and dashboards examples at Grafana-Zabbix [Live demo](http://play.grafana-zabbix.org) site.
-
-### Features
-
-- Select multiple metrics [by using Regex](http://docs.grafana-zabbix.org/guides/gettingstarted/#multiple-items-on-one-graph)
-- Create interactive and reusable dashboards with [template variables](http://docs.grafana-zabbix.org/guides/templating/)
-- Show events on graphs with [Annotations](http://docs.grafana.org/reference/annotations/)
-- Display active problems with Triggers panel
-- Transform and shape your data with [metric processing functions](http://docs.grafana-zabbix.org/reference/functions/) (Avg, Median, Min, Max, Multiply, Summarize, Time shift, Alias)
-- Find problems faster with [Alerting](http://docs.grafana-zabbix.org/reference/alerting/) feature
-- Mix metrics from multiple data sources in the same dashboard or even graph
-- Discover and share [dashboards](https://grafana.com/dashboards) in the official library
diff --git a/dist/components/config.html b/dist/components/config.html
deleted file mode 100644
index 4c4b34c..0000000
--- a/dist/components/config.html
+++ /dev/null
@@ -1 +0,0 @@
-
Zabbix Plugin Config
diff --git a/dist/components/config.js b/dist/components/config.js
deleted file mode 100644
index e13e8eb..0000000
--- a/dist/components/config.js
+++ /dev/null
@@ -1,27 +0,0 @@
-'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
deleted file mode 100644
index 69b4032..0000000
--- a/dist/components/config.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"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/css/grafana-zabbix.dark.css b/dist/css/grafana-zabbix.dark.css
deleted file mode 100644
index 9f1a9f8..0000000
--- a/dist/css/grafana-zabbix.dark.css
+++ /dev/null
@@ -1,127 +0,0 @@
-.triggers-panel-scroll {
- overflow: auto; }
-
-.triggers-panel-container {
- position: relative; }
- .triggers-panel-container .zabbix-trigger-name {
- font-weight: bold; }
- .triggers-panel-container .zabbix-hostname {
- color: #8e8e8e;
- margin-left: 1rem;
- font-weight: 500; }
- .triggers-panel-container .zbx-description {
- color: #b3b3b3;
- font-weight: normal;
- margin-left: 0.6rem; }
- .triggers-panel-container .zbx-description--newline {
- margin-left: 0rem; }
- .triggers-panel-container .zbx-trigger-tags {
- margin-left: 0.6rem; }
- .triggers-panel-container .zbx-trigger-tags .zbx-tag {
- color: #ECECEC;
- font-weight: 500;
- font-size: 12px;
- margin-right: 4px;
- padding: 1px 6px;
- cursor: pointer; }
- .triggers-panel-container .trigger-info-block {
- display: flex; }
- .triggers-panel-container .trigger-info-block i, .triggers-panel-container .trigger-info-block a {
- margin-right: 0.3rem;
- color: #8e8e8e; }
- .triggers-panel-container .zabbix-trigger-source {
- margin-right: 1.5rem;
- margin-left: 1rem;
- font-weight: 500; }
- .triggers-panel-container .zabbix-trigger-source .gicon-datasources {
- opacity: 0.4; }
-
-.zbx-trigger-card {
- position: relative;
- padding: 0.5rem 1rem; }
-
-.zabbix-trigger--blinked {
- opacity: 0.4;
- animation: zabbix-triggers-icon 0.8s cubic-bezier(0.46, 0.03, 0.52, 0.96) 0s infinite alternate; }
-
-.zbx-maintenance-icon {
- color: #eb7b18; }
-
-.zbx-trigger-highlighted {
- color: #fff; }
- .zbx-trigger-highlighted .alert-rule-item__body,
- .zbx-trigger-highlighted .alert-rule-item__header,
- .zbx-trigger-highlighted .alert-rule-item__time,
- .zbx-trigger-highlighted .zabbix-hostname,
- .zbx-trigger-highlighted .zbx-description {
- color: #fff; }
- .zbx-trigger-highlighted .alert-rule-item__text .zbx-trigger-state,
- .zbx-trigger-highlighted .alert-rule-item__text .zbx-trigger-severity {
- color: #fff; }
- .zbx-trigger-highlighted .zbx-trigger-lastchange .trigger-info-block.zbx-status-icons a, .zbx-trigger-highlighted .zbx-trigger-lastchange .trigger-info-block.zbx-status-icons i {
- color: #fff; }
-
-@keyframes zabbix-triggers-icon {
- 100% {
- opacity: 1; } }
-
-.triggers-panel-footer {
- text-align: center;
- font-size: 90%;
- line-height: 2px;
- padding-top: 4px; }
- .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; }
-
-.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; }
-
-.triggers-severity-config.gf-form-label {
- padding-top: 5px;
- padding-bottom: 5px;
- border-radius: 0px; }
-
-.triggers-severity-config .icon-gf {
- font-size: 200%; }
-
-.zbx-regex {
- color: #d69e2e; }
-
-.zbx-variable {
- color: #32d1df; }
-
-/*# sourceMappingURL=grafana-zabbix.dark.css.map */
\ No newline at end of file
diff --git a/dist/css/grafana-zabbix.dark.css.map b/dist/css/grafana-zabbix.dark.css.map
deleted file mode 100644
index bbee0ea..0000000
--- a/dist/css/grafana-zabbix.dark.css.map
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "version": 3,
- "file": "grafana-zabbix.dark.css",
- "sources": [
- "../../src/sass/grafana-zabbix.dark.scss",
- "../../src/sass/_variables.dark.scss",
- "../../src/sass/grafana-zabbix.scss",
- "../../src/sass/_variables.scss",
- "../../src/sass/_panel-triggers.scss",
- "../../src/sass/_query_editor.scss"
- ],
- "mappings": "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",
- "names": []
-}
\ No newline at end of file
diff --git a/dist/css/grafana-zabbix.light.css b/dist/css/grafana-zabbix.light.css
deleted file mode 100644
index 8febfb0..0000000
--- a/dist/css/grafana-zabbix.light.css
+++ /dev/null
@@ -1,127 +0,0 @@
-.triggers-panel-scroll {
- overflow: auto; }
-
-.triggers-panel-container {
- position: relative; }
- .triggers-panel-container .zabbix-trigger-name {
- font-weight: bold; }
- .triggers-panel-container .zabbix-hostname {
- color: #767980;
- margin-left: 1rem;
- font-weight: 500; }
- .triggers-panel-container .zbx-description {
- color: #acb6bf;
- font-weight: normal;
- margin-left: 0.6rem; }
- .triggers-panel-container .zbx-description--newline {
- margin-left: 0rem; }
- .triggers-panel-container .zbx-trigger-tags {
- margin-left: 0.6rem; }
- .triggers-panel-container .zbx-trigger-tags .zbx-tag {
- color: #e9edf2;
- font-weight: 500;
- font-size: 12px;
- margin-right: 4px;
- padding: 1px 6px;
- cursor: pointer; }
- .triggers-panel-container .trigger-info-block {
- display: flex; }
- .triggers-panel-container .trigger-info-block i, .triggers-panel-container .trigger-info-block a {
- margin-right: 0.3rem;
- color: #767980; }
- .triggers-panel-container .zabbix-trigger-source {
- margin-right: 1.5rem;
- margin-left: 1rem;
- font-weight: 500; }
- .triggers-panel-container .zabbix-trigger-source .gicon-datasources {
- opacity: 0.4; }
-
-.zbx-trigger-card {
- position: relative;
- padding: 0.5rem 1rem; }
-
-.zabbix-trigger--blinked {
- opacity: 0.4;
- animation: zabbix-triggers-icon 0.8s cubic-bezier(0.46, 0.03, 0.52, 0.96) 0s infinite alternate; }
-
-.zbx-maintenance-icon {
- color: #ff7941; }
-
-.zbx-trigger-highlighted {
- color: #000; }
- .zbx-trigger-highlighted .alert-rule-item__body,
- .zbx-trigger-highlighted .alert-rule-item__header,
- .zbx-trigger-highlighted .alert-rule-item__time,
- .zbx-trigger-highlighted .zabbix-hostname,
- .zbx-trigger-highlighted .zbx-description {
- color: #000; }
- .zbx-trigger-highlighted .alert-rule-item__text .zbx-trigger-state,
- .zbx-trigger-highlighted .alert-rule-item__text .zbx-trigger-severity {
- color: #000; }
- .zbx-trigger-highlighted .zbx-trigger-lastchange .trigger-info-block.zbx-status-icons a, .zbx-trigger-highlighted .zbx-trigger-lastchange .trigger-info-block.zbx-status-icons i {
- color: #000; }
-
-@keyframes zabbix-triggers-icon {
- 100% {
- opacity: 1; } }
-
-.triggers-panel-footer {
- text-align: center;
- font-size: 90%;
- line-height: 2px;
- padding-top: 4px; }
- .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: #dde4ed; }
- .triggers-panel-footer ul > li > a.active {
- font-weight: bold;
- color: #1ca4d6; }
-
-.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; }
-
-.triggers-severity-config.gf-form-label {
- padding-top: 5px;
- padding-bottom: 5px;
- border-radius: 0px; }
-
-.triggers-severity-config .icon-gf {
- font-size: 200%; }
-
-.zbx-regex {
- color: #aa7b1d; }
-
-.zbx-variable {
- color: #1ca4d6; }
-
-/*# sourceMappingURL=grafana-zabbix.light.css.map */
\ No newline at end of file
diff --git a/dist/css/grafana-zabbix.light.css.map b/dist/css/grafana-zabbix.light.css.map
deleted file mode 100644
index c8daf62..0000000
--- a/dist/css/grafana-zabbix.light.css.map
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "version": 3,
- "file": "grafana-zabbix.light.css",
- "sources": [
- "../../src/sass/grafana-zabbix.light.scss",
- "../../src/sass/_variables.light.scss",
- "../../src/sass/grafana-zabbix.scss",
- "../../src/sass/_variables.scss",
- "../../src/sass/_panel-triggers.scss",
- "../../src/sass/_query_editor.scss"
- ],
- "mappings": "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",
- "names": []
-}
\ No newline at end of file
diff --git a/dist/dashboards/template_linux_server.json b/dist/dashboards/template_linux_server.json
deleted file mode 100644
index 453f843..0000000
--- a/dist/dashboards/template_linux_server.json
+++ /dev/null
@@ -1,447 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_NAME",
- "type": "datasource",
- "pluginId": "alexanderzobnin-zabbix-datasource"
- }
- ],
- "title": "Zabbix Template Linux Server",
- "revision": 1,
- "annotations": {
- "list": []
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [],
- "rows": [
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": {
- "CPU iowait time": "#B7DBAB",
- "CPU system time": "#BF1B00",
- "CPU user time": "#EAB839"
- },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "${DS_NAME}",
- "editable": true,
- "error": false,
- "fill": 3,
- "grid": {},
- "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": [],
- "spaceLength": 10,
- "span": 6,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "application": {
- "filter": "CPU"
- },
- "countTriggers": true,
- "functions": [],
- "group": {
- "filter": "$group"
- },
- "host": {
- "filter": "$host"
- },
- "item": {
- "filter": "/CPU/"
- },
- "minSeverity": 3,
- "mode": 0,
- "options": {
- "showDisabledItems": false
- },
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "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,
- "dashLength": 10,
- "dashes": false,
- "datasource": "${DS_NAME}",
- "editable": true,
- "error": false,
- "fill": 1,
- "grid": {},
- "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": [],
- "spaceLength": 10,
- "span": 6,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "application": {
- "filter": "CPU"
- },
- "countTriggers": true,
- "functions": [],
- "group": {
- "filter": "$group"
- },
- "host": {
- "filter": "$host"
- },
- "item": {
- "filter": "Processor load (15 min average per core)"
- },
- "minSeverity": 3,
- "mode": 0,
- "options": {
- "showDisabledItems": false
- },
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeShift": null,
- "title": "System load",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "CPU",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "250px",
- "panels": [
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "${DS_NAME}",
- "editable": true,
- "error": false,
- "fill": 3,
- "grid": {},
- "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",
- "seriesOverrides": [
- {
- "alias": "/Incoming/",
- "transform": "negative-Y"
- }
- ],
- "spaceLength": 10,
- "span": 12,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "application": {
- "filter": ""
- },
- "countTriggers": true,
- "functions": [],
- "group": {
- "filter": "$group"
- },
- "host": {
- "filter": "$host"
- },
- "item": {
- "filter": "/$netif/"
- },
- "minSeverity": 3,
- "mode": 0,
- "options": {
- "showDisabledItems": false
- },
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeShift": null,
- "title": "Network traffic on $netif",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "cumulative"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "bps",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ]
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": true,
- "title": "Network",
- "titleSize": "h6"
- }
- ],
- "schemaVersion": 14,
- "style": "dark",
- "tags": [
- "zabbix",
- "example"
- ],
- "templating": {
- "list": [
- {
- "allFormat": "regex values",
- "allValue": null,
- "current": {},
- "datasource": "${DS_NAME}",
- "hide": 0,
- "includeAll": false,
- "label": "Group",
- "multi": false,
- "multiFormat": "glob",
- "name": "group",
- "options": [],
- "query": "*",
- "refresh": 1,
- "refresh_on_load": false,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allFormat": "glob",
- "allValue": null,
- "current": {},
- "datasource": "${DS_NAME}",
- "hide": 0,
- "includeAll": false,
- "label": "Host",
- "multi": false,
- "multiFormat": "glob",
- "name": "host",
- "options": [],
- "query": "$group.*",
- "refresh": 1,
- "refresh_on_load": false,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allFormat": "regex values",
- "allValue": null,
- "current": {},
- "datasource": "${DS_NAME}",
- "hide": 0,
- "hideLabel": false,
- "includeAll": true,
- "label": "Network interface",
- "multi": true,
- "multiFormat": "regex values",
- "name": "netif",
- "options": [],
- "query": "*.$host.Network interfaces.*",
- "refresh": 1,
- "refresh_on_load": false,
- "regex": "/(?:Incoming|Outgoing) network traffic on (.*)/",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- }
- ]
- },
- "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"
- ]
- },
- "timezone": "browser"
-}
diff --git a/dist/dashboards/zabbix_server_dashboard.json b/dist/dashboards/zabbix_server_dashboard.json
deleted file mode 100644
index 9f92024..0000000
--- a/dist/dashboards/zabbix_server_dashboard.json
+++ /dev/null
@@ -1,646 +0,0 @@
-{
- "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": "$datasource",
- "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": "$datasource",
- "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": "$datasource",
- "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": "$datasource",
- "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"
- }
- ],
- "datasource": "$datasource",
- "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": "$datasource",
- "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": "$datasource",
- "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": []
- }
- ]
- }
- ],
- "templating": {
- "list": [
- {
- "current": {},
- "hide": 0,
- "label": "Zabbix Data Source",
- "name": "datasource",
- "options": [],
- "query": "alexanderzobnin-zabbix-datasource",
- "refresh": 1,
- "regex": "",
- "type": "datasource"
- }
- ]
- },
- "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"
- ]
- },
- "annotations": {
- "list": []
- },
- "schemaVersion": 12,
- "version": 7,
- "links": []
-}
diff --git a/dist/dashboards/zabbix_system_status.json b/dist/dashboards/zabbix_system_status.json
deleted file mode 100644
index 1fa7c03..0000000
--- a/dist/dashboards/zabbix_system_status.json
+++ /dev/null
@@ -1,370 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_NAME",
- "type": "datasource",
- "pluginId": "alexanderzobnin-zabbix-datasource"
- }
- ],
- "title": "Zabbix System Status",
- "revision": "1.0",
- "annotations": {
- "list": []
- },
- "editable": true,
- "gnetId": null,
- "graphTooltip": 0,
- "hideControls": false,
- "id": null,
- "links": [],
- "rows": [
- {
- "collapse": false,
- "height": 250,
- "panels": [
- {
- "columns": [],
- "datasource": "${DS_NAME}",
- "fontSize": "100%",
- "id": 9,
- "links": [],
- "pageSize": null,
- "scroll": true,
- "showHeader": true,
- "sort": {
- "col": 0,
- "desc": true
- },
- "span": 12,
- "styles": [
- {
- "alias": "Time",
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "pattern": "Time",
- "type": "date"
- },
- {
- "alias": "",
- "colorMode": "cell",
- "colors": [
- "rgba(45, 172, 121, 0.97)",
- "rgba(45, 172, 121, 0.97)",
- "#58140c"
- ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "pattern": "Disaster",
- "thresholds": [
- "0",
- "1"
- ],
- "type": "number",
- "unit": "none"
- },
- {
- "alias": "",
- "colorMode": "cell",
- "colors": [
- "#99440a",
- "rgba(45, 172, 121, 0.97)",
- "#99440a"
- ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "pattern": "High",
- "thresholds": [
- "0",
- "1"
- ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": "cell",
- "colors": [
- "rgba(50, 172, 45, 0.97)",
- "rgba(45, 172, 121, 0.97)",
- "#c15c17"
- ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "pattern": "Average",
- "thresholds": [
- "0",
- "1"
- ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": "cell",
- "colors": [
- "rgba(50, 172, 45, 0.97)",
- "rgba(45, 172, 121, 0.97)",
- "#cca300"
- ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "pattern": "Warning",
- "thresholds": [
- "0",
- "1"
- ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": "cell",
- "colors": [
- "rgba(50, 172, 45, 0.97)",
- "rgba(45, 172, 121, 0.97)",
- "#64b0c8"
- ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "pattern": "Information",
- "thresholds": [
- "0",
- "1"
- ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": "cell",
- "colors": [
- "rgba(50, 172, 45, 0.97)",
- "rgba(45, 172, 121, 0.97)",
- "rgb(176, 176, 176)"
- ],
- "dateFormat": "YYYY-MM-DD HH:mm:ss",
- "decimals": 0,
- "pattern": "Not classified",
- "thresholds": [
- "0",
- "1"
- ],
- "type": "number",
- "unit": "short"
- },
- {
- "alias": "",
- "colorMode": null,
- "colors": [
- "rgba(245, 54, 54, 0.9)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(50, 172, 45, 0.97)"
- ],
- "decimals": 0,
- "pattern": "/.*/",
- "thresholds": [],
- "type": "number",
- "unit": "none"
- }
- ],
- "targets": [
- {
- "application": {
- "filter": ""
- },
- "functions": [],
- "group": {
- "filter": "/.*/"
- },
- "host": {
- "filter": "/.*/"
- },
- "item": {
- "filter": ""
- },
- "mode": 4,
- "triggers": {
- "count": false,
- "minSeverity": 0,
- "acknowledged": 2
- },
- "refId": "A",
- "target": ""
- }
- ],
- "title": "System status",
- "transform": "table",
- "type": "table"
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6"
- },
- {
- "collapse": false,
- "height": "150px",
- "panels": [
- {
- "cacheTimeout": null,
- "colorBackground": true,
- "colorValue": false,
- "colors": [
- "rgba(50, 172, 45, 0.97)",
- "rgba(16, 154, 113, 0.97)",
- "#890f02"
- ],
- "datasource": "${DS_NAME}",
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "id": 1,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "minSpan": 2,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "repeat": "group",
- "span": 2,
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "application": {
- "filter": ""
- },
- "functions": [],
- "group": {
- "filter": "$group"
- },
- "host": {
- "filter": "/.*/"
- },
- "item": {
- "filter": ""
- },
- "mode": 4,
- "triggers": {
- "count": true,
- "minSeverity": 3,
- "acknowledged": 2
- },
- "refId": "A",
- "target": ""
- }
- ],
- "thresholds": "0,1",
- "title": "$group",
- "type": "singlestat",
- "valueFontSize": "120%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "avg"
- }
- ],
- "repeat": null,
- "repeatIteration": null,
- "repeatRowId": null,
- "showTitle": false,
- "title": "Dashboard Row",
- "titleSize": "h6"
- }
- ],
- "schemaVersion": 14,
- "style": "dark",
- "tags": [],
- "templating": {
- "list": [
- {
- "allValue": null,
- "current": {},
- "datasource": "${DS_NAME}",
- "hide": 0,
- "includeAll": true,
- "label": null,
- "multi": true,
- "name": "group",
- "options": [],
- "query": "*",
- "refresh": 1,
- "regex": "",
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- }
- ]
- },
- "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"
- ]
- },
- "timezone": ""
-}
diff --git a/dist/datasource-zabbix/add-metric-function.directive.js b/dist/datasource-zabbix/add-metric-function.directive.js
deleted file mode 100644
index 7c6763b..0000000
--- a/dist/datasource-zabbix/add-metric-function.directive.js
+++ /dev/null
@@ -1,118 +0,0 @@
-'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 () {
-
- angular.module('grafana.directives').directive('addMetricFunction',
-
- /** @ngInject */
- 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
deleted file mode 100644
index dabbd26..0000000
--- a/dist/datasource-zabbix/add-metric-function.directive.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"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\nangular\n .module('grafana.directives')\n .directive('addMetricFunction',\n\n /** @ngInject */\n 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/benchmarks/timeseries_bench.js b/dist/datasource-zabbix/benchmarks/timeseries_bench.js
deleted file mode 100644
index 235f701..0000000
--- a/dist/datasource-zabbix/benchmarks/timeseries_bench.js
+++ /dev/null
@@ -1,77 +0,0 @@
-'use strict';
-
-System.register(['lodash', '../timeseries'], function (_export, _context) {
- "use strict";
-
- var _, ts, datapoints, series_set, growing_series;
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_timeseries) {
- ts = _timeseries.default;
- }],
- execute: function () {
- datapoints = [[10.7104, 1498409636085], [10.578, 1498409651011], [10.5985, 1498409666628], [10.6877, 1498409681525], [10.5495, 1498409696586], [10.5981, 1498409711009], [10.5076, 1498409726949], [11.4807, 1498409741853], [11.6165, 1498409756165], [11.8575, 1498409771018], [11.9936, 1498409786056], [10.7566, 1498409801942], [10.7484, 1498409816010], [10.6038, 1498409831018], [10.2932, 1498409846010], [10.4912, 1498409861946], [10.4151, 1498409876871], [10.2401, 1498409891710], [10.4921, 1498409906143], [10.4413, 1498409921477], [10.6318, 1498409936147], [10.5277, 1498409951915], [10.6333, 1498409966052], [10.6417, 1498409981944], [10.4505, 1498409996867], [10.5812, 1498410011770], [10.4934, 1498410026573], [10.5731, 1498410041317], [10.5, 1498410056213], [10.6505, 1498410071013], [9.4035, 1498410086387]];
- series_set = [[[1.0247, 1498409631773], [0.9988, 1498409646697], [0.9817, 1498409661239], [0.9569, 1498409676045], [1.0331, 1498409691922], [1.0755, 1498409706546], [1.1862, 1498409721525], [1.2984, 1498409736175], [1.2389, 1498409751817], [1.1452, 1498409766783], [1.102, 1498409781699], [0.9647, 1498409796664], [1.0063, 1498409811627], [1.0318, 1498409826887], [1.065, 1498409841645], [1.0907, 1498409856647], [1.0229, 1498409871521], [1.0654, 1498409886031], [1.0568, 1498409901544], [1.0818, 1498409916194], [1.1335, 1498409931672], [1.057, 1498409946673], [1.0243, 1498409961669], [1.0329, 1498409976637], [1.1428, 1498409991563], [1.2198, 1498410006441], [1.2192, 1498410021230], [1.2615, 1498410036027], [1.1765, 1498410051907], [1.2352, 1498410066109], [1.0557, 1498410081043]], [[10.7104, 1498409636085], [10.578, 1498409651011], [10.5985, 1498409666628], [10.6877, 1498409681525], [10.5495, 1498409696586], [10.5981, 1498409711009], [10.5076, 1498409726949], [11.4807, 1498409741853], [11.6165, 1498409756165], [11.8575, 1498409771018], [11.9936, 1498409786056], [10.7566, 1498409801942], [10.7484, 1498409816010], [10.6038, 1498409831018], [10.2932, 1498409846010], [10.4912, 1498409861946], [10.4151, 1498409876871], [10.2401, 1498409891710], [10.4921, 1498409906143], [10.4413, 1498409921477], [10.6318, 1498409936147], [10.5277, 1498409951915], [10.6333, 1498409966052], [10.6417, 1498409981944], [10.4505, 1498409996867], [10.5812, 1498410011770], [10.4934, 1498410026573], [10.5731, 1498410041317], [10.5, 1498410056213], [10.6505, 1498410071013], [9.4035, 1498410086387]]];
- growing_series = [[10755200, 1498332216642], [10761200, 1498332276802], [10767200, 1498332336367], [10773200, 1498332396584], [10779200, 1498332456880], [10785200, 1498332516479], [10791200, 1498332576610], [10797200, 1498332636353], [10803200, 1498332696513], [10809200, 1498332756884], [10815200, 1498332816890], [10821200, 1498332876305], [10827200, 1498332936384], [10833200, 1498332996659], [10839200, 1498333056965], [10845200, 1498333116748], [10851200, 1498333176687], [10857200, 1498333236646], [10863200, 1498333297034], [10869200, 1498333356358], [10875200, 1498333416445], [4800, 1498333536686], [17900, 1498333667962], [24000, 1498333729157], [29500, 1498333783662], [34800, 1498333836813], [40700, 1498333896403], [46800, 1498333956953], [52800, 1498334016976], [6000, 1498334136593], [12000, 1498334196567]];
-
-
- module.exports = [{
- name: 'groupBy',
- tests: {
- 'groupBy(AVERAGE)': function groupByAVERAGE() {
- ts.groupBy(datapoints, '5m', ts.AVERAGE);
- },
- 'groupBy(MAX)': function groupByMAX() {
- ts.groupBy(datapoints, '5m', ts.COUNT);
- }
- }
- }, {
- name: 'sumSeries',
- tests: {
- 'sumSeries()': function sumSeries() {
- ts.sumSeries(series_set);
- },
- 'groupBy(MAX)->sumSeries()': function groupByMAXSumSeries() {
- var prepeared_series = _.map(series_set, function (datapoints) {
- return ts.groupBy(datapoints, '5m', ts.MAX);
- });
- ts.sumSeries(prepeared_series);
- }
- }
- }, {
- name: 'delta vs rate',
- tests: {
- 'delta()': function delta() {
- ts.delta(growing_series);
- },
- 'rate()': function rate() {
- ts.rate(growing_series);
- }
- }
- }, {
- name: 'scale',
- tests: {
- 'scale()': function scale() {
- ts.scale(datapoints, 42);
- },
- 'scale_perf()': function scale_perf() {
- ts.scale_perf(datapoints, 42);
- }
- }
- }, {
- name: 'groupBy vs groupBy_perf',
- tests: {
- 'groupBy()': function groupBy() {
- ts.groupBy(datapoints, '5m', ts.AVERAGE);
- },
- 'groupBy_perf()': function groupBy_perf() {
- ts.groupBy_perf(datapoints, '5m', ts.AVERAGE);
- }
- }
- }];
- }
- };
-});
-//# sourceMappingURL=timeseries_bench.js.map
diff --git a/dist/datasource-zabbix/benchmarks/timeseries_bench.js.map b/dist/datasource-zabbix/benchmarks/timeseries_bench.js.map
deleted file mode 100644
index 26a5f73..0000000
--- a/dist/datasource-zabbix/benchmarks/timeseries_bench.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/benchmarks/timeseries_bench.js"],"names":["_","ts","datapoints","series_set","growing_series","module","exports","name","tests","groupBy","AVERAGE","COUNT","sumSeries","prepeared_series","map","MAX","delta","rate","scale","scale_perf","groupBy_perf"],"mappings":"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","file":"timeseries_bench.js","sourcesContent":["import _ from 'lodash';\nimport ts from '../timeseries';\n\nlet datapoints = [[10.7104, 1498409636085], [10.578, 1498409651011], [10.5985, 1498409666628], [10.6877, 1498409681525], [10.5495, 1498409696586], [10.5981, 1498409711009], [10.5076, 1498409726949], [11.4807, 1498409741853], [11.6165, 1498409756165], [11.8575, 1498409771018], [11.9936, 1498409786056], [10.7566, 1498409801942], [10.7484, 1498409816010], [10.6038, 1498409831018], [10.2932, 1498409846010], [10.4912, 1498409861946], [10.4151, 1498409876871], [10.2401, 1498409891710], [10.4921, 1498409906143], [10.4413, 1498409921477], [10.6318, 1498409936147], [10.5277, 1498409951915], [10.6333, 1498409966052], [10.6417, 1498409981944], [10.4505, 1498409996867], [10.5812, 1498410011770], [10.4934, 1498410026573], [10.5731, 1498410041317], [10.5, 1498410056213], [10.6505, 1498410071013], [9.4035, 1498410086387]];\n\nlet series_set = [\n [[1.0247, 1498409631773], [0.9988, 1498409646697], [0.9817, 1498409661239], [0.9569, 1498409676045], [1.0331, 1498409691922], [1.0755, 1498409706546], [1.1862, 1498409721525], [1.2984, 1498409736175], [1.2389, 1498409751817], [1.1452, 1498409766783], [1.102, 1498409781699], [0.9647, 1498409796664], [1.0063, 1498409811627], [1.0318, 1498409826887], [1.065, 1498409841645], [1.0907, 1498409856647], [1.0229, 1498409871521], [1.0654, 1498409886031], [1.0568, 1498409901544], [1.0818, 1498409916194], [1.1335, 1498409931672], [1.057, 1498409946673], [1.0243, 1498409961669], [1.0329, 1498409976637], [1.1428, 1498409991563], [1.2198, 1498410006441], [1.2192, 1498410021230], [1.2615, 1498410036027], [1.1765, 1498410051907], [1.2352, 1498410066109], [1.0557, 1498410081043]],\n [[10.7104, 1498409636085], [10.578, 1498409651011], [10.5985, 1498409666628], [10.6877, 1498409681525], [10.5495, 1498409696586], [10.5981, 1498409711009], [10.5076, 1498409726949], [11.4807, 1498409741853], [11.6165, 1498409756165], [11.8575, 1498409771018], [11.9936, 1498409786056], [10.7566, 1498409801942], [10.7484, 1498409816010], [10.6038, 1498409831018], [10.2932, 1498409846010], [10.4912, 1498409861946], [10.4151, 1498409876871], [10.2401, 1498409891710], [10.4921, 1498409906143], [10.4413, 1498409921477], [10.6318, 1498409936147], [10.5277, 1498409951915], [10.6333, 1498409966052], [10.6417, 1498409981944], [10.4505, 1498409996867], [10.5812, 1498410011770], [10.4934, 1498410026573], [10.5731, 1498410041317], [10.5, 1498410056213], [10.6505, 1498410071013], [9.4035, 1498410086387]]\n];\n\nlet growing_series = [[10755200, 1498332216642], [10761200, 1498332276802], [10767200, 1498332336367], [10773200, 1498332396584], [10779200, 1498332456880], [10785200, 1498332516479], [10791200, 1498332576610], [10797200, 1498332636353], [10803200, 1498332696513], [10809200, 1498332756884], [10815200, 1498332816890], [10821200, 1498332876305], [10827200, 1498332936384], [10833200, 1498332996659], [10839200, 1498333056965], [10845200, 1498333116748], [10851200, 1498333176687], [10857200, 1498333236646], [10863200, 1498333297034], [10869200, 1498333356358], [10875200, 1498333416445], [4800, 1498333536686], [17900, 1498333667962], [24000, 1498333729157], [29500, 1498333783662], [34800, 1498333836813], [40700, 1498333896403], [46800, 1498333956953], [52800, 1498334016976], [6000, 1498334136593], [12000, 1498334196567]];\n\nmodule.exports = [\n {\n name: 'groupBy',\n tests: {\n 'groupBy(AVERAGE)': () => {\n ts.groupBy(datapoints, '5m', ts.AVERAGE);\n },\n 'groupBy(MAX)': () => {\n ts.groupBy(datapoints, '5m', ts.COUNT);\n }\n }\n },\n {\n name: 'sumSeries',\n tests: {\n 'sumSeries()': () => {\n ts.sumSeries(series_set);\n },\n 'groupBy(MAX)->sumSeries()': () => {\n let prepeared_series = _.map(series_set, datapoints => ts.groupBy(datapoints, '5m', ts.MAX));\n ts.sumSeries(prepeared_series);\n }\n }\n },\n {\n name: 'delta vs rate',\n tests: {\n 'delta()': () => {\n ts.delta(growing_series);\n },\n 'rate()': () => {\n ts.rate(growing_series);\n }\n }\n },\n {\n name: 'scale',\n tests: {\n 'scale()': () => {\n ts.scale(datapoints, 42);\n },\n 'scale_perf()': () => {\n ts.scale_perf(datapoints, 42);\n }\n }\n },\n {\n name: 'groupBy vs groupBy_perf',\n tests: {\n 'groupBy()': () => {\n ts.groupBy(datapoints, '5m', ts.AVERAGE);\n },\n 'groupBy_perf()': () => {\n ts.groupBy_perf(datapoints, '5m', ts.AVERAGE);\n }\n }\n }\n];\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/config.controller.js b/dist/datasource-zabbix/config.controller.js
deleted file mode 100644
index 0948202..0000000
--- a/dist/datasource-zabbix/config.controller.js
+++ /dev/null
@@ -1,80 +0,0 @@
-'use strict';
-
-System.register(['lodash', './migrations'], function (_export, _context) {
- "use strict";
-
- var _, migrateDSConfig, _createClass, SUPPORTED_SQL_DS, defaultConfig, ZabbixDSConfigController;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_migrations) {
- migrateDSConfig = _migrations.migrateDSConfig;
- }],
- 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;
- };
- }();
-
- SUPPORTED_SQL_DS = ['mysql', 'postgres'];
- defaultConfig = {
- trends: false,
- dbConnectionEnable: false,
- dbConnectionDatasourceId: null,
- alerting: false,
- addThresholds: false,
- alertingMinSeverity: 3,
- disableReadOnlyUsersAck: false
- };
-
- _export('ZabbixDSConfigController', ZabbixDSConfigController = function () {
-
- /** @ngInject */
- function ZabbixDSConfigController($scope, $injector, datasourceSrv) {
- _classCallCheck(this, ZabbixDSConfigController);
-
- this.datasourceSrv = datasourceSrv;
-
- this.current.jsonData = migrateDSConfig(this.current.jsonData);
- _.defaults(this.current.jsonData, defaultConfig);
- this.sqlDataSources = this.getSupportedSQLDataSources();
- }
-
- _createClass(ZabbixDSConfigController, [{
- key: 'getSupportedSQLDataSources',
- value: function getSupportedSQLDataSources() {
- var datasources = this.datasourceSrv.getAll();
- return _.filter(datasources, function (ds) {
- return _.includes(SUPPORTED_SQL_DS, ds.type);
- });
- }
- }]);
-
- return ZabbixDSConfigController;
- }());
-
- _export('ZabbixDSConfigController', ZabbixDSConfigController);
- }
- };
-});
-//# sourceMappingURL=config.controller.js.map
diff --git a/dist/datasource-zabbix/config.controller.js.map b/dist/datasource-zabbix/config.controller.js.map
deleted file mode 100644
index e74907a..0000000
--- a/dist/datasource-zabbix/config.controller.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/config.controller.js"],"names":["_","migrateDSConfig","SUPPORTED_SQL_DS","defaultConfig","trends","dbConnectionEnable","dbConnectionDatasourceId","alerting","addThresholds","alertingMinSeverity","disableReadOnlyUsersAck","ZabbixDSConfigController","$scope","$injector","datasourceSrv","current","jsonData","defaults","sqlDataSources","getSupportedSQLDataSources","datasources","getAll","filter","includes","ds","type"],"mappings":";;;;;;;;;;;;;;;AAAOA,O;;AACEC,qB,eAAAA,e;;;;;;;;;;;;;;;;;;;;;AAEHC,sB,GAAmB,CAAC,OAAD,EAAU,UAAV,C;AAEnBC,mB,GAAgB;AACpBC,gBAAQ,KADY;AAEpBC,4BAAoB,KAFA;AAGpBC,kCAA0B,IAHN;AAIpBC,kBAAU,KAJU;AAKpBC,uBAAe,KALK;AAMpBC,6BAAqB,CAND;AAOpBC,iCAAyB;AAPL,O;;0CAUTC,wB;;AAEX;AACA,0CAAYC,MAAZ,EAAoBC,SAApB,EAA+BC,aAA/B,EAA8C;AAAA;;AAC5C,eAAKA,aAAL,GAAqBA,aAArB;;AAEA,eAAKC,OAAL,CAAaC,QAAb,GAAwBf,gBAAgB,KAAKc,OAAL,CAAaC,QAA7B,CAAxB;AACAhB,YAAEiB,QAAF,CAAW,KAAKF,OAAL,CAAaC,QAAxB,EAAkCb,aAAlC;AACA,eAAKe,cAAL,GAAsB,KAAKC,0BAAL,EAAtB;AACD;;;;uDAE4B;AAC3B,gBAAIC,cAAc,KAAKN,aAAL,CAAmBO,MAAnB,EAAlB;AACA,mBAAOrB,EAAEsB,MAAF,CAASF,WAAT,EAAsB,cAAM;AACjC,qBAAOpB,EAAEuB,QAAF,CAAWrB,gBAAX,EAA6BsB,GAAGC,IAAhC,CAAP;AACD,aAFM,CAAP;AAGD","file":"config.controller.js","sourcesContent":["import _ from 'lodash';\nimport { migrateDSConfig } from './migrations';\n\nconst SUPPORTED_SQL_DS = ['mysql', 'postgres'];\n\nconst defaultConfig = {\n trends: false,\n dbConnectionEnable: false,\n dbConnectionDatasourceId: null,\n alerting: false,\n addThresholds: false,\n alertingMinSeverity: 3,\n disableReadOnlyUsersAck: false\n};\n\nexport class ZabbixDSConfigController {\n\n /** @ngInject */\n constructor($scope, $injector, datasourceSrv) {\n this.datasourceSrv = datasourceSrv;\n\n this.current.jsonData = migrateDSConfig(this.current.jsonData);\n _.defaults(this.current.jsonData, defaultConfig);\n this.sqlDataSources = this.getSupportedSQLDataSources();\n }\n\n getSupportedSQLDataSources() {\n let datasources = this.datasourceSrv.getAll();\n return _.filter(datasources, ds => {\n return _.includes(SUPPORTED_SQL_DS, ds.type);\n });\n }\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/constants.js b/dist/datasource-zabbix/constants.js
deleted file mode 100644
index c4afc19..0000000
--- a/dist/datasource-zabbix/constants.js
+++ /dev/null
@@ -1,80 +0,0 @@
-'use strict';
-
-System.register([], function (_export, _context) {
- "use strict";
-
- var MODE_METRICS, MODE_ITSERVICE, MODE_TEXT, MODE_ITEMID, MODE_TRIGGERS, SEV_NOT_CLASSIFIED, SEV_INFORMATION, SEV_WARNING, SEV_AVERAGE, SEV_HIGH, SEV_DISASTER, SHOW_ALL_TRIGGERS, SHOW_ALL_EVENTS, SHOW_OK_EVENTS, DATAPOINT_VALUE, DATAPOINT_TS, TRIGGER_SEVERITY;
- return {
- setters: [],
- execute: function () {
- _export('MODE_METRICS', MODE_METRICS = 0);
-
- _export('MODE_METRICS', MODE_METRICS);
-
- _export('MODE_ITSERVICE', MODE_ITSERVICE = 1);
-
- _export('MODE_ITSERVICE', MODE_ITSERVICE);
-
- _export('MODE_TEXT', MODE_TEXT = 2);
-
- _export('MODE_TEXT', MODE_TEXT);
-
- _export('MODE_ITEMID', MODE_ITEMID = 3);
-
- _export('MODE_ITEMID', MODE_ITEMID);
-
- _export('MODE_TRIGGERS', MODE_TRIGGERS = 4);
-
- _export('MODE_TRIGGERS', MODE_TRIGGERS);
-
- _export('SEV_NOT_CLASSIFIED', SEV_NOT_CLASSIFIED = 0);
-
- _export('SEV_NOT_CLASSIFIED', SEV_NOT_CLASSIFIED);
-
- _export('SEV_INFORMATION', SEV_INFORMATION = 1);
-
- _export('SEV_INFORMATION', SEV_INFORMATION);
-
- _export('SEV_WARNING', SEV_WARNING = 2);
-
- _export('SEV_WARNING', SEV_WARNING);
-
- _export('SEV_AVERAGE', SEV_AVERAGE = 3);
-
- _export('SEV_AVERAGE', SEV_AVERAGE);
-
- _export('SEV_HIGH', SEV_HIGH = 4);
-
- _export('SEV_HIGH', SEV_HIGH);
-
- _export('SEV_DISASTER', SEV_DISASTER = 5);
-
- _export('SEV_DISASTER', SEV_DISASTER);
-
- _export('SHOW_ALL_TRIGGERS', SHOW_ALL_TRIGGERS = [0, 1]);
-
- _export('SHOW_ALL_TRIGGERS', SHOW_ALL_TRIGGERS);
-
- _export('SHOW_ALL_EVENTS', SHOW_ALL_EVENTS = [0, 1]);
-
- _export('SHOW_ALL_EVENTS', SHOW_ALL_EVENTS);
-
- _export('SHOW_OK_EVENTS', SHOW_OK_EVENTS = 1);
-
- _export('SHOW_OK_EVENTS', SHOW_OK_EVENTS);
-
- _export('DATAPOINT_VALUE', DATAPOINT_VALUE = 0);
-
- _export('DATAPOINT_VALUE', DATAPOINT_VALUE);
-
- _export('DATAPOINT_TS', DATAPOINT_TS = 1);
-
- _export('DATAPOINT_TS', DATAPOINT_TS);
-
- _export('TRIGGER_SEVERITY', TRIGGER_SEVERITY = [{ val: 0, text: 'Not classified' }, { val: 1, text: 'Information' }, { val: 2, text: 'Warning' }, { val: 3, text: 'Average' }, { val: 4, text: 'High' }, { val: 5, text: 'Disaster' }]);
-
- _export('TRIGGER_SEVERITY', TRIGGER_SEVERITY);
- }
- };
-});
-//# sourceMappingURL=constants.js.map
diff --git a/dist/datasource-zabbix/constants.js.map b/dist/datasource-zabbix/constants.js.map
deleted file mode 100644
index 523a895..0000000
--- a/dist/datasource-zabbix/constants.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/constants.js"],"names":["MODE_METRICS","MODE_ITSERVICE","MODE_TEXT","MODE_ITEMID","MODE_TRIGGERS","SEV_NOT_CLASSIFIED","SEV_INFORMATION","SEV_WARNING","SEV_AVERAGE","SEV_HIGH","SEV_DISASTER","SHOW_ALL_TRIGGERS","SHOW_ALL_EVENTS","SHOW_OK_EVENTS","DATAPOINT_VALUE","DATAPOINT_TS","TRIGGER_SEVERITY","val","text"],"mappings":";;;;;;;;;8BACaA,Y,GAAe,C;;;;gCACfC,c,GAAiB,C;;;;2BACjBC,S,GAAY,C;;;;6BACZC,W,GAAc,C;;;;+BACdC,a,GAAgB,C;;;;oCAGhBC,kB,GAAqB,C;;;;iCACrBC,e,GAAkB,C;;;;6BAClBC,W,GAAc,C;;;;6BACdC,W,GAAc,C;;;;0BACdC,Q,GAAW,C;;;;8BACXC,Y,GAAe,C;;;;mCAEfC,iB,GAAoB,CAAC,CAAD,EAAI,CAAJ,C;;;;iCACpBC,e,GAAkB,CAAC,CAAD,EAAI,CAAJ,C;;;;gCAClBC,c,GAAiB,C;;;;iCAGjBC,e,GAAkB,C;;;;8BAClBC,Y,GAAe,C;;;;kCAEfC,gB,GAAmB,CAC9B,EAACC,KAAK,CAAN,EAASC,MAAM,gBAAf,EAD8B,EAE9B,EAACD,KAAK,CAAN,EAASC,MAAM,aAAf,EAF8B,EAG9B,EAACD,KAAK,CAAN,EAASC,MAAM,SAAf,EAH8B,EAI9B,EAACD,KAAK,CAAN,EAASC,MAAM,SAAf,EAJ8B,EAK9B,EAACD,KAAK,CAAN,EAASC,MAAM,MAAf,EAL8B,EAM9B,EAACD,KAAK,CAAN,EAASC,MAAM,UAAf,EAN8B,C","file":"constants.js","sourcesContent":["// Editor modes\nexport const MODE_METRICS = 0;\nexport const MODE_ITSERVICE = 1;\nexport const MODE_TEXT = 2;\nexport const MODE_ITEMID = 3;\nexport const MODE_TRIGGERS = 4;\n\n// Triggers severity\nexport const SEV_NOT_CLASSIFIED = 0;\nexport const SEV_INFORMATION = 1;\nexport const SEV_WARNING = 2;\nexport const SEV_AVERAGE = 3;\nexport const SEV_HIGH = 4;\nexport const SEV_DISASTER = 5;\n\nexport const SHOW_ALL_TRIGGERS = [0, 1];\nexport const SHOW_ALL_EVENTS = [0, 1];\nexport const SHOW_OK_EVENTS = 1;\n\n// Data point\nexport const DATAPOINT_VALUE = 0;\nexport const DATAPOINT_TS = 1;\n\nexport const TRIGGER_SEVERITY = [\n {val: 0, text: 'Not classified'},\n {val: 1, text: 'Information'},\n {val: 2, text: 'Warning'},\n {val: 3, text: 'Average'},\n {val: 4, text: 'High'},\n {val: 5, text: 'Disaster'}\n];\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/dataProcessor.js b/dist/datasource-zabbix/dataProcessor.js
deleted file mode 100644
index b8304de..0000000
--- a/dist/datasource-zabbix/dataProcessor.js
+++ /dev/null
@@ -1,194 +0,0 @@
-'use strict';
-
-System.register(['lodash', './utils', './timeseries'], function (_export, _context) {
- "use strict";
-
- var _, utils, ts, downsampleSeries, groupBy, groupBy_exported, sumSeries, delta, rate, scale, simpleMovingAverage, expMovingAverage, SUM, COUNT, AVERAGE, MIN, MAX, MEDIAN, PERCENTIL, metricFunctions, aggregationFunctions;
-
- 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 sortSeries(direction, timeseries) {
- return _.orderBy(timeseries, [function (ts) {
- return ts.target.toLowerCase();
- }], direction);
- }
-
- function setAlias(alias, timeseries) {
- timeseries.target = alias;
- return timeseries;
- }
-
- function replaceAlias(regexp, newAlias, timeseries) {
- var pattern = void 0;
- if (utils.isRegex(regexp)) {
- pattern = utils.buildRegex(regexp);
- } else {
- pattern = regexp;
- }
-
- var alias = timeseries.target.replace(pattern, newAlias);
- 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 groupByWrapper(interval, groupFunc, datapoints) {
- var groupByCallback = aggregationFunctions[groupFunc];
- return groupBy(datapoints, interval, groupByCallback);
- }
-
- function aggregateByWrapper(interval, aggregateFunc, datapoints) {
- // Flatten all points in frame and then just use groupBy()
- var flattenedPoints = _.flatten(datapoints, true);
- // groupBy_perf works with sorted series only
- var sortedPoints = ts.sortByTime(flattenedPoints);
- var groupByCallback = aggregationFunctions[aggregateFunc];
- return groupBy(sortedPoints, interval, groupByCallback);
- }
-
- function aggregateWrapper(groupByCallback, interval, datapoints) {
- var flattenedPoints = _.flatten(datapoints, true);
- return groupBy(flattenedPoints, interval, groupByCallback);
- }
-
- function percentil(interval, n, datapoints) {
- var flattenedPoints = _.flatten(datapoints, true);
- var groupByCallback = _.partial(PERCENTIL, n);
- return groupBy(flattenedPoints, interval, groupByCallback);
- }
-
- function timeShift(interval, range) {
- var shift = utils.parseTimeShiftInterval(interval) / 1000;
- return _.map(range, function (time) {
- return time - shift;
- });
- }
-
- function unShiftTimeSeries(interval, datapoints) {
- var unshift = utils.parseTimeShiftInterval(interval);
- return _.map(datapoints, function (dp) {
- return [dp[0], dp[1] + unshift];
- });
- }
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_utils) {
- utils = _utils;
- }, function (_timeseries) {
- ts = _timeseries.default;
- }],
- execute: function () {
- downsampleSeries = ts.downsample;
- groupBy = ts.groupBy_perf;
-
- groupBy_exported = function groupBy_exported(interval, groupFunc, datapoints) {
- return groupBy(datapoints, interval, groupFunc);
- };
-
- sumSeries = ts.sumSeries;
- delta = ts.delta;
- rate = ts.rate;
-
- scale = function scale(factor, datapoints) {
- return ts.scale_perf(datapoints, factor);
- };
-
- simpleMovingAverage = function simpleMovingAverage(n, datapoints) {
- return ts.simpleMovingAverage(datapoints, n);
- };
-
- expMovingAverage = function expMovingAverage(a, datapoints) {
- return ts.expMovingAverage(datapoints, a);
- };
-
- SUM = ts.SUM;
- COUNT = ts.COUNT;
- AVERAGE = ts.AVERAGE;
- MIN = ts.MIN;
- MAX = ts.MAX;
- MEDIAN = ts.MEDIAN;
- PERCENTIL = ts.PERCENTIL;
- metricFunctions = {
- groupBy: groupByWrapper,
- scale: scale,
- delta: delta,
- rate: rate,
- movingAverage: simpleMovingAverage,
- exponentialMovingAverage: expMovingAverage,
- aggregateBy: aggregateByWrapper,
- // Predefined aggs
- percentil: percentil,
- average: _.partial(aggregateWrapper, AVERAGE),
- min: _.partial(aggregateWrapper, MIN),
- max: _.partial(aggregateWrapper, MAX),
- median: _.partial(aggregateWrapper, MEDIAN),
- sum: _.partial(aggregateWrapper, SUM),
- count: _.partial(aggregateWrapper, COUNT),
- sumSeries: sumSeries,
- top: _.partial(limit, 'top'),
- bottom: _.partial(limit, 'bottom'),
- sortSeries: sortSeries,
- timeShift: timeShift,
- setAlias: setAlias,
- setAliasByRegex: setAliasByRegex,
- replaceAlias: replaceAlias
- };
- aggregationFunctions = {
- avg: AVERAGE,
- min: MIN,
- max: MAX,
- median: MEDIAN,
- sum: SUM,
- count: COUNT
- };
-
- _export('default', {
- downsampleSeries: downsampleSeries,
- groupBy: groupBy_exported,
- AVERAGE: AVERAGE,
- MIN: MIN,
- MAX: MAX,
- MEDIAN: MEDIAN,
- SUM: SUM,
- COUNT: COUNT,
- 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
deleted file mode 100644
index 4bed203..0000000
--- a/dist/datasource-zabbix/dataProcessor.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/dataProcessor.js"],"names":["limit","order","n","orderByFunc","timeseries","orderByCallback","aggregationFunctions","sortByIteratee","ts","values","_","map","datapoints","point","sortedTimeseries","sortBy","slice","sortSeries","direction","orderBy","target","toLowerCase","setAlias","alias","replaceAlias","regexp","newAlias","pattern","utils","isRegex","buildRegex","replace","setAliasByRegex","extractText","str","extractPattern","RegExp","extractedValue","exec","groupByWrapper","interval","groupFunc","groupByCallback","groupBy","aggregateByWrapper","aggregateFunc","flattenedPoints","flatten","sortedPoints","sortByTime","aggregateWrapper","percentil","partial","PERCENTIL","timeShift","range","shift","parseTimeShiftInterval","time","unShiftTimeSeries","unshift","dp","downsampleSeries","downsample","groupBy_perf","groupBy_exported","sumSeries","delta","rate","scale","factor","scale_perf","simpleMovingAverage","expMovingAverage","a","SUM","COUNT","AVERAGE","MIN","MAX","MEDIAN","metricFunctions","movingAverage","exponentialMovingAverage","aggregateBy","average","min","max","median","sum","count","top","bottom","avg"],"mappings":"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","file":"dataProcessor.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from './utils';\nimport ts from './timeseries';\n\nlet downsampleSeries = ts.downsample;\nlet groupBy = ts.groupBy_perf;\nlet groupBy_exported = (interval, groupFunc, datapoints) => groupBy(datapoints, interval, groupFunc);\nlet sumSeries = ts.sumSeries;\nlet delta = ts.delta;\nlet rate = ts.rate;\nlet scale = (factor, datapoints) => ts.scale_perf(datapoints, factor);\nlet simpleMovingAverage = (n, datapoints) => ts.simpleMovingAverage(datapoints, n);\nlet expMovingAverage = (a, datapoints) => ts.expMovingAverage(datapoints, a);\n\nlet SUM = ts.SUM;\nlet COUNT = ts.COUNT;\nlet AVERAGE = ts.AVERAGE;\nlet MIN = ts.MIN;\nlet MAX = ts.MAX;\nlet MEDIAN = ts.MEDIAN;\nlet PERCENTIL = ts.PERCENTIL;\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 sortSeries(direction, timeseries) {\n return _.orderBy(timeseries, [function (ts) {\n return ts.target.toLowerCase();\n }], direction);\n}\n\nfunction setAlias(alias, timeseries) {\n timeseries.target = alias;\n return timeseries;\n}\n\nfunction replaceAlias(regexp, newAlias, timeseries) {\n let pattern;\n if (utils.isRegex(regexp)) {\n pattern = utils.buildRegex(regexp);\n } else {\n pattern = regexp;\n }\n\n let alias = timeseries.target.replace(pattern, newAlias);\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 groupByWrapper(interval, groupFunc, datapoints) {\n var groupByCallback = aggregationFunctions[groupFunc];\n return groupBy(datapoints, interval, groupByCallback);\n}\n\nfunction aggregateByWrapper(interval, aggregateFunc, datapoints) {\n // Flatten all points in frame and then just use groupBy()\n const flattenedPoints = _.flatten(datapoints, true);\n // groupBy_perf works with sorted series only\n const sortedPoints = ts.sortByTime(flattenedPoints);\n let groupByCallback = aggregationFunctions[aggregateFunc];\n return groupBy(sortedPoints, interval, groupByCallback);\n}\n\nfunction aggregateWrapper(groupByCallback, interval, datapoints) {\n var flattenedPoints = _.flatten(datapoints, true);\n return groupBy(flattenedPoints, interval, groupByCallback);\n}\n\nfunction percentil(interval, n, datapoints) {\n var flattenedPoints = _.flatten(datapoints, true);\n var groupByCallback = _.partial(PERCENTIL, n);\n return groupBy(flattenedPoints, interval, groupByCallback);\n}\n\nfunction timeShift(interval, range) {\n let shift = utils.parseTimeShiftInterval(interval) / 1000;\n return _.map(range, time => {\n return time - shift;\n });\n}\n\nfunction unShiftTimeSeries(interval, datapoints) {\n let unshift = utils.parseTimeShiftInterval(interval);\n return _.map(datapoints, 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 rate: rate,\n movingAverage: simpleMovingAverage,\n exponentialMovingAverage: expMovingAverage,\n aggregateBy: aggregateByWrapper,\n // Predefined aggs\n percentil: percentil,\n average: _.partial(aggregateWrapper, AVERAGE),\n min: _.partial(aggregateWrapper, MIN),\n max: _.partial(aggregateWrapper, MAX),\n median: _.partial(aggregateWrapper, MEDIAN),\n sum: _.partial(aggregateWrapper, SUM),\n count: _.partial(aggregateWrapper, COUNT),\n sumSeries: sumSeries,\n top: _.partial(limit, 'top'),\n bottom: _.partial(limit, 'bottom'),\n sortSeries: sortSeries,\n timeShift: timeShift,\n setAlias: setAlias,\n setAliasByRegex: setAliasByRegex,\n replaceAlias: replaceAlias\n};\n\nlet aggregationFunctions = {\n avg: AVERAGE,\n min: MIN,\n max: MAX,\n median: MEDIAN,\n sum: SUM,\n count: COUNT\n};\n\nexport default {\n downsampleSeries: downsampleSeries,\n groupBy: groupBy_exported,\n AVERAGE: AVERAGE,\n MIN: MIN,\n MAX: MAX,\n MEDIAN: MEDIAN,\n SUM: SUM,\n COUNT: COUNT,\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
deleted file mode 100644
index c6bff14..0000000
--- a/dist/datasource-zabbix/datasource.js
+++ /dev/null
@@ -1,798 +0,0 @@
-'use strict';
-
-System.register(['lodash', 'app/core/utils/datemath', './utils', './migrations', './metricFunctions', './constants', './dataProcessor', './responseHandler', './zabbix/zabbix', './zabbix/connectors/zabbix_api/zabbixAPICore'], function (_export, _context) {
- "use strict";
-
- var _, dateMath, utils, migrations, metricFunctions, c, dataProcessor, responseHandler, Zabbix, ZabbixAPIError, _slicedToArray, _createClass, ZabbixDatasource;
-
- 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 getConsolidateBy(target) {
- var consolidateBy = void 0;
- var funcDef = _.find(target.functions, function (func) {
- return func.def.name === 'consolidateBy';
- });
- if (funcDef && funcDef.params && funcDef.params.length) {
- consolidateBy = funcDef.params[0];
- }
- return consolidateBy;
- }
-
- function downsampleSeries(timeseries_data, options) {
- var defaultAgg = dataProcessor.aggregationFunctions['avg'];
- var consolidateByFunc = dataProcessor.aggregationFunctions[options.consolidateBy] || defaultAgg;
- return _.map(timeseries_data, function (timeseries) {
- if (timeseries.datapoints.length > options.maxDataPoints) {
- timeseries.datapoints = dataProcessor.groupBy(options.interval, consolidateByFunc, 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('|') + ')';
- }
-
- _export('zabbixTemplateFormat', zabbixTemplateFormat);
-
- function zabbixItemIdsTemplateFormat(value) {
- if (typeof value === 'string') {
- return value;
- }
- return value.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 filterEnabledTargets(targets) {
- return _.filter(targets, function (target) {
- return !(target.hide || !target.group || !target.host || !target.item);
- });
- }
-
- function getTriggerThreshold(expression) {
- var thresholdPattern = /.*[<>=]{1,2}([\d\.]+)/;
- var finded_thresholds = expression.match(thresholdPattern);
- if (finded_thresholds && finded_thresholds.length >= 2) {
- var threshold = finded_thresholds[1];
- threshold = Number(threshold);
- return threshold;
- } else {
- return null;
- }
- }
-
- // Fix for backward compatibility with lodash 2.4
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_appCoreUtilsDatemath) {
- dateMath = _appCoreUtilsDatemath;
- }, function (_utils) {
- utils = _utils;
- }, function (_migrations) {
- migrations = _migrations;
- }, function (_metricFunctions) {
- metricFunctions = _metricFunctions;
- }, function (_constants) {
- c = _constants;
- }, function (_dataProcessor) {
- dataProcessor = _dataProcessor.default;
- }, function (_responseHandler) {
- responseHandler = _responseHandler.default;
- }, function (_zabbixZabbix) {
- Zabbix = _zabbixZabbix.Zabbix;
- }, function (_zabbixConnectorsZabbix_apiZabbixAPICore) {
- ZabbixAPIError = _zabbixConnectorsZabbix_apiZabbixAPICore.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('ZabbixDatasource', ZabbixDatasource = function () {
-
- /** @ngInject */
- function ZabbixDatasource(instanceSettings, templateSrv, backendSrv, datasourceSrv, zabbixAlertingSrv) {
- _classCallCheck(this, ZabbixDatasource);
-
- this.templateSrv = templateSrv;
- this.zabbixAlertingSrv = zabbixAlertingSrv;
-
- // Use custom format for template variables
- this.replaceTemplateVars = _.partial(replaceTemplateVars, this.templateSrv);
-
- // General data source settings
- this.name = instanceSettings.name;
- this.url = instanceSettings.url;
- this.basicAuth = instanceSettings.basicAuth;
- this.withCredentials = instanceSettings.withCredentials;
-
- var jsonData = migrations.migrateDSConfig(instanceSettings.jsonData);
-
- // Zabbix API credentials
- this.username = jsonData.username;
- this.password = jsonData.password;
-
- // Use trends instead history since specified time
- this.trends = jsonData.trends;
- this.trendsFrom = jsonData.trendsFrom || '7d';
- this.trendsRange = jsonData.trendsRange || '4d';
-
- // Set cache update interval
- var ttl = jsonData.cacheTTL || '1h';
- this.cacheTTL = utils.parseInterval(ttl);
-
- // Alerting options
- this.alertingEnabled = jsonData.alerting;
- this.addThresholds = jsonData.addThresholds;
- this.alertingMinSeverity = jsonData.alertingMinSeverity || c.SEV_WARNING;
-
- // Other options
- this.disableReadOnlyUsersAck = jsonData.disableReadOnlyUsersAck;
-
- // Direct DB Connection options
- this.enableDirectDBConnection = jsonData.dbConnectionEnable || false;
- this.dbConnectionDatasourceId = jsonData.dbConnectionDatasourceId;
- this.dbConnectionDatasourceName = jsonData.dbConnectionDatasourceName;
-
- var zabbixOptions = {
- url: this.url,
- username: this.username,
- password: this.password,
- basicAuth: this.basicAuth,
- withCredentials: this.withCredentials,
- cacheTTL: this.cacheTTL,
- enableDirectDBConnection: this.enableDirectDBConnection,
- dbConnectionDatasourceId: this.dbConnectionDatasourceId,
- dbConnectionDatasourceName: this.dbConnectionDatasourceName
- };
-
- this.zabbix = new Zabbix(zabbixOptions, backendSrv, datasourceSrv);
- }
-
- ////////////////////////
- // 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(ZabbixDatasource, [{
- key: 'query',
- value: function query(options) {
- var _this = this;
-
- // Get alerts for current panel
- if (this.alertingEnabled) {
- this.alertQuery(options).then(function (alert) {
- _this.zabbixAlertingSrv.setPanelAlertState(options.panelId, alert.state);
-
- _this.zabbixAlertingSrv.removeZabbixThreshold(options.panelId);
- if (_this.addThresholds) {
- _.forEach(alert.thresholds, function (threshold) {
- _this.zabbixAlertingSrv.setPanelThreshold(options.panelId, threshold);
- });
- }
- });
- }
-
- // Create request for each target
- var promises = _.map(options.targets, function (t) {
- // Don't request for hidden targets
- if (t.hide) {
- return [];
- }
-
- var timeFrom = Math.ceil(dateMath.parse(options.range.from) / 1000);
- var timeTo = Math.ceil(dateMath.parse(options.range.to) / 1000);
-
- // Prevent changes of original object
- var target = _.cloneDeep(t);
- _this.replaceTargetVariables(target, options);
-
- // Apply Time-related functions (timeShift(), etc)
- var timeFunctions = bindFunctionDefs(target.functions, 'Time');
- if (timeFunctions.length) {
- var _utils$sequence = utils.sequence(timeFunctions)([timeFrom, timeTo]),
- _utils$sequence2 = _slicedToArray(_utils$sequence, 2),
- time_from = _utils$sequence2[0],
- time_to = _utils$sequence2[1];
-
- timeFrom = time_from;
- timeTo = time_to;
- }
- var timeRange = [timeFrom, timeTo];
-
- var useTrends = _this.isUseTrends(timeRange);
-
- // Metrics or Text query mode
- if (!target.mode || target.mode === c.MODE_METRICS || target.mode === c.MODE_TEXT) {
- // Migrate old targets
- target = migrations.migrate(target);
-
- // Don't request undefined targets
- if (!target.group || !target.host || !target.item) {
- return [];
- }
-
- if (!target.mode || target.mode === c.MODE_METRICS) {
- return _this.queryNumericData(target, timeRange, useTrends, options);
- } else if (target.mode === c.MODE_TEXT) {
- return _this.queryTextData(target, timeRange);
- }
- } else if (target.mode === c.MODE_ITEMID) {
- // Item ID mode
- if (!target.itemids) {
- return [];
- }
- return _this.queryItemIdData(target, timeRange, useTrends, options);
- } else if (target.mode === c.MODE_ITSERVICE) {
- // IT services mode
- return _this.queryITServiceData(target, timeRange, options);
- } else if (target.mode === c.MODE_TRIGGERS) {
- // Triggers mode
- return _this.queryTriggersData(target, timeRange);
- } else {
- return [];
- }
- });
-
- // Data for panel (all targets)
- return Promise.all(_.flatten(promises)).then(_.flatten).then(function (data) {
- return { data: data };
- });
- }
- }, {
- key: 'queryNumericData',
- value: function queryNumericData(target, timeRange, useTrends, options) {
- var _this2 = this;
-
- var getItemOptions = {
- itemtype: 'num'
- };
- return this.zabbix.getItemsFromTarget(target, getItemOptions).then(function (items) {
- return _this2.queryNumericDataForItems(items, target, timeRange, useTrends, options);
- });
- }
- }, {
- key: 'queryNumericDataForItems',
- value: function queryNumericDataForItems(items, target, timeRange, useTrends, options) {
- var _this3 = this;
-
- var getHistoryPromise = void 0;
- options.valueType = this.getTrendValueType(target);
- options.consolidateBy = getConsolidateBy(target) || options.valueType;
-
- if (useTrends) {
- getHistoryPromise = this.zabbix.getTrends(items, timeRange, options);
- } else {
- getHistoryPromise = this.zabbix.getHistoryTS(items, timeRange, options);
- }
-
- return getHistoryPromise.then(function (timeseries) {
- return _this3.applyDataProcessingFunctions(timeseries, target);
- }).then(function (timeseries) {
- return downsampleSeries(timeseries, options);
- });
- }
- }, {
- 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 = _.cloneDeep(_.map(timeseries_data, function (timeseries) {
- timeseries.datapoints = utils.sequence(transformFunctions)(timeseries.datapoints);
- return timeseries;
- }));
-
- // Apply filter functions
- if (filterFunctions.length) {
- timeseries_data = utils.sequence(filterFunctions)(timeseries_data);
- }
-
- // Apply aggregations
- if (aggregationFunctions.length) {
- var dp = _.map(timeseries_data, 'datapoints');
- dp = utils.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, utils.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) {
- var shift = timeShiftFunc.params[0];
- _.forEach(timeseries_data, function (series) {
- series.datapoints = dataProcessor.unShiftTimeSeries(shift, series.datapoints);
- });
- }
- }
- }, {
- key: 'queryTextData',
- value: function queryTextData(target, timeRange) {
- var _this4 = this;
-
- var options = {
- itemtype: 'text'
- };
- return this.zabbix.getItemsFromTarget(target, options).then(function (items) {
- return _this4.zabbix.getHistoryText(items, timeRange, target);
- });
- }
- }, {
- key: 'queryItemIdData',
- value: function queryItemIdData(target, timeRange, useTrends, options) {
- var _this5 = this;
-
- var itemids = target.itemids;
- itemids = this.templateSrv.replace(itemids, options.scopedVars, zabbixItemIdsTemplateFormat);
- itemids = _.map(itemids.split(','), function (itemid) {
- return itemid.trim();
- });
-
- if (!itemids) {
- return [];
- }
-
- return this.zabbix.getItemsByIDs(itemids).then(function (items) {
- return _this5.queryNumericDataForItems(items, target, timeRange, useTrends, options);
- });
- }
- }, {
- key: 'queryITServiceData',
- value: function queryITServiceData(target, timeRange, options) {
- var _this6 = this;
-
- // Don't show undefined and hidden targets
- if (target.hide || !target.itservice && !target.itServiceFilter || !target.slaProperty) {
- return [];
- }
-
- var itServiceFilter = void 0;
- options.isOldVersion = target.itservice && !target.itServiceFilter;
-
- if (options.isOldVersion) {
- // Backward compatibility
- itServiceFilter = '/.*/';
- } else {
- itServiceFilter = this.replaceTemplateVars(target.itServiceFilter, options.scopedVars);
- }
-
- return this.zabbix.getITServices(itServiceFilter).then(function (itservices) {
- return _this6.zabbix.getSLA(itservices, timeRange, target, options);
- });
- }
- }, {
- key: 'queryTriggersData',
- value: function queryTriggersData(target, timeRange) {
- var _this7 = this;
-
- var _timeRange = _slicedToArray(timeRange, 2),
- timeFrom = _timeRange[0],
- timeTo = _timeRange[1];
-
- return this.zabbix.getHostsFromTarget(target).then(function (results) {
- var _results = _slicedToArray(results, 2),
- hosts = _results[0],
- apps = _results[1];
-
- if (hosts.length) {
- var hostids = _.map(hosts, 'hostid');
- var appids = _.map(apps, 'applicationid');
- var options = {
- minSeverity: target.triggers.minSeverity,
- acknowledged: target.triggers.acknowledged,
- count: target.triggers.count,
- timeFrom: timeFrom,
- timeTo: timeTo
- };
- return _this7.zabbix.getHostAlerts(hostids, appids, options).then(function (triggers) {
- return responseHandler.handleTriggersResponse(triggers, timeRange);
- });
- } else {
- return Promise.resolve([]);
- }
- });
- }
- }, {
- key: 'testDatasource',
- value: function testDatasource() {
- return this.zabbix.testDataSource().then(function (result) {
- var zabbixVersion = result.zabbixVersion,
- dbConnectorStatus = result.dbConnectorStatus;
-
- var message = 'Zabbix API version: ' + zabbixVersion;
- if (dbConnectorStatus) {
- message += ', DB connector type: ' + dbConnectorStatus.dsType;
- }
- return {
- status: "success",
- title: "Success",
- message: message
- };
- }).catch(function (error) {
- if (error instanceof ZabbixAPIError) {
- return {
- status: "error",
- title: error.message,
- message: error.message
- };
- } else if (error.data && error.data.message) {
- return {
- status: "error",
- title: "Connection failed",
- message: "Connection failed: " + error.data.message
- };
- } else if (typeof error === 'string') {
- return {
- status: "error",
- title: "Connection failed",
- message: "Connection failed: " + error
- };
- } else {
- console.log(error);
- return {
- status: "error",
- title: "Connection failed",
- message: "Could not connect to given url"
- };
- }
- });
- }
- }, {
- key: 'metricFindQuery',
- value: function metricFindQuery(query) {
- var _this8 = this;
-
- var result = void 0;
- var parts = [];
-
- // Split query. Query structure: group.host.app.item
- _.each(utils.splitTemplateQuery(query), function (part) {
- part = _this8.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 _.map(metrics, formatMetric);
- });
- }
- }, {
- key: 'annotationQuery',
- value: function annotationQuery(options) {
- var _this9 = 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 ? c.SHOW_ALL_EVENTS : c.SHOW_OK_EVENTS;
-
- // Show all triggers
- var triggersOptions = {
- showTriggers: c.SHOW_ALL_TRIGGERS,
- hideHostsInMaintenance: false
- };
-
- var getTriggers = this.zabbix.getTriggers(this.replaceTemplateVars(annotation.group, {}), this.replaceTemplateVars(annotation.host, {}), this.replaceTemplateVars(annotation.application, {}), triggersOptions);
-
- return getTriggers.then(function (triggers) {
-
- // Filter triggers by description
- var triggerName = _this9.replaceTemplateVars(annotation.trigger, {});
- if (utils.isRegex(triggerName)) {
- triggers = _.filter(triggers, function (trigger) {
- return utils.buildRegex(triggerName).test(trigger.description);
- });
- } else if (triggerName) {
- triggers = _.filter(triggers, function (trigger) {
- return trigger.description === triggerName;
- });
- }
-
- // Remove events below the chose severity
- triggers = _.filter(triggers, function (trigger) {
- return Number(trigger.priority) >= Number(annotation.minseverity);
- });
-
- var objectids = _.map(triggers, 'triggerid');
- return _this9.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: 'alertQuery',
- value: function alertQuery(options) {
- var _this10 = this;
-
- var enabled_targets = filterEnabledTargets(options.targets);
- var getPanelItems = _.map(enabled_targets, function (t) {
- var target = _.cloneDeep(t);
- _this10.replaceTargetVariables(target, options);
- return _this10.zabbix.getItemsFromTarget(target, { itemtype: 'num' });
- });
-
- return Promise.all(getPanelItems).then(function (results) {
- var items = _.flatten(results);
- var itemids = _.map(items, 'itemid');
-
- if (itemids.length === 0) {
- return [];
- }
- return _this10.zabbix.getAlerts(itemids);
- }).then(function (triggers) {
- triggers = _.filter(triggers, function (trigger) {
- return trigger.priority >= _this10.alertingMinSeverity;
- });
-
- if (!triggers || triggers.length === 0) {
- return {};
- }
-
- var state = 'ok';
-
- var firedTriggers = _.filter(triggers, { value: '1' });
- if (firedTriggers.length) {
- state = 'alerting';
- }
-
- var thresholds = _.map(triggers, function (trigger) {
- return getTriggerThreshold(trigger.expression);
- });
-
- return {
- panelId: options.panelId,
- state: state,
- thresholds: thresholds
- };
- });
- }
- }, {
- key: 'replaceTargetVariables',
- value: function replaceTargetVariables(target, options) {
- var _this11 = this;
-
- var parts = ['group', 'host', 'application', 'item'];
- _.forEach(parts, function (p) {
- if (target[p] && target[p].filter) {
- target[p].filter = _this11.replaceTemplateVars(target[p].filter, options.scopedVars);
- }
- });
- target.textFilter = this.replaceTemplateVars(target.textFilter, options.scopedVars);
-
- _.forEach(target.functions, function (func) {
- func.params = _.map(func.params, function (param) {
- if (typeof param === 'number') {
- return +_this11.templateSrv.replace(param.toString(), options.scopedVars);
- } else {
- return _this11.templateSrv.replace(param, options.scopedVars);
- }
- });
- });
- }
- }, {
- key: 'isUseTrends',
- value: function isUseTrends(timeRange) {
- var _timeRange2 = _slicedToArray(timeRange, 2),
- timeFrom = _timeRange2[0],
- timeTo = _timeRange2[1];
-
- var useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000);
- var useTrendsRange = Math.ceil(utils.parseInterval(this.trendsRange) / 1000);
- var useTrends = this.trends && (timeFrom <= useTrendsFrom || timeTo - timeFrom >= useTrendsRange);
- return useTrends;
- }
- }]);
-
- return ZabbixDatasource;
- }());
-
- _export('ZabbixDatasource', ZabbixDatasource);
-
- 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
deleted file mode 100644
index be6a8dd..0000000
--- a/dist/datasource-zabbix/datasource.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"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","getConsolidateBy","target","consolidateBy","funcDef","find","functions","length","downsampleSeries","timeseries_data","options","defaultAgg","consolidateByFunc","timeseries","datapoints","maxDataPoints","groupBy","interval","formatMetric","metricObj","text","expandable","zabbixTemplateFormat","value","utils","escapeRegex","escapedValues","join","zabbixItemIdsTemplateFormat","replaceTemplateVars","templateSrv","scopedVars","replacedTarget","replace","isRegex","filterEnabledTargets","targets","hide","group","host","item","getTriggerThreshold","expression","thresholdPattern","finded_thresholds","match","threshold","Number","dateMath","migrations","c","responseHandler","Zabbix","ZabbixAPIError","ZabbixDatasource","instanceSettings","backendSrv","datasourceSrv","zabbixAlertingSrv","partial","url","basicAuth","withCredentials","jsonData","migrateDSConfig","username","password","trends","trendsFrom","trendsRange","ttl","cacheTTL","parseInterval","alertingEnabled","alerting","addThresholds","alertingMinSeverity","SEV_WARNING","disableReadOnlyUsersAck","enableDirectDBConnection","dbConnectionEnable","dbConnectionDatasourceId","dbConnectionDatasourceName","zabbixOptions","zabbix","alertQuery","then","setPanelAlertState","panelId","alert","state","removeZabbixThreshold","forEach","thresholds","setPanelThreshold","promises","t","timeFrom","Math","ceil","parse","range","from","timeTo","to","cloneDeep","replaceTargetVariables","timeFunctions","sequence","time_from","time_to","timeRange","useTrends","isUseTrends","mode","MODE_METRICS","MODE_TEXT","migrate","queryNumericData","queryTextData","MODE_ITEMID","itemids","queryItemIdData","MODE_ITSERVICE","queryITServiceData","MODE_TRIGGERS","queryTriggersData","Promise","all","flatten","data","getItemOptions","itemtype","getItemsFromTarget","queryNumericDataForItems","items","getHistoryPromise","valueType","getTrendValueType","getTrends","getHistoryTS","applyDataProcessingFunctions","trendFunctions","trendValueFunc","transformFunctions","filterFunctions","aliasFunctions","dp","aggFuncNames","lastAgg","findLast","applyTimeShiftFunction","timeShiftFunc","shift","series","unShiftTimeSeries","getHistoryText","split","itemid","trim","getItemsByIDs","itservice","itServiceFilter","slaProperty","isOldVersion","getITServices","getSLA","itservices","getHostsFromTarget","results","hosts","apps","hostids","appids","minSeverity","triggers","acknowledged","count","getHostAlerts","handleTriggersResponse","resolve","testDataSource","zabbixVersion","result","dbConnectorStatus","message","dsType","status","title","catch","error","console","log","query","parts","each","splitTemplateQuery","part","push","template","zipObject","app","getItems","getApps","getHosts","getGroups","metrics","rangeRaw","annotation","showOkEvents","SHOW_ALL_EVENTS","SHOW_OK_EVENTS","triggersOptions","showTriggers","SHOW_ALL_TRIGGERS","hideHostsInMaintenance","getTriggers","application","triggerName","trigger","buildRegex","test","description","priority","minseverity","objectids","getEvents","indexedTriggers","keyBy","hideAcknowledged","events","event","acknowledges","tags","showHostname","formatted_acknowledges","formatAcknowledges","time","clock","objectid","enabled_targets","getPanelItems","getAlerts","firedTriggers","p","textFilter","param","toString","useTrendsFrom","useTrendsRange","contains","indexBy"],"mappings":"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","file":"datasource.js","sourcesContent":["import _ 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 * as c from './constants';\nimport dataProcessor from './dataProcessor';\nimport responseHandler from './responseHandler';\nimport { Zabbix } from './zabbix/zabbix';\nimport { ZabbixAPIError } from './zabbix/connectors/zabbix_api/zabbixAPICore';\n\nexport class ZabbixDatasource {\n\n /** @ngInject */\n constructor(instanceSettings, templateSrv, backendSrv, datasourceSrv, zabbixAlertingSrv) {\n this.templateSrv = templateSrv;\n this.zabbixAlertingSrv = zabbixAlertingSrv;\n\n // Use custom format for template variables\n this.replaceTemplateVars = _.partial(replaceTemplateVars, this.templateSrv);\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 const jsonData = migrations.migrateDSConfig(instanceSettings.jsonData);\n\n // Zabbix API credentials\n this.username = jsonData.username;\n this.password = jsonData.password;\n\n // Use trends instead history since specified time\n this.trends = jsonData.trends;\n this.trendsFrom = jsonData.trendsFrom || '7d';\n this.trendsRange = jsonData.trendsRange || '4d';\n\n // Set cache update interval\n var ttl = jsonData.cacheTTL || '1h';\n this.cacheTTL = utils.parseInterval(ttl);\n\n // Alerting options\n this.alertingEnabled = jsonData.alerting;\n this.addThresholds = jsonData.addThresholds;\n this.alertingMinSeverity = jsonData.alertingMinSeverity || c.SEV_WARNING;\n\n // Other options\n this.disableReadOnlyUsersAck = jsonData.disableReadOnlyUsersAck;\n\n // Direct DB Connection options\n this.enableDirectDBConnection = jsonData.dbConnectionEnable || false;\n this.dbConnectionDatasourceId = jsonData.dbConnectionDatasourceId;\n this.dbConnectionDatasourceName = jsonData.dbConnectionDatasourceName;\n\n let zabbixOptions = {\n url: this.url,\n username: this.username,\n password: this.password,\n basicAuth: this.basicAuth,\n withCredentials: this.withCredentials,\n cacheTTL: this.cacheTTL,\n enableDirectDBConnection: this.enableDirectDBConnection,\n dbConnectionDatasourceId: this.dbConnectionDatasourceId,\n dbConnectionDatasourceName: this.dbConnectionDatasourceName\n };\n\n this.zabbix = new Zabbix(zabbixOptions, backendSrv, datasourceSrv);\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 // Get alerts for current panel\n if (this.alertingEnabled) {\n this.alertQuery(options).then(alert => {\n this.zabbixAlertingSrv.setPanelAlertState(options.panelId, alert.state);\n\n this.zabbixAlertingSrv.removeZabbixThreshold(options.panelId);\n if (this.addThresholds) {\n _.forEach(alert.thresholds, threshold => {\n this.zabbixAlertingSrv.setPanelThreshold(options.panelId, threshold);\n });\n }\n });\n }\n\n // Create request for each target\n let promises = _.map(options.targets, t => {\n // Don't request for hidden targets\n if (t.hide) {\n return [];\n }\n\n let timeFrom = Math.ceil(dateMath.parse(options.range.from) / 1000);\n let timeTo = Math.ceil(dateMath.parse(options.range.to) / 1000);\n\n // Prevent changes of original object\n let target = _.cloneDeep(t);\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] = utils.sequence(timeFunctions)([timeFrom, timeTo]);\n timeFrom = time_from;\n timeTo = time_to;\n }\n let timeRange = [timeFrom, timeTo];\n\n let useTrends = this.isUseTrends(timeRange);\n\n // Metrics or Text query mode\n if (!target.mode || target.mode === c.MODE_METRICS || target.mode === c.MODE_TEXT) {\n // Migrate old targets\n target = migrations.migrate(target);\n\n // Don't request undefined targets\n if (!target.group || !target.host || !target.item) {\n return [];\n }\n\n if (!target.mode || target.mode === c.MODE_METRICS) {\n return this.queryNumericData(target, timeRange, useTrends, options);\n } else if (target.mode === c.MODE_TEXT) {\n return this.queryTextData(target, timeRange);\n }\n } else if (target.mode === c.MODE_ITEMID) {\n // Item ID mode\n if (!target.itemids) {\n return [];\n }\n return this.queryItemIdData(target, timeRange, useTrends, options);\n } else if (target.mode === c.MODE_ITSERVICE) {\n // IT services mode\n return this.queryITServiceData(target, timeRange, options);\n } else if (target.mode === c.MODE_TRIGGERS) {\n // Triggers mode\n return this.queryTriggersData(target, timeRange);\n } else {\n return [];\n }\n });\n\n // Data for panel (all targets)\n return Promise.all(_.flatten(promises))\n .then(_.flatten)\n .then(data => {\n return { data: data };\n });\n }\n\n /**\n * Query target data for Metrics mode\n */\n queryNumericData(target, timeRange, useTrends, options) {\n let getItemOptions = {\n itemtype: 'num'\n };\n return this.zabbix.getItemsFromTarget(target, getItemOptions)\n .then(items => this.queryNumericDataForItems(items, target, timeRange, useTrends, options));\n }\n\n /**\n * Query history for numeric items\n */\n queryNumericDataForItems(items, target, timeRange, useTrends, options) {\n let getHistoryPromise;\n options.valueType = this.getTrendValueType(target);\n options.consolidateBy = getConsolidateBy(target) || options.valueType;\n\n if (useTrends) {\n getHistoryPromise = this.zabbix.getTrends(items, timeRange, options);\n } else {\n getHistoryPromise = this.zabbix.getHistoryTS(items, timeRange, options);\n }\n\n return getHistoryPromise\n .then(timeseries => this.applyDataProcessingFunctions(timeseries, target))\n .then(timeseries => downsampleSeries(timeseries, options));\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 = _.cloneDeep(_.map(timeseries_data, timeseries => {\n timeseries.datapoints = utils.sequence(transformFunctions)(timeseries.datapoints);\n return timeseries;\n }));\n\n // Apply filter functions\n if (filterFunctions.length) {\n timeseries_data = utils.sequence(filterFunctions)(timeseries_data);\n }\n\n // Apply aggregations\n if (aggregationFunctions.length) {\n let dp = _.map(timeseries_data, 'datapoints');\n dp = utils.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, utils.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 /**\n * Query target data for Text mode\n */\n queryTextData(target, timeRange) {\n let options = {\n itemtype: 'text'\n };\n return this.zabbix.getItemsFromTarget(target, options)\n .then(items => {\n return this.zabbix.getHistoryText(items, timeRange, target);\n });\n }\n\n /**\n * Query target data for Item ID mode\n */\n queryItemIdData(target, timeRange, useTrends, options) {\n let itemids = target.itemids;\n itemids = this.templateSrv.replace(itemids, options.scopedVars, zabbixItemIdsTemplateFormat);\n itemids = _.map(itemids.split(','), itemid => itemid.trim());\n\n if (!itemids) {\n return [];\n }\n\n return this.zabbix.getItemsByIDs(itemids)\n .then(items => {\n return this.queryNumericDataForItems(items, target, timeRange, useTrends, options);\n });\n }\n\n /**\n * Query target data for IT Services mode\n */\n queryITServiceData(target, timeRange, options) {\n // Don't show undefined and hidden targets\n if (target.hide || (!target.itservice && !target.itServiceFilter) || !target.slaProperty) {\n return [];\n }\n\n let itServiceFilter;\n options.isOldVersion = target.itservice && !target.itServiceFilter;\n\n if (options.isOldVersion) {\n // Backward compatibility\n itServiceFilter = '/.*/';\n } else {\n itServiceFilter = this.replaceTemplateVars(target.itServiceFilter, options.scopedVars);\n }\n\n return this.zabbix.getITServices(itServiceFilter)\n .then(itservices => {\n return this.zabbix.getSLA(itservices, timeRange, target, options);\n });\n }\n\n queryTriggersData(target, timeRange) {\n let [timeFrom, timeTo] = timeRange;\n return this.zabbix.getHostsFromTarget(target)\n .then((results) => {\n let [hosts, apps] = results;\n if (hosts.length) {\n let hostids = _.map(hosts, 'hostid');\n let appids = _.map(apps, 'applicationid');\n let options = {\n minSeverity: target.triggers.minSeverity,\n acknowledged: target.triggers.acknowledged,\n count: target.triggers.count,\n timeFrom: timeFrom,\n timeTo: timeTo\n };\n return this.zabbix.getHostAlerts(hostids, appids, options)\n .then((triggers) => {\n return responseHandler.handleTriggersResponse(triggers, timeRange);\n });\n } else {\n return Promise.resolve([]);\n }\n });\n }\n\n /**\n * Test connection to Zabbix API and external history DB.\n */\n testDatasource() {\n return this.zabbix.testDataSource()\n .then(result => {\n const { zabbixVersion, dbConnectorStatus } = result;\n let message = `Zabbix API version: ${zabbixVersion}`;\n if (dbConnectorStatus) {\n message += `, DB connector type: ${dbConnectorStatus.dsType}`;\n }\n return {\n status: \"success\",\n title: \"Success\",\n message: message\n };\n })\n .catch(error => {\n if (error instanceof ZabbixAPIError) {\n return {\n status: \"error\",\n title: error.message,\n message: error.message\n };\n } else if (error.data && error.data.message) {\n return {\n status: \"error\",\n title: \"Connection failed\",\n message: \"Connection failed: \" + error.data.message\n };\n } else if (typeof(error) === 'string') {\n return {\n status: \"error\",\n title: \"Connection failed\",\n message: \"Connection failed: \" + error\n };\n } else {\n console.log(error);\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(utils.splitTemplateQuery(query), 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 _.map(metrics, 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 ? c.SHOW_ALL_EVENTS : c.SHOW_OK_EVENTS;\n\n // Show all triggers\n let triggersOptions = {\n showTriggers: c.SHOW_ALL_TRIGGERS,\n hideHostsInMaintenance: false\n };\n\n var getTriggers = this.zabbix.getTriggers(this.replaceTemplateVars(annotation.group, {}),\n this.replaceTemplateVars(annotation.host, {}),\n this.replaceTemplateVars(annotation.application, {}),\n triggersOptions);\n\n return getTriggers.then(triggers => {\n\n // Filter triggers by description\n let triggerName = this.replaceTemplateVars(annotation.trigger, {});\n if (utils.isRegex(triggerName)) {\n triggers = _.filter(triggers, trigger => {\n return utils.buildRegex(triggerName).test(trigger.description);\n });\n } else if (triggerName) {\n triggers = _.filter(triggers, trigger => {\n return trigger.description === triggerName;\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 /**\n * Get triggers and its details for panel's targets\n * Returns alert state ('ok' if no fired triggers, or 'alerting' if at least 1 trigger is fired)\n * or empty object if no related triggers are finded.\n */\n alertQuery(options) {\n let enabled_targets = filterEnabledTargets(options.targets);\n let getPanelItems = _.map(enabled_targets, t => {\n let target = _.cloneDeep(t);\n this.replaceTargetVariables(target, options);\n return this.zabbix.getItemsFromTarget(target, {itemtype: 'num'});\n });\n\n return Promise.all(getPanelItems)\n .then(results => {\n let items = _.flatten(results);\n let itemids = _.map(items, 'itemid');\n\n if (itemids.length === 0) {\n return [];\n }\n return this.zabbix.getAlerts(itemids);\n })\n .then(triggers => {\n triggers = _.filter(triggers, trigger => {\n return trigger.priority >= this.alertingMinSeverity;\n });\n\n if (!triggers || triggers.length === 0) {\n return {};\n }\n\n let state = 'ok';\n\n let firedTriggers = _.filter(triggers, {value: '1'});\n if (firedTriggers.length) {\n state = 'alerting';\n }\n\n let thresholds = _.map(triggers, trigger => {\n return getTriggerThreshold(trigger.expression);\n });\n\n return {\n panelId: options.panelId,\n state: state,\n thresholds: thresholds\n };\n });\n }\n\n // Replace template variables\n replaceTargetVariables(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n _.forEach(parts, 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 = _.map(func.params, 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 isUseTrends(timeRange) {\n let [timeFrom, timeTo] = timeRange;\n let useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000);\n let useTrendsRange = Math.ceil(utils.parseInterval(this.trendsRange) / 1000);\n let useTrends = this.trends && (\n (timeFrom <= useTrendsFrom) ||\n (timeTo - timeFrom >= useTrendsRange)\n );\n return useTrends;\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 getConsolidateBy(target) {\n let consolidateBy;\n let funcDef = _.find(target.functions, func => {\n return func.def.name === 'consolidateBy';\n });\n if (funcDef && funcDef.params && funcDef.params.length) {\n consolidateBy = funcDef.params[0];\n }\n return consolidateBy;\n}\n\nfunction downsampleSeries(timeseries_data, options) {\n let defaultAgg = dataProcessor.aggregationFunctions['avg'];\n let consolidateByFunc = dataProcessor.aggregationFunctions[options.consolidateBy] || defaultAgg;\n return _.map(timeseries_data, timeseries => {\n if (timeseries.datapoints.length > options.maxDataPoints) {\n timeseries.datapoints = dataProcessor\n .groupBy(options.interval, consolidateByFunc, 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 */\nexport function 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\nfunction zabbixItemIdsTemplateFormat(value) {\n if (typeof value === 'string') {\n return value;\n }\n return value.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 filterEnabledTargets(targets) {\n return _.filter(targets, target => {\n return !(target.hide || !target.group || !target.host || !target.item);\n });\n}\n\nfunction getTriggerThreshold(expression) {\n let thresholdPattern = /.*[<>=]{1,2}([\\d\\.]+)/;\n let finded_thresholds = expression.match(thresholdPattern);\n if (finded_thresholds && finded_thresholds.length >= 2) {\n let threshold = finded_thresholds[1];\n threshold = Number(threshold);\n return threshold;\n } else {\n return null;\n }\n}\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
deleted file mode 100644
index 237247d..0000000
--- a/dist/datasource-zabbix/img/zabbix_app_logo.svg
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-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
deleted file mode 100644
index b8f060a..0000000
--- a/dist/datasource-zabbix/metric-function-editor.directive.js
+++ /dev/null
@@ -1,255 +0,0 @@
-'use strict';
-
-System.register(['angular', 'lodash', 'jquery'], function (_export, _context) {
- "use strict";
-
- var angular, _, $, DOCS_FUNC_REF_URL;
-
- return {
- setters: [function (_angular) {
- angular = _angular.default;
- }, function (_lodash) {
- _ = _lodash.default;
- }, function (_jquery) {
- $ = _jquery.default;
- }],
- execute: function () {
- DOCS_FUNC_REF_URL = 'http://docs.grafana-zabbix.org/reference/functions/';
-
-
- angular.module('grafana.directives').directive('metricFunctionEditor',
-
- /** @ngInject */
- 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 = DOCS_FUNC_REF_URL;
- 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
deleted file mode 100644
index 1ef63d6..0000000
--- a/dist/datasource-zabbix/metric-function-editor.directive.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/metric-function-editor.directive.js"],"names":["angular","_","$","DOCS_FUNC_REF_URL","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\nconst DOCS_FUNC_REF_URL = 'http://docs.grafana-zabbix.org/reference/functions/';\n\nangular\n .module('grafana.directives')\n .directive('metricFunctionEditor',\n\n /** @ngInject */\n 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 = DOCS_FUNC_REF_URL;\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
deleted file mode 100644
index d6bd53f..0000000
--- a/dist/datasource-zabbix/metricFunctions.js
+++ /dev/null
@@ -1,380 +0,0 @@
-'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: [],
- Special: []
- };
- addFuncDef({
- name: 'groupBy',
- category: 'Transform',
- params: [{ name: 'interval', type: 'string' }, { name: 'function', type: 'string', options: ['avg', 'min', 'max', 'sum', 'count', '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: []
- });
-
- addFuncDef({
- name: 'rate',
- category: 'Transform',
- params: [],
- defaultParams: []
- });
-
- addFuncDef({
- name: 'movingAverage',
- category: 'Transform',
- params: [{ name: 'factor', type: 'int', options: [6, 10, 60, 100, 600] }],
- defaultParams: [10]
- });
-
- addFuncDef({
- name: 'exponentialMovingAverage',
- category: 'Transform',
- params: [{ name: 'smoothing', type: 'float', options: [6, 10, 60, 100, 600] }],
- defaultParams: [0.2]
- });
-
- // 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: 'percentil',
- category: 'Aggregate',
- params: [{ name: 'interval', type: 'string' }, { name: 'percent', type: 'float', options: [25, 50, 75, 90, 95, 99, 99.9] }],
- defaultParams: ['1m', 95]
- });
-
- 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: 'sum',
- category: 'Aggregate',
- params: [{ name: 'interval', type: 'string' }],
- defaultParams: ['1m']
- });
-
- addFuncDef({
- name: 'count',
- 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', 'sum', 'count', 'median'] }],
- defaultParams: ['1m', 'avg']
- });
-
- // Filter
-
- addFuncDef({
- name: 'top',
- category: 'Filter',
- params: [{ name: 'number', type: 'int' }, { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'sum', 'count', 'median'] }],
- defaultParams: [5, 'avg']
- });
-
- addFuncDef({
- name: 'bottom',
- category: 'Filter',
- params: [{ name: 'number', type: 'int' }, { name: 'value', type: 'string', options: ['avg', 'min', 'max', 'sum', 'count', 'median'] }],
- defaultParams: [5, 'avg']
- });
-
- addFuncDef({
- name: 'sortSeries',
- category: 'Filter',
- params: [{ name: 'direction', type: 'string', options: ['asc', 'desc'] }],
- defaultParams: ['asc']
- });
-
- // Trends
-
- addFuncDef({
- name: 'trendValue',
- category: 'Trends',
- params: [{ name: 'type', type: 'string', options: ['avg', 'min', 'max', 'sum', 'count'] }],
- 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: []
- });
-
- addFuncDef({
- name: 'replaceAlias',
- category: 'Alias',
- params: [{ name: 'regexp', type: 'string' }, { name: 'newAlias', type: 'string' }],
- defaultParams: ['/(.*)/', '$1']
- });
-
- // Special
- addFuncDef({
- name: 'consolidateBy',
- category: 'Special',
- params: [{ name: 'type', type: 'string', options: ['avg', 'min', 'max', 'sum', 'count'] }],
- defaultParams: ['avg']
- });
-
- _.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
deleted file mode 100644
index 0f1cf36..0000000
--- a/dist/datasource-zabbix/metricFunctions.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"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","Special","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 Special: []\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', 'sum', 'count', '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\naddFuncDef({\n name: 'rate',\n category: 'Transform',\n params: [],\n defaultParams: [],\n});\n\naddFuncDef({\n name: 'movingAverage',\n category: 'Transform',\n params: [\n { name: 'factor', type: 'int', options: [6, 10, 60, 100, 600] }\n ],\n defaultParams: [10],\n});\n\naddFuncDef({\n name: 'exponentialMovingAverage',\n category: 'Transform',\n params: [\n { name: 'smoothing', type: 'float', options: [6, 10, 60, 100, 600] }\n ],\n defaultParams: [0.2],\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: 'percentil',\n category: 'Aggregate',\n params: [\n { name: 'interval', type: 'string' },\n { name: 'percent', type: 'float', options: [25, 50, 75, 90, 95, 99, 99.9] }\n ],\n defaultParams: ['1m', 95],\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: 'sum',\n category: 'Aggregate',\n params: [\n { name: 'interval', type: 'string' }\n ],\n defaultParams: ['1m'],\n});\n\naddFuncDef({\n name: 'count',\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', 'sum', 'count', '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', 'sum', 'count', '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', 'sum', 'count', 'median'] }\n ],\n defaultParams: [5, 'avg'],\n});\n\naddFuncDef({\n name: 'sortSeries',\n category: 'Filter',\n params: [\n { name: 'direction', type: 'string', options: ['asc', 'desc'] }\n ],\n defaultParams: ['asc']\n});\n\n// Trends\n\naddFuncDef({\n name: 'trendValue',\n category: 'Trends',\n params: [\n { name: 'type', type: 'string', options: ['avg', 'min', 'max', 'sum', 'count'] }\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\naddFuncDef({\n name: 'replaceAlias',\n category: 'Alias',\n params: [\n { name: 'regexp', type: 'string' },\n { name: 'newAlias', type: 'string' }\n ],\n defaultParams: ['/(.*)/', '$1']\n});\n\n// Special\naddFuncDef({\n name: 'consolidateBy',\n category: 'Special',\n params: [\n { name: 'type', type: 'string', options: ['avg', 'min', 'max', 'sum', 'count'] }\n ],\n defaultParams: ['avg'],\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
deleted file mode 100644
index a360e8f..0000000
--- a/dist/datasource-zabbix/migrations.js
+++ /dev/null
@@ -1,84 +0,0 @@
-"use strict";
-
-System.register([], function (_export, _context) {
- "use strict";
-
- var DS_CONFIG_SCHEMA;
- /**
- * 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) {
- target.resultFormat = target.resultFormat || 'time_series';
- if (isGrafana2target(target)) {
- return migrateFrom2To3version(target);
- } else {
- return target;
- }
- }
-
- _export("migrate", migrate);
-
- function convertToRegex(str) {
- if (str) {
- return '/' + str + '/';
- } else {
- return '/.*/';
- }
- }function migrateDSConfig(jsonData) {
- if (!jsonData) {
- jsonData = {};
- }
- var oldVersion = jsonData.schema || 1;
- jsonData.schema = DS_CONFIG_SCHEMA;
-
- if (oldVersion === DS_CONFIG_SCHEMA) {
- return jsonData;
- }
-
- if (oldVersion < 2) {
- var dbConnectionOptions = jsonData.dbConnection || {};
- jsonData.dbConnectionEnable = dbConnectionOptions.enable || false;
- jsonData.dbConnectionDatasourceId = dbConnectionOptions.datasourceId || null;
- delete jsonData.dbConnection;
- }
-
- return jsonData;
- }
-
- _export("migrateDSConfig", migrateDSConfig);
-
- return {
- setters: [],
- execute: function () {
- _export("DS_CONFIG_SCHEMA", DS_CONFIG_SCHEMA = 2);
-
- _export("DS_CONFIG_SCHEMA", DS_CONFIG_SCHEMA);
- }
- };
-});
-//# sourceMappingURL=migrations.js.map
diff --git a/dist/datasource-zabbix/migrations.js.map b/dist/datasource-zabbix/migrations.js.map
deleted file mode 100644
index 56fbda5..0000000
--- a/dist/datasource-zabbix/migrations.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"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","resultFormat","str","migrateDSConfig","jsonData","oldVersion","schema","DS_CONFIG_SCHEMA","dbConnectionOptions","dbConnection","dbConnectionEnable","enable","dbConnectionDatasourceId","datasourceId"],"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;AAC9BA,WAAOe,YAAP,GAAsBf,OAAOe,YAAP,IAAuB,aAA7C;AACA,QAAIhB,iBAAiBC,MAAjB,CAAJ,EAA8B;AAC5B,aAAOS,uBAAuBT,MAAvB,CAAP;AACD,KAFD,MAEO;AACL,aAAOA,MAAP;AACD;AACF;;qBAPec,O;;AAShB,WAASF,cAAT,CAAwBI,GAAxB,EAA6B;AAC3B,QAAIA,GAAJ,EAAS;AACP,aAAO,MAAMA,GAAN,GAAY,GAAnB;AACD,KAFD,MAEO;AACL,aAAO,MAAP;AACD;AACF,GAGM,SAASC,eAAT,CAAyBC,QAAzB,EAAmC;AACxC,QAAI,CAACA,QAAL,EAAe;AACbA,iBAAW,EAAX;AACD;AACD,QAAMC,aAAaD,SAASE,MAAT,IAAmB,CAAtC;AACAF,aAASE,MAAT,GAAkBC,gBAAlB;;AAEA,QAAIF,eAAeE,gBAAnB,EAAqC;AACnC,aAAOH,QAAP;AACD;;AAED,QAAIC,aAAa,CAAjB,EAAoB;AAClB,UAAMG,sBAAsBJ,SAASK,YAAT,IAAyB,EAArD;AACAL,eAASM,kBAAT,GAA8BF,oBAAoBG,MAApB,IAA8B,KAA5D;AACAP,eAASQ,wBAAT,GAAoCJ,oBAAoBK,YAApB,IAAoC,IAAxE;AACA,aAAOT,SAASK,YAAhB;AACD;;AAED,WAAOL,QAAP;AACD;;6BAnBeD,e;;;;;kCADHI,gB,GAAmB,C","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 target.resultFormat = target.resultFormat || 'time_series';\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\nexport const DS_CONFIG_SCHEMA = 2;\nexport function migrateDSConfig(jsonData) {\n if (!jsonData) {\n jsonData = {};\n }\n const oldVersion = jsonData.schema || 1;\n jsonData.schema = DS_CONFIG_SCHEMA;\n\n if (oldVersion === DS_CONFIG_SCHEMA) {\n return jsonData;\n }\n\n if (oldVersion < 2) {\n const dbConnectionOptions = jsonData.dbConnection || {};\n jsonData.dbConnectionEnable = dbConnectionOptions.enable || false;\n jsonData.dbConnectionDatasourceId = dbConnectionOptions.datasourceId || null;\n delete jsonData.dbConnection;\n }\n\n return jsonData;\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/module.js b/dist/datasource-zabbix/module.js
deleted file mode 100644
index f789e0b..0000000
--- a/dist/datasource-zabbix/module.js
+++ /dev/null
@@ -1,58 +0,0 @@
-'use strict';
-
-System.register(['app/plugins/sdk', './datasource', './query.controller', './config.controller', './zabbixAlerting.service.js', './add-metric-function.directive', './metric-function-editor.directive'], function (_export, _context) {
- "use strict";
-
- var loadPluginCss, ZabbixDatasource, ZabbixQueryController, ZabbixDSConfigController, ZabbixQueryOptionsController, ZabbixAnnotationsQueryController;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- return {
- setters: [function (_appPluginsSdk) {
- loadPluginCss = _appPluginsSdk.loadPluginCss;
- }, function (_datasource) {
- ZabbixDatasource = _datasource.ZabbixDatasource;
- }, function (_queryController) {
- ZabbixQueryController = _queryController.ZabbixQueryController;
- }, function (_configController) {
- ZabbixDSConfigController = _configController.ZabbixDSConfigController;
- }, function (_zabbixAlertingServiceJs) {}, function (_addMetricFunctionDirective) {}, function (_metricFunctionEditorDirective) {}],
- execute: function () {
-
- loadPluginCss({
- dark: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.dark.css',
- light: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.light.css'
- });
-
- _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';
-
- ZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html';
- ZabbixDSConfigController.templateUrl = 'datasource-zabbix/partials/config.html';
-
- _export('Datasource', ZabbixDatasource);
-
- _export('ConfigCtrl', ZabbixDSConfigController);
-
- _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
deleted file mode 100644
index f31922e..0000000
--- a/dist/datasource-zabbix/module.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/module.js"],"names":["loadPluginCss","ZabbixDatasource","ZabbixQueryController","ZabbixDSConfigController","dark","light","ZabbixQueryOptionsController","templateUrl","ZabbixAnnotationsQueryController"],"mappings":";;;;;;;;;;;;;;;AAASA,mB,kBAAAA,a;;AACAC,sB,eAAAA,gB;;AACAC,2B,oBAAAA,qB;;AACAC,8B,qBAAAA,wB;;;;AAKTH,oBAAc;AACZI,cAAM,gEADM;AAEZC,eAAO;AAFK,OAAd;;kCAKMC,4B;;;;AACNA,mCAA6BC,WAA7B,GAA2C,+CAA3C;;sCAEMC,gC;;;;AACNA,uCAAiCD,WAAjC,GAA+C,oDAA/C;;AAEAL,4BAAsBK,WAAtB,GAAoC,8CAApC;AACAJ,+BAAyBI,WAAzB,GAAuC,wCAAvC;;4BAGEN,gB;;4BACAE,wB;;2BACAD,qB;;kCACAI,4B;;sCACAE,gC","file":"module.js","sourcesContent":["import { loadPluginCss } from 'app/plugins/sdk';\nimport { ZabbixDatasource } from './datasource';\nimport { ZabbixQueryController } from './query.controller';\nimport { ZabbixDSConfigController } from './config.controller';\nimport './zabbixAlerting.service.js';\nimport './add-metric-function.directive';\nimport './metric-function-editor.directive';\n\nloadPluginCss({\n dark: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.dark.css',\n light: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.light.css'\n});\n\nclass ZabbixQueryOptionsController {}\nZabbixQueryOptionsController.templateUrl = 'datasource-zabbix/partials/query.options.html';\n\nclass ZabbixAnnotationsQueryController {}\nZabbixAnnotationsQueryController.templateUrl = 'datasource-zabbix/partials/annotations.editor.html';\n\nZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html';\nZabbixDSConfigController.templateUrl = 'datasource-zabbix/partials/config.html';\n\nexport {\n ZabbixDatasource as Datasource,\n ZabbixDSConfigController 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
deleted file mode 100644
index 6e2e495..0000000
--- a/dist/datasource-zabbix/partials/annotations.editor.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
diff --git a/dist/datasource-zabbix/partials/config.html b/dist/datasource-zabbix/partials/config.html
deleted file mode 100644
index 9854251..0000000
--- a/dist/datasource-zabbix/partials/config.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Other
-
-
-
diff --git a/dist/datasource-zabbix/partials/query.editor.html b/dist/datasource-zabbix/partials/query.editor.html
deleted file mode 100644
index de976ae..0000000
--- a/dist/datasource-zabbix/partials/query.editor.html
+++ /dev/null
@@ -1,235 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dist/datasource-zabbix/partials/query.options.html b/dist/datasource-zabbix/partials/query.options.html
deleted file mode 100644
index 9224822..0000000
--- a/dist/datasource-zabbix/partials/query.options.html
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
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
deleted file mode 100644
index 3f3d884..0000000
--- a/dist/datasource-zabbix/plugin.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "type": "datasource",
- "name": "Zabbix",
- "id": "alexanderzobnin-zabbix-datasource",
-
- "includes": [
- {
- "type": "dashboard",
- "name": "Zabbix System Status",
- "path": "../dashboards/zabbix_system_status.json"
- },
- {
- "type": "dashboard",
- "name": "Zabbix Template Linux Server",
- "path": "../dashboards/template_linux_server.json"
- }
- ],
-
- "metrics": true,
- "annotations": true,
-
- "queryOptions": {
- "maxDataPoints": 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
deleted file mode 100644
index c596e7e..0000000
--- a/dist/datasource-zabbix/query.controller.js
+++ /dev/null
@@ -1,407 +0,0 @@
-'use strict';
-
-System.register(['app/plugins/sdk', 'lodash', './constants', './utils', './metricFunctions', './migrations'], function (_export, _context) {
- "use strict";
-
- var QueryCtrl, _, c, 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;
- }
-
- return {
- setters: [function (_appPluginsSdk) {
- QueryCtrl = _appPluginsSdk.QueryCtrl;
- }, function (_lodash) {
- _ = _lodash.default;
- }, function (_constants) {
- c = _constants;
- }, function (_utils) {
- utils = _utils;
- }, function (_metricFunctions) {
- metricFunctions = _metricFunctions;
- }, function (_migrations) {
- migrations = _migrations;
- }],
- 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 = [{ value: 'num', text: 'Metrics', mode: c.MODE_METRICS }, { value: 'text', text: 'Text', mode: c.MODE_TEXT }, { value: 'itservice', text: 'IT Services', mode: c.MODE_ITSERVICE }, { value: 'itemid', text: 'Item ID', mode: c.MODE_ITEMID }, { value: 'triggers', text: 'Triggers', mode: c.MODE_TRIGGERS }];
-
- _this.$scope.editorMode = {
- METRICS: c.MODE_METRICS,
- TEXT: c.MODE_TEXT,
- ITSERVICE: c.MODE_ITSERVICE,
- ITEMID: c.MODE_ITEMID,
- TRIGGERS: c.MODE_TRIGGERS
- };
-
- _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.ackFilters = [{ text: 'all triggers', value: 2 }, { text: 'unacknowledged', value: 0 }, { text: 'acknowledged', value: 1 }];
-
- _this.resultFormats = [{ text: 'Time series', value: 'time_series' }, { text: 'Table', value: 'table' }];
-
- _this.triggerSeverity = c.TRIGGER_SEVERITY;
-
- // Map functions for bs-typeahead
- _this.getGroupNames = _.bind(_this.getMetricNames, _this, 'groupList');
- _this.getHostNames = _.bind(_this.getMetricNames, _this, 'hostList', true);
- _this.getApplicationNames = _.bind(_this.getMetricNames, _this, 'appList');
- _this.getItemNames = _.bind(_this.getMetricNames, _this, 'itemList');
- _this.getITServices = _.bind(_this.getMetricNames, _this, 'itServiceList');
- _this.getVariables = _.bind(_this.getTemplateVariables, _this);
-
- // Update metric suggestion when template variable was changed
- $rootScope.$on('template-variable-value-updated', function () {
- 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': c.MODE_METRICS,
- 'group': { 'filter': "" },
- 'host': { 'filter': "" },
- 'application': { 'filter': "" },
- 'item': { 'filter': "" },
- 'functions': [],
- 'triggers': {
- 'count': true,
- 'minSeverity': 3,
- 'acknowledged': 2
- },
- 'options': {
- 'showDisabledItems': false,
- 'skipEmptyValues': false
- },
- 'table': {
- 'skipEmptyValues': 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 === c.MODE_METRICS || target.mode === c.MODE_TEXT || target.mode === c.MODE_TRIGGERS) {
- this.initFilters();
- } else if (target.mode === c.MODE_ITSERVICE) {
- _.defaults(target, { slaProperty: { name: "SLA", property: "sla" } });
- this.suggestITServices();
- }
- };
-
- _this.init();
- _this.queryOptionsText = _this.renderQueryOptionsText();
- return _this;
- }
-
- _createClass(ZabbixQueryController, [{
- key: 'initFilters',
- value: function initFilters() {
- var itemtype = _.find(this.editorModes, { 'mode': this.target.mode });
- itemtype = itemtype ? itemtype.value : null;
- return Promise.all([this.suggestGroups(), this.suggestHosts(), this.suggestApps(), this.suggestItems(itemtype)]);
- }
- }, {
- key: 'getMetricNames',
- value: function getMetricNames(metricList, addAllValue) {
- var metrics = _.uniq(_.map(this.metric[metricList], 'name'));
-
- // Add template variables
- _.forEach(this.templateSrv.variables, function (variable) {
- metrics.unshift('$' + variable.name);
- });
-
- if (addAllValue) {
- metrics.unshift('/.*/');
- }
-
- return metrics;
- }
- }, {
- key: 'getTemplateVariables',
- value: function getTemplateVariables() {
- return _.map(this.templateSrv.variables, function (variable) {
- return '$' + variable.name;
- });
- }
- }, {
- 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: 'suggestITServices',
- value: function suggestITServices() {
- var _this6 = this;
-
- return this.zabbix.getITService().then(function (itservices) {
- _this6.metric.itServiceList = itservices;
- return itservices;
- });
- }
- }, {
- key: 'isRegex',
- value: function isRegex(str) {
- 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 _this7 = this;
-
- return _.some(['group', 'host', 'application'], function (field) {
- if (_this7.target[field] && _this7.target[field].filter) {
- return utils.isTemplateVariable(_this7.target[field].filter, _this7.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",
- skipEmptyValues: "Skip empty values"
- };
- 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();
- this.targetChanged();
- }
- }]);
-
- return ZabbixQueryController;
- }(QueryCtrl));
-
- _export('ZabbixQueryController', ZabbixQueryController);
- }
- };
-});
-//# sourceMappingURL=query.controller.js.map
diff --git a/dist/datasource-zabbix/query.controller.js.map b/dist/datasource-zabbix/query.controller.js.map
deleted file mode 100644
index 6a4a863..0000000
--- a/dist/datasource-zabbix/query.controller.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/query.controller.js"],"names":["QueryCtrl","_","c","utils","metricFunctions","migrations","ZabbixQueryController","$scope","$injector","$rootScope","$sce","templateSrv","zabbix","datasource","replaceTemplateVars","editorModes","value","text","mode","MODE_METRICS","MODE_TEXT","MODE_ITSERVICE","MODE_ITEMID","MODE_TRIGGERS","editorMode","METRICS","TEXT","ITSERVICE","ITEMID","TRIGGERS","slaPropertyList","name","property","ackFilters","resultFormats","triggerSeverity","TRIGGER_SEVERITY","getGroupNames","bind","getMetricNames","getHostNames","getApplicationNames","getItemNames","getITServices","getVariables","getTemplateVariables","$on","onVariableChange","onTargetBlur","init","target","migrate","scopeDefaults","metric","oldTarget","cloneDeep","queryOptionsText","renderQueryOptionsText","defaults","targetDefaults","functions","map","func","createFuncInstance","def","params","initFilters","slaProperty","suggestITServices","itemtype","find","Promise","all","suggestGroups","suggestHosts","suggestApps","suggestItems","metricList","addAllValue","metrics","uniq","forEach","variables","unshift","variable","getAllGroups","then","groupList","groups","groupFilter","group","filter","getAllHosts","hostList","hosts","hostFilter","host","getAllApps","appList","apps","appFilter","application","options","showDisabledItems","getAllItems","itemList","items","getITService","itServiceList","itservices","str","isRegex","isTemplateVariable","newTarget","isEqual","targetChanged","isContainsVariables","some","field","parseTarget","panelCtrl","refresh","funcDef","newFunc","added","push","moveAliasFuncLast","length","without","aliasFunc","showQueryOptions","optionsMap","skipEmptyValues","forOwn","key","join"],"mappings":"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","file":"query.controller.js","sourcesContent":["import { QueryCtrl } from 'app/plugins/sdk';\nimport _ from 'lodash';\nimport * as c from './constants';\nimport * as utils from './utils';\nimport * as metricFunctions from './metricFunctions';\nimport * as migrations from './migrations';\n\nexport class ZabbixQueryController extends QueryCtrl {\n\n // ZabbixQueryCtrl constructor\n constructor($scope, $injector, $rootScope, $sce, templateSrv) {\n super($scope, $injector);\n this.zabbix = this.datasource.zabbix;\n\n // Use custom format for template variables\n this.replaceTemplateVars = this.datasource.replaceTemplateVars;\n this.templateSrv = templateSrv;\n\n this.editorModes = [\n {value: 'num', text: 'Metrics', mode: c.MODE_METRICS},\n {value: 'text', text: 'Text', mode: c.MODE_TEXT},\n {value: 'itservice', text: 'IT Services', mode: c.MODE_ITSERVICE},\n {value: 'itemid', text: 'Item ID', mode: c.MODE_ITEMID},\n {value: 'triggers', text: 'Triggers', mode: c.MODE_TRIGGERS}\n ];\n\n this.$scope.editorMode = {\n METRICS: c.MODE_METRICS,\n TEXT: c.MODE_TEXT,\n ITSERVICE: c.MODE_ITSERVICE,\n ITEMID: c.MODE_ITEMID,\n TRIGGERS: c.MODE_TRIGGERS\n };\n\n this.slaPropertyList = [\n {name: \"Status\", property: \"status\"},\n {name: \"SLA\", property: \"sla\"},\n {name: \"OK time\", property: \"okTime\"},\n {name: \"Problem time\", property: \"problemTime\"},\n {name: \"Down time\", property: \"downtimeTime\"}\n ];\n\n this.ackFilters = [\n {text: 'all triggers', value: 2},\n {text: 'unacknowledged', value: 0},\n {text: 'acknowledged', value: 1},\n ];\n\n this.resultFormats = [{ text: 'Time series', value: 'time_series' }, { text: 'Table', value: 'table' }];\n\n this.triggerSeverity = c.TRIGGER_SEVERITY;\n\n // Map functions for bs-typeahead\n this.getGroupNames = _.bind(this.getMetricNames, this, 'groupList');\n this.getHostNames = _.bind(this.getMetricNames, this, 'hostList', true);\n this.getApplicationNames = _.bind(this.getMetricNames, this, 'appList');\n this.getItemNames = _.bind(this.getMetricNames, this, 'itemList');\n this.getITServices = _.bind(this.getMetricNames, this, 'itServiceList');\n this.getVariables = _.bind(this.getTemplateVariables, this);\n\n // Update metric suggestion when template variable was changed\n $rootScope.$on('template-variable-value-updated', () => this.onVariableChange());\n\n // Update metrics when item selected from dropdown\n $scope.$on('typeahead-updated', () => {\n this.onTargetBlur();\n });\n\n this.init = function() {\n var target = this.target;\n\n // Migrate old targets\n target = migrations.migrate(target);\n\n var scopeDefaults = {\n metric: {},\n oldTarget: _.cloneDeep(this.target),\n queryOptionsText: this.renderQueryOptionsText()\n };\n _.defaults(this, scopeDefaults);\n\n // Load default values\n var targetDefaults = {\n 'mode': c.MODE_METRICS,\n 'group': { 'filter': \"\" },\n 'host': { 'filter': \"\" },\n 'application': { 'filter': \"\" },\n 'item': { 'filter': \"\" },\n 'functions': [],\n 'triggers': {\n 'count': true,\n 'minSeverity': 3,\n 'acknowledged': 2\n },\n 'options': {\n 'showDisabledItems': false,\n 'skipEmptyValues': false\n },\n 'table': {\n 'skipEmptyValues': false\n }\n };\n _.defaults(target, targetDefaults);\n\n // Create function instances from saved JSON\n target.functions = _.map(target.functions, function(func) {\n return metricFunctions.createFuncInstance(func.def, func.params);\n });\n\n if (target.mode === c.MODE_METRICS ||\n target.mode === c.MODE_TEXT ||\n target.mode === c.MODE_TRIGGERS) {\n this.initFilters();\n }\n else if (target.mode === c.MODE_ITSERVICE) {\n _.defaults(target, {slaProperty: {name: \"SLA\", property: \"sla\"}});\n this.suggestITServices();\n }\n };\n\n this.init();\n this.queryOptionsText = this.renderQueryOptionsText();\n }\n\n initFilters() {\n let itemtype = _.find(this.editorModes, {'mode': this.target.mode});\n itemtype = itemtype ? itemtype.value : null;\n return Promise.all([\n this.suggestGroups(),\n this.suggestHosts(),\n this.suggestApps(),\n this.suggestItems(itemtype)\n ]);\n }\n\n // Get list of metric names for bs-typeahead directive\n getMetricNames(metricList, addAllValue) {\n let metrics = _.uniq(_.map(this.metric[metricList], 'name'));\n\n // Add template variables\n _.forEach(this.templateSrv.variables, variable => {\n metrics.unshift('$' + variable.name);\n });\n\n if (addAllValue) {\n metrics.unshift('/.*/');\n }\n\n return metrics;\n }\n\n getTemplateVariables() {\n return _.map(this.templateSrv.variables, variable => {\n return '$' + variable.name;\n });\n }\n\n suggestGroups() {\n return this.zabbix.getAllGroups()\n .then(groups => {\n this.metric.groupList = groups;\n return groups;\n });\n }\n\n suggestHosts() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n return this.zabbix.getAllHosts(groupFilter)\n .then(hosts => {\n this.metric.hostList = hosts;\n return hosts;\n });\n }\n\n suggestApps() {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n return this.zabbix.getAllApps(groupFilter, hostFilter)\n .then(apps => {\n this.metric.appList = apps;\n return apps;\n });\n }\n\n suggestItems(itemtype = 'num') {\n let groupFilter = this.replaceTemplateVars(this.target.group.filter);\n let hostFilter = this.replaceTemplateVars(this.target.host.filter);\n let appFilter = this.replaceTemplateVars(this.target.application.filter);\n let options = {\n itemtype: itemtype,\n showDisabledItems: this.target.options.showDisabledItems\n };\n\n return this.zabbix\n .getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => {\n this.metric.itemList = items;\n return items;\n });\n }\n\n suggestITServices() {\n return this.zabbix.getITService()\n .then(itservices => {\n this.metric.itServiceList = itservices;\n return itservices;\n });\n }\n\n isRegex(str) {\n return utils.isRegex(str);\n }\n\n isVariable(str) {\n return utils.isTemplateVariable(str, this.templateSrv.variables);\n }\n\n onTargetBlur() {\n var newTarget = _.cloneDeep(this.target);\n if (!_.isEqual(this.oldTarget, this.target)) {\n this.oldTarget = newTarget;\n this.targetChanged();\n }\n }\n\n onVariableChange() {\n if (this.isContainsVariables()) {\n this.targetChanged();\n }\n }\n\n /**\n * Check query for template variables\n */\n isContainsVariables() {\n return _.some(['group', 'host', 'application'], field => {\n if (this.target[field] && this.target[field].filter) {\n return utils.isTemplateVariable(this.target[field].filter, this.templateSrv.variables);\n } else {\n return false;\n }\n });\n }\n\n parseTarget() {\n // Parse target\n }\n\n // Validate target and set validation info\n validateTarget() {\n // validate\n }\n\n targetChanged() {\n this.initFilters();\n this.parseTarget();\n this.panelCtrl.refresh();\n }\n\n addFunction(funcDef) {\n var newFunc = metricFunctions.createFuncInstance(funcDef);\n newFunc.added = true;\n this.target.functions.push(newFunc);\n\n this.moveAliasFuncLast();\n\n if (newFunc.params.length && newFunc.added ||\n newFunc.def.params.length === 0) {\n this.targetChanged();\n }\n }\n\n removeFunction(func) {\n this.target.functions = _.without(this.target.functions, func);\n this.targetChanged();\n }\n\n moveAliasFuncLast() {\n var aliasFunc = _.find(this.target.functions, function(func) {\n return func.def.name === 'alias' ||\n func.def.name === 'aliasByNode' ||\n func.def.name === 'aliasByMetric';\n });\n\n if (aliasFunc) {\n this.target.functions = _.without(this.target.functions, aliasFunc);\n this.target.functions.push(aliasFunc);\n }\n }\n\n toggleQueryOptions() {\n this.showQueryOptions = !this.showQueryOptions;\n }\n\n onQueryOptionChange() {\n this.queryOptionsText = this.renderQueryOptionsText();\n this.onTargetBlur();\n }\n\n renderQueryOptionsText() {\n var optionsMap = {\n showDisabledItems: \"Show disabled items\",\n skipEmptyValues: \"Skip empty values\"\n };\n var options = [];\n _.forOwn(this.target.options, (value, key) => {\n if (value) {\n if (value === true) {\n // Show only option name (if enabled) for boolean options\n options.push(optionsMap[key]);\n } else {\n // Show \"option = value\" for another options\n options.push(optionsMap[key] + \" = \" + value);\n }\n }\n });\n return \"Options: \" + options.join(', ');\n }\n\n /**\n * Switch query editor to specified mode.\n * Modes:\n * 0 - items\n * 1 - IT services\n * 2 - Text metrics\n */\n switchEditorMode(mode) {\n this.target.mode = mode;\n this.init();\n this.targetChanged();\n }\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/query_help.md b/dist/datasource-zabbix/query_help.md
deleted file mode 100644
index bb6c526..0000000
--- a/dist/datasource-zabbix/query_help.md
+++ /dev/null
@@ -1,31 +0,0 @@
-#### Max data points
-Override max data points, automatically set to graph width in pixels. 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 affect series legend values (min,max,total,current).
-
-#### Query Mode
-##### Merics
-Data from numeric items.
-
-##### Text
-Data from items with `Character`, `Text` or `Log` type.
-
-##### IT Services
-Time series representation of IT Services data
-###### 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
-
-##### Item ID
-Data from items with specified ID's (comma separated).
-This mode is suitable for rendering charts in grafana by passing itemids as url params.
-1. Create multivalue template variable with type _Custom_, for example, `itemids`.
-1. Create graph with desired parameters and use `$itemids` in _Item IDs_ filed.
-1. Save dashboard.
-1. Click to graph title and select _Share_ -> _Direct link rendered image_.
-1. Use this URL for graph png image and set `var-itemids` param to desired IDs. Note, for multiple IDs you should pass multiple params, like `&var-itemids=28276&var-itemids=28277`.
-
-##### Triggers
-Active triggers count for selected hosts or table data like Zabbix _System status_ panel on the main dashboard.
diff --git a/dist/datasource-zabbix/responseHandler.js b/dist/datasource-zabbix/responseHandler.js
deleted file mode 100644
index 82e61ba..0000000
--- a/dist/datasource-zabbix/responseHandler.js
+++ /dev/null
@@ -1,248 +0,0 @@
-'use strict';
-
-System.register(['lodash', 'app/core/table_model', './constants'], function (_export, _context) {
- "use strict";
-
- var _, TableModel, c;
-
- function _toConsumableArray(arr) {
- if (Array.isArray(arr)) {
- for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
- arr2[i] = arr[i];
- }
-
- return arr2;
- } else {
- return Array.from(arr);
- }
- }
-
- /**
- * Convert Zabbix API history.get response to Grafana format
- *
- * @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 sortTimeseries(timeseries) {
- // Sort trend data, issue #202
- _.forEach(timeseries, function (series) {
- series.datapoints = _.sortBy(series.datapoints, function (point) {
- return point[c.DATAPOINT_TS];
- });
- });
- return timeseries;
- }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 handleText(history, items, target) {
- var addHostName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
-
- var convertTextCallback = _.partial(convertText, target);
- return convertHistory(history, items, addHostName, convertTextCallback);
- }
-
- function handleHistoryAsTable(history, items, target) {
- var table = new TableModel();
- table.addColumn({ text: 'Host' });
- table.addColumn({ text: 'Item' });
- table.addColumn({ text: 'Key' });
- table.addColumn({ text: 'Last value' });
-
- var grouped_history = _.groupBy(history, 'itemid');
- _.each(items, function (item) {
- var itemHistory = grouped_history[item.itemid] || [];
- var lastPoint = _.last(itemHistory);
- var lastValue = lastPoint ? lastPoint.value : null;
-
- if (target.options.skipEmptyValues && (!lastValue || lastValue === '')) {
- return;
- }
-
- // Regex-based extractor
- if (target.textFilter) {
- lastValue = extractText(lastValue, target.textFilter, target.useCaptureGroups);
- }
-
- var host = _.first(item.hosts);
- host = host ? host.name : "";
-
- table.rows.push([host, item.name, item.key_, lastValue]);
- });
-
- return table;
- }function convertText(target, point) {
- var value = point.value;
-
- // Regex-based extractor
- if (target.textFilter) {
- value = extractText(point.value, target.textFilter, target.useCaptureGroups);
- }
-
- return [value, point.clock * 1000 + Math.round(point.ns / 1000000)];
- }
-
- 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;
- }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 handleTriggersResponse(triggers, timeRange) {
- if (_.isNumber(triggers)) {
- return {
- target: "triggers count",
- datapoints: [[triggers, timeRange[1] * 1000]]
- };
- } else {
- var stats = getTriggerStats(triggers);
- var table = new TableModel();
- table.addColumn({ text: 'Host group' });
- _.each(_.orderBy(c.TRIGGER_SEVERITY, ['val'], ['desc']), function (severity) {
- table.addColumn({ text: severity.text });
- });
- _.each(stats, function (severity_stats, group) {
- var row = _.map(_.orderBy(_.toPairs(severity_stats), function (s) {
- return s[0];
- }, ['desc']), function (s) {
- return s[1];
- });
- row = _.concat.apply(_, [[group]].concat(_toConsumableArray(row)));
- table.rows.push(row);
- });
- return table;
- }
- }function getTriggerStats(triggers) {
- var groups = _.uniq(_.flattenDeep(_.map(triggers, function (trigger) {
- return _.map(trigger.groups, 'name');
- })));
- // let severity = _.map(c.TRIGGER_SEVERITY, 'text');
- var stats = {};
- _.each(groups, function (group) {
- stats[group] = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 }; // severity:count
- });
- _.each(triggers, function (trigger) {
- _.each(trigger.groups, function (group) {
- stats[group.name][trigger.priority]++;
- });
- });
- return stats;
- }
-
- function convertHistoryPoint(point) {
- // Value must be a number for properly work
- return [Number(point.value), point.clock * 1000 + Math.round(point.ns / 1000000)];
- }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;
- case "sum":
- value = point.value_sum;
- break;
- case "count":
- value = point.value_count;
- break;
- default:
- value = point.value_avg;
- }
-
- return [Number(value), point.clock * 1000];
- }
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_appCoreTable_model) {
- TableModel = _appCoreTable_model.default;
- }, function (_constants) {
- c = _constants;
- }],
- execute: function () {
- _export('default', {
- handleHistory: handleHistory,
- convertHistory: convertHistory,
- handleTrends: handleTrends,
- handleText: handleText,
- handleHistoryAsTable: handleHistoryAsTable,
- handleSLAResponse: handleSLAResponse,
- handleTriggersResponse: handleTriggersResponse,
- sortTimeseries: sortTimeseries
- });
-
- // 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
deleted file mode 100644
index 5219276..0000000
--- a/dist/datasource-zabbix/responseHandler.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"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","sortTimeseries","timeseries","forEach","series","sortBy","point","c","DATAPOINT_TS","handleHistory","convertHistoryPoint","handleTrends","valueType","partial","convertTrendPoint","handleText","convertTextCallback","convertText","handleHistoryAsTable","table","TableModel","addColumn","text","each","itemHistory","lastPoint","last","lastValue","value","options","skipEmptyValues","textFilter","extractText","useCaptureGroups","first","rows","push","key_","clock","Math","round","ns","str","pattern","extractPattern","RegExp","extractedValue","exec","handleSLAResponse","itservice","slaProperty","slaObject","targetSLA","serviceid","sla","property","targetStatus","parseInt","status","to","from","handleTriggersResponse","triggers","timeRange","isNumber","stats","getTriggerStats","orderBy","TRIGGER_SEVERITY","severity","severity_stats","group","row","toPairs","s","concat","groups","uniq","flattenDeep","trigger","priority","Number","value_min","value_max","value_avg","value_sum","value_count"],"mappings":"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","file":"responseHandler.js","sourcesContent":["import _ from 'lodash';\nimport TableModel from 'app/core/table_model';\nimport * as c from './constants';\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 sortTimeseries(timeseries) {\n // Sort trend data, issue #202\n _.forEach(timeseries, series => {\n series.datapoints = _.sortBy(series.datapoints, point => point[c.DATAPOINT_TS]);\n });\n return timeseries;\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 handleText(history, items, target, addHostName = true) {\n let convertTextCallback = _.partial(convertText, target);\n return convertHistory(history, items, addHostName, convertTextCallback);\n}\n\nfunction handleHistoryAsTable(history, items, target) {\n let table = new TableModel();\n table.addColumn({text: 'Host'});\n table.addColumn({text: 'Item'});\n table.addColumn({text: 'Key'});\n table.addColumn({text: 'Last value'});\n\n let grouped_history = _.groupBy(history, 'itemid');\n _.each(items, (item) => {\n let itemHistory = grouped_history[item.itemid] || [];\n let lastPoint = _.last(itemHistory);\n let lastValue = lastPoint ? lastPoint.value : null;\n\n if(target.options.skipEmptyValues && (!lastValue || lastValue === '')) {\n return;\n }\n\n // Regex-based extractor\n if (target.textFilter) {\n lastValue = extractText(lastValue, target.textFilter, target.useCaptureGroups);\n }\n\n let host = _.first(item.hosts);\n host = host ? host.name : \"\";\n\n table.rows.push([\n host, item.name, item.key_, lastValue\n ]);\n });\n\n return table;\n}\n\nfunction convertText(target, 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 [\n value,\n point.clock * 1000 + Math.round(point.ns / 1000000)\n ];\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\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 handleTriggersResponse(triggers, timeRange) {\n if (_.isNumber(triggers)) {\n return {\n target: \"triggers count\",\n datapoints: [\n [triggers, timeRange[1] * 1000]\n ]\n };\n } else {\n let stats = getTriggerStats(triggers);\n let table = new TableModel();\n table.addColumn({text: 'Host group'});\n _.each(_.orderBy(c.TRIGGER_SEVERITY, ['val'], ['desc']), (severity) => {\n table.addColumn({text: severity.text});\n });\n _.each(stats, (severity_stats, group) => {\n let row = _.map(_.orderBy(_.toPairs(severity_stats), (s) => s[0], ['desc']), (s) => s[1]);\n row = _.concat([group], ...row);\n table.rows.push(row);\n });\n return table;\n }\n}\n\nfunction getTriggerStats(triggers) {\n let groups = _.uniq(_.flattenDeep(_.map(triggers, (trigger) => _.map(trigger.groups, 'name'))));\n // let severity = _.map(c.TRIGGER_SEVERITY, 'text');\n let stats = {};\n _.each(groups, (group) => {\n stats[group] = {0:0, 1:0, 2:0, 3:0, 4:0, 5:0}; // severity:count\n });\n _.each(triggers, (trigger) => {\n _.each(trigger.groups, (group) => {\n stats[group.name][trigger.priority]++;\n });\n });\n return stats;\n}\n\nfunction convertHistoryPoint(point) {\n // Value must be a number for properly work\n return [\n Number(point.value),\n point.clock * 1000 + Math.round(point.ns / 1000000)\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 case \"sum\":\n value = point.value_sum;\n break;\n case \"count\":\n value = point.value_count;\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,\n convertHistory,\n handleTrends,\n handleText,\n handleHistoryAsTable,\n handleSLAResponse,\n handleTriggersResponse,\n sortTimeseries\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/dataProcessor.spec.js b/dist/datasource-zabbix/specs/dataProcessor.spec.js
deleted file mode 100644
index 0b45998..0000000
--- a/dist/datasource-zabbix/specs/dataProcessor.spec.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-System.register(['lodash', '../dataProcessor'], function (_export, _context) {
- "use strict";
-
- var _, dataProcessor;
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_dataProcessor) {
- dataProcessor = _dataProcessor.default;
- }],
- execute: function () {
-
- describe('dataProcessor', function () {
- var ctx = {};
-
- beforeEach(function () {
- ctx.datapoints = [[[10, 1500000000000], [2, 1500000001000], [7, 1500000002000], [1, 1500000003000]], [[9, 1500000000000], [3, 1500000001000], [4, 1500000002000], [8, 1500000003000]]];
- });
-
- describe('When apply groupBy() functions', function () {
- it('should return series average', function () {
- var aggregateBy = dataProcessor.metricFunctions['groupBy'];
- var avg2s = _.map(ctx.datapoints, function (dp) {
- return aggregateBy('2s', 'avg', dp);
- });
- expect(avg2s).toEqual([[[6, 1500000000000], [4, 1500000002000]], [[6, 1500000000000], [6, 1500000002000]]]);
-
- var avg10s = _.map(ctx.datapoints, function (dp) {
- return aggregateBy('10s', 'avg', dp);
- });
- expect(avg10s).toEqual([[[5, 1500000000000]], [[6, 1500000000000]]]);
-
- // not aligned
- var dp = [[10, 1500000001000], [2, 1500000002000], [7, 1500000003000], [1, 1500000004000]];
- expect(aggregateBy('2s', 'avg', dp)).toEqual([[10, 1500000000000], [4.5, 1500000002000], [1, 1500000004000]]);
- });
- });
-
- describe('When apply aggregateBy() functions', function () {
- it('should return series average', function () {
- var aggregateBy = dataProcessor.metricFunctions['aggregateBy'];
- var avg1s = aggregateBy('1s', 'avg', ctx.datapoints);
- expect(avg1s).toEqual([[9.5, 1500000000000], [2.5, 1500000001000], [5.5, 1500000002000], [4.5, 1500000003000]]);
-
- var avg10s = aggregateBy('10s', 'avg', ctx.datapoints);
- expect(avg10s).toEqual([[5.5, 1500000000000]]);
- });
- });
- });
- }
- };
-});
-//# sourceMappingURL=dataProcessor.spec.js.map
diff --git a/dist/datasource-zabbix/specs/dataProcessor.spec.js.map b/dist/datasource-zabbix/specs/dataProcessor.spec.js.map
deleted file mode 100644
index a810a1e..0000000
--- a/dist/datasource-zabbix/specs/dataProcessor.spec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/specs/dataProcessor.spec.js"],"names":["_","dataProcessor","describe","ctx","beforeEach","datapoints","it","aggregateBy","metricFunctions","avg2s","map","dp","expect","toEqual","avg10s","avg1s"],"mappings":";;;;;;;;;AAAOA,O;;AACAC,mB;;;;AAEPC,eAAS,eAAT,EAA0B,YAAM;AAC9B,YAAIC,MAAM,EAAV;;AAEAC,mBAAW,YAAM;AACfD,cAAIE,UAAJ,GAAiB,CACf,CAAC,CAAC,EAAD,EAAK,aAAL,CAAD,EAAsB,CAAC,CAAD,EAAI,aAAJ,CAAtB,EAA0C,CAAC,CAAD,EAAI,aAAJ,CAA1C,EAA8D,CAAC,CAAD,EAAI,aAAJ,CAA9D,CADe,EAEf,CAAC,CAAC,CAAD,EAAI,aAAJ,CAAD,EAAsB,CAAC,CAAD,EAAI,aAAJ,CAAtB,EAA0C,CAAC,CAAD,EAAI,aAAJ,CAA1C,EAA8D,CAAC,CAAD,EAAI,aAAJ,CAA9D,CAFe,CAAjB;AAID,SALD;;AAOAH,iBAAS,gCAAT,EAA2C,YAAM;AAC/CI,aAAG,8BAAH,EAAmC,YAAM;AACvC,gBAAIC,cAAcN,cAAcO,eAAd,CAA8B,SAA9B,CAAlB;AACA,gBAAMC,QAAQT,EAAEU,GAAF,CAAMP,IAAIE,UAAV,EAAsB,UAACM,EAAD;AAAA,qBAAQJ,YAAY,IAAZ,EAAkB,KAAlB,EAAyBI,EAAzB,CAAR;AAAA,aAAtB,CAAd;AACAC,mBAAOH,KAAP,EAAcI,OAAd,CAAsB,CACpB,CAAC,CAAC,CAAD,EAAI,aAAJ,CAAD,EAAqB,CAAC,CAAD,EAAI,aAAJ,CAArB,CADoB,EAEpB,CAAC,CAAC,CAAD,EAAI,aAAJ,CAAD,EAAqB,CAAC,CAAD,EAAI,aAAJ,CAArB,CAFoB,CAAtB;;AAKA,gBAAMC,SAASd,EAAEU,GAAF,CAAMP,IAAIE,UAAV,EAAsB,UAACM,EAAD;AAAA,qBAAQJ,YAAY,KAAZ,EAAmB,KAAnB,EAA0BI,EAA1B,CAAR;AAAA,aAAtB,CAAf;AACAC,mBAAOE,MAAP,EAAeD,OAAf,CAAuB,CACrB,CAAC,CAAC,CAAD,EAAI,aAAJ,CAAD,CADqB,EAErB,CAAC,CAAC,CAAD,EAAI,aAAJ,CAAD,CAFqB,CAAvB;;AAKA;AACA,gBAAMF,KAAK,CAAC,CAAC,EAAD,EAAK,aAAL,CAAD,EAAsB,CAAC,CAAD,EAAI,aAAJ,CAAtB,EAA0C,CAAC,CAAD,EAAI,aAAJ,CAA1C,EAA8D,CAAC,CAAD,EAAI,aAAJ,CAA9D,CAAX;AACAC,mBAAOL,YAAY,IAAZ,EAAkB,KAAlB,EAAyBI,EAAzB,CAAP,EAAqCE,OAArC,CAA6C,CAC3C,CAAC,EAAD,EAAK,aAAL,CAD2C,EACtB,CAAC,GAAD,EAAM,aAAN,CADsB,EACA,CAAC,CAAD,EAAI,aAAJ,CADA,CAA7C;AAGD,WAnBD;AAoBD,SArBD;;AAuBAX,iBAAS,oCAAT,EAA+C,YAAM;AACnDI,aAAG,8BAAH,EAAmC,YAAM;AACvC,gBAAIC,cAAcN,cAAcO,eAAd,CAA8B,aAA9B,CAAlB;AACA,gBAAMO,QAAQR,YAAY,IAAZ,EAAkB,KAAlB,EAAyBJ,IAAIE,UAA7B,CAAd;AACAO,mBAAOG,KAAP,EAAcF,OAAd,CAAsB,CACpB,CAAC,GAAD,EAAM,aAAN,CADoB,EACE,CAAC,GAAD,EAAM,aAAN,CADF,EACwB,CAAC,GAAD,EAAM,aAAN,CADxB,EAC8C,CAAC,GAAD,EAAM,aAAN,CAD9C,CAAtB;;AAIA,gBAAMC,SAASP,YAAY,KAAZ,EAAmB,KAAnB,EAA0BJ,IAAIE,UAA9B,CAAf;AACAO,mBAAOE,MAAP,EAAeD,OAAf,CAAuB,CACrB,CAAC,GAAD,EAAM,aAAN,CADqB,CAAvB;AAGD,WAXD;AAYD,SAbD;AAcD,OA/CD","file":"dataProcessor.spec.js","sourcesContent":["import _ from 'lodash';\nimport dataProcessor from '../dataProcessor';\n\ndescribe('dataProcessor', () => {\n let ctx = {};\n\n beforeEach(() => {\n ctx.datapoints = [\n [[10, 1500000000000], [2, 1500000001000], [7, 1500000002000], [1, 1500000003000]],\n [[9, 1500000000000], [3, 1500000001000], [4, 1500000002000], [8, 1500000003000]],\n ];\n });\n\n describe('When apply groupBy() functions', () => {\n it('should return series average', () => {\n let aggregateBy = dataProcessor.metricFunctions['groupBy'];\n const avg2s = _.map(ctx.datapoints, (dp) => aggregateBy('2s', 'avg', dp));\n expect(avg2s).toEqual([\n [[6, 1500000000000], [4, 1500000002000]],\n [[6, 1500000000000], [6, 1500000002000]],\n ]);\n\n const avg10s = _.map(ctx.datapoints, (dp) => aggregateBy('10s', 'avg', dp));\n expect(avg10s).toEqual([\n [[5, 1500000000000]],\n [[6, 1500000000000]],\n ]);\n\n // not aligned\n const dp = [[10, 1500000001000], [2, 1500000002000], [7, 1500000003000], [1, 1500000004000]];\n expect(aggregateBy('2s', 'avg', dp)).toEqual([\n [10, 1500000000000], [4.5, 1500000002000], [1, 1500000004000]\n ]);\n });\n });\n\n describe('When apply aggregateBy() functions', () => {\n it('should return series average', () => {\n let aggregateBy = dataProcessor.metricFunctions['aggregateBy'];\n const avg1s = aggregateBy('1s', 'avg', ctx.datapoints);\n expect(avg1s).toEqual([\n [9.5, 1500000000000], [2.5, 1500000001000], [5.5, 1500000002000], [4.5, 1500000003000]\n ]);\n\n const avg10s = aggregateBy('10s', 'avg', ctx.datapoints);\n expect(avg10s).toEqual([\n [5.5, 1500000000000]\n ]);\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/datasource.spec.js b/dist/datasource-zabbix/specs/datasource.spec.js
deleted file mode 100644
index 2a7ea3a..0000000
--- a/dist/datasource-zabbix/specs/datasource.spec.js
+++ /dev/null
@@ -1,489 +0,0 @@
-"use strict";
-
-System.register(["lodash", "../module", "../datasource"], function (_export, _context) {
- "use strict";
-
- var _, Datasource, zabbixTemplateFormat;
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_module) {
- Datasource = _module.Datasource;
- }, function (_datasource) {
- zabbixTemplateFormat = _datasource.zabbixTemplateFormat;
- }],
- execute: function () {
-
- describe('ZabbixDatasource', function () {
- var ctx = {};
-
- beforeEach(function () {
- ctx.instanceSettings = {
- jsonData: {
- alerting: false,
- username: 'zabbix',
- password: 'zabbix',
- trends: true,
- trendsFrom: '14d',
- trendsRange: '7d',
- dbConnectionEnable: false
- }
- };
- ctx.templateSrv = {};
- ctx.backendSrv = {
- datasourceRequest: jest.fn()
- };
- ctx.datasourceSrv = {};
- ctx.zabbixAlertingSrv = {
- setPanelAlertState: jest.fn(),
- removeZabbixThreshold: jest.fn()
- };
-
- ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.backendSrv, ctx.datasourceSrv, ctx.zabbixAlertingSrv);
- });
-
- 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.length).toBe(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'];
-
- _.forEach(ranges, function (range) {
- ctx.options.range.from = range;
- ctx.ds.queryNumericData = jest.fn();
- ctx.ds.query(ctx.options);
-
- // Check that useTrends options is true
- var callArgs = ctx.ds.queryNumericData.mock.calls[0];
- expect(callArgs[2]).toBe(true);
- ctx.ds.queryNumericData.mockClear();
- });
-
- 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'];
-
- _.forEach(ranges, function (range) {
- ctx.options.range.from = range;
- ctx.ds.queryNumericData = jest.fn();
- ctx.ds.query(ctx.options);
-
- // Check that useTrends options is false
- var callArgs = ctx.ds.queryNumericData.mock.calls[0];
- expect(callArgs[2]).toBe(false);
- ctx.ds.queryNumericData.mockClear();
- });
- done();
- });
- });
-
- describe('When querying text data', function () {
- beforeEach(function () {
- ctx.ds.replaceTemplateVars = function (str) {
- return str;
- };
- ctx.ds.zabbix.zabbixAPI.getHistory = jest.fn().mockReturnValue(Promise.resolve([{ clock: "1500010200", itemid: "10100", ns: "900111000", value: "Linux first" }, { clock: "1500010300", itemid: "10100", ns: "900111000", value: "Linux 2nd" }, { clock: "1500010400", itemid: "10100", ns: "900111000", value: "Linux last" }]));
-
- ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([{
- hosts: [{ hostid: "10001", name: "Zabbix server" }],
- itemid: "10100",
- name: "System information",
- key_: "system.uname"
- }]));
-
- ctx.options = {
- range: { from: 'now-1h', to: 'now' },
- targets: [{
- group: { filter: "" },
- host: { filter: "Zabbix server" },
- application: { filter: "" },
- item: { filter: "System information" },
- textFilter: "",
- useCaptureGroups: true,
- mode: 2,
- resultFormat: "table",
- options: {
- skipEmptyValues: false
- }
- }]
- };
- });
-
- it('should return data in table format', function (done) {
- ctx.ds.query(ctx.options).then(function (result) {
- expect(result.data.length).toBe(1);
-
- var tableData = result.data[0];
- expect(tableData.columns).toEqual([{ text: 'Host' }, { text: 'Item' }, { text: 'Key' }, { text: 'Last value' }]);
- expect(tableData.rows).toEqual([['Zabbix server', 'System information', 'system.uname', 'Linux last']]);
- done();
- });
- });
-
- it('should extract value if regex with capture group is used', function (done) {
- ctx.options.targets[0].textFilter = "Linux (.*)";
- ctx.ds.query(ctx.options).then(function (result) {
- var tableData = result.data[0];
- expect(tableData.rows[0][3]).toEqual('last');
- done();
- });
- });
-
- it('should skip item when last value is empty', function () {
- ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([{
- hosts: [{ hostid: "10001", name: "Zabbix server" }],
- itemid: "10100", name: "System information", key_: "system.uname"
- }, {
- hosts: [{ hostid: "10002", name: "Server02" }],
- itemid: "90109", name: "System information", key_: "system.uname"
- }]));
-
- ctx.options.targets[0].options.skipEmptyValues = true;
- ctx.ds.zabbix.getHistory = jest.fn().mockReturnValue(Promise.resolve([{ clock: "1500010200", itemid: "10100", ns: "900111000", value: "Linux first" }, { clock: "1500010300", itemid: "10100", ns: "900111000", value: "Linux 2nd" }, { clock: "1500010400", itemid: "10100", ns: "900111000", value: "Linux last" }, { clock: "1500010200", itemid: "90109", ns: "900111000", value: "Non empty value" }, { clock: "1500010500", itemid: "90109", ns: "900111000", value: "" }]));
- return ctx.ds.query(ctx.options).then(function (result) {
- var tableData = result.data[0];
- expect(tableData.rows.length).toBe(1);
- expect(tableData.rows[0][3]).toEqual('Linux last');
- });
- });
- });
-
- describe('When replacing template variables', function () {
-
- function testReplacingVariable(target, varValue, expectedResult, done) {
- ctx.ds.templateSrv.replace = function () {
- return zabbixTemplateFormat(varValue);
- };
-
- var result = ctx.ds.replaceTemplateVars(target);
- expect(result).toBe(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: jest.fn().mockReturnValue(Promise.resolve([])),
- getHosts: jest.fn().mockReturnValue(Promise.resolve([])),
- getApps: jest.fn().mockReturnValue(Promise.resolve([])),
- getItems: jest.fn().mockReturnValue(Promise.resolve([]))
- };
- });
-
- it('should return groups', function (done) {
- var tests = [{ query: '*', expect: '/.*/' }, { query: '', expect: '' }, { query: 'Backend', expect: 'Backend' }, { query: 'Back*', expect: 'Back*' }];
-
- 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(ctx.ds.zabbix.getGroups).toBeCalledWith(test.expect);
- ctx.ds.zabbix.getGroups.mockClear();
- }
- } 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 _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(ctx.ds.zabbix.getHosts).toBeCalledWith(test.expect[0], test.expect[1]);
- ctx.ds.zabbix.getHosts.mockClear();
- }
- } 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 _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(ctx.ds.zabbix.getApps).toBeCalledWith(test.expect[0], test.expect[1], test.expect[2]);
- ctx.ds.zabbix.getApps.mockClear();
- }
- } 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 _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(ctx.ds.zabbix.getItems).toBeCalledWith(test.expect[0], test.expect[1], test.expect[2], test.expect[3]);
- ctx.ds.zabbix.getItems.mockClear();
- }
- } 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 = '*.*';
-
- ctx.ds.metricFindQuery(query);
- expect(ctx.ds.zabbix.getHosts).toBeCalledWith('/.*/', '/.*/');
- done();
- });
- });
-
- describe('When querying alerts', function () {
- var options = {};
-
- beforeEach(function () {
- ctx.ds.replaceTemplateVars = function (str) {
- return str;
- };
-
- var targetItems = [{
- "itemid": "1",
- "name": "test item",
- "key_": "test.key",
- "value_type": "3",
- "hostid": "10631",
- "status": "0",
- "state": "0",
- "hosts": [{ "hostid": "10631", "name": "Test host" }],
- "item": "Test item"
- }];
- ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve(targetItems));
-
- options = {
- "panelId": 10,
- "targets": [{
- "application": { "filter": "" },
- "group": { "filter": "Test group" },
- "host": { "filter": "Test host" },
- "item": { "filter": "Test item" }
- }]
- };
- });
-
- it('should return threshold when comparative symbol is `less than`', function () {
-
- var itemTriggers = [{
- "triggerid": "15383",
- "priority": "4",
- "expression": "{15915}<100"
- }];
-
- ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
-
- return ctx.ds.alertQuery(options).then(function (resp) {
- expect(resp.thresholds).toHaveLength(1);
- expect(resp.thresholds[0]).toBe(100);
- return resp;
- });
- });
-
- it('should return threshold when comparative symbol is `less than or equal`', function () {
-
- var itemTriggers = [{
- "triggerid": "15383",
- "priority": "4",
- "expression": "{15915}<=100"
- }];
-
- ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
-
- return ctx.ds.alertQuery(options).then(function (resp) {
- expect(resp.thresholds.length).toBe(1);
- expect(resp.thresholds[0]).toBe(100);
- return resp;
- });
- });
-
- it('should return threshold when comparative symbol is `greater than or equal`', function () {
-
- var itemTriggers = [{
- "triggerid": "15383",
- "priority": "4",
- "expression": "{15915}>=30"
- }];
-
- ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
-
- return ctx.ds.alertQuery(options).then(function (resp) {
- expect(resp.thresholds.length).toBe(1);
- expect(resp.thresholds[0]).toBe(30);
- return resp;
- });
- });
-
- it('should return threshold when comparative symbol is `equal`', function () {
-
- var itemTriggers = [{
- "triggerid": "15383",
- "priority": "4",
- "expression": "{15915}=50"
- }];
-
- ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));
-
- return ctx.ds.alertQuery(options).then(function (resp) {
- expect(resp.thresholds.length).toBe(1);
- expect(resp.thresholds[0]).toBe(50);
- return resp;
- });
- });
- });
- });
- }
- };
-});
-//# sourceMappingURL=datasource.spec.js.map
diff --git a/dist/datasource-zabbix/specs/datasource.spec.js.map b/dist/datasource-zabbix/specs/datasource.spec.js.map
deleted file mode 100644
index 9abf564..0000000
--- a/dist/datasource-zabbix/specs/datasource.spec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/specs/datasource.spec.js"],"names":["_","Datasource","zabbixTemplateFormat","describe","ctx","beforeEach","instanceSettings","jsonData","alerting","username","password","trends","trendsFrom","trendsRange","dbConnectionEnable","templateSrv","backendSrv","datasourceRequest","jest","fn","datasourceSrv","zabbixAlertingSrv","setPanelAlertState","removeZabbixThreshold","ds","replaceTemplateVars","str","options","targets","group","filter","host","application","item","range","from","to","it","done","query","then","expect","result","data","length","toBe","ranges","forEach","queryNumericData","callArgs","mock","calls","mockClear","zabbix","zabbixAPI","getHistory","mockReturnValue","Promise","resolve","clock","itemid","ns","value","getItemsFromTarget","hosts","hostid","name","key_","textFilter","useCaptureGroups","mode","resultFormat","skipEmptyValues","tableData","columns","toEqual","text","rows","testReplacingVariable","target","varValue","expectedResult","replace","template_var_value","expected_result","getGroups","getHosts","getApps","getItems","tests","test","metricFindQuery","toBeCalledWith","targetItems","itemTriggers","getAlerts","alertQuery","resp","thresholds","toHaveLength"],"mappings":"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","file":"datasource.spec.js","sourcesContent":["import _ from 'lodash';\nimport { Datasource } from \"../module\";\nimport { zabbixTemplateFormat } from \"../datasource\";\n\ndescribe('ZabbixDatasource', () => {\n let ctx = {};\n\n beforeEach(() => {\n ctx.instanceSettings = {\n jsonData: {\n alerting: false,\n username: 'zabbix',\n password: 'zabbix',\n trends: true,\n trendsFrom: '14d',\n trendsRange: '7d',\n dbConnectionEnable: false\n }\n };\n ctx.templateSrv = {};\n ctx.backendSrv = {\n datasourceRequest: jest.fn()\n };\n ctx.datasourceSrv = {};\n ctx.zabbixAlertingSrv = {\n setPanelAlertState: jest.fn(),\n removeZabbixThreshold: jest.fn(),\n };\n\n ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.backendSrv, ctx.datasourceSrv, ctx.zabbixAlertingSrv);\n });\n\n describe('When querying data', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n });\n\n ctx.options = {\n targets: [\n {\n group: {filter: \"\"},\n host: {filter: \"\"},\n application: {filter: \"\"},\n item: {filter: \"\"}\n }\n ],\n range: {from: 'now-7d', to: 'now'}\n };\n\n it('should return an empty array when no targets are set', (done) => {\n let options = {\n targets: [],\n range: {from: 'now-6h', to: 'now'}\n };\n ctx.ds.query(options).then(result => {\n expect(result.data.length).toBe(0);\n done();\n });\n });\n\n it('should use trends if it enabled and time more than trendsFrom', (done) => {\n let ranges = ['now-7d', 'now-168h', 'now-1M', 'now-1y'];\n\n _.forEach(ranges, range => {\n ctx.options.range.from = range;\n ctx.ds.queryNumericData = jest.fn();\n ctx.ds.query(ctx.options);\n\n // Check that useTrends options is true\n let callArgs = ctx.ds.queryNumericData.mock.calls[0];\n expect(callArgs[2]).toBe(true);\n ctx.ds.queryNumericData.mockClear();\n });\n\n done();\n });\n\n it('shouldnt use trends if it enabled and time less than trendsFrom', (done) => {\n let ranges = ['now-6d', 'now-167h', 'now-1h', 'now-30m', 'now-30s'];\n\n _.forEach(ranges, range => {\n ctx.options.range.from = range;\n ctx.ds.queryNumericData = jest.fn();\n ctx.ds.query(ctx.options);\n\n // Check that useTrends options is false\n let callArgs = ctx.ds.queryNumericData.mock.calls[0];\n expect(callArgs[2]).toBe(false);\n ctx.ds.queryNumericData.mockClear();\n });\n done();\n });\n\n });\n\n describe('When querying text data', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n ctx.ds.zabbix.zabbixAPI.getHistory = jest.fn().mockReturnValue(Promise.resolve([\n {clock: \"1500010200\", itemid:\"10100\", ns:\"900111000\", value:\"Linux first\"},\n {clock: \"1500010300\", itemid:\"10100\", ns:\"900111000\", value:\"Linux 2nd\"},\n {clock: \"1500010400\", itemid:\"10100\", ns:\"900111000\", value:\"Linux last\"}\n ]));\n\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([\n {\n hosts: [{hostid: \"10001\", name: \"Zabbix server\"}],\n itemid: \"10100\",\n name: \"System information\",\n key_: \"system.uname\",\n }\n ]));\n\n ctx.options = {\n range: {from: 'now-1h', to: 'now'},\n targets: [\n {\n group: {filter: \"\"},\n host: {filter: \"Zabbix server\"},\n application: {filter: \"\"},\n item: {filter: \"System information\"},\n textFilter: \"\",\n useCaptureGroups: true,\n mode: 2,\n resultFormat: \"table\",\n options: {\n skipEmptyValues: false\n }\n }\n ],\n };\n });\n\n it('should return data in table format', (done) => {\n ctx.ds.query(ctx.options).then(result => {\n expect(result.data.length).toBe(1);\n\n let tableData = result.data[0];\n expect(tableData.columns).toEqual([\n {text: 'Host'}, {text: 'Item'}, {text: 'Key'}, {text: 'Last value'}\n ]);\n expect(tableData.rows).toEqual([\n ['Zabbix server', 'System information', 'system.uname', 'Linux last']\n ]);\n done();\n });\n });\n\n it('should extract value if regex with capture group is used', (done) => {\n ctx.options.targets[0].textFilter = \"Linux (.*)\";\n ctx.ds.query(ctx.options).then(result => {\n let tableData = result.data[0];\n expect(tableData.rows[0][3]).toEqual('last');\n done();\n });\n });\n\n it('should skip item when last value is empty', () => {\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve([\n {\n hosts: [{hostid: \"10001\", name: \"Zabbix server\"}],\n itemid: \"10100\", name: \"System information\", key_: \"system.uname\"\n },\n {\n hosts: [{hostid: \"10002\", name: \"Server02\"}],\n itemid: \"90109\", name: \"System information\", key_: \"system.uname\"\n }\n ]));\n\n ctx.options.targets[0].options.skipEmptyValues = true;\n ctx.ds.zabbix.getHistory = jest.fn().mockReturnValue(Promise.resolve([\n {clock: \"1500010200\", itemid:\"10100\", ns:\"900111000\", value:\"Linux first\"},\n {clock: \"1500010300\", itemid:\"10100\", ns:\"900111000\", value:\"Linux 2nd\"},\n {clock: \"1500010400\", itemid:\"10100\", ns:\"900111000\", value:\"Linux last\"},\n {clock: \"1500010200\", itemid:\"90109\", ns:\"900111000\", value:\"Non empty value\"},\n {clock: \"1500010500\", itemid:\"90109\", ns:\"900111000\", value:\"\"}\n ]));\n return ctx.ds.query(ctx.options).then(result => {\n let tableData = result.data[0];\n expect(tableData.rows.length).toBe(1);\n expect(tableData.rows[0][3]).toEqual('Linux last');\n });\n });\n });\n\n describe('When replacing template variables', () => {\n\n function testReplacingVariable(target, varValue, expectedResult, done) {\n ctx.ds.templateSrv.replace = () => {\n return zabbixTemplateFormat(varValue);\n };\n\n let result = ctx.ds.replaceTemplateVars(target);\n expect(result).toBe(expectedResult);\n done();\n }\n\n /*\n * Alphanumerics, spaces, dots, dashes and underscores\n * are allowed in Zabbix host name.\n * 'AaBbCc0123 .-_'\n */\n it('should return properly escaped regex', (done) => {\n let target = '$host';\n let template_var_value = 'AaBbCc0123 .-_';\n let expected_result = '/^AaBbCc0123 \\\\.-_$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n\n /*\n * Single-value variable\n * $host = backend01\n * $host => /^backend01|backend01$/\n */\n it('should return proper regex for single value', (done) => {\n let target = '$host';\n let template_var_value = 'backend01';\n let expected_result = '/^backend01$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n\n /*\n * Multi-value variable\n * $host = [backend01, backend02]\n * $host => /^(backend01|backend01)$/\n */\n it('should return proper regex for multi-value', (done) => {\n let target = '$host';\n let template_var_value = ['backend01', 'backend02'];\n let expected_result = '/^(backend01|backend02)$/';\n\n testReplacingVariable(target, template_var_value, expected_result, done);\n });\n });\n\n describe('When invoking metricFindQuery()', () => {\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n ctx.ds.zabbix = {\n getGroups: jest.fn().mockReturnValue(Promise.resolve([])),\n getHosts: jest.fn().mockReturnValue(Promise.resolve([])),\n getApps: jest.fn().mockReturnValue(Promise.resolve([])),\n getItems: jest.fn().mockReturnValue(Promise.resolve([]))\n };\n });\n\n it('should return groups', (done) => {\n const tests = [\n {query: '*', expect: '/.*/'},\n {query: '', expect: ''},\n {query: 'Backend', expect: 'Backend'},\n {query: 'Back*', expect: 'Back*'},\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getGroups).toBeCalledWith(test.expect);\n ctx.ds.zabbix.getGroups.mockClear();\n }\n done();\n });\n\n it('should return hosts', (done) => {\n const tests = [\n {query: '*.*', expect: ['/.*/', '/.*/']},\n {query: '.', expect: ['', '']},\n {query: 'Backend.*', expect: ['Backend', '/.*/']},\n {query: 'Back*.', expect: ['Back*', '']},\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getHosts).toBeCalledWith(test.expect[0], test.expect[1]);\n ctx.ds.zabbix.getHosts.mockClear();\n }\n done();\n });\n\n it('should return applications', (done) => {\n const tests = [\n {query: '*.*.*', expect: ['/.*/', '/.*/', '/.*/']},\n {query: '.*.', expect: ['', '/.*/', '']},\n {query: 'Backend.backend01.*', expect: ['Backend', 'backend01', '/.*/']},\n {query: 'Back*.*.', expect: ['Back*', '/.*/', '']}\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getApps).toBeCalledWith(test.expect[0], test.expect[1], test.expect[2]);\n ctx.ds.zabbix.getApps.mockClear();\n }\n done();\n });\n\n it('should return items', (done) => {\n const tests = [\n {query: '*.*.*.*', expect: ['/.*/', '/.*/', '', '/.*/']},\n {query: '.*.*.*', expect: ['', '/.*/', '', '/.*/']},\n {query: 'Backend.backend01.*.*', expect: ['Backend', 'backend01', '', '/.*/']},\n {query: 'Back*.*.cpu.*', expect: ['Back*', '/.*/', 'cpu', '/.*/']}\n ];\n\n for (const test of tests) {\n ctx.ds.metricFindQuery(test.query);\n expect(ctx.ds.zabbix.getItems)\n .toBeCalledWith(test.expect[0], test.expect[1], test.expect[2], test.expect[3]);\n ctx.ds.zabbix.getItems.mockClear();\n }\n done();\n });\n\n it('should invoke method with proper arguments', (done) => {\n let query = '*.*';\n\n ctx.ds.metricFindQuery(query);\n expect(ctx.ds.zabbix.getHosts).toBeCalledWith('/.*/', '/.*/');\n done();\n });\n });\n\n describe('When querying alerts', () => {\n let options = {};\n\n beforeEach(() => {\n ctx.ds.replaceTemplateVars = (str) => str;\n\n let targetItems = [{\n \"itemid\": \"1\",\n \"name\": \"test item\",\n \"key_\": \"test.key\",\n \"value_type\": \"3\",\n \"hostid\": \"10631\",\n \"status\": \"0\",\n \"state\": \"0\",\n \"hosts\": [{\"hostid\": \"10631\", \"name\": \"Test host\"}],\n \"item\": \"Test item\"\n }];\n ctx.ds.zabbix.getItemsFromTarget = jest.fn().mockReturnValue(Promise.resolve(targetItems));\n\n options = {\n \"panelId\": 10,\n \"targets\": [{\n \"application\": {\"filter\": \"\"},\n \"group\": {\"filter\": \"Test group\"},\n \"host\": {\"filter\": \"Test host\"},\n \"item\": {\"filter\": \"Test item\"},\n }]\n };\n });\n\n it('should return threshold when comparative symbol is `less than`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}<100\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds).toHaveLength(1);\n expect(resp.thresholds[0]).toBe(100);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `less than or equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}<=100\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(100);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `greater than or equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}>=30\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(30);\n return resp;\n });\n });\n\n it('should return threshold when comparative symbol is `equal`', () => {\n\n let itemTriggers = [{\n \"triggerid\": \"15383\",\n \"priority\": \"4\",\n \"expression\": \"{15915}=50\",\n }];\n\n ctx.ds.zabbix.getAlerts = jest.fn().mockReturnValue(Promise.resolve(itemTriggers));\n\n return ctx.ds.alertQuery(options)\n .then(resp => {\n expect(resp.thresholds.length).toBe(1);\n expect(resp.thresholds[0]).toBe(50);\n return resp;\n });\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/dbConnector.test.js b/dist/datasource-zabbix/specs/dbConnector.test.js
deleted file mode 100644
index 308d141..0000000
--- a/dist/datasource-zabbix/specs/dbConnector.test.js
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-System.register(['../zabbix/connectors/dbConnector'], function (_export, _context) {
- "use strict";
-
- var DBConnector;
- return {
- setters: [function (_zabbixConnectorsDbConnector) {
- DBConnector = _zabbixConnectorsDbConnector.default;
- }],
- execute: function () {
-
- describe('DBConnector', function () {
- var ctx = {};
- var backendSrvMock = {};
- var datasourceSrvMock = {
- loadDatasource: jest.fn().mockResolvedValue({ id: 42, name: 'foo', meta: {} }),
- getAll: jest.fn().mockReturnValue([{ id: 42, name: 'foo' }])
- };
-
- describe('When init DB connector', function () {
- beforeEach(function () {
- ctx.options = {
- datasourceId: 42,
- datasourceName: undefined
- };
- });
-
- it('should load datasource by name by default', function () {
- ctx.options = {
- datasourceName: 'bar'
- };
- var dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);
- dbConnector.loadDBDataSource();
- expect(datasourceSrvMock.getAll).not.toHaveBeenCalled();
- expect(datasourceSrvMock.loadDatasource).toHaveBeenCalledWith('bar');
- });
-
- it('should load datasource by id if name not present', function () {
- var dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);
- dbConnector.loadDBDataSource();
- expect(datasourceSrvMock.getAll).toHaveBeenCalled();
- expect(datasourceSrvMock.loadDatasource).toHaveBeenCalledWith('foo');
- });
-
- it('should throw error if no name and id specified', function () {
- ctx.options = {};
- var dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);
- return expect(dbConnector.loadDBDataSource()).rejects.toBe('SQL Data Source name should be specified');
- });
-
- it('should throw error if datasource with given id is not found', function () {
- ctx.options.datasourceId = 45;
- var dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);
- return expect(dbConnector.loadDBDataSource()).rejects.toBe('SQL Data Source with ID 45 not found');
- });
- });
- });
- }
- };
-});
-//# sourceMappingURL=dbConnector.test.js.map
diff --git a/dist/datasource-zabbix/specs/dbConnector.test.js.map b/dist/datasource-zabbix/specs/dbConnector.test.js.map
deleted file mode 100644
index 3762d36..0000000
--- a/dist/datasource-zabbix/specs/dbConnector.test.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/specs/dbConnector.test.js"],"names":["DBConnector","describe","ctx","backendSrvMock","datasourceSrvMock","loadDatasource","jest","fn","mockResolvedValue","id","name","meta","getAll","mockReturnValue","beforeEach","options","datasourceId","datasourceName","undefined","it","dbConnector","loadDBDataSource","expect","not","toHaveBeenCalled","toHaveBeenCalledWith","rejects","toBe"],"mappings":";;;;;;;;AAAOA,iB;;;;AAEPC,eAAS,aAAT,EAAwB,YAAM;AAC5B,YAAIC,MAAM,EAAV;AACA,YAAMC,iBAAiB,EAAvB;AACA,YAAMC,oBAAoB;AACxBC,0BAAgBC,KAAKC,EAAL,GAAUC,iBAAV,CACd,EAAEC,IAAI,EAAN,EAAUC,MAAM,KAAhB,EAAuBC,MAAM,EAA7B,EADc,CADQ;AAIxBC,kBAAQN,KAAKC,EAAL,GAAUM,eAAV,CAA0B,CAChC,EAAEJ,IAAI,EAAN,EAAUC,MAAM,KAAhB,EADgC,CAA1B;AAJgB,SAA1B;;AASAT,iBAAS,wBAAT,EAAmC,YAAM;AACvCa,qBAAW,YAAM;AACfZ,gBAAIa,OAAJ,GAAc;AACZC,4BAAc,EADF;AAEZC,8BAAgBC;AAFJ,aAAd;AAID,WALD;;AAOAC,aAAG,2CAAH,EAAgD,YAAM;AACpDjB,gBAAIa,OAAJ,GAAc;AACZE,8BAAgB;AADJ,aAAd;AAGA,gBAAMG,cAAc,IAAIpB,WAAJ,CAAgBE,IAAIa,OAApB,EAA6BZ,cAA7B,EAA6CC,iBAA7C,CAApB;AACAgB,wBAAYC,gBAAZ;AACAC,mBAAOlB,kBAAkBQ,MAAzB,EAAiCW,GAAjC,CAAqCC,gBAArC;AACAF,mBAAOlB,kBAAkBC,cAAzB,EAAyCoB,oBAAzC,CAA8D,KAA9D;AACD,WARD;;AAUAN,aAAG,kDAAH,EAAuD,YAAM;AAC3D,gBAAMC,cAAc,IAAIpB,WAAJ,CAAgBE,IAAIa,OAApB,EAA6BZ,cAA7B,EAA6CC,iBAA7C,CAApB;AACAgB,wBAAYC,gBAAZ;AACAC,mBAAOlB,kBAAkBQ,MAAzB,EAAiCY,gBAAjC;AACAF,mBAAOlB,kBAAkBC,cAAzB,EAAyCoB,oBAAzC,CAA8D,KAA9D;AACD,WALD;;AAOAN,aAAG,gDAAH,EAAqD,YAAM;AACzDjB,gBAAIa,OAAJ,GAAc,EAAd;AACA,gBAAMK,cAAc,IAAIpB,WAAJ,CAAgBE,IAAIa,OAApB,EAA6BZ,cAA7B,EAA6CC,iBAA7C,CAApB;AACA,mBAAOkB,OAAOF,YAAYC,gBAAZ,EAAP,EAAuCK,OAAvC,CAA+CC,IAA/C,CAAoD,0CAApD,CAAP;AACD,WAJD;;AAMAR,aAAG,6DAAH,EAAkE,YAAM;AACtEjB,gBAAIa,OAAJ,CAAYC,YAAZ,GAA2B,EAA3B;AACA,gBAAMI,cAAc,IAAIpB,WAAJ,CAAgBE,IAAIa,OAApB,EAA6BZ,cAA7B,EAA6CC,iBAA7C,CAApB;AACA,mBAAOkB,OAAOF,YAAYC,gBAAZ,EAAP,EAAuCK,OAAvC,CAA+CC,IAA/C,CAAoD,sCAApD,CAAP;AACD,WAJD;AAKD,SApCD;AAqCD,OAjDD","file":"dbConnector.test.js","sourcesContent":["import DBConnector from '../zabbix/connectors/dbConnector';\n\ndescribe('DBConnector', () => {\n let ctx = {};\n const backendSrvMock = {};\n const datasourceSrvMock = {\n loadDatasource: jest.fn().mockResolvedValue(\n { id: 42, name: 'foo', meta: {} }\n ),\n getAll: jest.fn().mockReturnValue([\n { id: 42, name: 'foo' }\n ])\n };\n\n describe('When init DB connector', () => {\n beforeEach(() => {\n ctx.options = {\n datasourceId: 42,\n datasourceName: undefined\n };\n });\n\n it('should load datasource by name by default', () => {\n ctx.options = {\n datasourceName: 'bar'\n };\n const dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);\n dbConnector.loadDBDataSource();\n expect(datasourceSrvMock.getAll).not.toHaveBeenCalled();\n expect(datasourceSrvMock.loadDatasource).toHaveBeenCalledWith('bar');\n });\n\n it('should load datasource by id if name not present', () => {\n const dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);\n dbConnector.loadDBDataSource();\n expect(datasourceSrvMock.getAll).toHaveBeenCalled();\n expect(datasourceSrvMock.loadDatasource).toHaveBeenCalledWith('foo');\n });\n\n it('should throw error if no name and id specified', () => {\n ctx.options = {};\n const dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);\n return expect(dbConnector.loadDBDataSource()).rejects.toBe('SQL Data Source name should be specified');\n });\n\n it('should throw error if datasource with given id is not found', () => {\n ctx.options.datasourceId = 45;\n const dbConnector = new DBConnector(ctx.options, backendSrvMock, datasourceSrvMock);\n return expect(dbConnector.loadDBDataSource()).rejects.toBe('SQL Data Source with ID 45 not found');\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/migrations.test.js b/dist/datasource-zabbix/specs/migrations.test.js
deleted file mode 100644
index af40971..0000000
--- a/dist/datasource-zabbix/specs/migrations.test.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-System.register(['../migrations'], function (_export, _context) {
- "use strict";
-
- var migrateDSConfig, DS_CONFIG_SCHEMA;
- return {
- setters: [function (_migrations) {
- migrateDSConfig = _migrations.migrateDSConfig;
- DS_CONFIG_SCHEMA = _migrations.DS_CONFIG_SCHEMA;
- }],
- execute: function () {
-
- describe('Migrations', function () {
- var ctx = {};
-
- describe('When migrating datasource config', function () {
- beforeEach(function () {
- ctx.jsonData = {
- dbConnection: {
- enable: true,
- datasourceId: 1
- }
- };
- });
-
- it('should change direct DB connection setting to flat style', function () {
- migrateDSConfig(ctx.jsonData);
- expect(ctx.jsonData).toMatchObject({
- dbConnectionEnable: true,
- dbConnectionDatasourceId: 1,
- schema: DS_CONFIG_SCHEMA
- });
- });
-
- it('should not touch anything if schema is up to date', function () {
- ctx.jsonData = {
- futureOptionOne: 'foo',
- futureOptionTwo: 'bar',
- schema: DS_CONFIG_SCHEMA
- };
- migrateDSConfig(ctx.jsonData);
- expect(ctx.jsonData).toMatchObject({
- futureOptionOne: 'foo',
- futureOptionTwo: 'bar',
- schema: DS_CONFIG_SCHEMA
- });
- expect(ctx.jsonData.dbConnectionEnable).toBeUndefined();
- expect(ctx.jsonData.dbConnectionDatasourceId).toBeUndefined();
- });
- });
- });
- }
- };
-});
-//# sourceMappingURL=migrations.test.js.map
diff --git a/dist/datasource-zabbix/specs/migrations.test.js.map b/dist/datasource-zabbix/specs/migrations.test.js.map
deleted file mode 100644
index 2f9d144..0000000
--- a/dist/datasource-zabbix/specs/migrations.test.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/specs/migrations.test.js"],"names":["migrateDSConfig","DS_CONFIG_SCHEMA","describe","ctx","beforeEach","jsonData","dbConnection","enable","datasourceId","it","expect","toMatchObject","dbConnectionEnable","dbConnectionDatasourceId","schema","futureOptionOne","futureOptionTwo","toBeUndefined"],"mappings":";;;;;;;;AAASA,qB,eAAAA,e;AAAiBC,sB,eAAAA,gB;;;;AAE1BC,eAAS,YAAT,EAAuB,YAAM;AAC3B,YAAIC,MAAM,EAAV;;AAEAD,iBAAS,kCAAT,EAA6C,YAAM;AACjDE,qBAAW,YAAM;AACfD,gBAAIE,QAAJ,GAAe;AACbC,4BAAc;AACZC,wBAAQ,IADI;AAEZC,8BAAc;AAFF;AADD,aAAf;AAMD,WAPD;;AASAC,aAAG,0DAAH,EAA+D,YAAM;AACnET,4BAAgBG,IAAIE,QAApB;AACAK,mBAAOP,IAAIE,QAAX,EAAqBM,aAArB,CAAmC;AACjCC,kCAAoB,IADa;AAEjCC,wCAA0B,CAFO;AAGjCC,sBAAQb;AAHyB,aAAnC;AAKD,WAPD;;AASAQ,aAAG,mDAAH,EAAwD,YAAM;AAC5DN,gBAAIE,QAAJ,GAAe;AACbU,+BAAiB,KADJ;AAEbC,+BAAiB,KAFJ;AAGbF,sBAAQb;AAHK,aAAf;AAKAD,4BAAgBG,IAAIE,QAApB;AACAK,mBAAOP,IAAIE,QAAX,EAAqBM,aAArB,CAAmC;AACjCI,+BAAiB,KADgB;AAEjCC,+BAAiB,KAFgB;AAGjCF,sBAAQb;AAHyB,aAAnC;AAKAS,mBAAOP,IAAIE,QAAJ,CAAaO,kBAApB,EAAwCK,aAAxC;AACAP,mBAAOP,IAAIE,QAAJ,CAAaQ,wBAApB,EAA8CI,aAA9C;AACD,WAdD;AAeD,SAlCD;AAmCD,OAtCD","file":"migrations.test.js","sourcesContent":["import { migrateDSConfig, DS_CONFIG_SCHEMA } from '../migrations';\n\ndescribe('Migrations', () => {\n let ctx = {};\n\n describe('When migrating datasource config', () => {\n beforeEach(() => {\n ctx.jsonData = {\n dbConnection: {\n enable: true,\n datasourceId: 1\n }\n };\n });\n\n it('should change direct DB connection setting to flat style', () => {\n migrateDSConfig(ctx.jsonData);\n expect(ctx.jsonData).toMatchObject({\n dbConnectionEnable: true,\n dbConnectionDatasourceId: 1,\n schema: DS_CONFIG_SCHEMA\n });\n });\n\n it('should not touch anything if schema is up to date', () => {\n ctx.jsonData = {\n futureOptionOne: 'foo',\n futureOptionTwo: 'bar',\n schema: DS_CONFIG_SCHEMA\n };\n migrateDSConfig(ctx.jsonData);\n expect(ctx.jsonData).toMatchObject({\n futureOptionOne: 'foo',\n futureOptionTwo: 'bar',\n schema: DS_CONFIG_SCHEMA\n });\n expect(ctx.jsonData.dbConnectionEnable).toBeUndefined();\n expect(ctx.jsonData.dbConnectionDatasourceId).toBeUndefined();\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/timeseries.spec.js b/dist/datasource-zabbix/specs/timeseries.spec.js
deleted file mode 100644
index 3d472d1..0000000
--- a/dist/datasource-zabbix/specs/timeseries.spec.js
+++ /dev/null
@@ -1,41 +0,0 @@
-'use strict';
-
-System.register(['../timeseries'], function (_export, _context) {
- "use strict";
-
- var ts;
- return {
- setters: [function (_timeseries) {
- ts = _timeseries.default;
- }],
- execute: function () {
-
- describe('timeseries processing functions', function () {
-
- describe('sumSeries()', function () {
- it('should properly sum series', function (done) {
- var series = [[[0, 1], [1, 2], [1, 3]], [[2, 1], [3, 2], [4, 3]]];
-
- var expected = [[2, 1], [4, 2], [5, 3]];
-
- var result = ts.sumSeries(series);
- expect(result).toEqual(expected);
- done();
- });
-
- it('should properly sum series with nulls', function (done) {
- // issue #286
- var series = [[[1, 1], [1, 2], [1, 3]], [[3, 2], [4, 3]]];
-
- var expected = [[1, 1], [4, 2], [5, 3]];
-
- var result = ts.sumSeries(series);
- expect(result).toEqual(expected);
- done();
- });
- });
- }); // import _ from 'lodash';
- }
- };
-});
-//# sourceMappingURL=timeseries.spec.js.map
diff --git a/dist/datasource-zabbix/specs/timeseries.spec.js.map b/dist/datasource-zabbix/specs/timeseries.spec.js.map
deleted file mode 100644
index 117e0af..0000000
--- a/dist/datasource-zabbix/specs/timeseries.spec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/specs/timeseries.spec.js"],"names":["ts","describe","it","done","series","expected","result","sumSeries","expect","toEqual"],"mappings":";;;;;;;;AACOA,Q;;;;AAEPC,eAAS,iCAAT,EAA4C,YAAM;;AAEhDA,iBAAS,aAAT,EAAwB,YAAM;AAC5BC,aAAG,4BAAH,EAAiC,UAACC,IAAD,EAAU;AACzC,gBAAIC,SAAS,CACX,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,EAAiB,CAAC,CAAD,EAAI,CAAJ,CAAjB,CADW,EAEX,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,EAAiB,CAAC,CAAD,EAAI,CAAJ,CAAjB,CAFW,CAAb;;AAKA,gBAAIC,WAAW,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,EAAiB,CAAC,CAAD,EAAI,CAAJ,CAAjB,CAAf;;AAEA,gBAAIC,SAASN,GAAGO,SAAH,CAAaH,MAAb,CAAb;AACAI,mBAAOF,MAAP,EAAeG,OAAf,CAAuBJ,QAAvB;AACAF;AACD,WAXD;;AAaAD,aAAG,uCAAH,EAA4C,UAACC,IAAD,EAAU;AACpD;AACA,gBAAIC,SAAS,CACX,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,EAAiB,CAAC,CAAD,EAAI,CAAJ,CAAjB,CADW,EAEX,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,CAFW,CAAb;;AAKA,gBAAIC,WAAW,CAAC,CAAC,CAAD,EAAI,CAAJ,CAAD,EAAS,CAAC,CAAD,EAAI,CAAJ,CAAT,EAAiB,CAAC,CAAD,EAAI,CAAJ,CAAjB,CAAf;;AAEA,gBAAIC,SAASN,GAAGO,SAAH,CAAaH,MAAb,CAAb;AACAI,mBAAOF,MAAP,EAAeG,OAAf,CAAuBJ,QAAvB;AACAF;AACD,WAZD;AAaD,SA3BD;AA4BD,OA9BD,E,CAHA","file":"timeseries.spec.js","sourcesContent":["// import _ from 'lodash';\nimport ts from '../timeseries';\n\ndescribe('timeseries processing functions', () => {\n\n describe('sumSeries()', () => {\n it('should properly sum series', (done) => {\n let series = [\n [[0, 1], [1, 2], [1, 3]],\n [[2, 1], [3, 2], [4, 3]]\n ];\n\n let expected = [[2, 1], [4, 2], [5, 3]];\n\n let result = ts.sumSeries(series);\n expect(result).toEqual(expected);\n done();\n });\n\n it('should properly sum series with nulls', (done) => {\n // issue #286\n let series = [\n [[1, 1], [1, 2], [1, 3]],\n [[3, 2], [4, 3]]\n ];\n\n let expected = [[1, 1], [4, 2], [5, 3]];\n\n let result = ts.sumSeries(series);\n expect(result).toEqual(expected);\n done();\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/specs/utils.spec.js b/dist/datasource-zabbix/specs/utils.spec.js
deleted file mode 100644
index f45371c..0000000
--- a/dist/datasource-zabbix/specs/utils.spec.js
+++ /dev/null
@@ -1,136 +0,0 @@
-'use strict';
-
-System.register(['lodash', '../utils'], function (_export, _context) {
- "use strict";
-
- var _, utils;
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_utils) {
- utils = _utils;
- }],
- execute: function () {
-
- describe('Utils', function () {
-
- describe('expandItemName()', function () {
-
- it('should properly expand unquoted params', function (done) {
- var test_cases = [{
- name: 'CPU $2 time',
- key: 'system.cpu.util[,user,avg1]',
- expected: "CPU user time"
- }, {
- name: 'CPU $2 time - $3',
- key: 'system.cpu.util[,system,avg1]',
- expected: "CPU system time - avg1"
- }, {
- name: 'CPU - $1 - $2 - $3',
- key: 'system.cpu.util[,system,avg1]',
- expected: "CPU - - system - avg1"
- }];
-
- _.each(test_cases, function (test_case) {
- var expandedName = utils.expandItemName(test_case.name, test_case.key);
- expect(expandedName).toBe(test_case.expected);
- });
- done();
- });
-
- it('should properly expand quoted params with commas', function (done) {
- var test_cases = [{
- name: 'CPU $2 time',
- key: 'system.cpu.util["type=user,value=avg",user]',
- expected: "CPU user time"
- }, {
- name: 'CPU $1 time',
- key: 'system.cpu.util["type=user,value=avg","user"]',
- expected: "CPU type=user,value=avg time"
- }, {
- name: 'CPU $1 time $3',
- key: 'system.cpu.util["type=user,value=avg",,"user"]',
- expected: "CPU type=user,value=avg time user"
- }, {
- name: 'CPU $1 $2 $3',
- key: 'system.cpu.util["type=user,value=avg",time,"user"]',
- expected: "CPU type=user,value=avg time user"
- }];
-
- _.each(test_cases, function (test_case) {
- var expandedName = utils.expandItemName(test_case.name, test_case.key);
- expect(expandedName).toBe(test_case.expected);
- });
- done();
- });
-
- it('should properly expand array params', function (done) {
- var test_cases = [{
- name: 'CPU $2 - $3 time',
- key: 'system.cpu.util[,[user,system],avg1]',
- expected: "CPU user,system - avg1 time"
- }, {
- name: 'CPU $2 - $3 time',
- key: 'system.cpu.util[,["user,system",iowait],avg1]',
- expected: 'CPU "user,system",iowait - avg1 time'
- }, {
- name: 'CPU - $2 - $3 - $4',
- key: 'system.cpu.util[,[],["user,system",iowait],avg1]',
- expected: 'CPU - - "user,system",iowait - avg1'
- }];
-
- _.each(test_cases, function (test_case) {
- var expandedName = utils.expandItemName(test_case.name, test_case.key);
- expect(expandedName).toBe(test_case.expected);
- });
- done();
- });
- });
-
- describe('splitTemplateQuery()', function () {
-
- // Backward compatibility
- it('should properly split query in old format', function (done) {
- var test_cases = [{
- query: '/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9{2}/',
- expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
- }, {
- query: 'a.b.c.d',
- expected: ['a', 'b', 'c', 'd']
- }];
-
- _.each(test_cases, function (test_case) {
- var splitQuery = utils.splitTemplateQuery(test_case.query);
- expect(splitQuery).toEqual(test_case.expected);
- });
- done();
- });
-
- it('should properly split query', function (done) {
- var test_cases = [{
- query: '{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9]*/}',
- expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
- }, {
- query: '{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9]{2}/}',
- expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
- }, {
- query: '{a}{b}{c}{d}',
- expected: ['a', 'b', 'c', 'd']
- }, {
- query: '{a}{b.c.d}',
- expected: ['a', 'b.c.d']
- }];
-
- _.each(test_cases, function (test_case) {
- var splitQuery = utils.splitTemplateQuery(test_case.query);
- expect(splitQuery).toEqual(test_case.expected);
- });
- done();
- });
- });
- });
- }
- };
-});
-//# sourceMappingURL=utils.spec.js.map
diff --git a/dist/datasource-zabbix/specs/utils.spec.js.map b/dist/datasource-zabbix/specs/utils.spec.js.map
deleted file mode 100644
index 8d341c4..0000000
--- a/dist/datasource-zabbix/specs/utils.spec.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/specs/utils.spec.js"],"names":["_","utils","describe","it","done","test_cases","name","key","expected","each","expandedName","expandItemName","test_case","expect","toBe","query","splitQuery","splitTemplateQuery","toEqual"],"mappings":"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","file":"utils.spec.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from '../utils';\n\ndescribe('Utils', () => {\n\n describe('expandItemName()', () => {\n\n it('should properly expand unquoted params', (done) => {\n let test_cases = [\n {\n name: `CPU $2 time`,\n key: `system.cpu.util[,user,avg1]`,\n expected: \"CPU user time\"\n },\n {\n name: `CPU $2 time - $3`,\n key: `system.cpu.util[,system,avg1]`,\n expected: \"CPU system time - avg1\"\n },\n {\n name: `CPU - $1 - $2 - $3`,\n key: `system.cpu.util[,system,avg1]`,\n expected: \"CPU - - system - avg1\"\n }\n ];\n\n _.each(test_cases, test_case => {\n let expandedName = utils.expandItemName(test_case.name, test_case.key);\n expect(expandedName).toBe(test_case.expected);\n });\n done();\n });\n\n it('should properly expand quoted params with commas', (done) => {\n let test_cases = [\n {\n name: `CPU $2 time`,\n key: `system.cpu.util[\"type=user,value=avg\",user]`,\n expected: \"CPU user time\"\n },\n {\n name: `CPU $1 time`,\n key: `system.cpu.util[\"type=user,value=avg\",\"user\"]`,\n expected: \"CPU type=user,value=avg time\"\n },\n {\n name: `CPU $1 time $3`,\n key: `system.cpu.util[\"type=user,value=avg\",,\"user\"]`,\n expected: \"CPU type=user,value=avg time user\"\n },\n {\n name: `CPU $1 $2 $3`,\n key: `system.cpu.util[\"type=user,value=avg\",time,\"user\"]`,\n expected: \"CPU type=user,value=avg time user\"\n }\n ];\n\n _.each(test_cases, test_case => {\n let expandedName = utils.expandItemName(test_case.name, test_case.key);\n expect(expandedName).toBe(test_case.expected);\n });\n done();\n });\n\n it('should properly expand array params', (done) => {\n let test_cases = [\n {\n name: `CPU $2 - $3 time`,\n key: `system.cpu.util[,[user,system],avg1]`,\n expected: \"CPU user,system - avg1 time\"\n },\n {\n name: `CPU $2 - $3 time`,\n key: `system.cpu.util[,[\"user,system\",iowait],avg1]`,\n expected: `CPU \"user,system\",iowait - avg1 time`\n },\n {\n name: `CPU - $2 - $3 - $4`,\n key: `system.cpu.util[,[],[\"user,system\",iowait],avg1]`,\n expected: `CPU - - \"user,system\",iowait - avg1`\n }\n ];\n\n _.each(test_cases, test_case => {\n let expandedName = utils.expandItemName(test_case.name, test_case.key);\n expect(expandedName).toBe(test_case.expected);\n });\n done();\n });\n });\n\n describe('splitTemplateQuery()', () => {\n\n // Backward compatibility\n it('should properly split query in old format', (done) => {\n let test_cases = [\n {\n query: `/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(\\w|\\d)*-alu-[0-9{2}/`,\n expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\\w|\\d)*-alu-[0-9{2}/']\n },\n {\n query: `a.b.c.d`,\n expected: ['a', 'b', 'c', 'd']\n }\n ];\n\n _.each(test_cases, test_case => {\n let splitQuery = utils.splitTemplateQuery(test_case.query);\n expect(splitQuery).toEqual(test_case.expected);\n });\n done();\n });\n\n it('should properly split query', (done) => {\n let test_cases = [\n {\n query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\\w|\\d)*-alu-[0-9]*/}`,\n expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\\w|\\d)*-alu-[0-9]*/']\n },\n {\n query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\\w|\\d)*-alu-[0-9]{2}/}`,\n expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\\w|\\d)*-alu-[0-9]{2}/']\n },\n {\n query: `{a}{b}{c}{d}`,\n expected: ['a', 'b', 'c', 'd']\n },\n {\n query: `{a}{b.c.d}`,\n expected: ['a', 'b.c.d']\n }\n ];\n\n _.each(test_cases, test_case => {\n let splitQuery = utils.splitTemplateQuery(test_case.query);\n expect(splitQuery).toEqual(test_case.expected);\n });\n done();\n });\n });\n});\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/timeseries.js b/dist/datasource-zabbix/timeseries.js
deleted file mode 100644
index 0fc9d82..0000000
--- a/dist/datasource-zabbix/timeseries.js
+++ /dev/null
@@ -1,491 +0,0 @@
-'use strict';
-
-System.register(['lodash', './utils'], function (_export, _context) {
- "use strict";
-
- var _, utils, POINT_VALUE, POINT_TIMESTAMP, exportedFunctions;
-
- /**
- * Downsample time series by using given function (avg, min, max).
- */
- function downsample(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(datapoints, interval, groupByCallback) {
- 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 groupBy_perf(datapoints, interval, groupByCallback) {
- if (datapoints.length === 0) {
- return [];
- }
-
- var ms_interval = utils.parseInterval(interval);
- var grouped_series = [];
- var frame_values = [];
- var frame_value = void 0;
- var frame_ts = datapoints.length ? getPointTimeFrame(datapoints[0][POINT_TIMESTAMP], ms_interval) : 0;
- var point_frame_ts = frame_ts;
- var point = void 0;
-
- for (var i = 0; i < datapoints.length; i++) {
- point = datapoints[i];
- point_frame_ts = getPointTimeFrame(point[POINT_TIMESTAMP], ms_interval);
- if (point_frame_ts === frame_ts) {
- frame_values.push(point[POINT_VALUE]);
- } else if (point_frame_ts > frame_ts) {
- frame_value = groupByCallback(frame_values);
- grouped_series.push([frame_value, frame_ts]);
-
- // Move frame window to next non-empty interval and fill empty by null
- frame_ts += ms_interval;
- while (frame_ts < point_frame_ts) {
- grouped_series.push([null, frame_ts]);
- frame_ts += ms_interval;
- }
- frame_values = [point[POINT_VALUE]];
- }
- }
-
- frame_value = groupByCallback(frame_values);
- grouped_series.push([frame_value, frame_ts]);
-
- return grouped_series;
- }
-
- /**
- * Summarize set of time series into one.
- * @param {datapoints[]} timeseries array of time series
- */
- 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) {
- series = fillZeroes(series, new_timestamps);
- 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 scale(datapoints, factor) {
- return _.map(datapoints, function (point) {
- return [point[0] * factor, point[1]];
- });
- }
-
- function scale_perf(datapoints, factor) {
- for (var i = 0; i < datapoints.length; i++) {
- datapoints[i] = [datapoints[i][POINT_VALUE] * factor, datapoints[i][POINT_TIMESTAMP]];
- }
-
- return datapoints;
- }
-
- /**
- * Simple delta. Calculate value delta between points.
- * @param {*} datapoints
- */
- 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;
- }
-
- /**
- * Calculates rate per second. Resistant to counter reset.
- * @param {*} datapoints
- */
- function rate(datapoints) {
- var newSeries = [];
- var point = void 0,
- point_prev = void 0;
- var valueDelta = 0;
- var timeDelta = 0;
- for (var i = 1; i < datapoints.length; i++) {
- point = datapoints[i];
- point_prev = datapoints[i - 1];
-
- // Convert ms to seconds
- timeDelta = (point[POINT_TIMESTAMP] - point_prev[POINT_TIMESTAMP]) / 1000;
-
- // Handle counter reset - use previous value
- if (point[POINT_VALUE] >= point_prev[POINT_VALUE]) {
- valueDelta = (point[POINT_VALUE] - point_prev[POINT_VALUE]) / timeDelta;
- }
-
- newSeries.push([valueDelta, point[POINT_TIMESTAMP]]);
- }
- return newSeries;
- }
-
- function simpleMovingAverage(datapoints, n) {
- var sma = [];
- var w_sum = void 0;
- var w_avg = null;
- var w_count = 0;
-
- // Initial window
- for (var j = n; j > 0; j--) {
- if (datapoints[n - j][POINT_VALUE] !== null) {
- w_avg += datapoints[n - j][POINT_VALUE];
- w_count++;
- }
- }
- if (w_count > 0) {
- w_avg = w_avg / w_count;
- } else {
- w_avg = null;
- }
- sma.push([w_avg, datapoints[n - 1][POINT_TIMESTAMP]]);
-
- for (var i = n; i < datapoints.length; i++) {
- // Insert next value
- if (datapoints[i][POINT_VALUE] !== null) {
- w_sum = w_avg * w_count;
- w_avg = (w_sum + datapoints[i][POINT_VALUE]) / (w_count + 1);
- w_count++;
- }
- // Remove left side point
- if (datapoints[i - n][POINT_VALUE] !== null) {
- w_sum = w_avg * w_count;
- if (w_count > 1) {
- w_avg = (w_sum - datapoints[i - n][POINT_VALUE]) / (w_count - 1);
- w_count--;
- } else {
- w_avg = null;
- w_count = 0;
- }
- }
- sma.push([w_avg, datapoints[i][POINT_TIMESTAMP]]);
- }
- return sma;
- }
-
- function expMovingAverage(datapoints, n) {
- var ema = [datapoints[0]];
- var ema_prev = datapoints[0][POINT_VALUE];
- var ema_cur = void 0;
- var a = void 0;
-
- if (n > 1) {
- // Calculate a from window size
- a = 2 / (n + 1);
-
- // Initial window, use simple moving average
- var w_avg = null;
- var w_count = 0;
- for (var j = n; j > 0; j--) {
- if (datapoints[n - j][POINT_VALUE] !== null) {
- w_avg += datapoints[n - j][POINT_VALUE];
- w_count++;
- }
- }
- if (w_count > 0) {
- w_avg = w_avg / w_count;
- // Actually, we should set timestamp from datapoints[n-1] and start calculation of EMA from n.
- // But in order to start EMA from first point (not from Nth) we should expand time range and request N additional
- // points outside left side of range. We can't do that, so this trick is used for pretty view of first N points.
- // We calculate AVG for first N points, but then start from 2nd point, not from Nth. In general, it means we
- // assume that previous N values (0-N, 0-(N-1), ..., 0-1) have the same average value as a first N values.
- ema = [[w_avg, datapoints[0][POINT_TIMESTAMP]]];
- ema_prev = w_avg;
- n = 1;
- }
- } else {
- // Use predefined a and start from 1st point (use it as initial EMA value)
- a = n;
- n = 1;
- }
-
- for (var i = n; i < datapoints.length; i++) {
- if (datapoints[i][POINT_VALUE] !== null) {
- ema_cur = a * datapoints[i][POINT_VALUE] + (1 - a) * ema_prev;
- ema_prev = ema_cur;
- ema.push([ema_cur, datapoints[i][POINT_TIMESTAMP]]);
- } else {
- ema.push([null, datapoints[i][POINT_TIMESTAMP]]);
- }
- }
- return ema;
- }
-
- function PERCENTIL(n, values) {
- var sorted = _.sortBy(values);
- return sorted[Math.floor(sorted.length * n / 100)];
- }
-
- function COUNT(values) {
- return values.length;
- }
-
- function SUM(values) {
- var sum = null;
- for (var i = 0; i < values.length; i++) {
- if (values[i] !== null) {
- sum += values[i];
- }
- }
- return sum;
- }
-
- function AVERAGE(values) {
- var values_non_null = getNonNullValues(values);
- if (values_non_null.length === 0) {
- return null;
- }
- return SUM(values_non_null) / values_non_null.length;
- }
-
- function getNonNullValues(values) {
- var values_non_null = [];
- for (var i = 0; i < values.length; i++) {
- if (values[i] !== null) {
- values_non_null.push(values[i]);
- }
- }
- return values_non_null;
- }
-
- 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)];
- }
-
- ///////////////////////
- // Utility functions //
- ///////////////////////
-
- /**
- * For given point calculate corresponding time frame.
- *
- * |__*_|_*__|___*| -> |*___|*___|*___|
- *
- * @param {*} timestamp
- * @param {*} ms_interval
- */
- function getPointTimeFrame(timestamp, ms_interval) {
- return Math.floor(timestamp / ms_interval) * ms_interval;
- }
-
- function sortByTime(series) {
- return _.sortBy(series, function (point) {
- return point[1];
- });
- }
-
- /**
- * Fill empty front and end of series by zeroes.
- *
- * | *** | | *** |
- * |___ ___| -> |*** ***|
- * @param {*} series
- * @param {*} timestamps
- */
- function fillZeroes(series, timestamps) {
- var prepend = [];
- var append = [];
- var new_point = void 0;
- for (var i = 0; i < timestamps.length; i++) {
- if (timestamps[i] < series[0][POINT_TIMESTAMP]) {
- new_point = [0, timestamps[i]];
- prepend.push(new_point);
- } else if (timestamps[i] > series[series.length - 1][POINT_TIMESTAMP]) {
- new_point = [0, timestamps[i]];
- append.push(new_point);
- }
- }
- return _.concat(_.concat(prepend, series), append);
- }
-
- /**
- * 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, i);
- right = findNearestRight(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, pointIndex) {
- for (var i = pointIndex; i < series.length; i++) {
- if (series[i][0] !== null) {
- return series[i];
- }
- }
- return null;
- }
-
- function findNearestLeft(series, pointIndex) {
- for (var i = pointIndex; i > 0; i--) {
- if (series[i][0] !== null) {
- return series[i];
- }
- }
- return null;
- }
-
- ////////////
- // Export //
- ////////////
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_utils) {
- utils = _utils;
- }],
- execute: function () {
- POINT_VALUE = 0;
- POINT_TIMESTAMP = 1;
- exportedFunctions = {
- downsample: downsample,
- groupBy: groupBy,
- groupBy_perf: groupBy_perf,
- sumSeries: sumSeries,
- scale: scale,
- scale_perf: scale_perf,
- delta: delta,
- rate: rate,
- simpleMovingAverage: simpleMovingAverage,
- expMovingAverage: expMovingAverage,
- SUM: SUM,
- COUNT: COUNT,
- AVERAGE: AVERAGE,
- MIN: MIN,
- MAX: MAX,
- MEDIAN: MEDIAN,
- PERCENTIL: PERCENTIL,
- sortByTime: sortByTime
- };
-
- _export('default', exportedFunctions);
- }
- };
-});
-//# sourceMappingURL=timeseries.js.map
diff --git a/dist/datasource-zabbix/timeseries.js.map b/dist/datasource-zabbix/timeseries.js.map
deleted file mode 100644
index 1333120..0000000
--- a/dist/datasource-zabbix/timeseries.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/timeseries.js"],"names":["downsample","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","groupBy_perf","grouped_series","frame_values","frame_value","frame_ts","getPointTimeFrame","POINT_TIMESTAMP","point_frame_ts","POINT_VALUE","sumSeries","timeseries","new_timestamps","uniq","flatten","sortBy","interpolated_timeseries","series","fillZeroes","timestamps","new_points","difference","new_series","concat","each","interpolateSeries","new_timeseries","sum","j","scale","factor","scale_perf","delta","newSeries","deltaValue","rate","point_prev","valueDelta","timeDelta","simpleMovingAverage","n","sma","w_sum","w_avg","w_count","expMovingAverage","ema","ema_prev","ema_cur","a","PERCENTIL","values","sorted","COUNT","SUM","AVERAGE","values_non_null","getNonNullValues","MIN","MAX","MEDIAN","prepend","append","new_point","left","right","findNearestLeft","findNearestRight","linearInterpolation","pointIndex","exportedFunctions"],"mappings":";;;;;;;AAiBA;;;AAGA,WAASA,UAAT,CAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,WAAzC,EAAsDC,IAAtD,EAA4D;AAC1D,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,CAAiBnB,UAAjB,EAA6BoB,QAA7B,EAAuCC,eAAvC,EAAwD;AACtD,QAAInB,cAAcoB,MAAMC,aAAN,CAAoBH,QAApB,CAAlB;;AAEA;AACA,QAAII,SAAST,EAAEI,OAAF,CAAUnB,UAAV,EAAsB,UAAUyB,KAAV,EAAiB;AAClD;AACA,aAAOC,KAAKC,KAAL,CAAWF,MAAM,CAAN,IAAWvB,WAAtB,IAAqCA,WAA5C;AACD,KAHY,CAAb;;AAKA;AACA;AACA,QAAI0B,UAAUb,EAAEc,SAAF,CAAYL,MAAZ,EAAoB,UAAUb,KAAV,EAAiB;AACjD,UAAImB,SAASf,EAAEgB,GAAF,CAAMpB,KAAN,EAAa,UAAUc,KAAV,EAAiB;AACzC,eAAOA,MAAM,CAAN,CAAP;AACD,OAFY,CAAb;AAGA,aAAOJ,gBAAgBS,MAAhB,CAAP;AACD,KALa,CAAd;;AAOA;AACA,WAAOE,WAAWjB,EAAEgB,GAAF,CAAMH,OAAN,EAAe,UAAUK,KAAV,EAAiBC,SAAjB,EAA4B;AAC3D,aAAO,CAACC,OAAOF,KAAP,CAAD,EAAgBE,OAAOD,SAAP,CAAhB,CAAP;AACD,KAFiB,CAAX,CAAP;AAGD;;AAED,WAASE,YAAT,CAAsBpC,UAAtB,EAAkCoB,QAAlC,EAA4CC,eAA5C,EAA6D;AAC3D,QAAIrB,WAAWa,MAAX,KAAsB,CAA1B,EAA6B;AAC3B,aAAO,EAAP;AACD;;AAED,QAAIX,cAAcoB,MAAMC,aAAN,CAAoBH,QAApB,CAAlB;AACA,QAAIiB,iBAAiB,EAArB;AACA,QAAIC,eAAe,EAAnB;AACA,QAAIC,oBAAJ;AACA,QAAIC,WAAWxC,WAAWa,MAAX,GAAoB4B,kBAAkBzC,WAAW,CAAX,EAAc0C,eAAd,CAAlB,EAAkDxC,WAAlD,CAApB,GAAqF,CAApG;AACA,QAAIyC,iBAAiBH,QAArB;AACA,QAAIf,cAAJ;;AAEA,SAAK,IAAIb,IAAE,CAAX,EAAcA,IAAIZ,WAAWa,MAA7B,EAAqCD,GAArC,EAA0C;AACxCa,cAAQzB,WAAWY,CAAX,CAAR;AACA+B,uBAAiBF,kBAAkBhB,MAAMiB,eAAN,CAAlB,EAA0CxC,WAA1C,CAAjB;AACA,UAAIyC,mBAAmBH,QAAvB,EAAiC;AAC/BF,qBAAaxB,IAAb,CAAkBW,MAAMmB,WAAN,CAAlB;AACD,OAFD,MAEO,IAAID,iBAAiBH,QAArB,EAA+B;AACpCD,sBAAclB,gBAAgBiB,YAAhB,CAAd;AACAD,uBAAevB,IAAf,CAAoB,CAACyB,WAAD,EAAcC,QAAd,CAApB;;AAEA;AACAA,oBAAYtC,WAAZ;AACA,eAAOsC,WAAWG,cAAlB,EAAkC;AAChCN,yBAAevB,IAAf,CAAoB,CAAC,IAAD,EAAO0B,QAAP,CAApB;AACAA,sBAAYtC,WAAZ;AACD;AACDoC,uBAAe,CAACb,MAAMmB,WAAN,CAAD,CAAf;AACD;AACF;;AAEDL,kBAAclB,gBAAgBiB,YAAhB,CAAd;AACAD,mBAAevB,IAAf,CAAoB,CAACyB,WAAD,EAAcC,QAAd,CAApB;;AAEA,WAAOH,cAAP;AACD;;AAED;;;;AAIA,WAASQ,SAAT,CAAmBC,UAAnB,EAA+B;;AAE7B;AACA,QAAIC,iBAAiBhC,EAAEiC,IAAF,CAAOjC,EAAEgB,GAAF,CAAMhB,EAAEkC,OAAF,CAAUH,UAAV,EAAsB,IAAtB,CAAN,EAAmC,UAAUrB,KAAV,EAAiB;AAC9E,aAAOA,MAAM,CAAN,CAAP;AACD,KAF2B,CAAP,CAArB;AAGAsB,qBAAiBhC,EAAEmC,MAAF,CAASH,cAAT,CAAjB;;AAEA,QAAII,0BAA0BpC,EAAEgB,GAAF,CAAMe,UAAN,EAAkB,UAAUM,MAAV,EAAkB;AAChEA,eAASC,WAAWD,MAAX,EAAmBL,cAAnB,CAAT;AACA,UAAIO,aAAavC,EAAEgB,GAAF,CAAMqB,MAAN,EAAc,UAAU3B,KAAV,EAAiB;AAC9C,eAAOA,MAAM,CAAN,CAAP;AACD,OAFgB,CAAjB;AAGA,UAAI8B,aAAaxC,EAAEgB,GAAF,CAAMhB,EAAEyC,UAAF,CAAaT,cAAb,EAA6BO,UAA7B,CAAN,EAAgD,UAAUpB,SAAV,EAAqB;AACpF,eAAO,CAAC,IAAD,EAAOA,SAAP,CAAP;AACD,OAFgB,CAAjB;AAGA,UAAIuB,aAAaL,OAAOM,MAAP,CAAcH,UAAd,CAAjB;AACA,aAAOvB,WAAWyB,UAAX,CAAP;AACD,KAV6B,CAA9B;;AAYA1C,MAAE4C,IAAF,CAAOR,uBAAP,EAAgCS,iBAAhC;;AAEA,QAAIC,iBAAiB,EAArB;AACA,QAAIC,GAAJ;AACA,SAAK,IAAIlD,IAAImC,eAAelC,MAAf,GAAwB,CAArC,EAAwCD,KAAK,CAA7C,EAAgDA,GAAhD,EAAqD;AACnDkD,YAAM,CAAN;AACA,WAAK,IAAIC,IAAIZ,wBAAwBtC,MAAxB,GAAiC,CAA9C,EAAiDkD,KAAK,CAAtD,EAAyDA,GAAzD,EAA8D;AAC5DD,eAAOX,wBAAwBY,CAAxB,EAA2BnD,CAA3B,EAA8B,CAA9B,CAAP;AACD;AACDiD,qBAAe/C,IAAf,CAAoB,CAACgD,GAAD,EAAMf,eAAenC,CAAf,CAAN,CAApB;AACD;;AAED,WAAOoB,WAAW6B,cAAX,CAAP;AACD;;AAED,WAASG,KAAT,CAAehE,UAAf,EAA2BiE,MAA3B,EAAmC;AACjC,WAAOlD,EAAEgB,GAAF,CAAM/B,UAAN,EAAkB,iBAAS;AAChC,aAAO,CACLyB,MAAM,CAAN,IAAWwC,MADN,EAELxC,MAAM,CAAN,CAFK,CAAP;AAID,KALM,CAAP;AAMD;;AAED,WAASyC,UAAT,CAAoBlE,UAApB,EAAgCiE,MAAhC,EAAwC;AACtC,SAAK,IAAIrD,IAAI,CAAb,EAAgBA,IAAIZ,WAAWa,MAA/B,EAAuCD,GAAvC,EAA4C;AAC1CZ,iBAAWY,CAAX,IAAgB,CACdZ,WAAWY,CAAX,EAAcgC,WAAd,IAA6BqB,MADf,EAEdjE,WAAWY,CAAX,EAAc8B,eAAd,CAFc,CAAhB;AAID;;AAED,WAAO1C,UAAP;AACD;;AAED;;;;AAIA,WAASmE,KAAT,CAAenE,UAAf,EAA2B;AACzB,QAAIoE,YAAY,EAAhB;AACA,QAAIC,mBAAJ;AACA,SAAK,IAAIzD,IAAI,CAAb,EAAgBA,IAAIZ,WAAWa,MAA/B,EAAuCD,GAAvC,EAA4C;AAC1CyD,mBAAarE,WAAWY,CAAX,EAAc,CAAd,IAAmBZ,WAAWY,IAAI,CAAf,EAAkB,CAAlB,CAAhC;AACAwD,gBAAUtD,IAAV,CAAe,CAACuD,UAAD,EAAarE,WAAWY,CAAX,EAAc,CAAd,CAAb,CAAf;AACD;AACD,WAAOwD,SAAP;AACD;;AAED;;;;AAIA,WAASE,IAAT,CAActE,UAAd,EAA0B;AACxB,QAAIoE,YAAY,EAAhB;AACA,QAAI3C,cAAJ;AAAA,QAAW8C,mBAAX;AACA,QAAIC,aAAa,CAAjB;AACA,QAAIC,YAAY,CAAhB;AACA,SAAK,IAAI7D,IAAI,CAAb,EAAgBA,IAAIZ,WAAWa,MAA/B,EAAuCD,GAAvC,EAA4C;AAC1Ca,cAAQzB,WAAWY,CAAX,CAAR;AACA2D,mBAAavE,WAAWY,IAAI,CAAf,CAAb;;AAEA;AACA6D,kBAAY,CAAChD,MAAMiB,eAAN,IAAyB6B,WAAW7B,eAAX,CAA1B,IAAyD,IAArE;;AAEA;AACA,UAAIjB,MAAMmB,WAAN,KAAsB2B,WAAW3B,WAAX,CAA1B,EAAmD;AACjD4B,qBAAa,CAAC/C,MAAMmB,WAAN,IAAqB2B,WAAW3B,WAAX,CAAtB,IAAiD6B,SAA9D;AACD;;AAEDL,gBAAUtD,IAAV,CAAe,CAAC0D,UAAD,EAAa/C,MAAMiB,eAAN,CAAb,CAAf;AACD;AACD,WAAO0B,SAAP;AACD;;AAED,WAASM,mBAAT,CAA6B1E,UAA7B,EAAyC2E,CAAzC,EAA4C;AAC1C,QAAIC,MAAM,EAAV;AACA,QAAIC,cAAJ;AACA,QAAIC,QAAQ,IAAZ;AACA,QAAIC,UAAU,CAAd;;AAEA;AACA,SAAK,IAAIhB,IAAIY,CAAb,EAAgBZ,IAAI,CAApB,EAAuBA,GAAvB,EAA4B;AAC1B,UAAI/D,WAAW2E,IAAIZ,CAAf,EAAkBnB,WAAlB,MAAmC,IAAvC,EAA6C;AAC3CkC,iBAAS9E,WAAW2E,IAAIZ,CAAf,EAAkBnB,WAAlB,CAAT;AACAmC;AACD;AACF;AACD,QAAIA,UAAU,CAAd,EAAiB;AACfD,cAAQA,QAAQC,OAAhB;AACD,KAFD,MAEO;AACLD,cAAQ,IAAR;AACD;AACDF,QAAI9D,IAAJ,CAAS,CAACgE,KAAD,EAAQ9E,WAAW2E,IAAI,CAAf,EAAkBjC,eAAlB,CAAR,CAAT;;AAEA,SAAK,IAAI9B,IAAI+D,CAAb,EAAgB/D,IAAIZ,WAAWa,MAA/B,EAAuCD,GAAvC,EAA4C;AAC1C;AACA,UAAIZ,WAAWY,CAAX,EAAcgC,WAAd,MAA+B,IAAnC,EAAyC;AACvCiC,gBAAQC,QAAQC,OAAhB;AACAD,gBAAQ,CAACD,QAAQ7E,WAAWY,CAAX,EAAcgC,WAAd,CAAT,KAAwCmC,UAAU,CAAlD,CAAR;AACAA;AACD;AACD;AACA,UAAI/E,WAAWY,IAAI+D,CAAf,EAAkB/B,WAAlB,MAAmC,IAAvC,EAA6C;AAC3CiC,gBAAQC,QAAQC,OAAhB;AACA,YAAIA,UAAU,CAAd,EAAiB;AACfD,kBAAQ,CAACD,QAAQ7E,WAAWY,IAAI+D,CAAf,EAAkB/B,WAAlB,CAAT,KAA4CmC,UAAU,CAAtD,CAAR;AACAA;AACD,SAHD,MAGO;AACLD,kBAAQ,IAAR;AACAC,oBAAU,CAAV;AACD;AACF;AACDH,UAAI9D,IAAJ,CAAS,CAACgE,KAAD,EAAQ9E,WAAWY,CAAX,EAAc8B,eAAd,CAAR,CAAT;AACD;AACD,WAAOkC,GAAP;AACD;;AAED,WAASI,gBAAT,CAA0BhF,UAA1B,EAAsC2E,CAAtC,EAAyC;AACvC,QAAIM,MAAM,CAACjF,WAAW,CAAX,CAAD,CAAV;AACA,QAAIkF,WAAWlF,WAAW,CAAX,EAAc4C,WAAd,CAAf;AACA,QAAIuC,gBAAJ;AACA,QAAIC,UAAJ;;AAEA,QAAIT,IAAI,CAAR,EAAW;AACT;AACAS,UAAI,KAAKT,IAAI,CAAT,CAAJ;;AAEA;AACA,UAAIG,QAAQ,IAAZ;AACA,UAAIC,UAAU,CAAd;AACA,WAAK,IAAIhB,IAAIY,CAAb,EAAgBZ,IAAI,CAApB,EAAuBA,GAAvB,EAA4B;AAC1B,YAAI/D,WAAW2E,IAAIZ,CAAf,EAAkBnB,WAAlB,MAAmC,IAAvC,EAA6C;AAC3CkC,mBAAS9E,WAAW2E,IAAIZ,CAAf,EAAkBnB,WAAlB,CAAT;AACAmC;AACD;AACF;AACD,UAAIA,UAAU,CAAd,EAAiB;AACfD,gBAAQA,QAAQC,OAAhB;AACA;AACA;AACA;AACA;AACA;AACAE,cAAM,CAAC,CAACH,KAAD,EAAQ9E,WAAW,CAAX,EAAc0C,eAAd,CAAR,CAAD,CAAN;AACAwC,mBAAWJ,KAAX;AACAH,YAAI,CAAJ;AACD;AACF,KAxBD,MAwBO;AACL;AACAS,UAAIT,CAAJ;AACAA,UAAI,CAAJ;AACD;;AAED,SAAK,IAAI/D,IAAI+D,CAAb,EAAgB/D,IAAIZ,WAAWa,MAA/B,EAAuCD,GAAvC,EAA4C;AAC1C,UAAIZ,WAAWY,CAAX,EAAcgC,WAAd,MAA+B,IAAnC,EAAyC;AACvCuC,kBAAUC,IAAIpF,WAAWY,CAAX,EAAcgC,WAAd,CAAJ,GAAiC,CAAC,IAAIwC,CAAL,IAAUF,QAArD;AACAA,mBAAWC,OAAX;AACAF,YAAInE,IAAJ,CAAS,CAACqE,OAAD,EAAUnF,WAAWY,CAAX,EAAc8B,eAAd,CAAV,CAAT;AACD,OAJD,MAIO;AACLuC,YAAInE,IAAJ,CAAS,CAAC,IAAD,EAAOd,WAAWY,CAAX,EAAc8B,eAAd,CAAP,CAAT;AACD;AACF;AACD,WAAOuC,GAAP;AACD;;AAED,WAASI,SAAT,CAAmBV,CAAnB,EAAsBW,MAAtB,EAA8B;AAC5B,QAAIC,SAASxE,EAAEmC,MAAF,CAASoC,MAAT,CAAb;AACA,WAAOC,OAAO7D,KAAKC,KAAL,CAAW4D,OAAO1E,MAAP,GAAgB8D,CAAhB,GAAoB,GAA/B,CAAP,CAAP;AACD;;AAED,WAASa,KAAT,CAAeF,MAAf,EAAuB;AACrB,WAAOA,OAAOzE,MAAd;AACD;;AAED,WAAS4E,GAAT,CAAaH,MAAb,EAAqB;AACnB,QAAIxB,MAAM,IAAV;AACA,SAAK,IAAIlD,IAAI,CAAb,EAAgBA,IAAI0E,OAAOzE,MAA3B,EAAmCD,GAAnC,EAAwC;AACtC,UAAI0E,OAAO1E,CAAP,MAAc,IAAlB,EAAwB;AACtBkD,eAAOwB,OAAO1E,CAAP,CAAP;AACD;AACF;AACD,WAAOkD,GAAP;AACD;;AAED,WAAS4B,OAAT,CAAiBJ,MAAjB,EAAyB;AACvB,QAAIK,kBAAkBC,iBAAiBN,MAAjB,CAAtB;AACA,QAAIK,gBAAgB9E,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,aAAO,IAAP;AACD;AACD,WAAO4E,IAAIE,eAAJ,IAAuBA,gBAAgB9E,MAA9C;AACD;;AAED,WAAS+E,gBAAT,CAA0BN,MAA1B,EAAkC;AAChC,QAAIK,kBAAkB,EAAtB;AACA,SAAK,IAAI/E,IAAI,CAAb,EAAgBA,IAAI0E,OAAOzE,MAA3B,EAAmCD,GAAnC,EAAwC;AACtC,UAAI0E,OAAO1E,CAAP,MAAc,IAAlB,EAAwB;AACtB+E,wBAAgB7E,IAAhB,CAAqBwE,OAAO1E,CAAP,CAArB;AACD;AACF;AACD,WAAO+E,eAAP;AACD;;AAED,WAASE,GAAT,CAAaP,MAAb,EAAqB;AACnB,WAAOvE,EAAEE,GAAF,CAAMqE,MAAN,CAAP;AACD;;AAED,WAASQ,GAAT,CAAaR,MAAb,EAAqB;AACnB,WAAOvE,EAAEC,GAAF,CAAMsE,MAAN,CAAP;AACD;;AAED,WAASS,MAAT,CAAgBT,MAAhB,EAAwB;AACtB,QAAIC,SAASxE,EAAEmC,MAAF,CAASoC,MAAT,CAAb;AACA,WAAOC,OAAO7D,KAAKC,KAAL,CAAW4D,OAAO1E,MAAP,GAAgB,CAA3B,CAAP,CAAP;AACD;;AAED;AACA;AACA;;AAEA;;;;;;;;AAQA,WAAS4B,iBAAT,CAA2BP,SAA3B,EAAsChC,WAAtC,EAAmD;AACjD,WAAOwB,KAAKC,KAAL,CAAWO,YAAYhC,WAAvB,IAAsCA,WAA7C;AACD;;AAED,WAAS8B,UAAT,CAAoBoB,MAApB,EAA4B;AAC1B,WAAOrC,EAAEmC,MAAF,CAASE,MAAT,EAAiB,UAAU3B,KAAV,EAAiB;AACvC,aAAOA,MAAM,CAAN,CAAP;AACD,KAFM,CAAP;AAGD;;AAED;;;;;;;;AAQA,WAAS4B,UAAT,CAAoBD,MAApB,EAA4BE,UAA5B,EAAwC;AACtC,QAAI0C,UAAU,EAAd;AACA,QAAIC,SAAS,EAAb;AACA,QAAIC,kBAAJ;AACA,SAAK,IAAItF,IAAI,CAAb,EAAgBA,IAAI0C,WAAWzC,MAA/B,EAAuCD,GAAvC,EAA4C;AAC1C,UAAI0C,WAAW1C,CAAX,IAAgBwC,OAAO,CAAP,EAAUV,eAAV,CAApB,EAAgD;AAC9CwD,oBAAY,CAAC,CAAD,EAAI5C,WAAW1C,CAAX,CAAJ,CAAZ;AACAoF,gBAAQlF,IAAR,CAAaoF,SAAb;AACD,OAHD,MAGO,IAAI5C,WAAW1C,CAAX,IAAgBwC,OAAOA,OAAOvC,MAAP,GAAgB,CAAvB,EAA0B6B,eAA1B,CAApB,EAAgE;AACrEwD,oBAAY,CAAC,CAAD,EAAI5C,WAAW1C,CAAX,CAAJ,CAAZ;AACAqF,eAAOnF,IAAP,CAAYoF,SAAZ;AACD;AACF;AACD,WAAOnF,EAAE2C,MAAF,CAAS3C,EAAE2C,MAAF,CAASsC,OAAT,EAAkB5C,MAAlB,CAAT,EAAoC6C,MAApC,CAAP;AACD;;AAED;;;AAGA,WAASrC,iBAAT,CAA2BR,MAA3B,EAAmC;AACjC,QAAI+C,IAAJ,EAAUC,KAAV;;AAEA;AACA,SAAK,IAAIxF,IAAIwC,OAAOvC,MAAP,GAAgB,CAA7B,EAAgCD,KAAK,CAArC,EAAwCA,GAAxC,EAA6C;AAC3C,UAAI,CAACwC,OAAOxC,CAAP,EAAU,CAAV,CAAL,EAAmB;AACjBuF,eAAOE,gBAAgBjD,MAAhB,EAAwBxC,CAAxB,CAAP;AACAwF,gBAAQE,iBAAiBlD,MAAjB,EAAyBxC,CAAzB,CAAR;AACA,YAAI,CAACuF,IAAL,EAAW;AACTA,iBAAOC,KAAP;AACD;AACD,YAAI,CAACA,KAAL,EAAY;AACVA,kBAAQD,IAAR;AACD;AACD/C,eAAOxC,CAAP,EAAU,CAAV,IAAe2F,oBAAoBnD,OAAOxC,CAAP,EAAU,CAAV,CAApB,EAAkCuF,IAAlC,EAAwCC,KAAxC,CAAf;AACD;AACF;AACD,WAAOhD,MAAP;AACD;;AAED,WAASmD,mBAAT,CAA6BrE,SAA7B,EAAwCiE,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+CjE,YAAYiE,KAAK,CAAL,CAA3D,CAAlB;AACD;AACF;;AAED,WAASG,gBAAT,CAA0BlD,MAA1B,EAAkCoD,UAAlC,EAA8C;AAC5C,SAAK,IAAI5F,IAAI4F,UAAb,EAAyB5F,IAAIwC,OAAOvC,MAApC,EAA4CD,GAA5C,EAAiD;AAC/C,UAAIwC,OAAOxC,CAAP,EAAU,CAAV,MAAiB,IAArB,EAA2B;AACzB,eAAOwC,OAAOxC,CAAP,CAAP;AACD;AACF;AACD,WAAO,IAAP;AACD;;AAED,WAASyF,eAAT,CAAyBjD,MAAzB,EAAiCoD,UAAjC,EAA6C;AAC3C,SAAK,IAAI5F,IAAI4F,UAAb,EAAyB5F,IAAI,CAA7B,EAAgCA,GAAhC,EAAqC;AACnC,UAAIwC,OAAOxC,CAAP,EAAU,CAAV,MAAiB,IAArB,EAA2B;AACzB,eAAOwC,OAAOxC,CAAP,CAAP;AACD;AACF;AACD,WAAO,IAAP;AACD;;AAED;AACA;AACA;;;;AA5cOG,O;;AACKO,W;;;AAENsB,iB,GAAc,C;AACdF,qB,GAAkB,C;AA0clB+D,uB,GAAoB;AACxB1G,8BADwB;AAExBoB,wBAFwB;AAGxBiB,kCAHwB;AAIxBS,4BAJwB;AAKxBmB,oBALwB;AAMxBE,8BANwB;AAOxBC,oBAPwB;AAQxBG,kBARwB;AASxBI,gDATwB;AAUxBM,0CAVwB;AAWxBS,gBAXwB;AAYxBD,oBAZwB;AAaxBE,wBAbwB;AAcxBG,gBAdwB;AAexBC,gBAfwB;AAgBxBC,sBAhBwB;AAiBxBV,4BAjBwB;AAkBxBrD;AAlBwB,O;;yBAqBXyE,iB","file":"timeseries.js","sourcesContent":["/**\n * timeseries.js\n *\n * This module contains functions for working with time series.\n *\n * datapoints - array of points where point is [value, timestamp]. In almost all cases (if other wasn't\n * explicitly said) we assume datapoints are sorted by timestamp. Timestamp is the number of milliseconds\n * since 1 January 1970 00:00:00 UTC.\n *\n */\n\nimport _ from 'lodash';\nimport * as utils from './utils';\n\nconst POINT_VALUE = 0;\nconst POINT_TIMESTAMP = 1;\n\n/**\n * Downsample time series by using given function (avg, min, max).\n */\nfunction downsample(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(datapoints, interval, groupByCallback) {\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 groupBy_perf(datapoints, interval, groupByCallback) {\n if (datapoints.length === 0) {\n return [];\n }\n\n let ms_interval = utils.parseInterval(interval);\n let grouped_series = [];\n let frame_values = [];\n let frame_value;\n let frame_ts = datapoints.length ? getPointTimeFrame(datapoints[0][POINT_TIMESTAMP], ms_interval) : 0;\n let point_frame_ts = frame_ts;\n let point;\n\n for (let i=0; i < datapoints.length; i++) {\n point = datapoints[i];\n point_frame_ts = getPointTimeFrame(point[POINT_TIMESTAMP], ms_interval);\n if (point_frame_ts === frame_ts) {\n frame_values.push(point[POINT_VALUE]);\n } else if (point_frame_ts > frame_ts) {\n frame_value = groupByCallback(frame_values);\n grouped_series.push([frame_value, frame_ts]);\n\n // Move frame window to next non-empty interval and fill empty by null\n frame_ts += ms_interval;\n while (frame_ts < point_frame_ts) {\n grouped_series.push([null, frame_ts]);\n frame_ts += ms_interval;\n }\n frame_values = [point[POINT_VALUE]];\n }\n }\n\n frame_value = groupByCallback(frame_values);\n grouped_series.push([frame_value, frame_ts]);\n\n return grouped_series;\n}\n\n/**\n * Summarize set of time series into one.\n * @param {datapoints[]} timeseries array of time series\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 series = fillZeroes(series, new_timestamps);\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 scale(datapoints, factor) {\n return _.map(datapoints, point => {\n return [\n point[0] * factor,\n point[1]\n ];\n });\n}\n\nfunction scale_perf(datapoints, factor) {\n for (let i = 0; i < datapoints.length; i++) {\n datapoints[i] = [\n datapoints[i][POINT_VALUE] * factor,\n datapoints[i][POINT_TIMESTAMP]\n ];\n }\n\n return datapoints;\n}\n\n/**\n * Simple delta. Calculate value delta between points.\n * @param {*} datapoints\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\n/**\n * Calculates rate per second. Resistant to counter reset.\n * @param {*} datapoints\n */\nfunction rate(datapoints) {\n let newSeries = [];\n let point, point_prev;\n let valueDelta = 0;\n let timeDelta = 0;\n for (let i = 1; i < datapoints.length; i++) {\n point = datapoints[i];\n point_prev = datapoints[i - 1];\n\n // Convert ms to seconds\n timeDelta = (point[POINT_TIMESTAMP] - point_prev[POINT_TIMESTAMP]) / 1000;\n\n // Handle counter reset - use previous value\n if (point[POINT_VALUE] >= point_prev[POINT_VALUE]) {\n valueDelta = (point[POINT_VALUE] - point_prev[POINT_VALUE]) / timeDelta;\n }\n\n newSeries.push([valueDelta, point[POINT_TIMESTAMP]]);\n }\n return newSeries;\n}\n\nfunction simpleMovingAverage(datapoints, n) {\n let sma = [];\n let w_sum;\n let w_avg = null;\n let w_count = 0;\n\n // Initial window\n for (let j = n; j > 0; j--) {\n if (datapoints[n - j][POINT_VALUE] !== null) {\n w_avg += datapoints[n - j][POINT_VALUE];\n w_count++;\n }\n }\n if (w_count > 0) {\n w_avg = w_avg / w_count;\n } else {\n w_avg = null;\n }\n sma.push([w_avg, datapoints[n - 1][POINT_TIMESTAMP]]);\n\n for (let i = n; i < datapoints.length; i++) {\n // Insert next value\n if (datapoints[i][POINT_VALUE] !== null) {\n w_sum = w_avg * w_count;\n w_avg = (w_sum + datapoints[i][POINT_VALUE]) / (w_count + 1);\n w_count++;\n }\n // Remove left side point\n if (datapoints[i - n][POINT_VALUE] !== null) {\n w_sum = w_avg * w_count;\n if (w_count > 1) {\n w_avg = (w_sum - datapoints[i - n][POINT_VALUE]) / (w_count - 1);\n w_count--;\n } else {\n w_avg = null;\n w_count = 0;\n }\n }\n sma.push([w_avg, datapoints[i][POINT_TIMESTAMP]]);\n }\n return sma;\n}\n\nfunction expMovingAverage(datapoints, n) {\n let ema = [datapoints[0]];\n let ema_prev = datapoints[0][POINT_VALUE];\n let ema_cur;\n let a;\n\n if (n > 1) {\n // Calculate a from window size\n a = 2 / (n + 1);\n\n // Initial window, use simple moving average\n let w_avg = null;\n let w_count = 0;\n for (let j = n; j > 0; j--) {\n if (datapoints[n - j][POINT_VALUE] !== null) {\n w_avg += datapoints[n - j][POINT_VALUE];\n w_count++;\n }\n }\n if (w_count > 0) {\n w_avg = w_avg / w_count;\n // Actually, we should set timestamp from datapoints[n-1] and start calculation of EMA from n.\n // But in order to start EMA from first point (not from Nth) we should expand time range and request N additional\n // points outside left side of range. We can't do that, so this trick is used for pretty view of first N points.\n // We calculate AVG for first N points, but then start from 2nd point, not from Nth. In general, it means we\n // assume that previous N values (0-N, 0-(N-1), ..., 0-1) have the same average value as a first N values.\n ema = [[w_avg, datapoints[0][POINT_TIMESTAMP]]];\n ema_prev = w_avg;\n n = 1;\n }\n } else {\n // Use predefined a and start from 1st point (use it as initial EMA value)\n a = n;\n n = 1;\n }\n\n for (let i = n; i < datapoints.length; i++) {\n if (datapoints[i][POINT_VALUE] !== null) {\n ema_cur = a * datapoints[i][POINT_VALUE] + (1 - a) * ema_prev;\n ema_prev = ema_cur;\n ema.push([ema_cur, datapoints[i][POINT_TIMESTAMP]]);\n } else {\n ema.push([null, datapoints[i][POINT_TIMESTAMP]]);\n }\n }\n return ema;\n}\n\nfunction PERCENTIL(n, values) {\n var sorted = _.sortBy(values);\n return sorted[Math.floor(sorted.length * n / 100)];\n}\n\nfunction COUNT(values) {\n return values.length;\n}\n\nfunction SUM(values) {\n var sum = null;\n for (let i = 0; i < values.length; i++) {\n if (values[i] !== null) {\n sum += values[i];\n }\n }\n return sum;\n}\n\nfunction AVERAGE(values) {\n let values_non_null = getNonNullValues(values);\n if (values_non_null.length === 0) {\n return null;\n }\n return SUM(values_non_null) / values_non_null.length;\n}\n\nfunction getNonNullValues(values) {\n let values_non_null = [];\n for (let i = 0; i < values.length; i++) {\n if (values[i] !== null) {\n values_non_null.push(values[i]);\n }\n }\n return values_non_null;\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\n///////////////////////\n// Utility functions //\n///////////////////////\n\n/**\n * For given point calculate corresponding time frame.\n *\n * |__*_|_*__|___*| -> |*___|*___|*___|\n *\n * @param {*} timestamp\n * @param {*} ms_interval\n */\nfunction getPointTimeFrame(timestamp, ms_interval) {\n return Math.floor(timestamp / ms_interval) * ms_interval;\n}\n\nfunction sortByTime(series) {\n return _.sortBy(series, function (point) {\n return point[1];\n });\n}\n\n/**\n * Fill empty front and end of series by zeroes.\n *\n * | *** | | *** |\n * |___ ___| -> |*** ***|\n * @param {*} series\n * @param {*} timestamps\n */\nfunction fillZeroes(series, timestamps) {\n let prepend = [];\n let append = [];\n let new_point;\n for (let i = 0; i < timestamps.length; i++) {\n if (timestamps[i] < series[0][POINT_TIMESTAMP]) {\n new_point = [0, timestamps[i]];\n prepend.push(new_point);\n } else if (timestamps[i] > series[series.length - 1][POINT_TIMESTAMP]) {\n new_point = [0, timestamps[i]];\n append.push(new_point);\n }\n }\n return _.concat(_.concat(prepend, series), append);\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, i);\n right = findNearestRight(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, pointIndex) {\n for (var i = pointIndex; i < series.length; i++) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return null;\n}\n\nfunction findNearestLeft(series, pointIndex) {\n for (var i = pointIndex; i > 0; i--) {\n if (series[i][0] !== null) {\n return series[i];\n }\n }\n return null;\n}\n\n////////////\n// Export //\n////////////\n\nconst exportedFunctions = {\n downsample,\n groupBy,\n groupBy_perf,\n sumSeries,\n scale,\n scale_perf,\n delta,\n rate,\n simpleMovingAverage,\n expMovingAverage,\n SUM,\n COUNT,\n AVERAGE,\n MIN,\n MAX,\n MEDIAN,\n PERCENTIL,\n sortByTime\n};\n\nexport default exportedFunctions;\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/utils.js b/dist/datasource-zabbix/utils.js
deleted file mode 100644
index b19b068..0000000
--- a/dist/datasource-zabbix/utils.js
+++ /dev/null
@@ -1,292 +0,0 @@
-'use strict';
-
-System.register(['lodash', 'moment'], function (_export, _context) {
- "use strict";
-
- var _, moment, MACRO_PATTERN, 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_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']'));
- var key_params = splitKeyParams(key_params_str);
-
- // replace item parameters
- for (var i = key_params.length; i >= 1; i--) {
- name = name.replace('$' + i, key_params[i - 1]);
- }
- return name;
- }
-
- _export('expandItemName', expandItemName);
-
- function expandItems(items) {
- _.forEach(items, function (item) {
- item.item = item.name;
- item.name = expandItemName(item.item, item.key_);
- return item;
- });
- return items;
- }
- _export('expandItems', expandItems);
-
- function splitKeyParams(paramStr) {
- var params = [];
- var quoted = false;
- var in_array = false;
- var split_symbol = ',';
- var param = '';
-
- _.forEach(paramStr, function (symbol) {
- if (symbol === '"' && in_array) {
- param += symbol;
- } else if (symbol === '"' && quoted) {
- quoted = false;
- } else if (symbol === '"' && !quoted) {
- quoted = true;
- } else if (symbol === '[' && !quoted) {
- in_array = true;
- } else if (symbol === ']' && !quoted) {
- in_array = false;
- } else if (symbol === split_symbol && !quoted && !in_array) {
- params.push(param);
- param = '';
- } else {
- param += symbol;
- }
- });
-
- params.push(param);
- return params;
- }
-
- function containsMacro(itemName) {
- return MACRO_PATTERN.test(itemName);
- }
-
- _export('containsMacro', containsMacro);
-
- function replaceMacro(item, macros) {
- var itemName = item.name;
- var item_macros = itemName.match(MACRO_PATTERN);
- _.forEach(item_macros, function (macro) {
- var host_macros = _.filter(macros, function (m) {
- if (m.hostid) {
- return m.hostid === item.hostid;
- } else {
- // Add global macros
- return true;
- }
- });
-
- var macro_def = _.find(host_macros, { macro: macro });
- if (macro_def && macro_def.value) {
- var macro_value = macro_def.value;
- var macro_regex = new RegExp(escapeMacro(macro));
- itemName = itemName.replace(macro_regex, macro_value);
- }
- });
-
- return itemName;
- }
-
- _export('replaceMacro', replaceMacro);
-
- function escapeMacro(macro) {
- macro = macro.replace(/\$/, '\\\$');
- return macro;
- }
-
- /**
- * Split template query to parts of zabbix entities
- * group.host.app.item -> [group, host, app, item]
- * {group}{host.com} -> [group, host.com]
- */
- function splitTemplateQuery(query) {
- var splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
- var split = void 0;
-
- if (isContainsBraces(query)) {
- var result = query.match(splitPattern);
- split = _.map(result, function (part) {
- return _.trim(part, '{}');
- });
- } else {
- split = query.split('.');
- }
-
- return split;
- }
-
- _export('splitTemplateQuery', splitTemplateQuery);
-
- function isContainsBraces(query) {
- var bracesPattern = /^\{.+\}$/;
- return bracesPattern.test(query);
- }
-
- // Pattern for testing regex
- 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:Time ' + 'User Comments ';
- _.each(_.map(acknowledges, function (ack) {
- var timestamp = moment.unix(ack.clock);
- return '' + timestamp.format("DD MMM YYYY HH:mm:ss") + ' ' + ack.alias + ' (' + ack.name + ' ' + ack.surname + ')' + ' ' + ack.message + ' ';
- }), function (ack) {
- formatted_acknowledges = formatted_acknowledges.concat(ack);
- });
- formatted_acknowledges = formatted_acknowledges.concat('
');
- 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;
- };
- }
-
- /**
- * Apply function one by one: `sequence([a(), b(), c()]) = c(b(a()))`
- * @param {*} funcsArray functions to apply
- */
-
- _export('callOnce', callOnce);
-
- function sequence(funcsArray) {
- return function (result) {
- for (var i = 0; i < funcsArray.length; i++) {
- result = funcsArray[i].call(this, result);
- }
- return result;
- };
- }
-
- // Fix for backward compatibility with lodash 2.4
-
- _export('sequence', sequence);
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_moment) {
- moment = _moment.default;
- }],
- execute: function () {
- MACRO_PATTERN = /{\$[A-Z0-9_\.]+}/g;
-
- _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
deleted file mode 100644
index 6293307..0000000
--- a/dist/datasource-zabbix/utils.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/utils.js"],"names":["expandItemName","name","key","key_params_str","substring","indexOf","lastIndexOf","key_params","splitKeyParams","i","length","replace","expandItems","items","_","forEach","item","key_","paramStr","params","quoted","in_array","split_symbol","param","symbol","push","containsMacro","itemName","MACRO_PATTERN","test","replaceMacro","macros","item_macros","match","host_macros","filter","m","hostid","macro_def","find","macro","value","macro_value","macro_regex","RegExp","escapeMacro","splitTemplateQuery","query","splitPattern","split","isContainsBraces","result","map","trim","part","bracesPattern","isRegex","str","regexPattern","isTemplateVariable","templateVariables","variablePattern","variables","variable","includes","buildRegex","matches","pattern","flags","undefined","escapeRegex","parseInterval","interval","intervalPattern","momentInterval","exec","moment","duration","Number","valueOf","parseTimeShiftInterval","formatAcknowledges","acknowledges","formatted_acknowledges","each","ack","timestamp","unix","clock","format","alias","surname","message","concat","convertToZabbixAPIUrl","url","zabbixAPIUrlPattern","trimSlashPattern","callOnce","func","promiseKeeper","Promise","resolve","apply","arguments","then","sequence","funcsArray","call","contains"],"mappings":"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","file":"utils.js","sourcesContent":["import _ from 'lodash';\nimport moment from 'moment';\n\n/**\n * Expand Zabbix item name\n *\n * @param {string} name item name, ie \"CPU $2 time\"\n * @param {string} key item key, ie system.cpu.util[,system,avg1]\n * @return {string} expanded name, ie \"CPU system time\"\n */\nexport function expandItemName(name, key) {\n\n // extract params from key:\n // \"system.cpu.util[,system,avg1]\" --> [\"\", \"system\", \"avg1\"]\n let key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']'));\n let key_params = splitKeyParams(key_params_str);\n\n // replace item parameters\n for (let i = key_params.length; i >= 1; i--) {\n name = name.replace('$' + i, key_params[i - 1]);\n }\n return name;\n}\n\nexport function expandItems(items) {\n _.forEach(items, item => {\n item.item = item.name;\n item.name = expandItemName(item.item, item.key_);\n return item;\n });\n return items;\n}\n\nfunction splitKeyParams(paramStr) {\n let params = [];\n let quoted = false;\n let in_array = false;\n let split_symbol = ',';\n let param = '';\n\n _.forEach(paramStr, symbol => {\n if (symbol === '\"' && in_array) {\n param += symbol;\n } else if (symbol === '\"' && quoted) {\n quoted = false;\n } else if (symbol === '\"' && !quoted) {\n quoted = true;\n } else if (symbol === '[' && !quoted) {\n in_array = true;\n } else if (symbol === ']' && !quoted) {\n in_array = false;\n } else if (symbol === split_symbol && !quoted && !in_array) {\n params.push(param);\n param = '';\n } else {\n param += symbol;\n }\n });\n\n params.push(param);\n return params;\n}\n\nconst MACRO_PATTERN = /{\\$[A-Z0-9_\\.]+}/g;\n\nexport function containsMacro(itemName) {\n return MACRO_PATTERN.test(itemName);\n}\n\nexport function replaceMacro(item, macros) {\n let itemName = item.name;\n let item_macros = itemName.match(MACRO_PATTERN);\n _.forEach(item_macros, macro => {\n let host_macros = _.filter(macros, m => {\n if (m.hostid) {\n return m.hostid === item.hostid;\n } else {\n // Add global macros\n return true;\n }\n });\n\n let macro_def = _.find(host_macros, { macro: macro });\n if (macro_def && macro_def.value) {\n let macro_value = macro_def.value;\n let macro_regex = new RegExp(escapeMacro(macro));\n itemName = itemName.replace(macro_regex, macro_value);\n }\n });\n\n return itemName;\n}\n\nfunction escapeMacro(macro) {\n macro = macro.replace(/\\$/, '\\\\\\$');\n return macro;\n}\n\n/**\n * Split template query to parts of zabbix entities\n * group.host.app.item -> [group, host, app, item]\n * {group}{host.com} -> [group, host.com]\n */\nexport function splitTemplateQuery(query) {\n let splitPattern = /\\{[^\\{\\}]*\\}|\\{\\/.*\\/\\}/g;\n let split;\n\n if (isContainsBraces(query)) {\n let result = query.match(splitPattern);\n split = _.map(result, part => {\n return _.trim(part, '{}');\n });\n } else {\n split = query.split('.');\n }\n\n return split;\n}\n\nfunction isContainsBraces(query) {\n let bracesPattern = /^\\{.+\\}$/;\n return bracesPattern.test(query);\n}\n\n// Pattern for testing regex\nexport const regexPattern = /^\\/(.*)\\/([gmi]*)$/m;\n\nexport function isRegex(str) {\n return regexPattern.test(str);\n}\n\nexport function isTemplateVariable(str, templateVariables) {\n var variablePattern = /^\\$\\w+/;\n if (variablePattern.test(str)) {\n var variables = _.map(templateVariables, variable => {\n return '$' + variable.name;\n });\n return _.includes(variables, str);\n } else {\n return false;\n }\n}\n\nexport function buildRegex(str) {\n var matches = str.match(regexPattern);\n var pattern = matches[1];\n var flags = matches[2] !== \"\" ? matches[2] : undefined;\n return new RegExp(pattern, flags);\n}\n\n// Need for template variables replace\n// From Grafana's templateSrv.js\nexport function escapeRegex(value) {\n return value.replace(/[\\\\^$*+?.()|[\\]{}\\/]/g, '\\\\$&');\n}\n\nexport function parseInterval(interval) {\n var intervalPattern = /(^[\\d]+)(y|M|w|d|h|m|s)/g;\n var momentInterval = intervalPattern.exec(interval);\n return moment.duration(Number(momentInterval[1]), momentInterval[2]).valueOf();\n}\n\nexport function parseTimeShiftInterval(interval) {\n let intervalPattern = /^([\\+\\-]*)([\\d]+)(y|M|w|d|h|m|s)/g;\n let momentInterval = intervalPattern.exec(interval);\n let duration = 0;\n\n if (momentInterval[1] === '+') {\n duration = 0 - moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf();\n } else {\n duration = moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf();\n }\n\n return duration;\n}\n\n/**\n * Format acknowledges.\n *\n * @param {array} acknowledges array of Zabbix acknowledge objects\n * @return {string} HTML-formatted table\n */\nexport function formatAcknowledges(acknowledges) {\n if (acknowledges.length) {\n var formatted_acknowledges = ' Acknowledges:Time '\n + 'User Comments ';\n _.each(_.map(acknowledges, function (ack) {\n var timestamp = moment.unix(ack.clock);\n return '' + timestamp.format(\"DD MMM YYYY HH:mm:ss\") + ' ' + ack.alias\n + ' (' + ack.name + ' ' + ack.surname + ')' + ' ' + ack.message + ' ';\n }), function (ack) {\n formatted_acknowledges = formatted_acknowledges.concat(ack);\n });\n formatted_acknowledges = formatted_acknowledges.concat('
');\n return formatted_acknowledges;\n } else {\n return '';\n }\n}\n\nexport function convertToZabbixAPIUrl(url) {\n var zabbixAPIUrlPattern = /.*api_jsonrpc.php$/;\n var trimSlashPattern = /(.*?)[\\/]*$/;\n if (url.match(zabbixAPIUrlPattern)) {\n return url;\n } else {\n return url.replace(trimSlashPattern, \"$1\");\n }\n}\n\n/**\n * Wrap function to prevent multiple calls\n * when waiting for result.\n */\nexport function callOnce(func, promiseKeeper) {\n return function() {\n if (!promiseKeeper) {\n promiseKeeper = Promise.resolve(\n func.apply(this, arguments)\n .then(result => {\n promiseKeeper = null;\n return result;\n })\n );\n }\n return promiseKeeper;\n };\n}\n\n/**\n * Apply function one by one: `sequence([a(), b(), c()]) = c(b(a()))`\n * @param {*} funcsArray functions to apply\n */\nexport function sequence(funcsArray) {\n return function(result) {\n for (var i = 0; i < funcsArray.length; i++) {\n result = funcsArray[i].call(this, result);\n }\n return result;\n };\n}\n\n// Fix for backward compatibility with lodash 2.4\nif (!_.includes) {\n _.includes = _.contains;\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/connectors/dbConnector.js b/dist/datasource-zabbix/zabbix/connectors/dbConnector.js
deleted file mode 100644
index f788761..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/dbConnector.js
+++ /dev/null
@@ -1,116 +0,0 @@
-'use strict';
-
-System.register(['lodash'], function (_export, _context) {
- "use strict";
-
- var _, _createClass, DBConnector, ZabbixNotImplemented;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- return {
- setters: [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;
- };
- }();
-
- DBConnector = function () {
- function DBConnector(options, backendSrv, datasourceSrv) {
- _classCallCheck(this, DBConnector);
-
- this.backendSrv = backendSrv;
- this.datasourceSrv = datasourceSrv;
- this.datasourceId = options.datasourceId;
- this.datasourceName = options.datasourceName;
- this.datasourceTypeId = null;
- this.datasourceTypeName = null;
- }
-
- _createClass(DBConnector, [{
- key: 'loadDBDataSource',
- value: function loadDBDataSource() {
- var _this = this;
-
- if (!this.datasourceName && this.datasourceId !== undefined) {
- var ds = _.find(this.datasourceSrv.getAll(), { 'id': this.datasourceId });
- if (!ds) {
- return Promise.reject('SQL Data Source with ID ' + this.datasourceId + ' not found');
- }
- this.datasourceName = ds.name;
- }
- if (this.datasourceName) {
- return this.datasourceSrv.loadDatasource(this.datasourceName).then(function (ds) {
- _this.datasourceTypeId = ds.meta.id;
- _this.datasourceTypeName = ds.meta.name;
- return ds;
- });
- } else {
- return Promise.reject('SQL Data Source name should be specified');
- }
- }
- }, {
- key: 'testDataSource',
- value: function testDataSource() {
- throw new ZabbixNotImplemented('testDataSource()');
- }
- }, {
- key: 'getHistory',
- value: function getHistory() {
- throw new ZabbixNotImplemented('getHistory()');
- }
- }, {
- key: 'getTrends',
- value: function getTrends() {
- throw new ZabbixNotImplemented('getTrends()');
- }
- }]);
-
- return DBConnector;
- }();
-
- _export('default', DBConnector);
-
- _export('ZabbixNotImplemented', ZabbixNotImplemented = function () {
- function ZabbixNotImplemented(methodName) {
- _classCallCheck(this, ZabbixNotImplemented);
-
- this.code = null;
- this.name = 'ZabbixNotImplemented';
- this.message = 'Zabbix DB Connector Error: method ' + (methodName || '') + ' should be implemented in subclass of DBConnector';
- }
-
- _createClass(ZabbixNotImplemented, [{
- key: 'toString',
- value: function toString() {
- return this.message;
- }
- }]);
-
- return ZabbixNotImplemented;
- }());
-
- _export('ZabbixNotImplemented', ZabbixNotImplemented);
- }
- };
-});
-//# sourceMappingURL=dbConnector.js.map
diff --git a/dist/datasource-zabbix/zabbix/connectors/dbConnector.js.map b/dist/datasource-zabbix/zabbix/connectors/dbConnector.js.map
deleted file mode 100644
index eaa7f73..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/dbConnector.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../../src/datasource-zabbix/zabbix/connectors/dbConnector.js"],"names":["_","DBConnector","options","backendSrv","datasourceSrv","datasourceId","datasourceName","datasourceTypeId","datasourceTypeName","undefined","ds","find","getAll","Promise","reject","name","loadDatasource","then","meta","id","ZabbixNotImplemented","methodName","code","message"],"mappings":";;;;;;;;;;;;;;;AAAOA,O;;;;;;;;;;;;;;;;;;;;;AAMcC,iB;AACnB,6BAAYC,OAAZ,EAAqBC,UAArB,EAAiCC,aAAjC,EAAgD;AAAA;;AAC9C,eAAKD,UAAL,GAAkBA,UAAlB;AACA,eAAKC,aAAL,GAAqBA,aAArB;AACA,eAAKC,YAAL,GAAoBH,QAAQG,YAA5B;AACA,eAAKC,cAAL,GAAsBJ,QAAQI,cAA9B;AACA,eAAKC,gBAAL,GAAwB,IAAxB;AACA,eAAKC,kBAAL,GAA0B,IAA1B;AACD;;;;6CAEkB;AAAA;;AACjB,gBAAI,CAAC,KAAKF,cAAN,IAAwB,KAAKD,YAAL,KAAsBI,SAAlD,EAA6D;AAC3D,kBAAIC,KAAKV,EAAEW,IAAF,CAAO,KAAKP,aAAL,CAAmBQ,MAAnB,EAAP,EAAoC,EAAC,MAAM,KAAKP,YAAZ,EAApC,CAAT;AACA,kBAAI,CAACK,EAAL,EAAS;AACP,uBAAOG,QAAQC,MAAR,8BAA0C,KAAKT,YAA/C,gBAAP;AACD;AACD,mBAAKC,cAAL,GAAsBI,GAAGK,IAAzB;AACD;AACD,gBAAI,KAAKT,cAAT,EAAyB;AACvB,qBAAO,KAAKF,aAAL,CAAmBY,cAAnB,CAAkC,KAAKV,cAAvC,EACNW,IADM,CACD,cAAM;AACV,sBAAKV,gBAAL,GAAwBG,GAAGQ,IAAH,CAAQC,EAAhC;AACA,sBAAKX,kBAAL,GAA0BE,GAAGQ,IAAH,CAAQH,IAAlC;AACA,uBAAOL,EAAP;AACD,eALM,CAAP;AAMD,aAPD,MAOO;AACL,qBAAOG,QAAQC,MAAR,4CAAP;AACD;AACF;;;2CAKgB;AACf,kBAAM,IAAIM,oBAAJ,CAAyB,kBAAzB,CAAN;AACD;;;uCAKY;AACX,kBAAM,IAAIA,oBAAJ,CAAyB,cAAzB,CAAN;AACD;;;sCAKW;AACV,kBAAM,IAAIA,oBAAJ,CAAyB,aAAzB,CAAN;AACD;;;;;;yBAjDkBnB,W;;sCAqDRmB,oB;AACX,sCAAYC,UAAZ,EAAwB;AAAA;;AACtB,eAAKC,IAAL,GAAY,IAAZ;AACA,eAAKP,IAAL,GAAY,sBAAZ;AACA,eAAKQ,OAAL,2CAAoDF,cAAc,EAAlE;AACD;;;;qCAEU;AACT,mBAAO,KAAKE,OAAZ;AACD","file":"dbConnector.js","sourcesContent":["import _ from 'lodash';\n\n/**\n * Base class for external history database connectors. Subclasses should implement `getHistory()`, `getTrends()` and\n * `testDataSource()` methods, which describe how to fetch data from source other than Zabbix API.\n */\nexport default class DBConnector {\n constructor(options, backendSrv, datasourceSrv) {\n this.backendSrv = backendSrv;\n this.datasourceSrv = datasourceSrv;\n this.datasourceId = options.datasourceId;\n this.datasourceName = options.datasourceName;\n this.datasourceTypeId = null;\n this.datasourceTypeName = null;\n }\n\n loadDBDataSource() {\n if (!this.datasourceName && this.datasourceId !== undefined) {\n let ds = _.find(this.datasourceSrv.getAll(), {'id': this.datasourceId});\n if (!ds) {\n return Promise.reject(`SQL Data Source with ID ${this.datasourceId} not found`);\n }\n this.datasourceName = ds.name;\n }\n if (this.datasourceName) {\n return this.datasourceSrv.loadDatasource(this.datasourceName)\n .then(ds => {\n this.datasourceTypeId = ds.meta.id;\n this.datasourceTypeName = ds.meta.name;\n return ds;\n });\n } else {\n return Promise.reject(`SQL Data Source name should be specified`);\n }\n }\n\n /**\n * Send test request to datasource in order to ensure it's working.\n */\n testDataSource() {\n throw new ZabbixNotImplemented('testDataSource()');\n }\n\n /**\n * Get history data from external sources.\n */\n getHistory() {\n throw new ZabbixNotImplemented('getHistory()');\n }\n\n /**\n * Get trends data from external sources.\n */\n getTrends() {\n throw new ZabbixNotImplemented('getTrends()');\n }\n}\n\n// Define Zabbix DB Connector exception type for non-implemented methods\nexport class ZabbixNotImplemented {\n constructor(methodName) {\n this.code = null;\n this.name = 'ZabbixNotImplemented';\n this.message = `Zabbix DB Connector Error: method ${methodName || ''} should be implemented in subclass of DBConnector`;\n }\n\n toString() {\n return this.message;\n }\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/mysql.js b/dist/datasource-zabbix/zabbix/connectors/sql/mysql.js
deleted file mode 100644
index 34f8e3d..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/sql/mysql.js
+++ /dev/null
@@ -1,41 +0,0 @@
-"use strict";
-
-System.register([], function (_export, _context) {
- "use strict";
-
- var TEST_QUERY, mysql;
- /**
- * MySQL queries
- */
-
- function historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction) {
- var time_expression = "clock DIV " + intervalSec + " * " + intervalSec;
- var query = "\n SELECT CAST(itemid AS CHAR) AS metric, " + time_expression + " AS time_sec, " + aggFunction + "(value) AS value\n FROM " + table + "\n WHERE itemid IN (" + itemids + ")\n AND clock > " + timeFrom + " AND clock < " + timeTill + "\n GROUP BY " + time_expression + ", metric\n ORDER BY time_sec ASC\n ";
- return query;
- }
-
- function trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn) {
- var time_expression = "clock DIV " + intervalSec + " * " + intervalSec;
- var query = "\n SELECT CAST(itemid AS CHAR) AS metric, " + time_expression + " AS time_sec, " + aggFunction + "(" + valueColumn + ") AS value\n FROM " + table + "\n WHERE itemid IN (" + itemids + ")\n AND clock > " + timeFrom + " AND clock < " + timeTill + "\n GROUP BY " + time_expression + ", metric\n ORDER BY time_sec ASC\n ";
- return query;
- }
-
- function testQuery() {
- return TEST_QUERY;
- }
-
- return {
- setters: [],
- execute: function () {
- TEST_QUERY = "SELECT CAST(itemid AS CHAR) AS metric, clock AS time_sec, value_avg AS value FROM trends_uint LIMIT 1";
- mysql = {
- historyQuery: historyQuery,
- trendsQuery: trendsQuery,
- testQuery: testQuery
- };
-
- _export("default", mysql);
- }
- };
-});
-//# sourceMappingURL=mysql.js.map
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/mysql.js.map b/dist/datasource-zabbix/zabbix/connectors/sql/mysql.js.map
deleted file mode 100644
index befe5fb..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/sql/mysql.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../../../src/datasource-zabbix/zabbix/connectors/sql/mysql.js"],"names":["historyQuery","itemids","table","timeFrom","timeTill","intervalSec","aggFunction","time_expression","query","trendsQuery","valueColumn","testQuery","TEST_QUERY","mysql"],"mappings":";;;;;;AAAA;;;;AAIA,WAASA,YAAT,CAAsBC,OAAtB,EAA+BC,KAA/B,EAAsCC,QAAtC,EAAgDC,QAAhD,EAA0DC,WAA1D,EAAuEC,WAAvE,EAAoF;AAClF,QAAIC,iCAA+BF,WAA/B,WAAgDA,WAApD;AACA,QAAIG,0DACuCD,eADvC,sBACuED,WADvE,mCAEKJ,KAFL,+BAGiBD,OAHjB,6BAIcE,QAJd,qBAIsCC,QAJtC,uBAKSG,eALT,4CAAJ;AAQA,WAAOC,KAAP;AACD;;AAED,WAASC,WAAT,CAAqBR,OAArB,EAA8BC,KAA9B,EAAqCC,QAArC,EAA+CC,QAA/C,EAAyDC,WAAzD,EAAsEC,WAAtE,EAAmFI,WAAnF,EAAgG;AAC9F,QAAIH,iCAA+BF,WAA/B,WAAgDA,WAApD;AACA,QAAIG,0DACuCD,eADvC,sBACuED,WADvE,SACsFI,WADtF,6BAEKR,KAFL,+BAGiBD,OAHjB,6BAIcE,QAJd,qBAIsCC,QAJtC,uBAKSG,eALT,4CAAJ;AAQA,WAAOC,KAAP;AACD;;AAID,WAASG,SAAT,GAAqB;AACnB,WAAOC,UAAP;AACD;;;;;AAJKA,gB;AAMAC,W,GAAQ;AACZb,kCADY;AAEZS,gCAFY;AAGZE;AAHY,O;;yBAMCE,K","file":"mysql.js","sourcesContent":["/**\n * MySQL queries\n */\n\nfunction historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction) {\n let time_expression = `clock DIV ${intervalSec} * ${intervalSec}`;\n let query = `\n SELECT CAST(itemid AS CHAR) AS metric, ${time_expression} AS time_sec, ${aggFunction}(value) AS value\n FROM ${table}\n WHERE itemid IN (${itemids})\n AND clock > ${timeFrom} AND clock < ${timeTill}\n GROUP BY ${time_expression}, metric\n ORDER BY time_sec ASC\n `;\n return query;\n}\n\nfunction trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn) {\n let time_expression = `clock DIV ${intervalSec} * ${intervalSec}`;\n let query = `\n SELECT CAST(itemid AS CHAR) AS metric, ${time_expression} AS time_sec, ${aggFunction}(${valueColumn}) AS value\n FROM ${table}\n WHERE itemid IN (${itemids})\n AND clock > ${timeFrom} AND clock < ${timeTill}\n GROUP BY ${time_expression}, metric\n ORDER BY time_sec ASC\n `;\n return query;\n}\n\nconst TEST_QUERY = `SELECT CAST(itemid AS CHAR) AS metric, clock AS time_sec, value_avg AS value FROM trends_uint LIMIT 1`;\n\nfunction testQuery() {\n return TEST_QUERY;\n}\n\nconst mysql = {\n historyQuery,\n trendsQuery,\n testQuery\n};\n\nexport default mysql;\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/postgres.js b/dist/datasource-zabbix/zabbix/connectors/sql/postgres.js
deleted file mode 100644
index 9975800..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/sql/postgres.js
+++ /dev/null
@@ -1,40 +0,0 @@
-'use strict';
-
-System.register([], function (_export, _context) {
- "use strict";
-
- var ITEMID_FORMAT, TEST_QUERY, postgres;
-
-
- function historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction) {
- var time_expression = 'clock / ' + intervalSec + ' * ' + intervalSec;
- var query = '\n SELECT to_char(itemid, \'' + ITEMID_FORMAT + '\') AS metric, ' + time_expression + ' AS time, ' + aggFunction + '(value) AS value\n FROM ' + table + '\n WHERE itemid IN (' + itemids + ')\n AND clock > ' + timeFrom + ' AND clock < ' + timeTill + '\n GROUP BY 1, 2\n ORDER BY time ASC\n ';
- return query;
- }
-
- function trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn) {
- var time_expression = 'clock / ' + intervalSec + ' * ' + intervalSec;
- var query = '\n SELECT to_char(itemid, \'' + ITEMID_FORMAT + '\') AS metric, ' + time_expression + ' AS time, ' + aggFunction + '(' + valueColumn + ') AS value\n FROM ' + table + '\n WHERE itemid IN (' + itemids + ')\n AND clock > ' + timeFrom + ' AND clock < ' + timeTill + '\n GROUP BY 1, 2\n ORDER BY time ASC\n ';
- return query;
- }
-
- function testQuery() {
- return TEST_QUERY;
- }
-
- return {
- setters: [],
- execute: function () {
- ITEMID_FORMAT = 'FM99999999999999999999';
- TEST_QUERY = '\n SELECT to_char(itemid, \'' + ITEMID_FORMAT + '\') AS metric, clock AS time, value_avg AS value\n FROM trends_uint LIMIT 1\n';
- postgres = {
- historyQuery: historyQuery,
- trendsQuery: trendsQuery,
- testQuery: testQuery
- };
-
- _export('default', postgres);
- }
- };
-});
-//# sourceMappingURL=postgres.js.map
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/postgres.js.map b/dist/datasource-zabbix/zabbix/connectors/sql/postgres.js.map
deleted file mode 100644
index 6e110df..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/sql/postgres.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../../../src/datasource-zabbix/zabbix/connectors/sql/postgres.js"],"names":["historyQuery","itemids","table","timeFrom","timeTill","intervalSec","aggFunction","time_expression","query","ITEMID_FORMAT","trendsQuery","valueColumn","testQuery","TEST_QUERY","postgres"],"mappings":";;;;;;;;AAMA,WAASA,YAAT,CAAsBC,OAAtB,EAA+BC,KAA/B,EAAsCC,QAAtC,EAAgDC,QAAhD,EAA0DC,WAA1D,EAAuEC,WAAvE,EAAoF;AAClF,QAAIC,+BAA6BF,WAA7B,WAA8CA,WAAlD;AACA,QAAIG,4CACwBC,aADxB,uBACsDF,eADtD,kBACkFD,WADlF,mCAEKJ,KAFL,+BAGiBD,OAHjB,6BAIcE,QAJd,qBAIsCC,QAJtC,mDAAJ;AAQA,WAAOI,KAAP;AACD;;AAED,WAASE,WAAT,CAAqBT,OAArB,EAA8BC,KAA9B,EAAqCC,QAArC,EAA+CC,QAA/C,EAAyDC,WAAzD,EAAsEC,WAAtE,EAAmFK,WAAnF,EAAgG;AAC9F,QAAIJ,+BAA6BF,WAA7B,WAA8CA,WAAlD;AACA,QAAIG,4CACwBC,aADxB,uBACsDF,eADtD,kBACkFD,WADlF,SACiGK,WADjG,6BAEKT,KAFL,+BAGiBD,OAHjB,6BAIcE,QAJd,qBAIsCC,QAJtC,mDAAJ;AAQA,WAAOI,KAAP;AACD;;AAOD,WAASI,SAAT,GAAqB;AACnB,WAAOC,UAAP;AACD;;;;;AAnCKJ,mB,GAAgB,wB;AA4BhBI,gB,qCACsBJ,a;AAQtBK,c,GAAW;AACfd,kCADe;AAEfU,gCAFe;AAGfE;AAHe,O;;yBAMFE,Q","file":"postgres.js","sourcesContent":["/**\n * Postgres queries\n */\n\nconst ITEMID_FORMAT = 'FM99999999999999999999';\n\nfunction historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction) {\n let time_expression = `clock / ${intervalSec} * ${intervalSec}`;\n let query = `\n SELECT to_char(itemid, '${ITEMID_FORMAT}') AS metric, ${time_expression} AS time, ${aggFunction}(value) AS value\n FROM ${table}\n WHERE itemid IN (${itemids})\n AND clock > ${timeFrom} AND clock < ${timeTill}\n GROUP BY 1, 2\n ORDER BY time ASC\n `;\n return query;\n}\n\nfunction trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn) {\n let time_expression = `clock / ${intervalSec} * ${intervalSec}`;\n let query = `\n SELECT to_char(itemid, '${ITEMID_FORMAT}') AS metric, ${time_expression} AS time, ${aggFunction}(${valueColumn}) AS value\n FROM ${table}\n WHERE itemid IN (${itemids})\n AND clock > ${timeFrom} AND clock < ${timeTill}\n GROUP BY 1, 2\n ORDER BY time ASC\n `;\n return query;\n}\n\nconst TEST_QUERY = `\n SELECT to_char(itemid, '${ITEMID_FORMAT}') AS metric, clock AS time, value_avg AS value\n FROM trends_uint LIMIT 1\n`;\n\nfunction testQuery() {\n return TEST_QUERY;\n}\n\nconst postgres = {\n historyQuery,\n trendsQuery,\n testQuery\n};\n\nexport default postgres;\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js b/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js
deleted file mode 100644
index ea33a99..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js
+++ /dev/null
@@ -1,282 +0,0 @@
-'use strict';
-
-System.register(['lodash', './mysql', './postgres', '../dbConnector'], function (_export, _context) {
- "use strict";
-
- var _, mysql, postgres, DBConnector, _createClass, _get, supportedDatabases, DEFAULT_QUERY_LIMIT, HISTORY_TO_TABLE_MAP, TREND_TO_TABLE_MAP, consolidateByFunc, consolidateByTrendColumns, SQLConnector;
-
- 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 convertGrafanaTSResponse(time_series, items, addHostName) {
- //uniqBy is needed to deduplicate
- var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid');
- var grafanaSeries = _.map(time_series, function (series) {
- var itemid = series.name;
- var item = _.find(items, { 'itemid': itemid });
- var alias = item.name;
- //only when actual multi hosts selected
- if (_.keys(hosts).length > 1 && addHostName) {
- var host = _.find(hosts, { 'hostid': item.hostid });
- alias = host.name + ": " + alias;
- }
- // CachingProxy deduplicates requests and returns one time series for equal queries.
- // Clone is needed to prevent changing of series object shared between all targets.
- var datapoints = _.cloneDeep(series.points);
- return {
- target: alias,
- datapoints: datapoints
- };
- });
-
- return _.sortBy(grafanaSeries, 'target');
- }
-
- function compactSQLQuery(query) {
- return query.replace(/\s+/g, ' ');
- }
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_mysql) {
- mysql = _mysql.default;
- }, function (_postgres) {
- postgres = _postgres.default;
- }, function (_dbConnector) {
- DBConnector = _dbConnector.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;
- };
- }();
-
- _get = function get(object, property, receiver) {
- if (object === null) object = Function.prototype;
- var desc = Object.getOwnPropertyDescriptor(object, property);
-
- if (desc === undefined) {
- var parent = Object.getPrototypeOf(object);
-
- if (parent === null) {
- return undefined;
- } else {
- return get(parent, property, receiver);
- }
- } else if ("value" in desc) {
- return desc.value;
- } else {
- var getter = desc.get;
-
- if (getter === undefined) {
- return undefined;
- }
-
- return getter.call(receiver);
- }
- };
-
- supportedDatabases = {
- mysql: 'mysql',
- postgres: 'postgres'
- };
- DEFAULT_QUERY_LIMIT = 10000;
- HISTORY_TO_TABLE_MAP = {
- '0': 'history',
- '1': 'history_str',
- '2': 'history_log',
- '3': 'history_uint',
- '4': 'history_text'
- };
- TREND_TO_TABLE_MAP = {
- '0': 'trends',
- '3': 'trends_uint'
- };
- consolidateByFunc = {
- 'avg': 'AVG',
- 'min': 'MIN',
- 'max': 'MAX',
- 'sum': 'SUM',
- 'count': 'COUNT'
- };
- consolidateByTrendColumns = {
- 'avg': 'value_avg',
- 'min': 'value_min',
- 'max': 'value_max'
- };
-
- _export('SQLConnector', SQLConnector = function (_DBConnector) {
- _inherits(SQLConnector, _DBConnector);
-
- function SQLConnector(options, backendSrv, datasourceSrv) {
- _classCallCheck(this, SQLConnector);
-
- var _this = _possibleConstructorReturn(this, (SQLConnector.__proto__ || Object.getPrototypeOf(SQLConnector)).call(this, options, backendSrv, datasourceSrv));
-
- _this.limit = options.limit || DEFAULT_QUERY_LIMIT;
- _this.sqlDialect = null;
-
- _get(SQLConnector.prototype.__proto__ || Object.getPrototypeOf(SQLConnector.prototype), 'loadDBDataSource', _this).call(_this).then(function () {
- return _this.loadSQLDialect();
- });
- return _this;
- }
-
- _createClass(SQLConnector, [{
- key: 'loadSQLDialect',
- value: function loadSQLDialect() {
- if (this.datasourceTypeId === supportedDatabases.postgres) {
- this.sqlDialect = postgres;
- } else {
- this.sqlDialect = mysql;
- }
- }
- }, {
- key: 'testDataSource',
- value: function testDataSource() {
- var testQuery = this.sqlDialect.testQuery();
- return this.invokeSQLQuery(testQuery);
- }
- }, {
- key: 'getHistory',
- value: function getHistory(items, timeFrom, timeTill, options) {
- var _this2 = this;
-
- var intervalMs = options.intervalMs,
- consolidateBy = options.consolidateBy;
-
- var intervalSec = Math.ceil(intervalMs / 1000);
-
- consolidateBy = consolidateBy || 'avg';
- var aggFunction = consolidateByFunc[consolidateBy];
-
- // Group items by value type and perform request for each value type
- var grouped_items = _.groupBy(items, 'value_type');
- var promises = _.map(grouped_items, function (items, value_type) {
- var itemids = _.map(items, 'itemid').join(', ');
- var table = HISTORY_TO_TABLE_MAP[value_type];
- var query = _this2.sqlDialect.historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction);
-
- query = compactSQLQuery(query);
- return _this2.invokeSQLQuery(query);
- });
-
- return Promise.all(promises).then(function (results) {
- return _.flatten(results);
- });
- }
- }, {
- key: 'getTrends',
- value: function getTrends(items, timeFrom, timeTill, options) {
- var _this3 = this;
-
- var intervalMs = options.intervalMs,
- consolidateBy = options.consolidateBy;
-
- var intervalSec = Math.ceil(intervalMs / 1000);
-
- consolidateBy = consolidateBy || 'avg';
- var aggFunction = consolidateByFunc[consolidateBy];
-
- // Group items by value type and perform request for each value type
- var grouped_items = _.groupBy(items, 'value_type');
- var promises = _.map(grouped_items, function (items, value_type) {
- var itemids = _.map(items, 'itemid').join(', ');
- var table = TREND_TO_TABLE_MAP[value_type];
- var valueColumn = _.includes(['avg', 'min', 'max'], consolidateBy) ? consolidateBy : 'avg';
- valueColumn = consolidateByTrendColumns[valueColumn];
- var query = _this3.sqlDialect.trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn);
-
- query = compactSQLQuery(query);
- return _this3.invokeSQLQuery(query);
- });
-
- return Promise.all(promises).then(function (results) {
- return _.flatten(results);
- });
- }
- }, {
- key: 'handleGrafanaTSResponse',
- value: function handleGrafanaTSResponse(history, items) {
- var addHostName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
-
- return convertGrafanaTSResponse(history, items, addHostName);
- }
- }, {
- key: 'invokeSQLQuery',
- value: function invokeSQLQuery(query) {
- var queryDef = {
- refId: 'A',
- format: 'time_series',
- datasourceId: this.datasourceId,
- rawSql: query,
- maxDataPoints: this.limit
- };
-
- return this.backendSrv.datasourceRequest({
- url: '/api/tsdb/query',
- method: 'POST',
- data: {
- queries: [queryDef]
- }
- }).then(function (response) {
- var results = response.data.results;
- if (results['A']) {
- return results['A'].series;
- } else {
- return null;
- }
- });
- }
- }]);
-
- return SQLConnector;
- }(DBConnector));
-
- _export('SQLConnector', SQLConnector);
- }
- };
-});
-//# sourceMappingURL=sqlConnector.js.map
diff --git a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js.map b/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js.map
deleted file mode 100644
index 240a01f..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../../../src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js"],"names":["convertGrafanaTSResponse","time_series","items","addHostName","hosts","_","uniqBy","flatten","map","grafanaSeries","itemid","series","name","item","find","alias","keys","length","host","hostid","datapoints","cloneDeep","points","target","sortBy","compactSQLQuery","query","replace","mysql","postgres","DBConnector","supportedDatabases","DEFAULT_QUERY_LIMIT","HISTORY_TO_TABLE_MAP","TREND_TO_TABLE_MAP","consolidateByFunc","consolidateByTrendColumns","SQLConnector","options","backendSrv","datasourceSrv","limit","sqlDialect","then","loadSQLDialect","datasourceTypeId","testQuery","invokeSQLQuery","timeFrom","timeTill","intervalMs","consolidateBy","intervalSec","Math","ceil","aggFunction","grouped_items","groupBy","promises","value_type","itemids","join","table","historyQuery","Promise","all","results","valueColumn","includes","trendsQuery","history","queryDef","refId","format","datasourceId","rawSql","maxDataPoints","datasourceRequest","url","method","data","queries","response"],"mappings":"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","file":"sqlConnector.js","sourcesContent":["import _ from 'lodash';\nimport mysql from './mysql';\nimport postgres from './postgres';\nimport DBConnector from '../dbConnector';\n\nconst supportedDatabases = {\n mysql: 'mysql',\n postgres: 'postgres'\n};\n\nconst DEFAULT_QUERY_LIMIT = 10000;\nconst HISTORY_TO_TABLE_MAP = {\n '0': 'history',\n '1': 'history_str',\n '2': 'history_log',\n '3': 'history_uint',\n '4': 'history_text'\n};\n\nconst TREND_TO_TABLE_MAP = {\n '0': 'trends',\n '3': 'trends_uint'\n};\n\nconst consolidateByFunc = {\n 'avg': 'AVG',\n 'min': 'MIN',\n 'max': 'MAX',\n 'sum': 'SUM',\n 'count': 'COUNT'\n};\n\nconst consolidateByTrendColumns = {\n 'avg': 'value_avg',\n 'min': 'value_min',\n 'max': 'value_max'\n};\n\nexport class SQLConnector extends DBConnector {\n constructor(options, backendSrv, datasourceSrv) {\n super(options, backendSrv, datasourceSrv);\n\n this.limit = options.limit || DEFAULT_QUERY_LIMIT;\n this.sqlDialect = null;\n\n super.loadDBDataSource()\n .then(() => this.loadSQLDialect());\n }\n\n loadSQLDialect() {\n if (this.datasourceTypeId === supportedDatabases.postgres) {\n this.sqlDialect = postgres;\n } else {\n this.sqlDialect = mysql;\n }\n }\n\n /**\n * Try to invoke test query for one of Zabbix database tables.\n */\n testDataSource() {\n let testQuery = this.sqlDialect.testQuery();\n return this.invokeSQLQuery(testQuery);\n }\n\n getHistory(items, timeFrom, timeTill, options) {\n let {intervalMs, consolidateBy} = options;\n let intervalSec = Math.ceil(intervalMs / 1000);\n\n consolidateBy = consolidateBy || 'avg';\n let aggFunction = consolidateByFunc[consolidateBy];\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid').join(', ');\n let table = HISTORY_TO_TABLE_MAP[value_type];\n let query = this.sqlDialect.historyQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction);\n\n query = compactSQLQuery(query);\n return this.invokeSQLQuery(query);\n });\n\n return Promise.all(promises).then(results => {\n return _.flatten(results);\n });\n }\n\n getTrends(items, timeFrom, timeTill, options) {\n let { intervalMs, consolidateBy } = options;\n let intervalSec = Math.ceil(intervalMs / 1000);\n\n consolidateBy = consolidateBy || 'avg';\n let aggFunction = consolidateByFunc[consolidateBy];\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid').join(', ');\n let table = TREND_TO_TABLE_MAP[value_type];\n let valueColumn = _.includes(['avg', 'min', 'max'], consolidateBy) ? consolidateBy : 'avg';\n valueColumn = consolidateByTrendColumns[valueColumn];\n let query = this.sqlDialect.trendsQuery(itemids, table, timeFrom, timeTill, intervalSec, aggFunction, valueColumn);\n\n query = compactSQLQuery(query);\n return this.invokeSQLQuery(query);\n });\n\n return Promise.all(promises).then(results => {\n return _.flatten(results);\n });\n }\n\n handleGrafanaTSResponse(history, items, addHostName = true) {\n return convertGrafanaTSResponse(history, items, addHostName);\n }\n\n invokeSQLQuery(query) {\n let queryDef = {\n refId: 'A',\n format: 'time_series',\n datasourceId: this.datasourceId,\n rawSql: query,\n maxDataPoints: this.limit\n };\n\n return this.backendSrv.datasourceRequest({\n url: '/api/tsdb/query',\n method: 'POST',\n data: {\n queries: [queryDef],\n }\n })\n .then(response => {\n let results = response.data.results;\n if (results['A']) {\n return results['A'].series;\n } else {\n return null;\n }\n });\n }\n}\n\n///////////////////////////////////////////////////////////////////////////////\n\nfunction convertGrafanaTSResponse(time_series, items, addHostName) {\n //uniqBy is needed to deduplicate\n var hosts = _.uniqBy(_.flatten(_.map(items, 'hosts')), 'hostid');\n let grafanaSeries = _.map(time_series, series => {\n let itemid = series.name;\n var item = _.find(items, {'itemid': itemid});\n var alias = item.name;\n //only when actual multi hosts selected\n if (_.keys(hosts).length > 1 && addHostName) {\n var host = _.find(hosts, {'hostid': item.hostid});\n alias = host.name + \": \" + alias;\n }\n // CachingProxy deduplicates requests and returns one time series for equal queries.\n // Clone is needed to prevent changing of series object shared between all targets.\n let datapoints = _.cloneDeep(series.points);\n return {\n target: alias,\n datapoints: datapoints\n };\n });\n\n return _.sortBy(grafanaSeries, 'target');\n}\n\nfunction compactSQLQuery(query) {\n return query.replace(/\\s+/g, ' ');\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js b/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js
deleted file mode 100644
index 51cf203..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js
+++ /dev/null
@@ -1,545 +0,0 @@
-'use strict';
-
-System.register(['lodash', '../../../utils', './zabbixAPICore'], function (_export, _context) {
- "use strict";
-
- var _, utils, ZabbixAPICore, _slicedToArray, _createClass, ZabbixAPIConnector;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- function filterTriggersByAcknowledge(triggers, acknowledged) {
- if (acknowledged === 0) {
- return _.filter(triggers, function (trigger) {
- return trigger.lastEvent.acknowledged === "0";
- });
- } else if (acknowledged === 1) {
- return _.filter(triggers, function (trigger) {
- return trigger.lastEvent.acknowledged === "1";
- });
- } else {
- return triggers;
- }
- }
-
- function isNotAuthorized(message) {
- return message === "Session terminated, re-login, please." || message === "Not authorised." || message === "Not authorized.";
- }
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_utils) {
- utils = _utils;
- }, function (_zabbixAPICore) {
- ZabbixAPICore = _zabbixAPICore.ZabbixAPICore;
- }],
- 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('ZabbixAPIConnector', ZabbixAPIConnector = function () {
- function ZabbixAPIConnector(api_url, username, password, basicAuth, withCredentials, backendSrv) {
- _classCallCheck(this, ZabbixAPIConnector);
-
- 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.zabbixAPICore = new ZabbixAPICore(backendSrv);
-
- this.getTrend = this.getTrend_ZBXNEXT1193;
- //getTrend = getTrend_30;
- }
-
- //////////////////////////
- // Core method wrappers //
- //////////////////////////
-
- _createClass(ZabbixAPIConnector, [{
- 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;
- return Promise.reject(message);
- }
- });
- }
- }, {
- 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: 'extend',
- 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(utils.expandItems);
- }
- }, {
- key: 'getItemsByIDs',
- value: function getItemsByIDs(itemids) {
- var params = {
- itemids: itemids,
- output: ['name', 'key_', 'value_type', 'hostid', 'status', 'state'],
- webitems: true,
- selectHosts: ['hostid', 'name']
- };
-
- return this.request('item.get', params).then(utils.expandItems);
- }
- }, {
- key: 'getMacros',
- value: function getMacros(hostids) {
- var params = {
- output: 'extend',
- hostids: hostids
- };
-
- return this.request('usermacro.get', params);
- }
- }, {
- key: 'getGlobalMacros',
- value: function getGlobalMacros() {
- var params = {
- output: 'extend',
- globalmacro: true
- };
-
- return this.request('usermacro.get', params);
- }
- }, {
- 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, timeRange) {
- var _timeRange = _slicedToArray(timeRange, 2),
- timeFrom = _timeRange[0],
- timeTo = _timeRange[1];
-
- var params = {
- serviceids: serviceids,
- intervals: [{
- from: timeFrom,
- to: timeTo
- }]
- };
- return this.request('service.getsla', params);
- }
- }, {
- key: 'getTriggers',
- value: function getTriggers(groupids, hostids, applicationids, options) {
- var showTriggers = options.showTriggers,
- maintenance = options.maintenance,
- timeFrom = options.timeFrom,
- timeTo = options.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', 'maintenance_status'],
- selectItems: ['name', 'key_', 'lastvalue'],
- selectLastEvent: 'extend',
- selectTags: 'extend'
- };
-
- if (showTriggers) {
- params.filter.value = showTriggers;
- }
-
- if (maintenance) {
- params.maintenance = true;
- }
-
- 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;
- });
- });
- }
- }, {
- key: 'getAlerts',
- value: function getAlerts(itemids, timeFrom, timeTo) {
- var params = {
- output: 'extend',
- itemids: itemids,
- expandDescription: true,
- expandData: true,
- expandComment: true,
- monitored: true,
- skipDependent: true,
- //only_true: true,
- // filter: {
- // value: 1
- // },
- selectLastEvent: 'extend'
- };
-
- if (timeFrom || timeTo) {
- params.lastChangeSince = timeFrom;
- params.lastChangeTill = timeTo;
- }
-
- return this.request('trigger.get', params);
- }
- }, {
- key: 'getHostAlerts',
- value: function getHostAlerts(hostids, applicationids, options) {
- var minSeverity = options.minSeverity,
- acknowledged = options.acknowledged,
- count = options.count,
- timeFrom = options.timeFrom,
- timeTo = options.timeTo;
-
- var params = {
- output: 'extend',
- hostids: hostids,
- min_severity: minSeverity,
- filter: { value: 1 },
- expandDescription: true,
- expandData: true,
- expandComment: true,
- monitored: true,
- skipDependent: true,
- selectLastEvent: 'extend',
- selectGroups: 'extend',
- selectHosts: ['host', 'name']
- };
-
- if (count && acknowledged !== 0 && acknowledged !== 1) {
- params.countOutput = true;
- }
-
- if (applicationids && applicationids.length) {
- params.applicationids = applicationids;
- }
-
- if (timeFrom || timeTo) {
- params.lastChangeSince = timeFrom;
- params.lastChangeTill = timeTo;
- }
-
- return this.request('trigger.get', params).then(function (triggers) {
- if (!count || acknowledged === 0 || acknowledged === 1) {
- triggers = filterTriggersByAcknowledge(triggers, acknowledged);
- if (count) {
- triggers = triggers.length;
- }
- }
- return triggers;
- });
- }
- }]);
-
- return ZabbixAPIConnector;
- }());
-
- _export('ZabbixAPIConnector', ZabbixAPIConnector);
- }
- };
-});
-//# sourceMappingURL=zabbixAPIConnector.js.map
diff --git a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js.map b/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js.map
deleted file mode 100644
index e55e78e..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../../../src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js"],"names":["filterTriggersByAcknowledge","triggers","acknowledged","_","filter","trigger","lastEvent","isNotAuthorized","message","utils","ZabbixAPICore","ZabbixAPIConnector","api_url","username","password","basicAuth","withCredentials","backendSrv","url","auth","requestOptions","loginPromise","loginErrorCount","maxLoginAttempts","zabbixAPICore","getTrend","getTrend_ZBXNEXT1193","method","params","request","catch","error","data","loginOnce","then","statusText","Promise","reject","resolve","login","getVersion","eventid","eventids","output","sortfield","real_hosts","groupids","hostids","appids","itemtype","webitems","selectHosts","applicationids","value_type","expandItems","itemids","globalmacro","itemid","items","length","lastvalue","timeFrom","timeTill","grouped_items","groupBy","promises","map","history","sortorder","time_from","time_till","all","flatten","trend","self","serviceids","timeRange","timeTo","intervals","from","to","options","showTriggers","maintenance","expandDescription","expandData","expandComment","monitored","skipDependent","value","selectGroups","selectItems","selectLastEvent","selectTags","lastChangeSince","lastChangeTill","objectids","showEvents","select_acknowledges","preservekeys","events","event","acknowledges","minSeverity","count","min_severity","countOutput"],"mappings":"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","file":"zabbixAPIConnector.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from '../../../utils';\nimport { ZabbixAPICore } from './zabbixAPICore';\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 */\nexport class ZabbixAPIConnector {\n constructor(api_url, username, password, basicAuth, withCredentials, backendSrv) {\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.zabbixAPICore = new ZabbixAPICore(backendSrv);\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 return Promise.reject(message);\n }\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: 'extend',\n hostids: hostids\n };\n\n return this.request('application.get', params);\n }\n\n /**\n * Get Zabbix items\n * @param {[type]} hostids host ids\n * @param {[type]} appids application ids\n * @param {String} itemtype 'num' or 'text'\n * @return {[type]} array of items\n */\n getItems(hostids, appids, itemtype) {\n var params = {\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n sortfield: 'name',\n webitems: true,\n filter: {},\n selectHosts: ['hostid', 'name']\n };\n if (hostids) {\n params.hostids = hostids;\n }\n if (appids) {\n params.applicationids = appids;\n }\n if (itemtype === 'num') {\n // Return only numeric metrics\n params.filter.value_type = [0, 3];\n }\n if (itemtype === 'text') {\n // Return only text metrics\n params.filter.value_type = [1, 2, 4];\n }\n\n return this.request('item.get', params)\n .then(utils.expandItems);\n }\n\n getItemsByIDs(itemids) {\n var params = {\n itemids: itemids,\n output: [\n 'name', 'key_',\n 'value_type',\n 'hostid',\n 'status',\n 'state'\n ],\n webitems: true,\n selectHosts: ['hostid', 'name']\n };\n\n return this.request('item.get', params)\n .then(utils.expandItems);\n }\n\n getMacros(hostids) {\n var params = {\n output: 'extend',\n hostids: hostids\n };\n\n return this.request('usermacro.get', params);\n }\n\n getGlobalMacros() {\n var params = {\n output: 'extend',\n globalmacro: true\n };\n\n return this.request('usermacro.get', params);\n }\n\n getLastValue(itemid) {\n var params = {\n output: ['lastvalue'],\n itemids: itemid\n };\n return this.request('item.get', params)\n .then(items => items.length ? items[0].lastvalue : null);\n }\n\n /**\n * Perform history query from Zabbix API\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} timeFrom Time in seconds\n * @param {Number} timeTill Time in seconds\n * @return {Array} Array of Zabbix history objects\n */\n getHistory(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n history: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('history.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n /**\n * Perform trends query from Zabbix API\n * Use trends api extension from ZBXNEXT-1193 patch.\n *\n * @param {Array} items Array of Zabbix item objects\n * @param {Number} time_from Time in seconds\n * @param {Number} time_till Time in seconds\n * @return {Array} Array of Zabbix trend objects\n */\n getTrend_ZBXNEXT1193(items, timeFrom, timeTill) {\n\n // Group items by value type and perform request for each value type\n let grouped_items = _.groupBy(items, 'value_type');\n let promises = _.map(grouped_items, (items, value_type) => {\n let itemids = _.map(items, 'itemid');\n let params = {\n output: 'extend',\n trend: value_type,\n itemids: itemids,\n sortfield: 'clock',\n sortorder: 'ASC',\n time_from: timeFrom\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (timeTill) {\n params.time_till = timeTill;\n }\n\n return this.request('trend.get', params);\n });\n\n return Promise.all(promises).then(_.flatten);\n }\n\n getTrend_30(items, time_from, time_till, value_type) {\n var self = this;\n var itemids = _.map(items, 'itemid');\n\n var params = {\n output: [\"itemid\",\n \"clock\",\n value_type\n ],\n itemids: itemids,\n time_from: time_from\n };\n\n // Relative queries (e.g. last hour) don't include an end time\n if (time_till) {\n params.time_till = time_till;\n }\n\n return self.request('trend.get', params);\n }\n\n getITService(serviceids) {\n var params = {\n output: 'extend',\n serviceids: serviceids\n };\n return this.request('service.get', params);\n }\n\n getSLA(serviceids, timeRange) {\n let [timeFrom, timeTo] = timeRange;\n var params = {\n serviceids: serviceids,\n intervals: [{\n from: timeFrom,\n to: timeTo\n }]\n };\n return this.request('service.getsla', params);\n }\n\n getTriggers(groupids, hostids, applicationids, options) {\n let {showTriggers, maintenance, timeFrom, timeTo} = options;\n\n let params = {\n output: 'extend',\n groupids: groupids,\n hostids: hostids,\n applicationids: applicationids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n filter: {\n value: 1\n },\n selectGroups: ['name'],\n selectHosts: ['name', 'host', 'maintenance_status'],\n selectItems: ['name', 'key_', 'lastvalue'],\n selectLastEvent: 'extend',\n selectTags: 'extend'\n };\n\n if (showTriggers) {\n params.filter.value = showTriggers;\n }\n\n if (maintenance) {\n params.maintenance = true;\n }\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n\n getEvents(objectids, timeFrom, timeTo, showEvents) {\n var params = {\n output: 'extend',\n time_from: timeFrom,\n time_till: timeTo,\n objectids: objectids,\n select_acknowledges: 'extend',\n selectHosts: 'extend',\n value: showEvents\n };\n\n return this.request('event.get', params);\n }\n\n getAcknowledges(eventids) {\n var params = {\n output: 'extend',\n eventids: eventids,\n preservekeys: true,\n select_acknowledges: 'extend',\n sortfield: 'clock',\n sortorder: 'DESC'\n };\n\n return this.request('event.get', params)\n .then(events => {\n return _.filter(events, (event) => event.acknowledges.length);\n });\n }\n\n getAlerts(itemids, timeFrom, timeTo) {\n var params = {\n output: 'extend',\n itemids: itemids,\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n //only_true: true,\n // filter: {\n // value: 1\n // },\n selectLastEvent: 'extend'\n };\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params);\n }\n\n getHostAlerts(hostids, applicationids, options) {\n let {minSeverity, acknowledged, count, timeFrom, timeTo} = options;\n let params = {\n output: 'extend',\n hostids: hostids,\n min_severity: minSeverity,\n filter: { value: 1 },\n expandDescription: true,\n expandData: true,\n expandComment: true,\n monitored: true,\n skipDependent: true,\n selectLastEvent: 'extend',\n selectGroups: 'extend',\n selectHosts: ['host', 'name']\n };\n\n if (count && acknowledged !== 0 && acknowledged !== 1) {\n params.countOutput = true;\n }\n\n if (applicationids && applicationids.length) {\n params.applicationids = applicationids;\n }\n\n if (timeFrom || timeTo) {\n params.lastChangeSince = timeFrom;\n params.lastChangeTill = timeTo;\n }\n\n return this.request('trigger.get', params)\n .then((triggers) => {\n if (!count || acknowledged === 0 || acknowledged === 1) {\n triggers = filterTriggersByAcknowledge(triggers, acknowledged);\n if (count) {\n triggers = triggers.length;\n }\n }\n return triggers;\n });\n }\n}\n\nfunction filterTriggersByAcknowledge(triggers, acknowledged) {\n if (acknowledged === 0) {\n return _.filter(triggers, (trigger) => trigger.lastEvent.acknowledged === \"0\");\n } else if (acknowledged === 1) {\n return _.filter(triggers, (trigger) => trigger.lastEvent.acknowledged === \"1\");\n } else {\n return triggers;\n }\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"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js b/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js
deleted file mode 100644
index 8ce8c9b..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js
+++ /dev/null
@@ -1,148 +0,0 @@
-"use strict";
-
-System.register([], function (_export, _context) {
- "use strict";
-
- var _createClass, ZabbixAPICore, ZabbixAPIError;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- return {
- setters: [],
- 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("ZabbixAPICore", ZabbixAPICore = function () {
-
- /** @ngInject */
- function ZabbixAPICore(backendSrv) {
- _classCallCheck(this, ZabbixAPICore);
-
- this.backendSrv = backendSrv;
- }
-
- /**
- * Request data from Zabbix API
- * @return {object} response.result
- */
-
-
- _createClass(ZabbixAPICore, [{
- 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 ZabbixAPICore;
- }());
-
- _export("ZabbixAPICore", ZabbixAPICore);
-
- _export("ZabbixAPIError", ZabbixAPIError = function () {
- function ZabbixAPIError(error) {
- _classCallCheck(this, ZabbixAPIError);
-
- this.code = error.code || null;
- this.name = error.message || "";
- this.data = error.data || "";
- this.message = "Zabbix API Error: " + this.name + " " + this.data;
- }
-
- _createClass(ZabbixAPIError, [{
- key: "toString",
- value: function toString() {
- return this.name + " " + this.data;
- }
- }]);
-
- return ZabbixAPIError;
- }());
-
- _export("ZabbixAPIError", ZabbixAPIError);
- }
- };
-});
-//# sourceMappingURL=zabbixAPICore.js.map
diff --git a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js.map b/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js.map
deleted file mode 100644
index 46e9d89..0000000
--- a/dist/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../../../src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js"],"names":["ZabbixAPICore","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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAIaA,a;;AAEX;AACA,+BAAYC,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,UAACC,QAAD,EAAc;AAClB,kBAAI,CAACA,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,IAAN,IAAc,IAA1B;AACA,eAAKC,IAAL,GAAYP,MAAMQ,OAAN,IAAiB,EAA7B;AACA,eAAKlB,IAAL,GAAYU,MAAMV,IAAN,IAAc,EAA1B;AACA,eAAKkB,OAAL,GAAe,uBAAuB,KAAKD,IAA5B,GAAmC,GAAnC,GAAyC,KAAKjB,IAA7D;AACD;;;;qCAEU;AACT,mBAAO,KAAKiB,IAAL,GAAY,GAAZ,GAAkB,KAAKjB,IAA9B;AACD","file":"zabbixAPICore.js","sourcesContent":["/**\n * General Zabbix API methods\n */\n\nexport class ZabbixAPICore {\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 || null;\n this.name = error.message || \"\";\n this.data = error.data || \"\";\n this.message = \"Zabbix API Error: \" + this.name + \" \" + this.data;\n }\n\n toString() {\n return this.name + \" \" + this.data;\n }\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/proxy/cachingProxy.js b/dist/datasource-zabbix/zabbix/proxy/cachingProxy.js
deleted file mode 100644
index 3a917ab..0000000
--- a/dist/datasource-zabbix/zabbix/proxy/cachingProxy.js
+++ /dev/null
@@ -1,150 +0,0 @@
-"use strict";
-
-System.register([], function (_export, _context) {
- "use strict";
-
- var _createClass, CachingProxy;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- /**
- * Wrap request to prevent multiple calls
- * with same params when waiting for result.
- */
- function callOnce(func, promiseKeeper, funcScope) {
- return function () {
- var hash = getRequestHash(arguments);
- if (!promiseKeeper[hash]) {
- promiseKeeper[hash] = Promise.resolve(func.apply(funcScope, arguments).then(function (result) {
- promiseKeeper[hash] = null;
- return result;
- }));
- }
- return promiseKeeper[hash];
- };
- }
-
- function _cacheRequest(func, funcName, funcScope, self) {
- return function () {
- if (!self.cache[funcName]) {
- self.cache[funcName] = {};
- }
-
- var cacheObject = self.cache[funcName];
- var hash = getRequestHash(arguments);
- if (self.cacheEnabled && !self._isExpired(cacheObject[hash])) {
- return Promise.resolve(cacheObject[hash].value);
- } else {
- return func.apply(funcScope, arguments).then(function (result) {
- cacheObject[hash] = {
- value: result,
- timestamp: Date.now()
- };
- return result;
- });
- }
- };
- }
-
- function getRequestHash(args) {
- var argsJson = JSON.stringify(args);
- return argsJson.getHash();
- }
-
- return {
- setters: [],
- 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("CachingProxy", CachingProxy = function () {
- function CachingProxy(cacheOptions) {
- _classCallCheck(this, CachingProxy);
-
- this.cacheEnabled = cacheOptions.enabled;
- this.ttl = cacheOptions.ttl || 600000; // 10 minutes by default
-
- // Internal objects for data storing
- this.cache = {};
- this.promises = {};
- }
-
- /**
- * Check that result is present in the cache and is up to date or send request otherwise.
- */
-
-
- _createClass(CachingProxy, [{
- key: "cacheRequest",
- value: function cacheRequest(func, funcName, funcScope) {
- return _cacheRequest(func, funcName, funcScope, this);
- }
- }, {
- key: "proxyfy",
- value: function proxyfy(func, funcName, funcScope) {
- if (!this.promises[funcName]) {
- this.promises[funcName] = {};
- }
- var promiseKeeper = this.promises[funcName];
- return callOnce(func, promiseKeeper, funcScope);
- }
- }, {
- key: "proxyfyWithCache",
- value: function proxyfyWithCache(func, funcName, funcScope) {
- var proxyfied = this.proxyfy(func, funcName, funcScope);
- return this.cacheRequest(proxyfied, funcName, funcScope);
- }
- }, {
- 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;
- }
- }
- }]);
-
- return CachingProxy;
- }());
-
- _export("CachingProxy", CachingProxy);
-
- 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;
- };
- }
- };
-});
-//# sourceMappingURL=cachingProxy.js.map
diff --git a/dist/datasource-zabbix/zabbix/proxy/cachingProxy.js.map b/dist/datasource-zabbix/zabbix/proxy/cachingProxy.js.map
deleted file mode 100644
index 0018ea3..0000000
--- a/dist/datasource-zabbix/zabbix/proxy/cachingProxy.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../../src/datasource-zabbix/zabbix/proxy/cachingProxy.js"],"names":["callOnce","func","promiseKeeper","funcScope","hash","getRequestHash","arguments","Promise","resolve","apply","then","result","cacheRequest","funcName","self","cache","cacheObject","cacheEnabled","_isExpired","value","timestamp","Date","now","args","argsJson","JSON","stringify","getHash","CachingProxy","cacheOptions","enabled","ttl","promises","proxyfied","proxyfy","object_age","String","prototype","i","chr","len","length","charCodeAt"],"mappings":"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","file":"cachingProxy.js","sourcesContent":["/**\n * This module allows to deduplicate function calls with the same params and\n * cache result of function call.\n */\n\nexport class CachingProxy {\n\n constructor(cacheOptions) {\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 this.promises = {};\n }\n\n /**\n * Check that result is present in the cache and is up to date or send request otherwise.\n */\n cacheRequest(func, funcName, funcScope) {\n return cacheRequest(func, funcName, funcScope, this);\n }\n\n /**\n * Wrap request to prevent multiple calls with same params when request is waiting for response.\n */\n proxyfy(func, funcName, funcScope) {\n if (!this.promises[funcName]) {\n this.promises[funcName] = {};\n }\n const promiseKeeper = this.promises[funcName];\n return callOnce(func, promiseKeeper, funcScope);\n }\n\n proxyfyWithCache(func, funcName, funcScope) {\n let proxyfied = this.proxyfy(func, funcName, funcScope);\n return this.cacheRequest(proxyfied, funcName, funcScope);\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/**\n * Wrap request to prevent multiple calls\n * with same params when waiting for result.\n */\nfunction callOnce(func, promiseKeeper, funcScope) {\n return function() {\n var hash = getRequestHash(arguments);\n if (!promiseKeeper[hash]) {\n promiseKeeper[hash] = Promise.resolve(\n func.apply(funcScope, arguments)\n .then(result => {\n promiseKeeper[hash] = null;\n return result;\n })\n );\n }\n return promiseKeeper[hash];\n };\n}\n\nfunction cacheRequest(func, funcName, funcScope, self) {\n return function() {\n if (!self.cache[funcName]) {\n self.cache[funcName] = {};\n }\n\n let cacheObject = self.cache[funcName];\n let hash = getRequestHash(arguments);\n if (self.cacheEnabled && !self._isExpired(cacheObject[hash])) {\n return Promise.resolve(cacheObject[hash].value);\n } else {\n return func.apply(funcScope, arguments)\n .then(result => {\n cacheObject[hash] = {\n value: result,\n timestamp: Date.now()\n };\n return result;\n });\n }\n };\n}\n\nfunction getRequestHash(args) {\n const argsJson = JSON.stringify(args);\n return argsJson.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"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbix/zabbix.js b/dist/datasource-zabbix/zabbix/zabbix.js
deleted file mode 100644
index 171b206..0000000
--- a/dist/datasource-zabbix/zabbix/zabbix.js
+++ /dev/null
@@ -1,568 +0,0 @@
-'use strict';
-
-System.register(['lodash', '../utils', '../responseHandler', './connectors/zabbix_api/zabbixAPIConnector', './connectors/sql/sqlConnector', './proxy/cachingProxy', './connectors/dbConnector'], function (_export, _context) {
- "use strict";
-
- var _, utils, responseHandler, ZabbixAPIConnector, SQLConnector, CachingProxy, ZabbixNotImplemented, _slicedToArray, _createClass, REQUESTS_TO_PROXYFY, REQUESTS_TO_CACHE, REQUESTS_TO_BIND, Zabbix;
-
- 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");
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- /**
- * 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 empty array
- */
- function findByName(list, name) {
- var finded = _.find(list, { 'name': name });
- if (finded) {
- return [finded];
- } else {
- return [];
- }
- }
-
- /**
- * 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 empty array
- */
- function filterByName(list, name) {
- var finded = _.filter(list, { 'name': name });
- if (finded) {
- return finded;
- } else {
- return [];
- }
- }
-
- 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);
- }
- }
-
- function getHostIds(items) {
- var hostIds = _.map(items, function (item) {
- return _.map(item.hosts, 'hostid');
- });
- return _.uniq(_.flatten(hostIds));
- }
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_utils) {
- utils = _utils;
- }, function (_responseHandler) {
- responseHandler = _responseHandler.default;
- }, function (_connectorsZabbix_apiZabbixAPIConnector) {
- ZabbixAPIConnector = _connectorsZabbix_apiZabbixAPIConnector.ZabbixAPIConnector;
- }, function (_connectorsSqlSqlConnector) {
- SQLConnector = _connectorsSqlSqlConnector.SQLConnector;
- }, function (_proxyCachingProxy) {
- CachingProxy = _proxyCachingProxy.CachingProxy;
- }, function (_connectorsDbConnector) {
- ZabbixNotImplemented = _connectorsDbConnector.ZabbixNotImplemented;
- }],
- 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;
- };
- }();
-
- REQUESTS_TO_PROXYFY = ['getHistory', 'getTrend', 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs', 'getEvents', 'getAlerts', 'getHostAlerts', 'getAcknowledges', 'getITService', 'getSLA', 'getVersion'];
- REQUESTS_TO_CACHE = ['getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs', 'getITService'];
- REQUESTS_TO_BIND = ['getHistory', 'getTrend', 'getMacros', 'getItemsByIDs', 'getEvents', 'getAlerts', 'getHostAlerts', 'getAcknowledges', 'getITService', 'getVersion', 'login'];
-
- _export('Zabbix', Zabbix = function () {
- function Zabbix(options, backendSrv, datasourceSrv) {
- _classCallCheck(this, Zabbix);
-
- var url = options.url,
- username = options.username,
- password = options.password,
- basicAuth = options.basicAuth,
- withCredentials = options.withCredentials,
- cacheTTL = options.cacheTTL,
- enableDirectDBConnection = options.enableDirectDBConnection,
- dbConnectionDatasourceId = options.dbConnectionDatasourceId,
- dbConnectionDatasourceName = options.dbConnectionDatasourceName;
-
-
- this.enableDirectDBConnection = enableDirectDBConnection;
-
- // Initialize caching proxy for requests
- var cacheOptions = {
- enabled: true,
- ttl: cacheTTL
- };
- this.cachingProxy = new CachingProxy(cacheOptions);
-
- this.zabbixAPI = new ZabbixAPIConnector(url, username, password, basicAuth, withCredentials, backendSrv);
-
- if (enableDirectDBConnection) {
- var dbConnectorOptions = {
- datasourceId: dbConnectionDatasourceId,
- datasourceName: dbConnectionDatasourceName
- };
- this.dbConnector = new SQLConnector(dbConnectorOptions, backendSrv, datasourceSrv);
- this.getHistoryDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getHistory, 'getHistory', this.dbConnector);
- this.getTrendsDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getTrends, 'getTrends', this.dbConnector);
- }
-
- this.proxyfyRequests();
- this.cacheRequests();
- this.bindRequests();
- }
-
- _createClass(Zabbix, [{
- key: 'proxyfyRequests',
- value: function proxyfyRequests() {
- var _iteratorNormalCompletion = true;
- var _didIteratorError = false;
- var _iteratorError = undefined;
-
- try {
- for (var _iterator = REQUESTS_TO_PROXYFY[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
- var request = _step.value;
-
- this.zabbixAPI[request] = this.cachingProxy.proxyfy(this.zabbixAPI[request], request, this.zabbixAPI);
- }
- } catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion && _iterator.return) {
- _iterator.return();
- }
- } finally {
- if (_didIteratorError) {
- throw _iteratorError;
- }
- }
- }
- }
- }, {
- key: 'cacheRequests',
- value: function cacheRequests() {
- var _iteratorNormalCompletion2 = true;
- var _didIteratorError2 = false;
- var _iteratorError2 = undefined;
-
- try {
- for (var _iterator2 = REQUESTS_TO_CACHE[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
- var request = _step2.value;
-
- this.zabbixAPI[request] = this.cachingProxy.cacheRequest(this.zabbixAPI[request], request, this.zabbixAPI);
- }
- } catch (err) {
- _didIteratorError2 = true;
- _iteratorError2 = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion2 && _iterator2.return) {
- _iterator2.return();
- }
- } finally {
- if (_didIteratorError2) {
- throw _iteratorError2;
- }
- }
- }
- }
- }, {
- key: 'bindRequests',
- value: function bindRequests() {
- var _iteratorNormalCompletion3 = true;
- var _didIteratorError3 = false;
- var _iteratorError3 = undefined;
-
- try {
- for (var _iterator3 = REQUESTS_TO_BIND[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
- var request = _step3.value;
-
- this[request] = this.zabbixAPI[request].bind(this.zabbixAPI);
- }
- } catch (err) {
- _didIteratorError3 = true;
- _iteratorError3 = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion3 && _iterator3.return) {
- _iterator3.return();
- }
- } finally {
- if (_didIteratorError3) {
- throw _iteratorError3;
- }
- }
- }
- }
- }, {
- key: 'testDataSource',
- value: function testDataSource() {
- var _this = this;
-
- var zabbixVersion = void 0;
- var dbConnectorStatus = void 0;
- return this.getVersion().then(function (version) {
- zabbixVersion = version;
- return _this.login();
- }).then(function () {
- if (_this.enableDirectDBConnection) {
- return _this.dbConnector.testDataSource();
- } else {
- return Promise.resolve();
- }
- }).catch(function (error) {
- if (error instanceof ZabbixNotImplemented) {
- return Promise.resolve();
- }
- return Promise.reject(error);
- }).then(function (testResult) {
- if (testResult) {
- dbConnectorStatus = {
- dsType: _this.dbConnector.datasourceTypeName,
- dsName: _this.dbConnector.datasourceName
- };
- }
- return { zabbixVersion: zabbixVersion, dbConnectorStatus: dbConnectorStatus };
- });
- }
- }, {
- key: 'getItemsFromTarget',
- value: function getItemsFromTarget(target, options) {
- 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: 'getHostsFromTarget',
- value: function getHostsFromTarget(target) {
- var parts = ['group', 'host', 'application'];
- var filters = _.map(parts, function (p) {
- return target[p].filter;
- });
- return Promise.all([this.getHosts.apply(this, _toConsumableArray(filters)), this.getApps.apply(this, _toConsumableArray(filters))]).then(function (results) {
- var _results = _slicedToArray(results, 2),
- hosts = _results[0],
- apps = _results[1];
-
- if (apps.appFilterEmpty) {
- apps = [];
- }
- return [hosts, apps];
- });
- }
- }, {
- key: 'getAllGroups',
- value: function getAllGroups() {
- return this.zabbixAPI.getGroups();
- }
- }, {
- key: 'getGroups',
- value: function getGroups(groupFilter) {
- return this.getAllGroups().then(function (groups) {
- return findByFilter(groups, groupFilter);
- });
- }
- }, {
- key: 'getAllHosts',
- value: function getAllHosts(groupFilter) {
- var _this2 = this;
-
- return this.getGroups(groupFilter).then(function (groups) {
- var groupids = _.map(groups, 'groupid');
- return _this2.zabbixAPI.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 _this3 = this;
-
- return this.getHosts(groupFilter, hostFilter).then(function (hosts) {
- var hostids = _.map(hosts, 'hostid');
- return _this3.zabbixAPI.getApps(hostids);
- });
- }
- }, {
- key: 'getApps',
- value: function getApps(groupFilter, hostFilter, appFilter) {
- var _this4 = this;
-
- return this.getHosts(groupFilter, hostFilter).then(function (hosts) {
- var hostids = _.map(hosts, 'hostid');
- if (appFilter) {
- return _this4.zabbixAPI.getApps(hostids).then(function (apps) {
- return filterByQuery(apps, appFilter);
- });
- } else {
- return {
- appFilterEmpty: true,
- hostids: hostids
- };
- }
- });
- }
- }, {
- key: 'getAllItems',
- value: function getAllItems(groupFilter, hostFilter, appFilter) {
- var _this5 = this;
-
- var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
-
- return this.getApps(groupFilter, hostFilter, appFilter).then(function (apps) {
- if (apps.appFilterEmpty) {
- return _this5.zabbixAPI.getItems(apps.hostids, undefined, options.itemtype);
- } else {
- var appids = _.map(apps, 'applicationid');
- return _this5.zabbixAPI.getItems(undefined, appids, options.itemtype);
- }
- }).then(function (items) {
- if (!options.showDisabledItems) {
- items = _.filter(items, { 'status': '0' });
- }
-
- return items;
- }).then(this.expandUserMacro.bind(this));
- }
- }, {
- key: 'expandUserMacro',
- value: function expandUserMacro(items) {
- var hostids = getHostIds(items);
- return this.getMacros(hostids).then(function (macros) {
- _.forEach(items, function (item) {
- if (utils.containsMacro(item.name)) {
- item.name = utils.replaceMacro(item, macros);
- }
- });
- 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: 'getITServices',
- value: function getITServices(itServiceFilter) {
- return this.zabbixAPI.getITService().then(function (itServices) {
- return findByFilter(itServices, itServiceFilter);
- });
- }
- }, {
- key: 'getTriggers',
- value: function getTriggers(groupFilter, hostFilter, appFilter, options) {
- var _this6 = 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 _this6.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options);
- });
- }
- }, {
- key: 'getHistoryTS',
- value: function getHistoryTS(items, timeRange, options) {
- var _this7 = this;
-
- var _timeRange = _slicedToArray(timeRange, 2),
- timeFrom = _timeRange[0],
- timeTo = _timeRange[1];
-
- if (this.enableDirectDBConnection) {
- return this.getHistoryDB(items, timeFrom, timeTo, options).then(function (history) {
- return _this7.dbConnector.handleGrafanaTSResponse(history, items);
- });
- } else {
- return this.zabbixAPI.getHistory(items, timeFrom, timeTo).then(function (history) {
- return responseHandler.handleHistory(history, items);
- });
- }
- }
- }, {
- key: 'getTrends',
- value: function getTrends(items, timeRange, options) {
- var _this8 = this;
-
- var _timeRange2 = _slicedToArray(timeRange, 2),
- timeFrom = _timeRange2[0],
- timeTo = _timeRange2[1];
-
- if (this.enableDirectDBConnection) {
- return this.getTrendsDB(items, timeFrom, timeTo, options).then(function (history) {
- return _this8.dbConnector.handleGrafanaTSResponse(history, items);
- });
- } else {
- var valueType = options.consolidateBy || options.valueType;
- return this.zabbixAPI.getTrend(items, timeFrom, timeTo).then(function (history) {
- return responseHandler.handleTrends(history, items, valueType);
- }).then(responseHandler.sortTimeseries); // Sort trend data, issue #202
- }
- }
- }, {
- key: 'getHistoryText',
- value: function getHistoryText(items, timeRange, target) {
- var _timeRange3 = _slicedToArray(timeRange, 2),
- timeFrom = _timeRange3[0],
- timeTo = _timeRange3[1];
-
- if (items.length) {
- return this.zabbixAPI.getHistory(items, timeFrom, timeTo).then(function (history) {
- if (target.resultFormat === 'table') {
- return responseHandler.handleHistoryAsTable(history, items, target);
- } else {
- return responseHandler.handleText(history, items, target);
- }
- });
- } else {
- return Promise.resolve([]);
- }
- }
- }, {
- key: 'getSLA',
- value: function getSLA(itservices, timeRange, target, options) {
- var itServices = itservices;
- if (options.isOldVersion) {
- itServices = _.filter(itServices, { 'serviceid': target.itservice.serviceid });
- }
- var itServiceIds = _.map(itServices, 'serviceid');
- return this.zabbixAPI.getSLA(itServiceIds, timeRange).then(function (slaResponse) {
- return _.map(itServiceIds, function (serviceid) {
- var itservice = _.find(itServices, { 'serviceid': serviceid });
- return responseHandler.handleSLAResponse(itservice, target.slaProperty, slaResponse);
- });
- });
- }
- }]);
-
- return Zabbix;
- }());
-
- _export('Zabbix', Zabbix);
- }
- };
-});
-//# sourceMappingURL=zabbix.js.map
diff --git a/dist/datasource-zabbix/zabbix/zabbix.js.map b/dist/datasource-zabbix/zabbix/zabbix.js.map
deleted file mode 100644
index 58c12fa..0000000
--- a/dist/datasource-zabbix/zabbix/zabbix.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../../src/datasource-zabbix/zabbix/zabbix.js"],"names":["findByName","list","name","finded","_","find","filterByName","filter","filterByRegex","regex","filterPattern","utils","buildRegex","zbx_obj","test","findByFilter","isRegex","filterByQuery","getHostIds","items","hostIds","map","item","hosts","uniq","flatten","responseHandler","ZabbixAPIConnector","SQLConnector","CachingProxy","ZabbixNotImplemented","REQUESTS_TO_PROXYFY","REQUESTS_TO_CACHE","REQUESTS_TO_BIND","Zabbix","options","backendSrv","datasourceSrv","url","username","password","basicAuth","withCredentials","cacheTTL","enableDirectDBConnection","dbConnectionDatasourceId","dbConnectionDatasourceName","cacheOptions","enabled","ttl","cachingProxy","zabbixAPI","dbConnectorOptions","datasourceId","datasourceName","dbConnector","getHistoryDB","proxyfyWithCache","getHistory","getTrendsDB","getTrends","proxyfyRequests","cacheRequests","bindRequests","request","proxyfy","cacheRequest","bind","zabbixVersion","dbConnectorStatus","getVersion","then","version","login","testDataSource","Promise","resolve","catch","error","reject","testResult","dsType","datasourceTypeName","dsName","target","parts","filters","p","getItems","all","getHosts","getApps","results","apps","appFilterEmpty","getGroups","groupFilter","getAllGroups","groups","groupids","hostFilter","getAllHosts","hostids","appFilter","undefined","itemtype","appids","showDisabledItems","expandUserMacro","getMacros","forEach","containsMacro","replaceMacro","macros","itemFilter","getAllItems","itServiceFilter","getITService","itServices","promises","filteredGroups","filteredHosts","filteredApps","query","applicationids","getTriggers","timeRange","timeFrom","timeTo","handleGrafanaTSResponse","history","handleHistory","valueType","consolidateBy","getTrend","handleTrends","sortTimeseries","length","resultFormat","handleHistoryAsTable","handleText","itservices","isOldVersion","itservice","serviceid","itServiceIds","getSLA","handleSLAResponse","slaProperty","slaResponse"],"mappings":"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","file":"zabbix.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from '../utils';\nimport responseHandler from '../responseHandler';\nimport { ZabbixAPIConnector } from './connectors/zabbix_api/zabbixAPIConnector';\nimport { SQLConnector } from './connectors/sql/sqlConnector';\nimport { CachingProxy } from './proxy/cachingProxy';\nimport { ZabbixNotImplemented } from './connectors/dbConnector';\n\nconst REQUESTS_TO_PROXYFY = [\n 'getHistory', 'getTrend', 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs',\n 'getEvents', 'getAlerts', 'getHostAlerts', 'getAcknowledges', 'getITService', 'getSLA', 'getVersion'\n];\n\nconst REQUESTS_TO_CACHE = [\n 'getGroups', 'getHosts', 'getApps', 'getItems', 'getMacros', 'getItemsByIDs', 'getITService'\n];\n\nconst REQUESTS_TO_BIND = [\n 'getHistory', 'getTrend', 'getMacros', 'getItemsByIDs', 'getEvents', 'getAlerts', 'getHostAlerts',\n 'getAcknowledges', 'getITService', 'getVersion', 'login'\n];\n\nexport class Zabbix {\n constructor(options, backendSrv, datasourceSrv) {\n let {\n url,\n username,\n password,\n basicAuth,\n withCredentials,\n cacheTTL,\n enableDirectDBConnection,\n dbConnectionDatasourceId,\n dbConnectionDatasourceName,\n } = options;\n\n this.enableDirectDBConnection = enableDirectDBConnection;\n\n // Initialize caching proxy for requests\n let cacheOptions = {\n enabled: true,\n ttl: cacheTTL\n };\n this.cachingProxy = new CachingProxy(cacheOptions);\n\n this.zabbixAPI = new ZabbixAPIConnector(url, username, password, basicAuth, withCredentials, backendSrv);\n\n if (enableDirectDBConnection) {\n let dbConnectorOptions = {\n datasourceId: dbConnectionDatasourceId,\n datasourceName: dbConnectionDatasourceName\n };\n this.dbConnector = new SQLConnector(dbConnectorOptions, backendSrv, datasourceSrv);\n this.getHistoryDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getHistory, 'getHistory', this.dbConnector);\n this.getTrendsDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getTrends, 'getTrends', this.dbConnector);\n }\n\n this.proxyfyRequests();\n this.cacheRequests();\n this.bindRequests();\n }\n\n proxyfyRequests() {\n for (let request of REQUESTS_TO_PROXYFY) {\n this.zabbixAPI[request] = this.cachingProxy.proxyfy(this.zabbixAPI[request], request, this.zabbixAPI);\n }\n }\n\n cacheRequests() {\n for (let request of REQUESTS_TO_CACHE) {\n this.zabbixAPI[request] = this.cachingProxy.cacheRequest(this.zabbixAPI[request], request, this.zabbixAPI);\n }\n }\n\n bindRequests() {\n for (let request of REQUESTS_TO_BIND) {\n this[request] = this.zabbixAPI[request].bind(this.zabbixAPI);\n }\n }\n\n /**\n * Perform test query for Zabbix API and external history DB.\n * @return {object} test result object:\n * ```\n {\n zabbixVersion,\n dbConnectorStatus: {\n dsType,\n dsName\n }\n }\n ```\n */\n testDataSource() {\n let zabbixVersion;\n let dbConnectorStatus;\n return this.getVersion()\n .then(version => {\n zabbixVersion = version;\n return this.login();\n })\n .then(() => {\n if (this.enableDirectDBConnection) {\n return this.dbConnector.testDataSource();\n } else {\n return Promise.resolve();\n }\n })\n .catch(error => {\n if (error instanceof ZabbixNotImplemented) {\n return Promise.resolve();\n }\n return Promise.reject(error);\n })\n .then(testResult => {\n if (testResult) {\n dbConnectorStatus = {\n dsType: this.dbConnector.datasourceTypeName,\n dsName: this.dbConnector.datasourceName\n };\n }\n return { zabbixVersion, dbConnectorStatus };\n });\n }\n\n getItemsFromTarget(target, options) {\n let parts = ['group', 'host', 'application', 'item'];\n let filters = _.map(parts, p => target[p].filter);\n return this.getItems(...filters, options);\n }\n\n getHostsFromTarget(target) {\n let parts = ['group', 'host', 'application'];\n let filters = _.map(parts, p => target[p].filter);\n return Promise.all([\n this.getHosts(...filters),\n this.getApps(...filters),\n ]).then((results) => {\n let [hosts, apps] = results;\n if (apps.appFilterEmpty) {\n apps = [];\n }\n return [hosts, apps];\n });\n }\n\n getAllGroups() {\n return this.zabbixAPI.getGroups();\n }\n\n getGroups(groupFilter) {\n return this.getAllGroups()\n .then(groups => findByFilter(groups, groupFilter));\n }\n\n /**\n * Get list of host belonging to given groups.\n */\n getAllHosts(groupFilter) {\n return this.getGroups(groupFilter)\n .then(groups => {\n let groupids = _.map(groups, 'groupid');\n return this.zabbixAPI.getHosts(groupids);\n });\n }\n\n getHosts(groupFilter, hostFilter) {\n return this.getAllHosts(groupFilter)\n .then(hosts => findByFilter(hosts, hostFilter));\n }\n\n /**\n * Get list of applications belonging to given groups and hosts.\n */\n getAllApps(groupFilter, hostFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n return this.zabbixAPI.getApps(hostids);\n });\n }\n\n getApps(groupFilter, hostFilter, appFilter) {\n return this.getHosts(groupFilter, hostFilter)\n .then(hosts => {\n let hostids = _.map(hosts, 'hostid');\n if (appFilter) {\n return this.zabbixAPI.getApps(hostids)\n .then(apps => filterByQuery(apps, appFilter));\n } else {\n return {\n appFilterEmpty: true,\n hostids: hostids\n };\n }\n });\n }\n\n getAllItems(groupFilter, hostFilter, appFilter, options = {}) {\n return this.getApps(groupFilter, hostFilter, appFilter)\n .then(apps => {\n if (apps.appFilterEmpty) {\n return this.zabbixAPI.getItems(apps.hostids, undefined, options.itemtype);\n } else {\n let appids = _.map(apps, 'applicationid');\n return this.zabbixAPI.getItems(undefined, appids, options.itemtype);\n }\n })\n .then(items => {\n if (!options.showDisabledItems) {\n items = _.filter(items, {'status': '0'});\n }\n\n return items;\n })\n .then(this.expandUserMacro.bind(this));\n }\n\n expandUserMacro(items) {\n let hostids = getHostIds(items);\n return this.getMacros(hostids)\n .then(macros => {\n _.forEach(items, item => {\n if (utils.containsMacro(item.name)) {\n item.name = utils.replaceMacro(item, macros);\n }\n });\n return items;\n });\n }\n\n getItems(groupFilter, hostFilter, appFilter, itemFilter, options = {}) {\n return this.getAllItems(groupFilter, hostFilter, appFilter, options)\n .then(items => filterByQuery(items, itemFilter));\n }\n\n getITServices(itServiceFilter) {\n return this.zabbixAPI.getITService()\n .then(itServices => findByFilter(itServices, itServiceFilter));\n }\n\n /**\n * Build query - convert target filters to array of Zabbix items\n */\n getTriggers(groupFilter, hostFilter, appFilter, options) {\n let promises = [\n this.getGroups(groupFilter),\n this.getHosts(groupFilter, hostFilter),\n this.getApps(groupFilter, hostFilter, appFilter)\n ];\n\n return Promise.all(promises)\n .then(results => {\n let filteredGroups = results[0];\n let filteredHosts = results[1];\n let filteredApps = results[2];\n let query = {};\n\n if (appFilter) {\n query.applicationids = _.flatten(_.map(filteredApps, 'applicationid'));\n }\n if (hostFilter) {\n query.hostids = _.map(filteredHosts, 'hostid');\n }\n if (groupFilter) {\n query.groupids = _.map(filteredGroups, 'groupid');\n }\n\n return query;\n }).then(query => {\n return this.zabbixAPI.getTriggers(query.groupids, query.hostids, query.applicationids, options);\n });\n }\n\n getHistoryTS(items, timeRange, options) {\n let [timeFrom, timeTo] = timeRange;\n if (this.enableDirectDBConnection) {\n return this.getHistoryDB(items, timeFrom, timeTo, options)\n .then(history => this.dbConnector.handleGrafanaTSResponse(history, items));\n } else {\n return this.zabbixAPI.getHistory(items, timeFrom, timeTo)\n .then(history => responseHandler.handleHistory(history, items));\n }\n }\n\n getTrends(items, timeRange, options) {\n let [timeFrom, timeTo] = timeRange;\n if (this.enableDirectDBConnection) {\n return this.getTrendsDB(items, timeFrom, timeTo, options)\n .then(history => this.dbConnector.handleGrafanaTSResponse(history, items));\n } else {\n let valueType = options.consolidateBy || options.valueType;\n return this.zabbixAPI.getTrend(items, timeFrom, timeTo)\n .then(history => responseHandler.handleTrends(history, items, valueType))\n .then(responseHandler.sortTimeseries); // Sort trend data, issue #202\n }\n }\n\n getHistoryText(items, timeRange, target) {\n let [timeFrom, timeTo] = timeRange;\n if (items.length) {\n return this.zabbixAPI.getHistory(items, timeFrom, timeTo)\n .then(history => {\n if (target.resultFormat === 'table') {\n return responseHandler.handleHistoryAsTable(history, items, target);\n } else {\n return responseHandler.handleText(history, items, target);\n }\n });\n } else {\n return Promise.resolve([]);\n }\n }\n\n getSLA(itservices, timeRange, target, options) {\n let itServices = itservices;\n if (options.isOldVersion) {\n itServices = _.filter(itServices, {'serviceid': target.itservice.serviceid});\n }\n let itServiceIds = _.map(itServices, 'serviceid');\n return this.zabbixAPI.getSLA(itServiceIds, timeRange)\n .then(slaResponse => {\n return _.map(itServiceIds, serviceid => {\n let itservice = _.find(itServices, {'serviceid': serviceid});\n return responseHandler.handleSLAResponse(itservice, target.slaProperty, slaResponse);\n });\n });\n }\n}\n\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Find group, host, app or item by given name.\n * @param list list of groups, apps or other\n * @param name visible name\n * @return array with finded element or empty array\n */\nfunction findByName(list, name) {\n var finded = _.find(list, {'name': name});\n if (finded) {\n return [finded];\n } else {\n return [];\n }\n}\n\n/**\n * Different hosts can contains applications and items with same name.\n * For this reason use _.filter, which return all elements instead _.find,\n * which return only first finded.\n * @param {[type]} list list of elements\n * @param {[type]} name app name\n * @return {[type]} array with finded element or empty array\n */\nfunction filterByName(list, name) {\n var finded = _.filter(list, {'name': name});\n if (finded) {\n return finded;\n } else {\n return [];\n }\n}\n\nfunction filterByRegex(list, regex) {\n var filterPattern = utils.buildRegex(regex);\n return _.filter(list, function (zbx_obj) {\n return filterPattern.test(zbx_obj.name);\n });\n}\n\nfunction findByFilter(list, filter) {\n if (utils.isRegex(filter)) {\n return filterByRegex(list, filter);\n } else {\n return findByName(list, filter);\n }\n}\n\nfunction filterByQuery(list, filter) {\n if (utils.isRegex(filter)) {\n return filterByRegex(list, filter);\n } else {\n return filterByName(list, filter);\n }\n}\n\nfunction getHostIds(items) {\n let hostIds = _.map(items, item => {\n return _.map(item.hosts, 'hostid');\n });\n return _.uniq(_.flatten(hostIds));\n}\n"]}
\ No newline at end of file
diff --git a/dist/datasource-zabbix/zabbixAlerting.service.js b/dist/datasource-zabbix/zabbixAlerting.service.js
deleted file mode 100644
index d16b9e1..0000000
--- a/dist/datasource-zabbix/zabbixAlerting.service.js
+++ /dev/null
@@ -1,147 +0,0 @@
-'use strict';
-
-System.register(['lodash', 'jquery', 'angular'], function (_export, _context) {
- "use strict";
-
- var _, $, angular, _createClass, ZabbixAlertingService;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_jquery) {
- $ = _jquery.default;
- }, 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;
- };
- }();
-
- ZabbixAlertingService = function () {
-
- /** @ngInject */
- function ZabbixAlertingService(dashboardSrv) {
- _classCallCheck(this, ZabbixAlertingService);
-
- this.dashboardSrv = dashboardSrv;
- }
-
- _createClass(ZabbixAlertingService, [{
- key: 'isFullScreen',
- value: function isFullScreen() {
- return this.dashboardSrv.dash.meta.fullscreen;
- }
- }, {
- key: 'setPanelAlertState',
- value: function setPanelAlertState(panelId, alertState) {
- var panelIndex = void 0;
-
- var panelContainers = _.filter($('.panel-container'), function (elem) {
- return elem.clientHeight && elem.clientWidth;
- });
-
- var panelModels = this.getPanelModels();
-
- if (this.isFullScreen()) {
- panelIndex = 0;
- } else {
- panelIndex = _.findIndex(panelModels, function (panel) {
- return panel.id === panelId;
- });
- }
-
- if (panelIndex >= 0) {
- var alertClass = "panel-has-alert panel-alert-state--ok panel-alert-state--alerting";
- $(panelContainers[panelIndex]).removeClass(alertClass);
-
- if (alertState) {
- if (alertState === 'alerting') {
- alertClass = "panel-has-alert panel-alert-state--" + alertState;
- $(panelContainers[panelIndex]).addClass(alertClass);
- }
- if (alertState === 'ok') {
- alertClass = "panel-alert-state--" + alertState;
- $(panelContainers[panelIndex]).addClass(alertClass);
- $(panelContainers[panelIndex]).removeClass("panel-has-alert");
- }
- }
- }
- }
- }, {
- key: 'getPanelModels',
- value: function getPanelModels() {
- return _.filter(this.dashboardSrv.dash.panels, function (panel) {
- return panel.type !== 'row';
- });
- }
- }, {
- key: 'getPanelModel',
- value: function getPanelModel(panelId) {
- var panelModels = this.getPanelModels();
-
- return _.find(panelModels, function (panel) {
- return panel.id === panelId;
- });
- }
- }, {
- key: 'setPanelThreshold',
- value: function setPanelThreshold(panelId, threshold) {
- var panel = this.getPanelModel(panelId);
- var containsThreshold = _.find(panel.thresholds, { value: threshold });
-
- if (panel && panel.type === "graph" && !containsThreshold) {
- var thresholdOptions = {
- colorMode: "custom",
- fill: false,
- line: true,
- lineColor: "rgb(255, 0, 0)",
- op: "gt",
- value: threshold,
- source: "zabbix"
- };
-
- panel.thresholds.push(thresholdOptions);
- }
- }
- }, {
- key: 'removeZabbixThreshold',
- value: function removeZabbixThreshold(panelId) {
- var panel = this.getPanelModel(panelId);
-
- if (panel && panel.type === "graph") {
- panel.thresholds = _.filter(panel.thresholds, function (threshold) {
- return threshold.source !== "zabbix";
- });
- }
- }
- }]);
-
- return ZabbixAlertingService;
- }();
-
- angular.module('grafana.services').service('zabbixAlertingSrv', ZabbixAlertingService);
- }
- };
-});
-//# sourceMappingURL=zabbixAlerting.service.js.map
diff --git a/dist/datasource-zabbix/zabbixAlerting.service.js.map b/dist/datasource-zabbix/zabbixAlerting.service.js.map
deleted file mode 100644
index 72524f6..0000000
--- a/dist/datasource-zabbix/zabbixAlerting.service.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/datasource-zabbix/zabbixAlerting.service.js"],"names":["_","$","angular","ZabbixAlertingService","dashboardSrv","dash","meta","fullscreen","panelId","alertState","panelIndex","panelContainers","filter","elem","clientHeight","clientWidth","panelModels","getPanelModels","isFullScreen","findIndex","panel","id","alertClass","removeClass","addClass","panels","type","find","threshold","getPanelModel","containsThreshold","thresholds","value","thresholdOptions","colorMode","fill","line","lineColor","op","source","push","module","service"],"mappings":"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","file":"zabbixAlerting.service.js","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport angular from 'angular';\n\nclass ZabbixAlertingService {\n\n /** @ngInject */\n constructor(dashboardSrv) {\n this.dashboardSrv = dashboardSrv;\n }\n\n isFullScreen() {\n return this.dashboardSrv.dash.meta.fullscreen;\n }\n\n setPanelAlertState(panelId, alertState) {\n let panelIndex;\n\n let panelContainers = _.filter($('.panel-container'), elem => {\n return elem.clientHeight && elem.clientWidth;\n });\n\n let panelModels = this.getPanelModels();\n\n if (this.isFullScreen()) {\n panelIndex = 0;\n } else {\n panelIndex = _.findIndex(panelModels, panel => {\n return panel.id === panelId;\n });\n }\n\n if (panelIndex >= 0) {\n let alertClass = \"panel-has-alert panel-alert-state--ok panel-alert-state--alerting\";\n $(panelContainers[panelIndex]).removeClass(alertClass);\n\n if (alertState) {\n if (alertState === 'alerting') {\n alertClass = \"panel-has-alert panel-alert-state--\" + alertState;\n $(panelContainers[panelIndex]).addClass(alertClass);\n }\n if (alertState === 'ok') {\n alertClass = \"panel-alert-state--\" + alertState;\n $(panelContainers[panelIndex]).addClass(alertClass);\n $(panelContainers[panelIndex]).removeClass(\"panel-has-alert\");\n }\n }\n }\n }\n\n getPanelModels() {\n return _.filter(this.dashboardSrv.dash.panels, panel => panel.type !== 'row');\n }\n\n getPanelModel(panelId) {\n let panelModels = this.getPanelModels();\n\n return _.find(panelModels, panel => {\n return panel.id === panelId;\n });\n }\n\n setPanelThreshold(panelId, threshold) {\n let panel = this.getPanelModel(panelId);\n let containsThreshold = _.find(panel.thresholds, {value: threshold});\n\n if (panel && panel.type === \"graph\" && !containsThreshold) {\n let thresholdOptions = {\n colorMode : \"custom\",\n fill : false,\n line : true,\n lineColor: \"rgb(255, 0, 0)\",\n op: \"gt\",\n value: threshold,\n source: \"zabbix\"\n };\n\n panel.thresholds.push(thresholdOptions);\n }\n }\n\n removeZabbixThreshold(panelId) {\n let panel = this.getPanelModel(panelId);\n\n if (panel && panel.type === \"graph\") {\n panel.thresholds = _.filter(panel.thresholds, threshold => {\n return threshold.source !== \"zabbix\";\n });\n }\n }\n\n}\n\nangular\n .module('grafana.services')\n .service('zabbixAlertingSrv', ZabbixAlertingService);\n"]}
\ No newline at end of file
diff --git a/dist/img/screenshot-annotations.png b/dist/img/screenshot-annotations.png
deleted file mode 100644
index 8bedea3..0000000
Binary files a/dist/img/screenshot-annotations.png and /dev/null differ
diff --git a/dist/img/screenshot-dashboard01.png b/dist/img/screenshot-dashboard01.png
deleted file mode 100644
index 64ad1ac..0000000
Binary files a/dist/img/screenshot-dashboard01.png and /dev/null differ
diff --git a/dist/img/screenshot-metric_editor.png b/dist/img/screenshot-metric_editor.png
deleted file mode 100644
index f28a372..0000000
Binary files a/dist/img/screenshot-metric_editor.png and /dev/null differ
diff --git a/dist/img/screenshot-showcase.png b/dist/img/screenshot-showcase.png
deleted file mode 100644
index 46f4b92..0000000
Binary files a/dist/img/screenshot-showcase.png and /dev/null differ
diff --git a/dist/img/screenshot-triggers.png b/dist/img/screenshot-triggers.png
deleted file mode 100644
index 002e518..0000000
Binary files a/dist/img/screenshot-triggers.png and /dev/null differ
diff --git a/dist/img/zabbix_app_logo.svg b/dist/img/zabbix_app_logo.svg
deleted file mode 100644
index 237247d..0000000
--- a/dist/img/zabbix_app_logo.svg
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-image/svg+xml
\ No newline at end of file
diff --git a/dist/module.js b/dist/module.js
deleted file mode 100644
index 90880e5..0000000
--- a/dist/module.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-
-System.register(['./components/config', 'app/plugins/sdk'], function (_export, _context) {
- "use strict";
-
- var ZabbixAppConfigCtrl, loadPluginCss;
- return {
- setters: [function (_componentsConfig) {
- ZabbixAppConfigCtrl = _componentsConfig.ZabbixAppConfigCtrl;
- }, function (_appPluginsSdk) {
- loadPluginCss = _appPluginsSdk.loadPluginCss;
- }],
- execute: function () {
-
- loadPluginCss({
- dark: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.dark.css',
- light: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.light.css'
- });
-
- _export('ConfigCtrl', ZabbixAppConfigCtrl);
- }
- };
-});
-//# sourceMappingURL=module.js.map
diff --git a/dist/module.js.map b/dist/module.js.map
deleted file mode 100644
index 372f38f..0000000
--- a/dist/module.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../src/module.js"],"names":["ZabbixAppConfigCtrl","loadPluginCss","dark","light"],"mappings":";;;;;;;;AAAQA,yB,qBAAAA,mB;;AACAC,mB,kBAAAA,a;;;;AAERA,oBAAc;AACZC,cAAM,gEADM;AAEZC,eAAO;AAFK,OAAd;;4BAMEH,mB","file":"module.js","sourcesContent":["import {ZabbixAppConfigCtrl} from './components/config';\nimport {loadPluginCss} from 'app/plugins/sdk';\n\nloadPluginCss({\n dark: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.dark.css',\n light: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.light.css'\n});\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
deleted file mode 100644
index 718dda5..0000000
--- a/dist/panel-triggers/ack-tooltip.directive.js
+++ /dev/null
@@ -1,140 +0,0 @@
-'use strict';
-
-System.register(['angular', 'jquery'], function (_export, _context) {
- "use strict";
-
- var angular, $, Drop;
- return {
- setters: [function (_angular) {
- angular = _angular.default;
- }, function (_jquery) {
- $ = _jquery.default;
- }],
- execute: function () {
-
- System.config({
- paths: {
- tether: System.getConfig().baseURL + "plugins/alexanderzobnin-zabbix-app/vendor/npm/tether.min.js"
- }
- });
-
- Drop = void 0;
-
- System.amdRequire(["plugins/alexanderzobnin-zabbix-app/vendor/npm/drop.min.js"], function (drop) {
- Drop = drop;
- });
-
- /** @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 += '
' + 'Time ' + 'User ' + '' + ' ';
- 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 += '' + ack.time + ' ' + '' + ack.user + ' ' + '' + ack.message + ' ';
- }
- } catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion && _iterator.return) {
- _iterator.return();
- }
- } finally {
- if (_didIteratorError) {
- throw _iteratorError;
- }
- }
- }
-
- tooltip += '
';
- } 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 = '' + ' ' + '' + 'Acknowledge ' + '' + 'Cancel' + '
';
-
- 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 () {
- try {
- drop.destroy();
- } catch (err) {
- console.log('drop.destroy() error: ', err.message);
- }
- });
- }
- });
-
- $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
deleted file mode 100644
index 781c9fc..0000000
--- a/dist/panel-triggers/ack-tooltip.directive.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/panel-triggers/ack-tooltip.directive.js"],"names":["angular","$","System","config","paths","tether","getConfig","baseURL","Drop","amdRequire","drop","module","directive","$sanitize","$compile","buttonTemplate","scope","ack","trigger","onAck","context","link","element","acknowledges","$button","appendTo","click","tooltip","length","time","user","message","addAckButtonTemplate","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","err","console","log","contents"],"mappings":"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","file":"ack-tooltip.directive.js","sourcesContent":["import angular from 'angular';\nimport $ from 'jquery';\n\nSystem.config({\n paths: {\n tether: System.getConfig().baseURL + \"plugins/alexanderzobnin-zabbix-app/vendor/npm/tether.min.js\"\n }\n});\n\nlet Drop;\nSystem.amdRequire([\"plugins/alexanderzobnin-zabbix-app/vendor/npm/drop.min.js\"], (drop) => {\n Drop = drop;\n});\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 'Time ' +\n 'User ' +\n '' +\n ' ';\n for (let ack of acknowledges) {\n tooltip += '' + ack.time + ' ' +\n '' + ack.user + ' ' +\n '' + ack.message + ' ';\n }\n tooltip += '
';\n } else {\n tooltip += 'Add acknowledge';\n }\n\n let addAckButtonTemplate = '
' +\n '' +\n ' ' +\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 'Acknowledge ' +\n '' +\n 'Cancel' +\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 try {\n drop.destroy();\n } catch (err) {\n console.log('drop.destroy() error: ', err.message);\n }\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/datasource-selector.directive.js b/dist/panel-triggers/datasource-selector.directive.js
deleted file mode 100644
index b19fad3..0000000
--- a/dist/panel-triggers/datasource-selector.directive.js
+++ /dev/null
@@ -1,93 +0,0 @@
-'use strict';
-
-System.register(['angular', 'lodash'], function (_export, _context) {
- "use strict";
-
- var angular, _, _createClass, template, DatasourceSelectorCtrl;
-
- 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;
- }, 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;
- };
- }();
-
- template = '\n\n \n';
-
-
- angular.module('grafana.directives').directive('datasourceSelector', function () {
- return {
- scope: {
- datasources: "=",
- options: "=",
- onChange: "&"
- },
- controller: DatasourceSelectorCtrl,
- controllerAs: 'ctrl',
- template: template
- };
- });
-
- DatasourceSelectorCtrl = function () {
-
- /** @ngInject */
- function DatasourceSelectorCtrl($scope) {
- _classCallCheck(this, DatasourceSelectorCtrl);
-
- this.scope = $scope;
- var datasources = $scope.datasources;
- var options = $scope.options;
- this.dsOptions = {
- multi: true,
- current: { value: datasources, text: datasources.join(" + ") },
- options: _.map(options, function (ds) {
- return { text: ds, value: ds, selected: _.includes(datasources, ds) };
- })
- };
- }
-
- _createClass(DatasourceSelectorCtrl, [{
- key: 'onChange',
- value: function onChange(updatedOptions) {
- var _this = this;
-
- var newDataSources = updatedOptions.current.value;
- this.scope.datasources = newDataSources;
-
- // Run after model was changed
- this.scope.$$postDigest(function () {
- _this.scope.onChange();
- });
- }
- }]);
-
- return DatasourceSelectorCtrl;
- }();
- }
- };
-});
-//# sourceMappingURL=datasource-selector.directive.js.map
diff --git a/dist/panel-triggers/datasource-selector.directive.js.map b/dist/panel-triggers/datasource-selector.directive.js.map
deleted file mode 100644
index 06599c0..0000000
--- a/dist/panel-triggers/datasource-selector.directive.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/panel-triggers/datasource-selector.directive.js"],"names":["angular","_","template","module","directive","scope","datasources","options","onChange","controller","DatasourceSelectorCtrl","controllerAs","$scope","dsOptions","multi","current","value","text","join","map","ds","selected","includes","updatedOptions","newDataSources","$$postDigest"],"mappings":";;;;;;;;;;;;;;;AAAOA,a;;AACAC,O;;;;;;;;;;;;;;;;;;;;;AAEDC,c;;;AAKNF,cACCG,MADD,CACQ,oBADR,EAECC,SAFD,CAEW,oBAFX,EAEiC,YAAM;AACrC,eAAO;AACLC,iBAAO;AACLC,yBAAa,GADR;AAELC,qBAAS,GAFJ;AAGLC,sBAAU;AAHL,WADF;AAMLC,sBAAYC,sBANP;AAOLC,wBAAc,MAPT;AAQLT,oBAAUA;AARL,SAAP;AAUD,OAbD;;AAeMQ,4B;;AAEJ;AACA,wCAAYE,MAAZ,EAAoB;AAAA;;AAClB,eAAKP,KAAL,GAAaO,MAAb;AACA,cAAIN,cAAcM,OAAON,WAAzB;AACA,cAAIC,UAAUK,OAAOL,OAArB;AACA,eAAKM,SAAL,GAAiB;AACfC,mBAAO,IADQ;AAEfC,qBAAS,EAACC,OAAOV,WAAR,EAAqBW,MAAMX,YAAYY,IAAZ,CAAiB,KAAjB,CAA3B,EAFM;AAGfX,qBAASN,EAAEkB,GAAF,CAAMZ,OAAN,EAAe,UAACa,EAAD,EAAQ;AAC9B,qBAAO,EAACH,MAAMG,EAAP,EAAWJ,OAAOI,EAAlB,EAAsBC,UAAUpB,EAAEqB,QAAF,CAAWhB,WAAX,EAAwBc,EAAxB,CAAhC,EAAP;AACD,aAFQ;AAHM,WAAjB;AAOD;;;;mCAEQG,c,EAAgB;AAAA;;AACvB,gBAAIC,iBAAiBD,eAAeR,OAAf,CAAuBC,KAA5C;AACA,iBAAKX,KAAL,CAAWC,WAAX,GAAyBkB,cAAzB;;AAEA;AACA,iBAAKnB,KAAL,CAAWoB,YAAX,CAAwB,YAAM;AAC5B,oBAAKpB,KAAL,CAAWG,QAAX;AACD,aAFD;AAGD","file":"datasource-selector.directive.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\n\nconst template = `\n\n \n`;\n\nangular\n.module('grafana.directives')\n.directive('datasourceSelector', () => {\n return {\n scope: {\n datasources: \"=\",\n options: \"=\",\n onChange: \"&\"\n },\n controller: DatasourceSelectorCtrl,\n controllerAs: 'ctrl',\n template: template\n };\n});\n\nclass DatasourceSelectorCtrl {\n\n /** @ngInject */\n constructor($scope) {\n this.scope = $scope;\n let datasources = $scope.datasources;\n let options = $scope.options;\n this.dsOptions = {\n multi: true,\n current: {value: datasources, text: datasources.join(\" + \")},\n options: _.map(options, (ds) => {\n return {text: ds, value: ds, selected: _.includes(datasources, ds)};\n })\n };\n }\n\n onChange(updatedOptions) {\n let newDataSources = updatedOptions.current.value;\n this.scope.datasources = newDataSources;\n\n // Run after model was changed\n this.scope.$$postDigest(() => {\n this.scope.onChange();\n });\n }\n}\n"]}
\ No newline at end of file
diff --git a/dist/panel-triggers/migrations.js b/dist/panel-triggers/migrations.js
deleted file mode 100644
index 0243549..0000000
--- a/dist/panel-triggers/migrations.js
+++ /dev/null
@@ -1,68 +0,0 @@
-'use strict';
-
-System.register(['lodash', './triggers_panel_ctrl'], function (_export, _context) {
- "use strict";
-
- var _, DEFAULT_TARGET, CURRENT_SCHEMA_VERSION;
-
- function migratePanelSchema(panel) {
- if (isEmptyPanel(panel)) {
- return panel;
- }
-
- var schemaVersion = getSchemaVersion(panel);
- panel.schemaVersion = CURRENT_SCHEMA_VERSION;
-
- if (schemaVersion < 2) {
- panel.datasources = [panel.datasource];
- panel.targets = {};
- panel.targets[panel.datasources[0]] = panel.triggers;
-
- // delete old props
- delete panel.triggers;
- delete panel.datasource;
- }
-
- if (schemaVersion < 3) {
- // delete old props
- delete panel.lastChangeField;
- delete panel.ageField;
- delete panel.infoField;
- delete panel.scroll;
- delete panel.hideHostsInMaintenance;
- }
-
- if (schemaVersion < 4) {
- if (panel.targets && !_.isEmpty(panel.targets)) {
- _.each(panel.targets, function (target) {
- _.defaultsDeep(target, DEFAULT_TARGET);
- });
- }
- }
-
- return panel;
- }
-
- _export('migratePanelSchema', migratePanelSchema);
-
- function getSchemaVersion(panel) {
- return panel.schemaVersion || 1;
- }
-
- function isEmptyPanel(panel) {
- return !panel.datasource && !panel.datasources && !panel.triggers && !panel.targets;
- }
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_triggers_panel_ctrl) {
- DEFAULT_TARGET = _triggers_panel_ctrl.DEFAULT_TARGET;
- }],
- execute: function () {
- _export('CURRENT_SCHEMA_VERSION', CURRENT_SCHEMA_VERSION = 4);
-
- _export('CURRENT_SCHEMA_VERSION', CURRENT_SCHEMA_VERSION);
- }
- };
-});
-//# sourceMappingURL=migrations.js.map
diff --git a/dist/panel-triggers/migrations.js.map b/dist/panel-triggers/migrations.js.map
deleted file mode 100644
index 6acd33a..0000000
--- a/dist/panel-triggers/migrations.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/panel-triggers/migrations.js"],"names":["migratePanelSchema","panel","isEmptyPanel","schemaVersion","getSchemaVersion","CURRENT_SCHEMA_VERSION","datasources","datasource","targets","triggers","lastChangeField","ageField","infoField","scroll","hideHostsInMaintenance","_","isEmpty","each","target","defaultsDeep","DEFAULT_TARGET"],"mappings":";;;;;;;AAMO,WAASA,kBAAT,CAA4BC,KAA5B,EAAmC;AACxC,QAAIC,aAAaD,KAAb,CAAJ,EAAyB;AACvB,aAAOA,KAAP;AACD;;AAED,QAAME,gBAAgBC,iBAAiBH,KAAjB,CAAtB;AACAA,UAAME,aAAN,GAAsBE,sBAAtB;;AAEA,QAAIF,gBAAgB,CAApB,EAAuB;AACrBF,YAAMK,WAAN,GAAoB,CAACL,MAAMM,UAAP,CAApB;AACAN,YAAMO,OAAN,GAAgB,EAAhB;AACAP,YAAMO,OAAN,CAAcP,MAAMK,WAAN,CAAkB,CAAlB,CAAd,IAAsCL,MAAMQ,QAA5C;;AAEA;AACA,aAAOR,MAAMQ,QAAb;AACA,aAAOR,MAAMM,UAAb;AACD;;AAED,QAAIJ,gBAAgB,CAApB,EAAuB;AACrB;AACA,aAAOF,MAAMS,eAAb;AACA,aAAOT,MAAMU,QAAb;AACA,aAAOV,MAAMW,SAAb;AACA,aAAOX,MAAMY,MAAb;AACA,aAAOZ,MAAMa,sBAAb;AACD;;AAED,QAAIX,gBAAgB,CAApB,EAAuB;AACrB,UAAIF,MAAMO,OAAN,IAAiB,CAACO,EAAEC,OAAF,CAAUf,MAAMO,OAAhB,CAAtB,EAAgD;AAC9CO,UAAEE,IAAF,CAAOhB,MAAMO,OAAb,EAAsB,UAACU,MAAD,EAAY;AAChCH,YAAEI,YAAF,CAAeD,MAAf,EAAuBE,cAAvB;AACD,SAFD;AAGD;AACF;;AAED,WAAOnB,KAAP;AACD;;gCApCeD,kB;;AAsChB,WAASI,gBAAT,CAA0BH,KAA1B,EAAiC;AAC/B,WAAOA,MAAME,aAAN,IAAuB,CAA9B;AACD;;AAED,WAASD,YAAT,CAAsBD,KAAtB,EAA6B;AAC3B,WAAO,CAACA,MAAMM,UAAP,IAAqB,CAACN,MAAMK,WAA5B,IAA2C,CAACL,MAAMQ,QAAlD,IAA8D,CAACR,MAAMO,OAA5E;AACD;;;AAlDMO,O;;AACCK,oB,wBAAAA,c;;;wCAGKf,sB,GAAyB,C","file":"migrations.js","sourcesContent":["import _ from 'lodash';\nimport {DEFAULT_TARGET} from './triggers_panel_ctrl';\n\n// Actual schema version\nexport const CURRENT_SCHEMA_VERSION = 4;\n\nexport function migratePanelSchema(panel) {\n if (isEmptyPanel(panel)) {\n return panel;\n }\n\n const schemaVersion = getSchemaVersion(panel);\n panel.schemaVersion = CURRENT_SCHEMA_VERSION;\n\n if (schemaVersion < 2) {\n panel.datasources = [panel.datasource];\n panel.targets = {};\n panel.targets[panel.datasources[0]] = panel.triggers;\n\n // delete old props\n delete panel.triggers;\n delete panel.datasource;\n }\n\n if (schemaVersion < 3) {\n // delete old props\n delete panel.lastChangeField;\n delete panel.ageField;\n delete panel.infoField;\n delete panel.scroll;\n delete panel.hideHostsInMaintenance;\n }\n\n if (schemaVersion < 4) {\n if (panel.targets && !_.isEmpty(panel.targets)) {\n _.each(panel.targets, (target) => {\n _.defaultsDeep(target, DEFAULT_TARGET);\n });\n }\n }\n\n return panel;\n}\n\nfunction getSchemaVersion(panel) {\n return panel.schemaVersion || 1;\n}\n\nfunction isEmptyPanel(panel) {\n return !panel.datasource && !panel.datasources && !panel.triggers && !panel.targets;\n}\n"]}
\ No newline at end of file
diff --git a/dist/panel-triggers/module.js b/dist/panel-triggers/module.js
deleted file mode 100644
index bed75f4..0000000
--- a/dist/panel-triggers/module.js
+++ /dev/null
@@ -1,36 +0,0 @@
-'use strict';
-
-System.register(['./triggers_panel_ctrl', 'app/plugins/sdk', './datasource-selector.directive', './ack-tooltip.directive'], function (_export, _context) {
- "use strict";
-
- var TriggerPanelCtrl, loadPluginCss;
- return {
- setters: [function (_triggers_panel_ctrl) {
- TriggerPanelCtrl = _triggers_panel_ctrl.TriggerPanelCtrl;
- }, function (_appPluginsSdk) {
- loadPluginCss = _appPluginsSdk.loadPluginCss;
- }, function (_datasourceSelectorDirective) {}, function (_ackTooltipDirective) {}],
- execute: function () {
- /**
- * 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
- */
-
- loadPluginCss({
- dark: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.dark.css',
- light: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.light.css'
- });
-
- _export('PanelCtrl', TriggerPanelCtrl);
- }
- };
-});
-//# sourceMappingURL=module.js.map
diff --git a/dist/panel-triggers/module.js.map b/dist/panel-triggers/module.js.map
deleted file mode 100644
index a82ed21..0000000
--- a/dist/panel-triggers/module.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/panel-triggers/module.js"],"names":["TriggerPanelCtrl","loadPluginCss","dark","light"],"mappings":";;;;;;;;AAaQA,sB,wBAAAA,gB;;AACAC,mB,kBAAAA,a;;;AAdR;;;;;;;;;;;;;AAkBAA,oBAAc;AACZC,cAAM,gEADM;AAEZC,eAAO;AAFK,OAAd;;2BAMEH,gB","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 {TriggerPanelCtrl} from './triggers_panel_ctrl';\nimport {loadPluginCss} from 'app/plugins/sdk';\nimport './datasource-selector.directive';\nimport './ack-tooltip.directive';\n\nloadPluginCss({\n dark: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.dark.css',\n light: 'plugins/alexanderzobnin-zabbix-app/css/grafana-zabbix.light.css'\n});\n\nexport {\n TriggerPanelCtrl as PanelCtrl\n};\n"]}
\ No newline at end of file
diff --git a/dist/panel-triggers/options_tab.js b/dist/panel-triggers/options_tab.js
deleted file mode 100644
index 9173866..0000000
--- a/dist/panel-triggers/options_tab.js
+++ /dev/null
@@ -1,46 +0,0 @@
-'use strict';
-
-System.register([], function (_export, _context) {
- "use strict";
-
- var TriggerPanelOptionsCtrl;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- function triggerPanelOptionsTab() {
- return {
- restrict: 'E',
- scope: true,
- templateUrl: 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/options_tab.html',
- controller: TriggerPanelOptionsCtrl
- };
- }
-
- _export('triggerPanelOptionsTab', triggerPanelOptionsTab);
-
- return {
- setters: [],
- execute: function () {
- TriggerPanelOptionsCtrl =
-
- /** @ngInject */
- function TriggerPanelOptionsCtrl($scope) {
- _classCallCheck(this, TriggerPanelOptionsCtrl);
-
- $scope.editor = this;
- this.panelCtrl = $scope.ctrl;
- this.panel = this.panelCtrl.panel;
-
- this.fontSizes = ['80%', '90%', '100%', '110%', '120%', '130%', '150%', '160%', '180%', '200%', '220%', '250%'];
- 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 }];
- };
- }
- };
-});
-//# sourceMappingURL=options_tab.js.map
diff --git a/dist/panel-triggers/options_tab.js.map b/dist/panel-triggers/options_tab.js.map
deleted file mode 100644
index f738708..0000000
--- a/dist/panel-triggers/options_tab.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/panel-triggers/options_tab.js"],"names":["triggerPanelOptionsTab","restrict","scope","templateUrl","controller","TriggerPanelOptionsCtrl","$scope","editor","panelCtrl","ctrl","panel","fontSizes","ackFilters","sortByFields","text","value","showEventsFields"],"mappings":";;;;;;;;;;;;;AAuCO,WAASA,sBAAT,GAAkC;AACvC,WAAO;AACLC,gBAAU,GADL;AAELC,aAAO,IAFF;AAGLC,mBAAa,oFAHR;AAILC,kBAAYC;AAJP,KAAP;AAMD;;oCAPeL,sB;;;;;AA1BVK,6B;;AAEJ;AACA,uCAAYC,MAAZ,EAAoB;AAAA;;AAClBA,eAAOC,MAAP,GAAgB,IAAhB;AACA,aAAKC,SAAL,GAAiBF,OAAOG,IAAxB;AACA,aAAKC,KAAL,GAAa,KAAKF,SAAL,CAAeE,KAA5B;;AAEA,aAAKC,SAAL,GAAiB,CAAC,KAAD,EAAQ,KAAR,EAAe,MAAf,EAAuB,MAAvB,EAA+B,MAA/B,EAAuC,MAAvC,EAA+C,MAA/C,EAAuD,MAAvD,EAA+D,MAA/D,EAAuE,MAAvE,EAA+E,MAA/E,EAAuF,MAAvF,CAAjB;AACA,aAAKC,UAAL,GAAkB,CAChB,cADgB,EAEhB,gBAFgB,EAGhB,cAHgB,CAAlB;AAKA,aAAKC,YAAL,GAAoB,CAClB,EAAEC,MAAM,aAAR,EAAwBC,OAAO,YAA/B,EADkB,EAElB,EAAED,MAAM,UAAR,EAAwBC,OAAO,UAA/B,EAFkB,CAApB;AAIA,aAAKC,gBAAL,GAAwB,CACtB,EAAEF,MAAM,KAAR,EAAmBC,OAAO,CAAC,CAAD,EAAG,CAAH,CAA1B,EADsB,EAEtB,EAAED,MAAM,IAAR,EAAmBC,OAAO,CAAC,CAAD,CAA1B,EAFsB,EAGtB,EAAED,MAAM,UAAR,EAAoBC,OAAO,CAA3B,EAHsB,CAAxB;AAKD,O","file":"options_tab.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\nclass TriggerPanelOptionsCtrl {\n\n /** @ngInject */\n constructor($scope) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl;\n this.panel = this.panelCtrl.panel;\n\n this.fontSizes = ['80%', '90%', '100%', '110%', '120%', '130%', '150%', '160%', '180%', '200%', '220%', '250%'];\n this.ackFilters = [\n 'all triggers',\n 'unacknowledged',\n 'acknowledged'\n ];\n this.sortByFields = [\n { text: 'last change', value: 'lastchange' },\n { text: 'severity', value: 'priority' }\n ];\n this.showEventsFields = [\n { text: 'All', value: [0,1] },\n { text: 'OK', value: [0] },\n { text: 'Problems', value: 1 }\n ];\n }\n}\n\nexport function triggerPanelOptionsTab() {\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/options_tab.html',\n controller: TriggerPanelOptionsCtrl,\n };\n}\n"]}
\ No newline at end of file
diff --git a/dist/panel-triggers/partials/module.html b/dist/panel-triggers/partials/module.html
deleted file mode 100644
index ae77925..0000000
--- a/dist/panel-triggers/partials/module.html
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
diff --git a/dist/panel-triggers/partials/options_tab.html b/dist/panel-triggers/partials/options_tab.html
deleted file mode 100644
index 72b695a..0000000
--- a/dist/panel-triggers/partials/options_tab.html
+++ /dev/null
@@ -1,223 +0,0 @@
-
-
-
Show fields
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dist/panel-triggers/partials/triggers_tab.html b/dist/panel-triggers/partials/triggers_tab.html
deleted file mode 100644
index 8af4f09..0000000
--- a/dist/panel-triggers/partials/triggers_tab.html
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
diff --git a/dist/panel-triggers/plugin.json b/dist/panel-triggers/plugin.json
deleted file mode 100644
index d4c3ef8..0000000
--- a/dist/panel-triggers/plugin.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "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/panel-triggers/specs/migrations.spec.js b/dist/panel-triggers/specs/migrations.spec.js
deleted file mode 100644
index b5c0541..0000000
--- a/dist/panel-triggers/specs/migrations.spec.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import _ from 'lodash';
-import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
-import {DEFAULT_TARGET, DEFAULT_SEVERITY, PANEL_DEFAULTS} from '../triggers_panel_ctrl';
-import {CURRENT_SCHEMA_VERSION} from '../migrations';
-
-describe('Triggers Panel schema migration', () => {
- let ctx = {};
- let datasourceSrvMock = {
- getMetricSources: () => {
- return [{ meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix_default' }];
- },
- get: () => Promise.resolve({})
- };
-
- let timeoutMock = () => {};
-
- beforeEach(() => {
- ctx = {
- scope: {
- panel: {
- datasource: 'zabbix',
- triggers: DEFAULT_TARGET,
- hostField: true,
- statusField: false,
- severityField: false,
- lastChangeField: true,
- ageField: true,
- infoField: true,
- limit: 10,
- showTriggers: 'all triggers',
- hideHostsInMaintenance: false,
- sortTriggersBy: { text: 'last change', value: 'lastchange' },
- showEvents: { text: 'Problems', value: '1' },
- triggerSeverity: DEFAULT_SEVERITY,
- okEventColor: 'rgba(0, 245, 153, 0.45)',
- ackEventColor: 'rgba(0, 0, 0, 0)',
- scroll: true,
- pageSize: 10,
- fontSize: '100%',
- }
- }
- };
- });
-
- it('should update old panel schema', () => {
- let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, timeoutMock, datasourceSrvMock, {}, {}, {});
-
- let expected = _.defaultsDeep({
- schemaVersion: CURRENT_SCHEMA_VERSION,
- datasources: ['zabbix'],
- targets: {
- 'zabbix': DEFAULT_TARGET
- },
- statusField: false,
- severityField: false,
- limit: 10,
- okEventColor: 'rgba(0, 245, 153, 0.45)',
- ackEventColor: 'rgba(0, 0, 0, 0)'
- }, PANEL_DEFAULTS);
-
- expect(updatedPanelCtrl.panel).toEqual(expected);
- });
-
- it('should create new panel with default schema', () => {
- ctx.scope.panel = {};
- let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
-
- let expected = _.defaultsDeep({
- schemaVersion: CURRENT_SCHEMA_VERSION,
- datasources: ['zabbix_default'],
- targets: {
- 'zabbix_default': DEFAULT_TARGET
- }
- }, PANEL_DEFAULTS);
- expect(updatedPanelCtrl.panel).toEqual(expected);
- });
-});
diff --git a/dist/panel-triggers/specs/panel_ctrl.spec.js b/dist/panel-triggers/specs/panel_ctrl.spec.js
deleted file mode 100644
index 72cae5c..0000000
--- a/dist/panel-triggers/specs/panel_ctrl.spec.js
+++ /dev/null
@@ -1,283 +0,0 @@
-import _ from 'lodash';
-import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
-import {PANEL_DEFAULTS, DEFAULT_TARGET} from '../triggers_panel_ctrl';
-// import { create } from 'domain';
-
-describe('TriggerPanelCtrl', () => {
- let ctx = {};
- let datasourceSrvMock, zabbixDSMock;
- let timeoutMock = () => {};
- let createPanelCtrl;
-
- beforeEach(() => {
- ctx = {scope: {panel: PANEL_DEFAULTS}};
- zabbixDSMock = {
- replaceTemplateVars: () => {},
- zabbix: {
- getTriggers: jest.fn().mockReturnValue([generateTrigger("1"), generateTrigger("1")]),
- getAcknowledges: jest.fn().mockReturnValue(Promise.resolve([]))
- }
- };
-
- datasourceSrvMock = {
- getMetricSources: () => {
- return [
- { meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix_default' },
- { meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix' },
- { meta: {id: 'graphite'}, value: {}, name: 'graphite' },
- ];
- },
- get: () => Promise.resolve(zabbixDSMock)
- };
- createPanelCtrl = () => new TriggerPanelCtrl(ctx.scope, {}, timeoutMock, datasourceSrvMock, {}, {}, {});
-
- const getTriggersResp = [
- [
- createTrigger({
- triggerid: "1", lastchange: "1510000010", priority: 5, lastEvent: {eventid: "11"}, hosts: [{maintenance_status: '1'}]
- }),
- createTrigger({
- triggerid: "2", lastchange: "1510000040", priority: 3, lastEvent: {eventid: "12"}
- }),
- ],
- [
- createTrigger({triggerid: "3", lastchange: "1510000020", priority: 4, lastEvent: {eventid: "13"}}),
- createTrigger({triggerid: "4", lastchange: "1510000030", priority: 2, lastEvent: {eventid: "14"}}),
- ]
- ];
-
- // Simulate 2 data sources
- zabbixDSMock.zabbix.getTriggers = jest.fn()
- .mockReturnValueOnce(getTriggersResp[0])
- .mockReturnValueOnce(getTriggersResp[1]);
- zabbixDSMock.zabbix.getAcknowledges = jest.fn()
- .mockReturnValue(Promise.resolve([defaultEvent]));
-
- ctx.panelCtrl = createPanelCtrl();
- });
-
- describe('When adding new panel', () => {
- it('should suggest all zabbix data sources', () => {
- ctx.scope.panel = {};
- let panelCtrl = createPanelCtrl();
- expect(panelCtrl.available_datasources).toEqual([
- 'zabbix_default', 'zabbix'
- ]);
- });
-
- it('should load first zabbix data source as default', () => {
- ctx.scope.panel = {};
- let panelCtrl = createPanelCtrl();
- expect(panelCtrl.panel.datasources).toEqual([
- 'zabbix_default'
- ]);
- });
- });
-
- describe('When refreshing panel', () => {
- beforeEach(() => {
- ctx.scope.panel.datasources = ['zabbix_default', 'zabbix'];
- ctx.scope.panel.targets = {
- 'zabbix_default': DEFAULT_TARGET,
- 'zabbix': DEFAULT_TARGET
- };
- ctx.panelCtrl = createPanelCtrl();
- });
-
- it('should format triggers', (done) => {
- ctx.panelCtrl.onRefresh().then(() => {
- let formattedTrigger = _.find(ctx.panelCtrl.triggerList, {triggerid: "1"});
- expect(formattedTrigger.host).toBe('backend01');
- expect(formattedTrigger.hostTechName).toBe('backend01_tech');
- expect(formattedTrigger.datasource).toBe('zabbix_default');
- expect(formattedTrigger.severity).toBe('Disaster');
- expect(formattedTrigger.maintenance).toBe(true);
- expect(formattedTrigger.age).toBeTruthy();
- expect(formattedTrigger.lastchange).toBeTruthy();
- done();
- });
- });
-
- it('should sort triggers by time by default', (done) => {
- ctx.panelCtrl.onRefresh().then(() => {
- let trigger_ids = _.map(ctx.panelCtrl.triggerList, 'triggerid');
- expect(trigger_ids).toEqual([
- '2', '4', '3', '1'
- ]);
- done();
- });
- });
-
- it('should sort triggers by severity', (done) => {
- ctx.panelCtrl.panel.sortTriggersBy = { text: 'severity', value: 'priority' };
- ctx.panelCtrl.onRefresh().then(() => {
- let trigger_ids = _.map(ctx.panelCtrl.triggerList, 'triggerid');
- expect(trigger_ids).toEqual([
- '1', '3', '2', '4'
- ]);
- done();
- });
- });
-
- it('should add acknowledges to trigger', (done) => {
- ctx.panelCtrl.onRefresh().then(() => {
- let trigger = getTriggerById(1, ctx);
- expect(trigger.acknowledges).toHaveLength(1);
- expect(trigger.acknowledges[0].message).toBe("event ack");
-
- expect(getTriggerById(2, ctx).acknowledges).toBe(undefined);
- expect(getTriggerById(3, ctx).acknowledges).toBe(undefined);
- expect(getTriggerById(4, ctx).acknowledges).toBe(undefined);
- done();
- });
- });
- });
-
- describe('When formatting triggers', () => {
- beforeEach(() => {
- ctx.panelCtrl = createPanelCtrl();
- });
-
- it('should handle new lines in trigger description', () => {
- ctx.panelCtrl.setTriggerSeverity = jest.fn((trigger) => trigger);
- let trigger = {comments: "this is\ndescription"};
- const formattedTrigger = ctx.panelCtrl.formatTrigger(trigger);
- expect(formattedTrigger.comments).toBe("this is description");
- });
-
- it('should format host name to display (default)', (done) => {
- ctx.panelCtrl.onRefresh().then(() => {
- let trigger = getTriggerById(1, ctx);
- let hostname = ctx.panelCtrl.formatHostName(trigger);
- expect(hostname).toBe('backend01');
- done();
- });
- });
-
- it('should format host name to display (tech name)', (done) => {
- ctx.panelCtrl.panel.hostField = false;
- ctx.panelCtrl.panel.hostTechNameField = true;
- ctx.panelCtrl.onRefresh().then(() => {
- let trigger = getTriggerById(1, ctx);
- let hostname = ctx.panelCtrl.formatHostName(trigger);
- expect(hostname).toBe('backend01_tech');
- done();
- });
- });
-
- it('should format host name to display (both tech and visible)', (done) => {
- ctx.panelCtrl.panel.hostField = true;
- ctx.panelCtrl.panel.hostTechNameField = true;
- ctx.panelCtrl.onRefresh().then(() => {
- let trigger = getTriggerById(1, ctx);
- let hostname = ctx.panelCtrl.formatHostName(trigger);
- expect(hostname).toBe('backend01 (backend01_tech)');
- done();
- });
- });
-
- it('should hide hostname if both visible and tech name checkboxes unset', (done) => {
- ctx.panelCtrl.panel.hostField = false;
- ctx.panelCtrl.panel.hostTechNameField = false;
- ctx.panelCtrl.onRefresh().then(() => {
- let trigger = getTriggerById(1, ctx);
- let hostname = ctx.panelCtrl.formatHostName(trigger);
- expect(hostname).toBe("");
- done();
- });
- });
- });
-
- describe('When formatting acknowledges', () => {
- beforeEach(() => {
- ctx.panelCtrl = createPanelCtrl();
- });
-
- it('should build proper user name', () => {
- const ack = {
- alias: 'alias', name: 'name', surname: 'surname'
- };
-
- const formatted = ctx.panelCtrl.formatAcknowledge(ack);
- expect(formatted.user).toBe('alias (name surname)');
- });
-
- it('should return empty name if it is not defined', () => {
- const formatted = ctx.panelCtrl.formatAcknowledge({});
- expect(formatted.user).toBe('');
- });
- });
-});
-
-const defaultTrigger = {
- "triggerid": "13565",
- "value": "1",
- "groups": [{"groupid": "1", "name": "Backend"}] ,
- "hosts": [{"host": "backend01_tech", "hostid": "10001","maintenance_status": "0", "name": "backend01"}] ,
- "lastEvent": {
- "eventid": "11",
- "clock": "1507229064",
- "ns": "556202037",
- "acknowledged": "1",
- "value": "1",
- "object": "0",
- "source": "0",
- "objectid": "13565",
- },
- "tags": [] ,
- "lastchange": "1440259530",
- "priority": "2",
- "description": "Lack of free swap space on server",
- "comments": "It probably means that the systems requires\nmore physical memory.",
- "url": "https://host.local/path",
- "templateid": "0", "expression": "{13174}<50", "manual_close": "0", "correlation_mode": "0",
- "correlation_tag": "", "recovery_mode": "0", "recovery_expression": "", "state": "0", "status": "0",
- "flags": "0", "type": "0", "items": [] , "error": ""
-};
-
-const defaultEvent = {
- "eventid": "11",
- "acknowledges": [
- {
- "acknowledgeid": "185",
- "action": "0",
- "alias": "api",
- "clock": "1512382246",
- "eventid": "11",
- "message": "event ack",
- "name": "api",
- "surname": "user",
- "userid": "3"
- }
- ],
- "clock": "1507229064",
- "ns": "556202037",
- "acknowledged": "1",
- "value": "1",
- "object": "0",
- "source": "0",
- "objectid": "1",
-};
-
-function generateTrigger(id, timestamp, severity) {
- let trigger = _.cloneDeep(defaultTrigger);
- trigger.triggerid = id.toString();
- if (severity) {
- trigger.priority = severity.toString();
- }
- if (timestamp) {
- trigger.lastchange = timestamp;
- }
- return trigger;
-}
-
-function createTrigger(props) {
- let trigger = _.cloneDeep(defaultTrigger);
- trigger = _.merge(trigger, props);
- trigger.lastEvent.objectid = trigger.triggerid;
- return trigger;
-}
-
-function getTriggerById(id, ctx) {
- return _.find(ctx.panelCtrl.triggerList, {triggerid: id.toString()});
-}
diff --git a/dist/panel-triggers/triggers_panel_ctrl.js b/dist/panel-triggers/triggers_panel_ctrl.js
deleted file mode 100644
index 8d8dc87..0000000
--- a/dist/panel-triggers/triggers_panel_ctrl.js
+++ /dev/null
@@ -1,828 +0,0 @@
-'use strict';
-
-System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'app/plugins/sdk', './options_tab', './triggers_tab', './migrations'], function (_export, _context) {
- "use strict";
-
- var _, $, moment, utils, PanelCtrl, triggerPanelOptionsTab, triggerPanelTriggersTab, migratePanelSchema, CURRENT_SCHEMA_VERSION, _createClass, _get, ZABBIX_DS_ID, DEFAULT_TARGET, DEFAULT_SEVERITY, DEFAULT_TIME_FORMAT, PANEL_DEFAULTS, triggerStatusMap, 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 (_jquery) {
- $ = _jquery.default;
- }, function (_moment) {
- moment = _moment.default;
- }, function (_datasourceZabbixUtils) {
- utils = _datasourceZabbixUtils;
- }, function (_appPluginsSdk) {
- PanelCtrl = _appPluginsSdk.PanelCtrl;
- }, function (_options_tab) {
- triggerPanelOptionsTab = _options_tab.triggerPanelOptionsTab;
- }, function (_triggers_tab) {
- triggerPanelTriggersTab = _triggers_tab.triggerPanelTriggersTab;
- }, function (_migrations) {
- migratePanelSchema = _migrations.migratePanelSchema;
- CURRENT_SCHEMA_VERSION = _migrations.CURRENT_SCHEMA_VERSION;
- }],
- 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;
- };
- }();
-
- _get = function get(object, property, receiver) {
- if (object === null) object = Function.prototype;
- var desc = Object.getOwnPropertyDescriptor(object, property);
-
- if (desc === undefined) {
- var parent = Object.getPrototypeOf(object);
-
- if (parent === null) {
- return undefined;
- } else {
- return get(parent, property, receiver);
- }
- } else if ("value" in desc) {
- return desc.value;
- } else {
- var getter = desc.get;
-
- if (getter === undefined) {
- return undefined;
- }
-
- return getter.call(receiver);
- }
- };
-
- ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource';
-
- _export('DEFAULT_TARGET', DEFAULT_TARGET = {
- group: { filter: "" },
- host: { filter: "" },
- application: { filter: "" },
- trigger: { filter: "" },
- tags: { filter: "" }
- });
-
- _export('DEFAULT_TARGET', DEFAULT_TARGET);
-
- _export('DEFAULT_SEVERITY', DEFAULT_SEVERITY = [{ priority: 0, severity: 'Not classified', color: 'rgb(108, 108, 108)', show: true }, { priority: 1, severity: 'Information', color: 'rgb(120, 158, 183)', show: true }, { priority: 2, severity: 'Warning', color: 'rgb(175, 180, 36)', show: true }, { priority: 3, severity: 'Average', color: 'rgb(255, 137, 30)', show: true }, { priority: 4, severity: 'High', color: 'rgb(255, 101, 72)', show: true }, { priority: 5, severity: 'Disaster', color: 'rgb(215, 0, 0)', show: true }]);
-
- _export('DEFAULT_SEVERITY', DEFAULT_SEVERITY);
-
- DEFAULT_TIME_FORMAT = "DD MMM YYYY HH:mm:ss";
-
- _export('PANEL_DEFAULTS', PANEL_DEFAULTS = {
- schemaVersion: CURRENT_SCHEMA_VERSION,
- datasources: [],
- targets: {},
- // Fields
- hostField: true,
- hostTechNameField: false,
- hostGroups: false,
- showTags: true,
- statusField: true,
- severityField: true,
- descriptionField: true,
- descriptionAtNewLine: false,
- // Options
- hostsInMaintenance: true,
- showTriggers: 'all triggers',
- sortTriggersBy: { text: 'last change', value: 'lastchange' },
- showEvents: { text: 'Problems', value: '1' },
- limit: 100,
- // View options
- fontSize: '100%',
- pageSize: 10,
- highlightBackground: false,
- highlightNewEvents: false,
- highlightNewerThan: '1h',
- customLastChangeFormat: false,
- lastChangeFormat: "",
- // Triggers severity and colors
- triggerSeverity: DEFAULT_SEVERITY,
- okEventColor: 'rgb(56, 189, 113)',
- ackEventColor: 'rgb(56, 219, 156)'
- });
-
- _export('PANEL_DEFAULTS', PANEL_DEFAULTS);
-
- triggerStatusMap = {
- '0': 'OK',
- '1': 'PROBLEM'
- };
-
- _export('TriggerPanelCtrl', TriggerPanelCtrl = function (_PanelCtrl) {
- _inherits(TriggerPanelCtrl, _PanelCtrl);
-
- /** @ngInject */
- function TriggerPanelCtrl($scope, $injector, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {
- _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.dashboardSrv = dashboardSrv;
- _this.scope = $scope;
- _this.$timeout = $timeout;
-
- _this.editorTabIndex = 1;
- _this.triggerStatusMap = triggerStatusMap;
- _this.defaultTimeFormat = DEFAULT_TIME_FORMAT;
- _this.pageIndex = 0;
- _this.triggerList = [];
- _this.currentTriggersPage = [];
- _this.datasources = {};
-
- _this.panel = migratePanelSchema(_this.panel);
- _.defaultsDeep(_this.panel, _.cloneDeep(PANEL_DEFAULTS));
-
- _this.available_datasources = _.map(_this.getZabbixDataSources(), 'name');
- if (_this.panel.datasources.length === 0) {
- _this.panel.datasources.push(_this.available_datasources[0]);
- }
- if (_.isEmpty(_this.panel.targets)) {
- _this.panel.targets[_this.panel.datasources[0]] = DEFAULT_TARGET;
- }
-
- _this.initDatasources();
- _this.events.on('init-edit-mode', _this.onInitEditMode.bind(_this));
- _this.events.on('refresh', _this.onRefresh.bind(_this));
- return _this;
- }
-
- _createClass(TriggerPanelCtrl, [{
- key: 'initDatasources',
- value: function initDatasources() {
- var _this2 = this;
-
- var promises = _.map(this.panel.datasources, function (ds) {
- // Load datasource
- return _this2.datasourceSrv.get(ds).then(function (datasource) {
- _this2.datasources[ds] = datasource;
- return datasource;
- });
- });
- return Promise.all(promises);
- }
- }, {
- key: 'getZabbixDataSources',
- value: function getZabbixDataSources() {
- return _.filter(this.datasourceSrv.getMetricSources(), function (datasource) {
- return datasource.meta.id === ZABBIX_DS_ID && datasource.value;
- });
- }
- }, {
- key: 'onInitEditMode',
- value: function onInitEditMode() {
- this.addEditorTab('Triggers', triggerPanelTriggersTab, 1);
- this.addEditorTab('Options', triggerPanelOptionsTab, 2);
- }
- }, {
- key: 'setTimeQueryStart',
- value: function setTimeQueryStart() {
- this.timing.queryStart = new Date().getTime();
- }
- }, {
- key: 'setTimeQueryEnd',
- value: function setTimeQueryEnd() {
- this.timing.queryEnd = new Date().getTime();
- }
- }, {
- key: 'onRefresh',
- value: function onRefresh() {
- var _this3 = this;
-
- // ignore fetching data if another panel is in fullscreen
- if (this.otherPanelInFullscreenMode()) {
- return;
- }
-
- // clear loading/error state
- delete this.error;
- this.loading = true;
- this.setTimeQueryStart();
- this.pageIndex = 0;
-
- return this.getTriggers().then(function (zabbixTriggers) {
- // Notify panel that request is finished
- _this3.loading = false;
- _this3.setTimeQueryEnd();
-
- _this3.render(zabbixTriggers);
- }).catch(function (err) {
- // if cancelled keep loading set to true
- if (err.cancelled) {
- console.log('Panel request cancelled', err);
- return;
- }
-
- _this3.loading = false;
- _this3.error = err.message || "Request Error";
-
- if (err.data) {
- if (err.data.message) {
- _this3.error = err.data.message;
- }
- if (err.data.error) {
- _this3.error = err.data.error;
- }
- }
-
- _this3.events.emit('data-error', err);
- console.log('Panel data error:', err);
- });
- }
- }, {
- key: 'render',
- value: function render(zabbixTriggers) {
- var _this4 = this;
-
- var triggers = _.cloneDeep(zabbixTriggers || this.triggerListUnfiltered);
- this.triggerListUnfiltered = _.cloneDeep(triggers);
-
- triggers = _.map(triggers, this.formatTrigger.bind(this));
- triggers = this.filterTriggersPost(triggers);
- triggers = this.sortTriggers(triggers);
-
- // Limit triggers number
- triggers = triggers.slice(0, this.panel.limit || PANEL_DEFAULTS.limit);
-
- this.triggerList = triggers;
- this.getCurrentTriggersPage();
-
- this.$timeout(function () {
- _get(TriggerPanelCtrl.prototype.__proto__ || Object.getPrototypeOf(TriggerPanelCtrl.prototype), 'render', _this4).call(_this4, _this4.triggerList);
- });
- }
- }, {
- key: 'getTriggers',
- value: function getTriggers() {
- var _this5 = this;
-
- var promises = _.map(this.panel.datasources, function (ds) {
- return _this5.datasourceSrv.get(ds).then(function (datasource) {
- var zabbix = datasource.zabbix;
- var showEvents = _this5.panel.showEvents.value;
- var triggerFilter = _this5.panel.targets[ds];
-
- // 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 triggersOptions = {
- showTriggers: showEvents
- };
-
- return zabbix.getTriggers(groupFilter, hostFilter, appFilter, triggersOptions);
- }).then(function (triggers) {
- return _this5.getAcknowledges(triggers, ds);
- }).then(function (triggers) {
- return _this5.setMaintenanceStatus(triggers);
- }).then(function (triggers) {
- return _this5.filterTriggersPre(triggers, ds);
- }).then(function (triggers) {
- return _this5.addTriggerDataSource(triggers, ds);
- });
- });
-
- return Promise.all(promises).then(function (results) {
- return _.flatten(results);
- });
- }
- }, {
- key: 'getAcknowledges',
- value: function getAcknowledges(triggerList, ds) {
- var _this6 = this;
-
- // Request acknowledges for trigger
- var eventids = _.map(triggerList, function (trigger) {
- return trigger.lastEvent.eventid;
- });
-
- return this.datasources[ds].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, _this6.formatAcknowledge.bind(_this6));
- }
-
- if (!trigger.lastEvent.eventid) {
- trigger.lastEvent = null;
- }
- });
-
- return triggerList;
- });
- }
- }, {
- key: 'formatAcknowledge',
- value: function formatAcknowledge(ack) {
- var timestamp = moment.unix(ack.clock);
- if (this.panel.customLastChangeFormat) {
- ack.time = timestamp.format(this.panel.lastChangeFormat);
- } else {
- ack.time = timestamp.format(this.defaultTimeFormat);
- }
- ack.user = ack.alias || '';
- if (ack.name || ack.surname) {
- var fullName = (ack.name || '') + ' ' + (ack.surname || '');
- ack.user += ' (' + fullName + ')';
- }
- return ack;
- }
- }, {
- key: 'filterTriggersPre',
- value: function filterTriggersPre(triggerList, ds) {
- // Filter triggers by description
- var triggerFilter = this.panel.targets[ds].trigger.filter;
- triggerFilter = this.datasources[ds].replaceTemplateVars(triggerFilter);
- if (triggerFilter) {
- triggerList = filterTriggers(triggerList, triggerFilter);
- }
-
- // Filter by tags
- var target = this.panel.targets[ds];
- if (target.tags.filter) {
- var tagsFilter = this.datasources[ds].replaceTemplateVars(target.tags.filter);
- // replaceTemplateVars() builds regex-like string, so we should trim it.
- tagsFilter = tagsFilter.replace('/^', '').replace('$/', '');
- var tags = this.parseTags(tagsFilter);
- triggerList = _.filter(triggerList, function (trigger) {
- return _.every(tags, function (tag) {
- return _.find(trigger.tags, { tag: tag.tag, value: tag.value });
- });
- });
- }
-
- return triggerList;
- }
- }, {
- key: 'filterTriggersPost',
- value: function filterTriggersPost(triggers) {
- var _this7 = this;
-
- var triggerList = _.cloneDeep(triggers);
-
- // Filter acknowledged triggers
- if (this.panel.showTriggers === 'unacknowledged') {
- triggerList = _.filter(triggerList, function (trigger) {
- return !trigger.acknowledges;
- });
- } else if (this.panel.showTriggers === 'acknowledged') {
- triggerList = _.filter(triggerList, 'acknowledges');
- } else {
- triggerList = triggerList;
- }
-
- // Filter by maintenance status
- if (!this.panel.hostsInMaintenance) {
- triggerList = _.filter(triggerList, function (trigger) {
- return trigger.maintenance === false;
- });
- }
-
- // Filter triggers by severity
- triggerList = _.filter(triggerList, function (trigger) {
- return _this7.panel.triggerSeverity[trigger.priority].show;
- });
-
- return triggerList;
- }
- }, {
- key: 'setMaintenanceStatus',
- value: function setMaintenanceStatus(triggers) {
- _.each(triggers, function (trigger) {
- var maintenance_status = _.some(trigger.hosts, function (host) {
- return host.maintenance_status === '1';
- });
- trigger.maintenance = maintenance_status;
- });
- return triggers;
- }
- }, {
- key: 'addTriggerDataSource',
- value: function addTriggerDataSource(triggers, ds) {
- _.each(triggers, function (trigger) {
- trigger.datasource = ds;
- });
- return triggers;
- }
- }, {
- key: 'sortTriggers',
- value: function sortTriggers(triggerList) {
- if (this.panel.sortTriggersBy.value === 'priority') {
- triggerList = _.orderBy(triggerList, ['priority', 'lastchangeUnix', 'triggerid'], ['desc', 'desc', 'desc']);
- } else {
- triggerList = _.orderBy(triggerList, ['lastchangeUnix', 'priority', 'triggerid'], ['desc', 'desc', 'desc']);
- }
- return triggerList;
- }
- }, {
- key: 'formatTrigger',
- value: function formatTrigger(zabbixTrigger) {
- var trigger = _.cloneDeep(zabbixTrigger);
- var triggerObj = trigger;
-
- // Set host that the trigger belongs
- if (trigger.hosts && trigger.hosts.length) {
- triggerObj.host = trigger.hosts[0].name;
- triggerObj.hostTechName = trigger.hosts[0].host;
- }
-
- // Set tags if present
- if (trigger.tags && trigger.tags.length === 0) {
- trigger.tags = null;
- }
-
- // Handle multi-line description
- if (trigger.comments) {
- trigger.comments = trigger.comments.replace('\n', ' ');
- }
-
- // Format last change and age
- trigger.lastchangeUnix = Number(trigger.lastchange);
- triggerObj = this.setTriggerLastChange(triggerObj);
- triggerObj = this.setTriggerSeverity(triggerObj);
- return triggerObj;
- }
- }, {
- key: 'updateTriggerFormat',
- value: function updateTriggerFormat(trigger) {
- trigger = this.setTriggerLastChange(trigger);
- trigger = this.setTriggerSeverity(trigger);
- return trigger;
- }
- }, {
- key: 'setTriggerSeverity',
- value: function setTriggerSeverity(trigger) {
- if (trigger.value === '1') {
- // Problem state
- trigger.color = this.panel.triggerSeverity[trigger.priority].color;
- } else {
- // OK state
- trigger.color = this.panel.okEventColor;
- }
- trigger.severity = this.panel.triggerSeverity[trigger.priority].severity;
-
- // Mark acknowledged triggers with different color
- if (this.panel.markAckEvents && trigger.acknowledges && trigger.acknowledges.length) {
- trigger.color = this.panel.ackEventColor;
- }
-
- return trigger;
- }
- }, {
- key: 'setTriggerLastChange',
- value: function setTriggerLastChange(trigger) {
- if (!trigger.lastchangeUnix) {
- trigger.lastchange = "";
- trigger.age = "";
- return trigger;
- }
-
- var timestamp = moment.unix(trigger.lastchangeUnix);
- if (this.panel.customLastChangeFormat) {
- // User defined format
- trigger.lastchange = timestamp.format(this.panel.lastChangeFormat);
- } else {
- trigger.lastchange = timestamp.format(this.defaultTimeFormat);
- }
- trigger.age = timestamp.fromNow(true);
- return trigger;
- }
- }, {
- key: 'parseTags',
- value: function parseTags(tagStr) {
- if (!tagStr) {
- return [];
- }
-
- var tags = _.map(tagStr.split(','), function (tag) {
- return tag.trim();
- });
- tags = _.map(tags, function (tag) {
- var tagParts = tag.split(':');
- return { tag: tagParts[0].trim(), value: tagParts[1].trim() };
- });
- return tags;
- }
- }, {
- key: 'tagsToString',
- value: function tagsToString(tags) {
- return _.map(tags, function (tag) {
- return tag.tag + ':' + tag.value;
- }).join(', ');
- }
- }, {
- key: 'addTagFilter',
- value: function addTagFilter(tag, ds) {
- var tagFilter = this.panel.targets[ds].tags.filter;
- var targetTags = this.parseTags(tagFilter);
- var newTag = { tag: tag.tag, value: tag.value };
- targetTags.push(newTag);
- targetTags = _.uniqWith(targetTags, _.isEqual);
- var newFilter = this.tagsToString(targetTags);
- this.panel.targets[ds].tags.filter = newFilter;
- this.refresh();
- }
- }, {
- key: 'switchComment',
- value: function switchComment(trigger) {
- trigger.showComment = !trigger.showComment;
- }
- }, {
- key: 'acknowledgeTrigger',
- value: function acknowledgeTrigger(trigger, message) {
- var _this8 = this;
-
- var eventid = trigger.lastEvent ? trigger.lastEvent.eventid : null;
- var grafana_user = this.contextSrv.user.name;
- var ack_message = grafana_user + ' (Grafana): ' + message;
- return this.datasourceSrv.get(trigger.datasource).then(function (datasource) {
- var userIsEditor = _this8.contextSrv.isEditor || _this8.contextSrv.isGrafanaAdmin;
- if (datasource.disableReadOnlyUsersAck && !userIsEditor) {
- return Promise.reject({ message: 'You have no permissions to acknowledge events.' });
- }
- if (eventid) {
- return datasource.zabbix.zabbixAPI.acknowledgeEvent(eventid, ack_message);
- } else {
- return Promise.reject({ message: 'Trigger has no events. Nothing to acknowledge.' });
- }
- }).then(this.onRefresh.bind(this)).catch(function (err) {
- _this8.error = err.message || "Acknowledge Error";
- _this8.events.emit('data-error', err);
- console.log('Panel data error:', err);
- });
- }
- }, {
- key: 'getCurrentTriggersPage',
- value: function getCurrentTriggersPage() {
- var pageSize = this.panel.pageSize || PANEL_DEFAULTS.pageSize;
- var startPos = this.pageIndex * pageSize;
- var endPos = Math.min(startPos + pageSize, this.triggerList.length);
- this.currentTriggersPage = this.triggerList.slice(startPos, endPos);
- return this.currentTriggersPage;
- }
- }, {
- key: 'formatHostName',
- value: function formatHostName(trigger) {
- var host = "";
- if (this.panel.hostField && this.panel.hostTechNameField) {
- host = trigger.host + ' (' + trigger.hostTechName + ')';
- } else if (this.panel.hostField || this.panel.hostTechNameField) {
- host = this.panel.hostField ? trigger.host : trigger.hostTechName;
- }
-
- return host;
- }
- }, {
- key: 'formatHostGroups',
- value: function formatHostGroups(trigger) {
- var groupNames = "";
- if (this.panel.hostGroups) {
- var groups = _.map(trigger.groups, 'name').join(', ');
- groupNames += '[ ' + groups + ' ]';
- }
-
- return groupNames;
- }
- }, {
- key: 'getAlertIconClass',
- value: function getAlertIconClass(trigger) {
- var iconClass = '';
- if (trigger.value === '1') {
- if (trigger.priority >= 3) {
- iconClass = 'icon-gf-critical';
- } else {
- iconClass = 'icon-gf-warning';
- }
- } else {
- iconClass = 'icon-gf-online';
- }
-
- if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {
- iconClass += ' zabbix-trigger--blinked';
- }
- return iconClass;
- }
- }, {
- key: 'getAlertIconClassBySeverity',
- value: function getAlertIconClassBySeverity(triggerSeverity) {
- var iconClass = 'icon-gf-warning';
- if (triggerSeverity.priority >= 3) {
- iconClass = 'icon-gf-critical';
- }
- return iconClass;
- }
- }, {
- key: 'getAlertStateClass',
- value: function getAlertStateClass(trigger) {
- var statusClass = '';
-
- if (trigger.value === '1') {
- statusClass = 'alert-state-critical';
- } else {
- statusClass = 'alert-state-ok';
- }
-
- if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {
- statusClass += ' zabbix-trigger--blinked';
- }
-
- return statusClass;
- }
- }, {
- key: 'getBackground',
- value: function getBackground(trigger) {
- var mainColor = trigger.color;
- var secondColor = this.contextSrv.user.lightTheme ? '#dde4ed' : '#262628';
- if (this.contextSrv.user.lightTheme) {
- return 'linear-gradient(135deg, ' + secondColor + ', ' + mainColor + ')';
- }
- return 'linear-gradient(135deg, ' + mainColor + ', ' + secondColor + ')';
- }
- }, {
- key: 'isNewTrigger',
- value: function isNewTrigger(trigger) {
- try {
- var highlightIntervalMs = utils.parseInterval(this.panel.highlightNewerThan || PANEL_DEFAULTS.highlightNewerThan);
- var durationSec = Date.now() - trigger.lastchangeUnix * 1000;
- return durationSec < highlightIntervalMs;
- } catch (e) {
- return false;
- }
- }
- }, {
- key: 'link',
- value: function link(scope, elem, attrs, ctrl) {
- var panel = ctrl.panel;
- var pageCount = 0;
- var triggerList = ctrl.triggerList;
-
- scope.$watchGroup(['ctrl.currentTriggersPage', 'ctrl.triggerList'], renderPanel);
- elem.on('click', '.triggers-panel-page-link', switchPage);
- ctrl.events.on('render', function (renderData) {
- triggerList = renderData || triggerList;
- renderPanel();
- });
-
- function getContentHeight() {
- var panelHeight = ctrl.height;
- if (pageCount > 1) {
- panelHeight -= 36;
- }
- return panelHeight + 'px';
- }
-
- function switchPage(e) {
- var el = $(e.currentTarget);
- ctrl.pageIndex = parseInt(el.text(), 10) - 1;
-
- var pageSize = panel.pageSize || 10;
- var startPos = ctrl.pageIndex * pageSize;
- var endPos = Math.min(startPos + pageSize, triggerList.length);
- ctrl.currentTriggersPage = triggerList.slice(startPos, endPos);
-
- scope.$apply(function () {
- renderPanel();
- });
- }
-
- function appendPaginationControls(footerElem) {
- footerElem.empty();
-
- var pageSize = panel.pageSize || 5;
- pageCount = Math.ceil(triggerList.length / pageSize);
- if (pageCount === 1) {
- return;
- }
-
- var startPage = Math.max(ctrl.pageIndex - 3, 0);
- var endPage = Math.min(pageCount, startPage + 9);
-
- var paginationList = $('');
-
- for (var i = startPage; i < endPage; i++) {
- var activeClass = i === ctrl.pageIndex ? 'active' : '';
- var pageLinkElem = $('' + (i + 1) + ' ');
- paginationList.append(pageLinkElem);
- }
-
- footerElem.append(paginationList);
- }
-
- function setFontSize() {
- var fontSize = parseInt(panel.fontSize.slice(0, panel.fontSize.length - 1));
- var triggerCardElem = elem.find('.alert-rule-item');
- if (fontSize && fontSize !== 100) {
- triggerCardElem.find('.alert-rule-item__icon').css({
- 'font-size': fontSize + '%',
- 'margin': fontSize / 100 * 6 + 'px'
- });
- triggerCardElem.find('.alert-rule-item__name').css({ 'font-size': fontSize + '%' });
- triggerCardElem.find('.alert-rule-item__text').css({ 'font-size': fontSize * 0.8 + '%' });
- triggerCardElem.find('.zbx-trigger-lastchange').css({ 'font-size': fontSize * 0.8 + '%' });
- triggerCardElem.find('.zbx-tag').css({ 'font-size': fontSize * 0.6 + '%' });
- triggerCardElem.find('.zbx-tag').css({ 'line-height': fontSize / 100 * 16 + 'px' });
- } else {
- // remove css
- triggerCardElem.find('.alert-rule-item__icon').css({ 'font-size': '', 'margin-right': '' });
- triggerCardElem.find('.alert-rule-item__name').css({ 'font-size': '' });
- triggerCardElem.find('.alert-rule-item__text').css({ 'font-size': '' });
- triggerCardElem.find('.zbx-trigger-lastchange').css({ 'font-size': '' });
- triggerCardElem.find('.zbx-tag').css({ 'font-size': '' });
- triggerCardElem.find('.zbx-tag').css({ 'line-height': '' });
- }
- }
-
- function renderPanel() {
- var rootElem = elem.find('.triggers-panel-scroll');
- var footerElem = elem.find('.triggers-panel-footer');
- appendPaginationControls(footerElem);
- rootElem.css({ 'max-height': getContentHeight() });
- rootElem.css({ 'height': getContentHeight() });
- setFontSize();
- ctrl.renderingCompleted();
- }
-
- var unbindDestroy = scope.$on('$destroy', function () {
- elem.off('click', '.triggers-panel-page-link');
- unbindDestroy();
- });
- }
- }]);
-
- return TriggerPanelCtrl;
- }(PanelCtrl));
-
- _export('TriggerPanelCtrl', TriggerPanelCtrl);
-
- TriggerPanelCtrl.templateUrl = 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/module.html';
- }
- };
-});
-//# sourceMappingURL=triggers_panel_ctrl.js.map
diff --git a/dist/panel-triggers/triggers_panel_ctrl.js.map b/dist/panel-triggers/triggers_panel_ctrl.js.map
deleted file mode 100644
index b2fccfc..0000000
--- a/dist/panel-triggers/triggers_panel_ctrl.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/panel-triggers/triggers_panel_ctrl.js"],"names":["filterTriggers","triggers","triggerFilter","utils","isRegex","_","filter","trigger","buildRegex","test","description","$","moment","PanelCtrl","triggerPanelOptionsTab","triggerPanelTriggersTab","migratePanelSchema","CURRENT_SCHEMA_VERSION","ZABBIX_DS_ID","DEFAULT_TARGET","group","host","application","tags","DEFAULT_SEVERITY","priority","severity","color","show","DEFAULT_TIME_FORMAT","PANEL_DEFAULTS","schemaVersion","datasources","targets","hostField","hostTechNameField","hostGroups","showTags","statusField","severityField","descriptionField","descriptionAtNewLine","hostsInMaintenance","showTriggers","sortTriggersBy","text","value","showEvents","limit","fontSize","pageSize","highlightBackground","highlightNewEvents","highlightNewerThan","customLastChangeFormat","lastChangeFormat","triggerSeverity","okEventColor","ackEventColor","triggerStatusMap","TriggerPanelCtrl","$scope","$injector","$timeout","datasourceSrv","templateSrv","contextSrv","dashboardSrv","scope","editorTabIndex","defaultTimeFormat","pageIndex","triggerList","currentTriggersPage","panel","defaultsDeep","cloneDeep","available_datasources","map","getZabbixDataSources","length","push","isEmpty","initDatasources","events","on","onInitEditMode","bind","onRefresh","promises","ds","get","then","datasource","Promise","all","getMetricSources","meta","id","addEditorTab","timing","queryStart","Date","getTime","queryEnd","otherPanelInFullscreenMode","error","loading","setTimeQueryStart","getTriggers","setTimeQueryEnd","render","zabbixTriggers","catch","err","cancelled","console","log","message","data","emit","triggerListUnfiltered","formatTrigger","filterTriggersPost","sortTriggers","slice","getCurrentTriggersPage","zabbix","groupFilter","replaceTemplateVars","hostFilter","appFilter","triggersOptions","getAcknowledges","setMaintenanceStatus","filterTriggersPre","addTriggerDataSource","flatten","results","eventids","lastEvent","eventid","each","event","find","acknowledges","formatAcknowledge","ack","timestamp","unix","clock","time","format","user","alias","name","surname","fullName","target","tagsFilter","replace","parseTags","every","tag","maintenance","maintenance_status","some","hosts","orderBy","zabbixTrigger","triggerObj","hostTechName","comments","lastchangeUnix","Number","lastchange","setTriggerLastChange","setTriggerSeverity","markAckEvents","age","fromNow","tagStr","split","trim","tagParts","join","tagFilter","targetTags","newTag","uniqWith","isEqual","newFilter","tagsToString","refresh","showComment","grafana_user","ack_message","userIsEditor","isEditor","isGrafanaAdmin","disableReadOnlyUsersAck","reject","zabbixAPI","acknowledgeEvent","startPos","endPos","Math","min","groupNames","groups","iconClass","isNewTrigger","statusClass","mainColor","secondColor","lightTheme","highlightIntervalMs","parseInterval","durationSec","now","e","elem","attrs","ctrl","pageCount","$watchGroup","renderPanel","switchPage","renderData","getContentHeight","panelHeight","height","el","currentTarget","parseInt","$apply","appendPaginationControls","footerElem","empty","ceil","startPage","max","endPage","paginationList","i","activeClass","pageLinkElem","append","setFontSize","triggerCardElem","css","rootElem","renderingCompleted","unbindDestroy","$on","off","templateUrl"],"mappings":"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","file":"triggers_panel_ctrl.js","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport moment from 'moment';\nimport * as utils from '../datasource-zabbix/utils';\nimport {PanelCtrl} from 'app/plugins/sdk';\nimport {triggerPanelOptionsTab} from './options_tab';\nimport {triggerPanelTriggersTab} from './triggers_tab';\nimport {migratePanelSchema, CURRENT_SCHEMA_VERSION} from './migrations';\n\nconst ZABBIX_DS_ID = 'alexanderzobnin-zabbix-datasource';\n\nexport const DEFAULT_TARGET = {\n group: {filter: \"\"},\n host: {filter: \"\"},\n application: {filter: \"\"},\n trigger: {filter: \"\"},\n tags: {filter: \"\"},\n};\n\nexport const DEFAULT_SEVERITY = [\n { priority: 0, severity: 'Not classified', color: 'rgb(108, 108, 108)', show: true},\n { priority: 1, severity: 'Information', color: 'rgb(120, 158, 183)', show: true},\n { priority: 2, severity: 'Warning', color: 'rgb(175, 180, 36)', show: true},\n { priority: 3, severity: 'Average', color: 'rgb(255, 137, 30)', show: true},\n { priority: 4, severity: 'High', color: 'rgb(255, 101, 72)', show: true},\n { priority: 5, severity: 'Disaster', color: 'rgb(215, 0, 0)', show: true},\n];\n\nconst DEFAULT_TIME_FORMAT = \"DD MMM YYYY HH:mm:ss\";\n\nexport const PANEL_DEFAULTS = {\n schemaVersion: CURRENT_SCHEMA_VERSION,\n datasources: [],\n targets: {},\n // Fields\n hostField: true,\n hostTechNameField: false,\n hostGroups: false,\n showTags: true,\n statusField: true,\n severityField: true,\n descriptionField: true,\n descriptionAtNewLine: false,\n // Options\n hostsInMaintenance: true,\n showTriggers: 'all triggers',\n sortTriggersBy: { text: 'last change', value: 'lastchange' },\n showEvents: { text: 'Problems', value: '1' },\n limit: 100,\n // View options\n fontSize: '100%',\n pageSize: 10,\n highlightBackground: false,\n highlightNewEvents: false,\n highlightNewerThan: '1h',\n customLastChangeFormat: false,\n lastChangeFormat: \"\",\n // Triggers severity and colors\n triggerSeverity: DEFAULT_SEVERITY,\n okEventColor: 'rgb(56, 189, 113)',\n ackEventColor: 'rgb(56, 219, 156)'\n};\n\nconst triggerStatusMap = {\n '0': 'OK',\n '1': 'PROBLEM'\n};\n\nexport class TriggerPanelCtrl extends PanelCtrl {\n\n /** @ngInject */\n constructor($scope, $injector, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {\n super($scope, $injector);\n this.datasourceSrv = datasourceSrv;\n this.templateSrv = templateSrv;\n this.contextSrv = contextSrv;\n this.dashboardSrv = dashboardSrv;\n this.scope = $scope;\n this.$timeout = $timeout;\n\n this.editorTabIndex = 1;\n this.triggerStatusMap = triggerStatusMap;\n this.defaultTimeFormat = DEFAULT_TIME_FORMAT;\n this.pageIndex = 0;\n this.triggerList = [];\n this.currentTriggersPage = [];\n this.datasources = {};\n\n this.panel = migratePanelSchema(this.panel);\n _.defaultsDeep(this.panel, _.cloneDeep(PANEL_DEFAULTS));\n\n this.available_datasources = _.map(this.getZabbixDataSources(), 'name');\n if (this.panel.datasources.length === 0) {\n this.panel.datasources.push(this.available_datasources[0]);\n }\n if (_.isEmpty(this.panel.targets)) {\n this.panel.targets[this.panel.datasources[0]] = DEFAULT_TARGET;\n }\n\n this.initDatasources();\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('refresh', this.onRefresh.bind(this));\n }\n\n initDatasources() {\n let promises = _.map(this.panel.datasources, (ds) => {\n // Load datasource\n return this.datasourceSrv.get(ds)\n .then(datasource => {\n this.datasources[ds] = datasource;\n return datasource;\n });\n });\n return Promise.all(promises);\n }\n\n getZabbixDataSources() {\n return _.filter(this.datasourceSrv.getMetricSources(), datasource => {\n return datasource.meta.id === ZABBIX_DS_ID && datasource.value;\n });\n }\n\n onInitEditMode() {\n this.addEditorTab('Triggers', triggerPanelTriggersTab, 1);\n this.addEditorTab('Options', triggerPanelOptionsTab, 2);\n }\n\n setTimeQueryStart() {\n this.timing.queryStart = new Date().getTime();\n }\n\n setTimeQueryEnd() {\n this.timing.queryEnd = new Date().getTime();\n }\n\n onRefresh() {\n // ignore fetching data if another panel is in fullscreen\n if (this.otherPanelInFullscreenMode()) { return; }\n\n // clear loading/error state\n delete this.error;\n this.loading = true;\n this.setTimeQueryStart();\n this.pageIndex = 0;\n\n return this.getTriggers()\n .then(zabbixTriggers => {\n // Notify panel that request is finished\n this.loading = false;\n this.setTimeQueryEnd();\n\n this.render(zabbixTriggers);\n })\n .catch(err => {\n // if cancelled keep loading set to true\n if (err.cancelled) {\n console.log('Panel request cancelled', err);\n return;\n }\n\n this.loading = false;\n this.error = err.message || \"Request Error\";\n\n if (err.data) {\n if (err.data.message) {\n this.error = err.data.message;\n }\n if (err.data.error) {\n this.error = err.data.error;\n }\n }\n\n this.events.emit('data-error', err);\n console.log('Panel data error:', err);\n });\n }\n\n render(zabbixTriggers) {\n let triggers = _.cloneDeep(zabbixTriggers || this.triggerListUnfiltered);\n this.triggerListUnfiltered = _.cloneDeep(triggers);\n\n triggers = _.map(triggers, this.formatTrigger.bind(this));\n triggers = this.filterTriggersPost(triggers);\n triggers = this.sortTriggers(triggers);\n\n // Limit triggers number\n triggers = triggers.slice(0, this.panel.limit || PANEL_DEFAULTS.limit);\n\n this.triggerList = triggers;\n this.getCurrentTriggersPage();\n\n this.$timeout(() => {\n super.render(this.triggerList);\n });\n }\n\n getTriggers() {\n let promises = _.map(this.panel.datasources, (ds) => {\n return this.datasourceSrv.get(ds)\n .then(datasource => {\n var zabbix = datasource.zabbix;\n var showEvents = this.panel.showEvents.value;\n var triggerFilter = this.panel.targets[ds];\n\n // Replace template variables\n var groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter);\n var hostFilter = datasource.replaceTemplateVars(triggerFilter.host.filter);\n var appFilter = datasource.replaceTemplateVars(triggerFilter.application.filter);\n\n let triggersOptions = {\n showTriggers: showEvents\n };\n\n return zabbix.getTriggers(groupFilter, hostFilter, appFilter, triggersOptions);\n }).then((triggers) => {\n return this.getAcknowledges(triggers, ds);\n }).then((triggers) => {\n return this.setMaintenanceStatus(triggers);\n }).then((triggers) => {\n return this.filterTriggersPre(triggers, ds);\n }).then((triggers) => {\n return this.addTriggerDataSource(triggers, ds);\n });\n });\n\n return Promise.all(promises)\n .then(results => _.flatten(results));\n }\n\n getAcknowledges(triggerList, ds) {\n // Request acknowledges for trigger\n var eventids = _.map(triggerList, trigger => {\n return trigger.lastEvent.eventid;\n });\n\n return this.datasources[ds].zabbix.getAcknowledges(eventids)\n .then(events => {\n\n // Map events to triggers\n _.each(triggerList, trigger => {\n var event = _.find(events, event => {\n return event.eventid === trigger.lastEvent.eventid;\n });\n\n if (event) {\n trigger.acknowledges = _.map(event.acknowledges, this.formatAcknowledge.bind(this));\n }\n\n if (!trigger.lastEvent.eventid) {\n trigger.lastEvent = null;\n }\n });\n\n return triggerList;\n });\n }\n\n formatAcknowledge(ack) {\n let timestamp = moment.unix(ack.clock);\n if (this.panel.customLastChangeFormat) {\n ack.time = timestamp.format(this.panel.lastChangeFormat);\n } else {\n ack.time = timestamp.format(this.defaultTimeFormat);\n }\n ack.user = ack.alias || '';\n if (ack.name || ack.surname) {\n const fullName = `${ack.name || ''} ${ack.surname || ''}`;\n ack.user += ` (${fullName})`;\n }\n return ack;\n }\n\n filterTriggersPre(triggerList, ds) {\n // Filter triggers by description\n let triggerFilter = this.panel.targets[ds].trigger.filter;\n triggerFilter = this.datasources[ds].replaceTemplateVars(triggerFilter);\n if (triggerFilter) {\n triggerList = filterTriggers(triggerList, triggerFilter);\n }\n\n // Filter by tags\n const target = this.panel.targets[ds];\n if (target.tags.filter) {\n let tagsFilter = this.datasources[ds].replaceTemplateVars(target.tags.filter);\n // replaceTemplateVars() builds regex-like string, so we should trim it.\n tagsFilter = tagsFilter.replace('/^', '').replace('$/', '');\n const tags = this.parseTags(tagsFilter);\n triggerList = _.filter(triggerList, trigger => {\n return _.every(tags, (tag) => {\n return _.find(trigger.tags, {tag: tag.tag, value: tag.value});\n });\n });\n }\n\n return triggerList;\n }\n\n filterTriggersPost(triggers) {\n let triggerList = _.cloneDeep(triggers);\n\n // Filter acknowledged triggers\n if (this.panel.showTriggers === 'unacknowledged') {\n triggerList = _.filter(triggerList, trigger => {\n return !trigger.acknowledges;\n });\n } else if (this.panel.showTriggers === 'acknowledged') {\n triggerList = _.filter(triggerList, 'acknowledges');\n } else {\n triggerList = triggerList;\n }\n\n // Filter by maintenance status\n if (!this.panel.hostsInMaintenance) {\n triggerList = _.filter(triggerList, (trigger) => trigger.maintenance === false);\n }\n\n // Filter triggers by severity\n triggerList = _.filter(triggerList, trigger => {\n return this.panel.triggerSeverity[trigger.priority].show;\n });\n\n return triggerList;\n }\n\n setMaintenanceStatus(triggers) {\n _.each(triggers, (trigger) => {\n let maintenance_status = _.some(trigger.hosts, (host) => host.maintenance_status === '1');\n trigger.maintenance = maintenance_status;\n });\n return triggers;\n }\n\n addTriggerDataSource(triggers, ds) {\n _.each(triggers, (trigger) => {\n trigger.datasource = ds;\n });\n return triggers;\n }\n\n sortTriggers(triggerList) {\n if (this.panel.sortTriggersBy.value === 'priority') {\n triggerList = _.orderBy(triggerList, ['priority', 'lastchangeUnix', 'triggerid'], ['desc', 'desc', 'desc']);\n } else {\n triggerList = _.orderBy(triggerList, ['lastchangeUnix', 'priority', 'triggerid'], ['desc', 'desc', 'desc']);\n }\n return triggerList;\n }\n\n formatTrigger(zabbixTrigger) {\n let trigger = _.cloneDeep(zabbixTrigger);\n let triggerObj = trigger;\n\n // Set host that the trigger belongs\n if (trigger.hosts && trigger.hosts.length) {\n triggerObj.host = trigger.hosts[0].name;\n triggerObj.hostTechName = trigger.hosts[0].host;\n }\n\n // Set tags if present\n if (trigger.tags && trigger.tags.length === 0) {\n trigger.tags = null;\n }\n\n // Handle multi-line description\n if (trigger.comments) {\n trigger.comments = trigger.comments.replace('\\n', ' ');\n }\n\n // Format last change and age\n trigger.lastchangeUnix = Number(trigger.lastchange);\n triggerObj = this.setTriggerLastChange(triggerObj);\n triggerObj = this.setTriggerSeverity(triggerObj);\n return triggerObj;\n }\n\n updateTriggerFormat(trigger) {\n trigger = this.setTriggerLastChange(trigger);\n trigger = this.setTriggerSeverity(trigger);\n return trigger;\n }\n\n setTriggerSeverity(trigger) {\n if (trigger.value === '1') {\n // Problem state\n trigger.color = this.panel.triggerSeverity[trigger.priority].color;\n } else {\n // OK state\n trigger.color = this.panel.okEventColor;\n }\n trigger.severity = this.panel.triggerSeverity[trigger.priority].severity;\n\n // Mark acknowledged triggers with different color\n if (this.panel.markAckEvents && trigger.acknowledges && trigger.acknowledges.length) {\n trigger.color = this.panel.ackEventColor;\n }\n\n return trigger;\n }\n\n setTriggerLastChange(trigger) {\n if (!trigger.lastchangeUnix) {\n trigger.lastchange = \"\";\n trigger.age = \"\";\n return trigger;\n }\n\n let timestamp = moment.unix(trigger.lastchangeUnix);\n if (this.panel.customLastChangeFormat) {\n // User defined format\n trigger.lastchange = timestamp.format(this.panel.lastChangeFormat);\n } else {\n trigger.lastchange = timestamp.format(this.defaultTimeFormat);\n }\n trigger.age = timestamp.fromNow(true);\n return trigger;\n }\n\n parseTags(tagStr) {\n if (!tagStr) {\n return [];\n }\n\n let tags = _.map(tagStr.split(','), (tag) => tag.trim());\n tags = _.map(tags, (tag) => {\n const tagParts = tag.split(':');\n return {tag: tagParts[0].trim(), value: tagParts[1].trim()};\n });\n return tags;\n }\n\n tagsToString(tags) {\n return _.map(tags, (tag) => `${tag.tag}:${tag.value}`).join(', ');\n }\n\n addTagFilter(tag, ds) {\n let tagFilter = this.panel.targets[ds].tags.filter;\n let targetTags = this.parseTags(tagFilter);\n let newTag = {tag: tag.tag, value: tag.value};\n targetTags.push(newTag);\n targetTags = _.uniqWith(targetTags, _.isEqual);\n let newFilter = this.tagsToString(targetTags);\n this.panel.targets[ds].tags.filter = newFilter;\n this.refresh();\n }\n\n switchComment(trigger) {\n trigger.showComment = !trigger.showComment;\n }\n\n acknowledgeTrigger(trigger, message) {\n let eventid = trigger.lastEvent ? trigger.lastEvent.eventid : null;\n let grafana_user = this.contextSrv.user.name;\n let ack_message = grafana_user + ' (Grafana): ' + message;\n return this.datasourceSrv.get(trigger.datasource)\n .then(datasource => {\n const userIsEditor = this.contextSrv.isEditor || this.contextSrv.isGrafanaAdmin;\n if (datasource.disableReadOnlyUsersAck && !userIsEditor) {\n return Promise.reject({message: 'You have no permissions to acknowledge events.'});\n }\n if (eventid) {\n return datasource.zabbix.zabbixAPI.acknowledgeEvent(eventid, ack_message);\n } else {\n return Promise.reject({message: 'Trigger has no events. Nothing to acknowledge.'});\n }\n })\n .then(this.onRefresh.bind(this))\n .catch((err) => {\n this.error = err.message || \"Acknowledge Error\";\n this.events.emit('data-error', err);\n console.log('Panel data error:', err);\n });\n }\n\n getCurrentTriggersPage() {\n let pageSize = this.panel.pageSize || PANEL_DEFAULTS.pageSize;\n let startPos = this.pageIndex * pageSize;\n let endPos = Math.min(startPos + pageSize, this.triggerList.length);\n this.currentTriggersPage = this.triggerList.slice(startPos, endPos);\n return this.currentTriggersPage;\n }\n\n formatHostName(trigger) {\n let host = \"\";\n if (this.panel.hostField && this.panel.hostTechNameField) {\n host = `${trigger.host} (${trigger.hostTechName})`;\n } else if (this.panel.hostField || this.panel.hostTechNameField) {\n host = this.panel.hostField ? trigger.host : trigger.hostTechName;\n }\n\n return host;\n }\n\n formatHostGroups(trigger) {\n let groupNames = \"\";\n if (this.panel.hostGroups) {\n let groups = _.map(trigger.groups, 'name').join(', ');\n groupNames += `[ ${groups} ]`;\n }\n\n return groupNames;\n }\n\n getAlertIconClass(trigger) {\n let iconClass = '';\n if (trigger.value === '1') {\n if (trigger.priority >= 3) {\n iconClass = 'icon-gf-critical';\n } else {\n iconClass = 'icon-gf-warning';\n }\n } else {\n iconClass = 'icon-gf-online';\n }\n\n if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {\n iconClass += ' zabbix-trigger--blinked';\n }\n return iconClass;\n }\n\n getAlertIconClassBySeverity(triggerSeverity) {\n let iconClass = 'icon-gf-warning';\n if (triggerSeverity.priority >= 3) {\n iconClass = 'icon-gf-critical';\n }\n return iconClass;\n }\n\n getAlertStateClass(trigger) {\n let statusClass = '';\n\n if (trigger.value === '1') {\n statusClass = 'alert-state-critical';\n } else {\n statusClass = 'alert-state-ok';\n }\n\n if (this.panel.highlightNewEvents && this.isNewTrigger(trigger)) {\n statusClass += ' zabbix-trigger--blinked';\n }\n\n return statusClass;\n }\n\n getBackground(trigger) {\n const mainColor = trigger.color;\n const secondColor = this.contextSrv.user.lightTheme ? '#dde4ed' : '#262628';\n if (this.contextSrv.user.lightTheme) {\n return `linear-gradient(135deg, ${secondColor}, ${mainColor})`;\n }\n return `linear-gradient(135deg, ${mainColor}, ${secondColor})`;\n }\n\n isNewTrigger(trigger) {\n try {\n const highlightIntervalMs = utils.parseInterval(this.panel.highlightNewerThan || PANEL_DEFAULTS.highlightNewerThan);\n const durationSec = (Date.now() - trigger.lastchangeUnix * 1000);\n return durationSec < highlightIntervalMs;\n } catch (e) {\n return false;\n }\n }\n\n link(scope, elem, attrs, ctrl) {\n let panel = ctrl.panel;\n let pageCount = 0;\n let triggerList = ctrl.triggerList;\n\n scope.$watchGroup(['ctrl.currentTriggersPage', 'ctrl.triggerList'], renderPanel);\n elem.on('click', '.triggers-panel-page-link', switchPage);\n ctrl.events.on('render', (renderData) => {\n triggerList = renderData || triggerList;\n renderPanel();\n });\n\n function getContentHeight() {\n let panelHeight = ctrl.height;\n if (pageCount > 1) {\n panelHeight -= 36;\n }\n return panelHeight + 'px';\n }\n\n function switchPage(e) {\n let el = $(e.currentTarget);\n ctrl.pageIndex = (parseInt(el.text(), 10)-1);\n\n let pageSize = panel.pageSize || 10;\n let startPos = ctrl.pageIndex * pageSize;\n let endPos = Math.min(startPos + pageSize, triggerList.length);\n ctrl.currentTriggersPage = triggerList.slice(startPos, endPos);\n\n scope.$apply(() => {\n renderPanel();\n });\n }\n\n function appendPaginationControls(footerElem) {\n footerElem.empty();\n\n let pageSize = panel.pageSize || 5;\n pageCount = Math.ceil(triggerList.length / pageSize);\n if (pageCount === 1) {\n return;\n }\n\n let startPage = Math.max(ctrl.pageIndex - 3, 0);\n let endPage = Math.min(pageCount, startPage + 9);\n\n let paginationList = $('');\n\n for (let i = startPage; i < endPage; i++) {\n let activeClass = i === ctrl.pageIndex ? 'active' : '';\n let pageLinkElem = $('' + (i+1) + ' ');\n paginationList.append(pageLinkElem);\n }\n\n footerElem.append(paginationList);\n }\n\n function setFontSize() {\n const fontSize = parseInt(panel.fontSize.slice(0, panel.fontSize.length - 1));\n let triggerCardElem = elem.find('.alert-rule-item');\n if (fontSize && fontSize !== 100) {\n triggerCardElem.find('.alert-rule-item__icon').css({\n 'font-size': fontSize + '%',\n 'margin': fontSize / 100 * 6 + 'px'\n });\n triggerCardElem.find('.alert-rule-item__name').css({'font-size': fontSize + '%'});\n triggerCardElem.find('.alert-rule-item__text').css({'font-size': fontSize * 0.8 + '%'});\n triggerCardElem.find('.zbx-trigger-lastchange').css({'font-size': fontSize * 0.8 + '%'});\n triggerCardElem.find('.zbx-tag').css({'font-size': fontSize * 0.6 + '%'});\n triggerCardElem.find('.zbx-tag').css({'line-height': fontSize / 100 * 16 + 'px'});\n } else {\n // remove css\n triggerCardElem.find('.alert-rule-item__icon').css({'font-size': '', 'margin-right': ''});\n triggerCardElem.find('.alert-rule-item__name').css({'font-size': ''});\n triggerCardElem.find('.alert-rule-item__text').css({'font-size': ''});\n triggerCardElem.find('.zbx-trigger-lastchange').css({'font-size': ''});\n triggerCardElem.find('.zbx-tag').css({'font-size': ''});\n triggerCardElem.find('.zbx-tag').css({'line-height': ''});\n }\n }\n\n function renderPanel() {\n let rootElem = elem.find('.triggers-panel-scroll');\n let footerElem = elem.find('.triggers-panel-footer');\n appendPaginationControls(footerElem);\n rootElem.css({'max-height': getContentHeight()});\n rootElem.css({'height': getContentHeight()});\n setFontSize();\n ctrl.renderingCompleted();\n }\n\n let unbindDestroy = scope.$on('$destroy', function() {\n elem.off('click', '.triggers-panel-page-link');\n unbindDestroy();\n });\n }\n}\n\nTriggerPanelCtrl.templateUrl = 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/module.html';\n\nfunction filterTriggers(triggers, triggerFilter) {\n if (utils.isRegex(triggerFilter)) {\n return _.filter(triggers, function(trigger) {\n return utils.buildRegex(triggerFilter).test(trigger.description);\n });\n } else {\n return _.filter(triggers, function(trigger) {\n return trigger.description === triggerFilter;\n });\n }\n}\n"]}
\ No newline at end of file
diff --git a/dist/panel-triggers/triggers_tab.js b/dist/panel-triggers/triggers_tab.js
deleted file mode 100644
index b1f8846..0000000
--- a/dist/panel-triggers/triggers_tab.js
+++ /dev/null
@@ -1,163 +0,0 @@
-'use strict';
-
-System.register(['lodash', '../datasource-zabbix/utils', './triggers_panel_ctrl'], function (_export, _context) {
- "use strict";
-
- var _, utils, DEFAULT_TARGET, _createClass, TriggersTabCtrl;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- function triggerPanelTriggersTab() {
- return {
- restrict: 'E',
- scope: true,
- templateUrl: 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/triggers_tab.html',
- controller: TriggersTabCtrl
- };
- }
-
- _export('triggerPanelTriggersTab', triggerPanelTriggersTab);
-
- return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }, function (_datasourceZabbixUtils) {
- utils = _datasourceZabbixUtils;
- }, function (_triggers_panel_ctrl) {
- DEFAULT_TARGET = _triggers_panel_ctrl.DEFAULT_TARGET;
- }],
- 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;
- };
- }();
-
- TriggersTabCtrl = function () {
-
- /** @ngInject */
- function TriggersTabCtrl($scope, $rootScope, uiSegmentSrv, templateSrv) {
- _classCallCheck(this, TriggersTabCtrl);
-
- $scope.editor = this;
- this.panelCtrl = $scope.ctrl;
- this.panel = this.panelCtrl.panel;
- this.templateSrv = templateSrv;
- this.datasources = this.panelCtrl.datasources;
-
- // Load scope defaults
- var scopeDefaults = {
- getGroupNames: {},
- getHostNames: {},
- getApplicationNames: {},
- oldTarget: _.cloneDeep(this.panel.targets)
- };
- _.defaultsDeep(this, scopeDefaults);
-
- this.initDatasources();
- this.panelCtrl.refresh();
- }
-
- _createClass(TriggersTabCtrl, [{
- key: 'initDatasources',
- value: function initDatasources() {
- var _this = this;
-
- return this.panelCtrl.initDatasources().then(function (datasources) {
- _.each(datasources, function (datasource) {
- _this.bindSuggestionFunctions(datasource);
- });
- });
- }
- }, {
- key: 'bindSuggestionFunctions',
- value: function bindSuggestionFunctions(datasource) {
- // Map functions for bs-typeahead
- var ds = datasource.name;
- this.getGroupNames[ds] = _.bind(this.suggestGroups, this, datasource);
- this.getHostNames[ds] = _.bind(this.suggestHosts, this, datasource);
- this.getApplicationNames[ds] = _.bind(this.suggestApps, this, datasource);
- }
- }, {
- key: 'suggestGroups',
- value: function suggestGroups(datasource, query, callback) {
- return datasource.zabbix.getAllGroups().then(function (groups) {
- return _.map(groups, 'name');
- }).then(callback);
- }
- }, {
- key: 'suggestHosts',
- value: function suggestHosts(datasource, query, callback) {
- var groupFilter = datasource.replaceTemplateVars(this.panel.targets[datasource.name].group.filter);
- return datasource.zabbix.getAllHosts(groupFilter).then(function (hosts) {
- return _.map(hosts, 'name');
- }).then(callback);
- }
- }, {
- key: 'suggestApps',
- value: function suggestApps(datasource, query, callback) {
- var groupFilter = datasource.replaceTemplateVars(this.panel.targets[datasource.name].group.filter);
- var hostFilter = datasource.replaceTemplateVars(this.panel.targets[datasource.name].host.filter);
- return datasource.zabbix.getAllApps(groupFilter, hostFilter).then(function (apps) {
- return _.map(apps, 'name');
- }).then(callback);
- }
- }, {
- key: 'datasourcesChanged',
- value: function datasourcesChanged() {
- var _this2 = this;
-
- _.each(this.panel.datasources, function (ds) {
- if (!_this2.panel.targets[ds]) {
- _this2.panel.targets[ds] = _.cloneDeep(DEFAULT_TARGET);
- }
- });
- this.parseTarget();
- }
- }, {
- key: 'parseTarget',
- value: function parseTarget() {
- var _this3 = this;
-
- this.initDatasources().then(function () {
- var newTarget = _.cloneDeep(_this3.panel.targets);
- if (!_.isEqual(_this3.oldTarget, newTarget)) {
- _this3.oldTarget = newTarget;
- }
- _this3.panelCtrl.refresh();
- });
- }
- }, {
- key: 'isRegex',
- value: function isRegex(str) {
- return utils.isRegex(str);
- }
- }, {
- key: 'isVariable',
- value: function isVariable(str) {
- return utils.isTemplateVariable(str, this.templateSrv.variables);
- }
- }]);
-
- return TriggersTabCtrl;
- }();
- }
- };
-});
-//# sourceMappingURL=triggers_tab.js.map
diff --git a/dist/panel-triggers/triggers_tab.js.map b/dist/panel-triggers/triggers_tab.js.map
deleted file mode 100644
index 5392f92..0000000
--- a/dist/panel-triggers/triggers_tab.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../src/panel-triggers/triggers_tab.js"],"names":["triggerPanelTriggersTab","restrict","scope","templateUrl","controller","TriggersTabCtrl","_","utils","DEFAULT_TARGET","$scope","$rootScope","uiSegmentSrv","templateSrv","editor","panelCtrl","ctrl","panel","datasources","scopeDefaults","getGroupNames","getHostNames","getApplicationNames","oldTarget","cloneDeep","targets","defaultsDeep","initDatasources","refresh","then","each","datasource","bindSuggestionFunctions","ds","name","bind","suggestGroups","suggestHosts","suggestApps","query","callback","zabbix","getAllGroups","map","groups","groupFilter","replaceTemplateVars","group","filter","getAllHosts","hosts","hostFilter","host","getAllApps","apps","parseTarget","newTarget","isEqual","str","isRegex","isTemplateVariable","variables"],"mappings":"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","file":"triggers_tab.js","sourcesContent":["import _ from 'lodash';\nimport * as utils from '../datasource-zabbix/utils';\nimport {DEFAULT_TARGET} from './triggers_panel_ctrl';\n\nclass TriggersTabCtrl {\n\n /** @ngInject */\n constructor($scope, $rootScope, uiSegmentSrv, templateSrv) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl;\n this.panel = this.panelCtrl.panel;\n this.templateSrv = templateSrv;\n this.datasources = this.panelCtrl.datasources;\n\n // Load scope defaults\n var scopeDefaults = {\n getGroupNames: {},\n getHostNames: {},\n getApplicationNames: {},\n oldTarget: _.cloneDeep(this.panel.targets)\n };\n _.defaultsDeep(this, scopeDefaults);\n\n this.initDatasources();\n this.panelCtrl.refresh();\n }\n\n initDatasources() {\n return this.panelCtrl.initDatasources()\n .then((datasources) => {\n _.each(datasources, (datasource) => {\n this.bindSuggestionFunctions(datasource);\n });\n });\n }\n\n bindSuggestionFunctions(datasource) {\n // Map functions for bs-typeahead\n let ds = datasource.name;\n this.getGroupNames[ds] = _.bind(this.suggestGroups, this, datasource);\n this.getHostNames[ds] = _.bind(this.suggestHosts, this, datasource);\n this.getApplicationNames[ds] = _.bind(this.suggestApps, this, datasource);\n }\n\n suggestGroups(datasource, query, callback) {\n return datasource.zabbix.getAllGroups()\n .then(groups => {\n return _.map(groups, 'name');\n })\n .then(callback);\n }\n\n suggestHosts(datasource, query, callback) {\n let groupFilter = datasource.replaceTemplateVars(this.panel.targets[datasource.name].group.filter);\n return datasource.zabbix.getAllHosts(groupFilter)\n .then(hosts => {\n return _.map(hosts, 'name');\n })\n .then(callback);\n }\n\n suggestApps(datasource, query, callback) {\n let groupFilter = datasource.replaceTemplateVars(this.panel.targets[datasource.name].group.filter);\n let hostFilter = datasource.replaceTemplateVars(this.panel.targets[datasource.name].host.filter);\n return datasource.zabbix.getAllApps(groupFilter, hostFilter)\n .then(apps => {\n return _.map(apps, 'name');\n })\n .then(callback);\n }\n\n datasourcesChanged() {\n _.each(this.panel.datasources, (ds) => {\n if (!this.panel.targets[ds]) {\n this.panel.targets[ds] = _.cloneDeep(DEFAULT_TARGET);\n }\n });\n this.parseTarget();\n }\n\n parseTarget() {\n this.initDatasources()\n .then(() => {\n var newTarget = _.cloneDeep(this.panel.targets);\n if (!_.isEqual(this.oldTarget, newTarget)) {\n this.oldTarget = newTarget;\n }\n this.panelCtrl.refresh();\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\nexport function triggerPanelTriggersTab() {\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/alexanderzobnin-zabbix-app/panel-triggers/partials/triggers_tab.html',\n controller: TriggersTabCtrl,\n };\n}\n"]}
\ No newline at end of file
diff --git a/dist/plugin.json b/dist/plugin.json
deleted file mode 100644
index 785d018..0000000
--- a/dist/plugin.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "type": "app",
- "name": "Zabbix",
- "id": "alexanderzobnin-zabbix-app",
-
- "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"}
- ],
- "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.9.1",
- "updated": "2018-05-02"
- },
-
- "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,
- "defaultNav": true
- }
- ],
-
- "dependencies": {
- "grafanaVersion": "5.x",
- "plugins": []
- }
-}
diff --git a/dist/vendor/npm/drop.min.js b/dist/vendor/npm/drop.min.js
deleted file mode 100644
index 1eb6ce6..0000000
--- a/dist/vendor/npm/drop.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){"function"==typeof define&&define.amd?define(["tether"],e):"object"==typeof exports?module.exports=e(require("tether")):t.Drop=e(t.Tether)}(this,function(t){"use strict";function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function o(t){var e=t.split(" "),n=a(e,2),o=n[0],i=n[1];if(["left","right"].indexOf(o)>=0){var s=[i,o];o=s[0],i=s[1]}return[o,i].join(" ")}function i(t,e){for(var n=void 0,o=[];-1!==(n=t.indexOf(e));)o.push(t.splice(n,1));return o}function s(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],h=function(){for(var t=arguments.length,e=Array(t),n=0;t>n;n++)e[n]=arguments[n];return new(r.apply(b,[null].concat(e)))};p(h,{createContext:s,drops:[],defaults:{}});var g={classPrefix:"drop",defaults:{position:"bottom left",openOn:"click",beforeClose:null,constrainToScrollParent:!0,constrainToWindow:!0,classes:"",remove:!1,openDelay:0,closeDelay:50,focusDelay:null,blurDelay:null,hoverOpenDelay:null,hoverCloseDelay:null,tetherOptions:{}}};p(h,g,a),p(h.defaults,g.defaults,a.defaults),"undefined"==typeof x[h.classPrefix]&&(x[h.classPrefix]=[]),h.updateBodyClasses=function(){for(var t=!1,e=x[h.classPrefix],n=e.length,o=0;n>o;++o)if(e[o].isOpened()){t=!0;break}t?d(document.body,h.classPrefix+"-open"):c(document.body,h.classPrefix+"-open")};var b=function(s){function r(t){if(e(this,r),u(Object.getPrototypeOf(r.prototype),"constructor",this).call(this),this.options=p({},h.defaults,t),this.target=this.options.target,"undefined"==typeof this.target)throw new Error("Drop Error: You must provide a target.");var n="data-"+h.classPrefix,o=this.target.getAttribute(n);o&&null==this.options.content&&(this.options.content=o);for(var i=["position","openOn"],s=0;s=0)for(var n=function(e){t.toggle(e),e.preventDefault()},o=function(e){t.isOpened()&&(e.target===t.drop||t.drop.contains(e.target)||e.target===t.target||t.target.contains(e.target)||t.close(e))},i=0;i=0&&(this._on(this.target,"mouseover",l),this._on(this.drop,"mouseover",l),this._on(this.target,"mouseout",u),this._on(this.drop,"mouseout",u)),e.indexOf("focus")>=0&&(this._on(this.target,"focus",l),this._on(this.drop,"focus",l),this._on(this.target,"blur",u),this._on(this.drop,"blur",u))}}},{key:"isOpened",value:function(){return this.drop?f(this.drop,h.classPrefix+"-open"):void 0}},{key:"toggle",value:function(t){this.isOpened()?this.close(t):this.open(t)}},{key:"open",value:function(t){var e=this;this.isOpened()||(this.drop.parentNode||document.body.appendChild(this.drop),"undefined"!=typeof this.tether&&this.tether.enable(),d(this.drop,h.classPrefix+"-open"),d(this.drop,h.classPrefix+"-open-transitionend"),setTimeout(function(){e.drop&&d(e.drop,h.classPrefix+"-after-open")}),"undefined"!=typeof this.tether&&this.tether.position(),this.trigger("open"),h.updateBodyClasses())}},{key:"_transitionEndHandler",value:function(t){t.target===t.currentTarget&&(f(this.drop,h.classPrefix+"-open")||c(this.drop,h.classPrefix+"-open-transitionend"),this.drop.removeEventListener(m,this.transitionEndHandler))}},{key:"beforeCloseHandler",value:function(t){var e=!0;return this.isClosing||"function"!=typeof this.options.beforeClose||(this.isClosing=!0,e=this.options.beforeClose(t,this)!==!1),this.isClosing=!1,e}},{key:"close",value:function(t){this.isOpened()&&this.beforeCloseHandler(t)&&(c(this.drop,h.classPrefix+"-open"),c(this.drop,h.classPrefix+"-after-open"),this.drop.addEventListener(m,this.transitionEndHandler),this.trigger("close"),"undefined"!=typeof this.tether&&this.tether.disable(),h.updateBodyClasses(),this.options.remove&&this.remove(t))}},{key:"remove",value:function(t){this.close(t),this.drop.parentNode&&this.drop.parentNode.removeChild(this.drop)}},{key:"position",value:function(){this.isOpened()&&"undefined"!=typeof this.tether&&this.tether.position()}},{key:"destroy",value:function(){this.remove(),"undefined"!=typeof this.tether&&this.tether.destroy();for(var t=0;t=0)&&i.push(n)}return i.push(t.ownerDocument.body),t.ownerDocument!==document&&i.push(t.ownerDocument.defaultView),i}function i(){O&&document.body.removeChild(O),O=null}function n(t){var o=void 0;t===document?(o=document,t=document.documentElement):o=t.ownerDocument;var i=o.documentElement,n=e(t),r=A();return n.top-=r.top,n.left-=r.left,"undefined"==typeof n.width&&(n.width=document.body.scrollWidth-n.left-n.right),"undefined"==typeof n.height&&(n.height=document.body.scrollHeight-n.top-n.bottom),n.top=n.top-i.clientTop,n.left=n.left-i.clientLeft,n.right=o.body.clientWidth-n.width-n.left,n.bottom=o.body.clientHeight-n.height-n.top,n}function r(t){return t.offsetParent||document.documentElement}function s(){if(T)return T;var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");a(e.style,{position:"absolute",top:0,left:0,pointerEvents:"none",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);var o=t.offsetWidth;e.style.overflow="scroll";var i=t.offsetWidth;o===i&&(i=e.clientWidth),document.body.removeChild(e);var n=o-i;return T={width:n,height:n}}function a(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],e=[];return Array.prototype.push.apply(e,arguments),e.slice(1).forEach(function(e){if(e)for(var o in e)({}).hasOwnProperty.call(e,o)&&(t[o]=e[o])}),t}function f(t,e){if("undefined"!=typeof t.classList)e.split(" ").forEach(function(e){e.trim()&&t.classList.remove(e)});else{var o=new RegExp("(^| )"+e.split(" ").join("|")+"( |$)","gi"),i=d(t).replace(o," ");p(t,i)}}function l(t,e){if("undefined"!=typeof t.classList)e.split(" ").forEach(function(e){e.trim()&&t.classList.add(e)});else{f(t,e);var o=d(t)+(" "+e);p(t,o)}}function h(t,e){if("undefined"!=typeof t.classList)return t.classList.contains(e);var o=d(t);return new RegExp("(^| )"+e+"( |$)","gi").test(o)}function d(t){return t.className instanceof t.ownerDocument.defaultView.SVGAnimatedString?t.className.baseVal:t.className}function p(t,e){t.setAttribute("class",e)}function u(t,e,o){o.forEach(function(o){e.indexOf(o)===-1&&h(t,o)&&f(t,o)}),e.forEach(function(e){h(t,e)||l(t,e)})}function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function c(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function g(t,e){var o=arguments.length<=2||void 0===arguments[2]?1:arguments[2];return t+o>=e&&e>=t-o}function m(){return"object"==typeof performance&&"function"==typeof performance.now?performance.now():+new Date}function v(){for(var t={top:0,left:0},e=arguments.length,o=Array(e),i=0;i1?o-1:0),n=1;n16?(e=Math.min(e-16,250),void(o=setTimeout(n,250))):void("undefined"!=typeof t&&m()-t<10||(null!=o&&(clearTimeout(o),o=null),t=m(),Y(),e=m()-t))};"undefined"!=typeof window&&"undefined"!=typeof window.addEventListener&&["resize","scroll","touchmove"].forEach(function(t){window.addEventListener(t,i)})}();var L={center:"center",left:"right",right:"left"},D={middle:"middle",top:"bottom",bottom:"top"},X={top:0,left:0,middle:"50%",center:"50%",bottom:"100%",right:"100%"},F=function(t,e){var o=t.left,i=t.top;return"auto"===o&&(o=L[e.left]),"auto"===i&&(i=D[e.top]),{left:o,top:i}},H=function(t){var e=t.left,o=t.top;return"undefined"!=typeof X[t.left]&&(e=X[t.left]),"undefined"!=typeof X[t.top]&&(o=X[t.top]),{left:e,top:o}},N=function(t){var e=t.split(" "),o=k(e,2),i=o[0],n=o[1];return{top:i,left:n}},U=N,V=function(e){function h(e){var o=this;t(this,h),_(Object.getPrototypeOf(h.prototype),"constructor",this).call(this),this.position=this.position.bind(this),z.push(this),this.history=[],this.setOptions(e,!1),C.modules.forEach(function(t){"undefined"!=typeof t.initialize&&t.initialize.call(o)}),this.position()}return c(h,e),w(h,[{key:"getClass",value:function(){var t=arguments.length<=0||void 0===arguments[0]?"":arguments[0],e=this.options.classes;return"undefined"!=typeof e&&e[t]?this.options.classes[t]:this.options.classPrefix?this.options.classPrefix+"-"+t:t}},{key:"setOptions",value:function(t){var e=this,i=arguments.length<=1||void 0===arguments[1]||arguments[1],n={offset:"0 0",targetOffset:"0 0",targetAttachment:"auto auto",classPrefix:"tether"};this.options=a(n,t);var r=this.options,s=r.element,f=r.target,h=r.targetModifier;if(this.element=s,this.target=f,this.targetModifier=h,"viewport"===this.target?(this.target=document.body,this.targetModifier="visible"):"scroll-handle"===this.target&&(this.target=document.body,this.targetModifier="scroll-handle"),["element","target"].forEach(function(t){if("undefined"==typeof e[t])throw new Error("Tether Error: Both element and target must be defined");"undefined"!=typeof e[t].jquery?e[t]=e[t][0]:"string"==typeof e[t]&&(e[t]=document.querySelector(e[t]))}),l(this.element,this.getClass("element")),this.options.addTargetClasses!==!1&&l(this.target,this.getClass("target")),!this.options.attachment)throw new Error("Tether Error: You must provide an attachment");this.targetAttachment=U(this.options.targetAttachment),this.attachment=U(this.options.attachment),this.offset=N(this.options.offset),this.targetOffset=N(this.options.targetOffset),"undefined"!=typeof this.scrollParents&&this.disable(),"scroll-handle"===this.targetModifier?this.scrollParents=[this.target]:this.scrollParents=o(this.target),this.options.enabled!==!1&&this.enable(i)}},{key:"getTargetBounds",value:function(){if("undefined"==typeof this.targetModifier)return n(this.target);if("visible"===this.targetModifier){if(this.target===document.body)return{top:pageYOffset,left:pageXOffset,height:innerHeight,width:innerWidth};var t=n(this.target),e={height:t.height,width:t.width,top:t.top,left:t.left};return e.height=Math.min(e.height,t.height-(pageYOffset-t.top)),e.height=Math.min(e.height,t.height-(t.top+t.height-(pageYOffset+innerHeight))),e.height=Math.min(innerHeight,e.height),e.height-=2,e.width=Math.min(e.width,t.width-(pageXOffset-t.left)),e.width=Math.min(e.width,t.width-(t.left+t.width-(pageXOffset+innerWidth))),e.width=Math.min(innerWidth,e.width),e.width-=2,e.topo.clientWidth||[i.overflow,i.overflowX].indexOf("scroll")>=0||this.target!==document.body,s=0;r&&(s=15);var a=t.height-parseFloat(i.borderTopWidth)-parseFloat(i.borderBottomWidth)-s,e={width:15,height:.975*a*(a/o.scrollHeight),left:t.left+t.width-parseFloat(i.borderLeftWidth)-15},f=0;a<408&&this.target===document.body&&(f=-11e-5*Math.pow(a,2)-.00727*a+22.58),this.target!==document.body&&(e.height=Math.max(e.height,24));var l=this.target.scrollTop/(o.scrollHeight-a);return e.top=l*(a-e.height-f)+t.top+parseFloat(i.borderTopWidth),this.target===document.body&&(e.height=Math.max(e.height,24)),e}}},{key:"clearCache",value:function(){this._cache={}}},{key:"cache",value:function(t,e){return"undefined"==typeof this._cache&&(this._cache={}),"undefined"==typeof this._cache[t]&&(this._cache[t]=e.call(this)),this._cache[t]}},{key:"enable",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]||arguments[0];this.options.addTargetClasses!==!1&&l(this.target,this.getClass("enabled")),l(this.element,this.getClass("enabled")),this.enabled=!0,this.scrollParents.forEach(function(e){e!==t.target.ownerDocument&&e.addEventListener("scroll",t.position)}),e&&this.position()}},{key:"disable",value:function(){var t=this;f(this.target,this.getClass("enabled")),f(this.element,this.getClass("enabled")),this.enabled=!1,"undefined"!=typeof this.scrollParents&&this.scrollParents.forEach(function(e){e.removeEventListener("scroll",t.position)})}},{key:"destroy",value:function(){var t=this;this.disable(),z.forEach(function(e,o){e===t&&z.splice(o,1)}),0===z.length&&i()}},{key:"updateAttachClasses",value:function(t,e){var o=this;t=t||this.attachment,e=e||this.targetAttachment;var i=["left","top","bottom","right","middle","center"];"undefined"!=typeof this._addAttachClasses&&this._addAttachClasses.length&&this._addAttachClasses.splice(0,this._addAttachClasses.length),"undefined"==typeof this._addAttachClasses&&(this._addAttachClasses=[]);var n=this._addAttachClasses;t.top&&n.push(this.getClass("element-attached")+"-"+t.top),t.left&&n.push(this.getClass("element-attached")+"-"+t.left),e.top&&n.push(this.getClass("target-attached")+"-"+e.top),e.left&&n.push(this.getClass("target-attached")+"-"+e.left);var r=[];i.forEach(function(t){r.push(o.getClass("element-attached")+"-"+t),r.push(o.getClass("target-attached")+"-"+t)}),P(function(){"undefined"!=typeof o._addAttachClasses&&(u(o.element,o._addAttachClasses,r),o.options.addTargetClasses!==!1&&u(o.target,o._addAttachClasses,r),delete o._addAttachClasses)})}},{key:"position",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]||arguments[0];if(this.enabled){this.clearCache();var o=F(this.targetAttachment,this.attachment);this.updateAttachClasses(this.attachment,o);var i=this.cache("element-bounds",function(){return n(t.element)}),a=i.width,f=i.height;if(0===a&&0===f&&"undefined"!=typeof this.lastSize){var l=this.lastSize;a=l.width,f=l.height}else this.lastSize={width:a,height:f};var h=this.cache("target-bounds",function(){return t.getTargetBounds()}),d=h,p=y(H(this.attachment),{width:a,height:f}),u=y(H(o),d),c=y(this.offset,{width:a,height:f}),g=y(this.targetOffset,d);p=v(p,c),u=v(u,g);for(var m=h.left+u.left-p.left,b=h.top+u.top-p.top,w=0;wA.documentElement.clientHeight&&(S=this.cache("scrollbar-size",s),x.viewport.bottom-=S.height),T.innerWidth>A.documentElement.clientWidth&&(S=this.cache("scrollbar-size",s),x.viewport.right-=S.width),["","static"].indexOf(A.body.style.position)!==-1&&["","static"].indexOf(A.body.parentElement.style.position)!==-1||(x.page.bottom=A.body.scrollHeight-b-f,x.page.right=A.body.scrollWidth-m-a),"undefined"!=typeof this.options.optimizations&&this.options.optimizations.moveElement!==!1&&"undefined"==typeof this.targetModifier&&!function(){var e=t.cache("target-offsetparent",function(){return r(t.target)}),o=t.cache("target-offsetparent-bounds",function(){return n(e)}),i=getComputedStyle(e),s=o,a={};if(["Top","Left","Bottom","Right"].forEach(function(t){a[t.toLowerCase()]=parseFloat(i["border"+t+"Width"])}),o.right=A.body.scrollWidth-o.left-s.width+a.right,o.bottom=A.body.scrollHeight-o.top-s.height+a.bottom,x.page.top>=o.top+a.top&&x.page.bottom>=o.bottom&&x.page.left>=o.left+a.left&&x.page.right>=o.right){var f=e.scrollTop,l=e.scrollLeft;x.offset={top:x.page.top-o.top+f-a.top,left:x.page.left-o.left+l-a.left}}}(),this.move(x),this.history.unshift(x),this.history.length>3&&this.history.pop(),e&&M(),!0}}},{key:"move",value:function(t){var e=this;if("undefined"!=typeof this.element.parentNode){var o={};for(var i in t){o[i]={};for(var n in t[i]){for(var s=!1,f=0;f=0){var u=s.split(" "),g=k(u,2);d=g[0],h=g[1]}else h=d=s;var w=b(e,n);"target"!==d&&"both"!==d||(ow[3]&&"bottom"===v.top&&(o-=p,v.top="top")),"together"===d&&("top"===v.top&&("bottom"===y.top&&ow[3]&&o-(f-p)>=w[1]&&(o-=f-p,v.top="bottom",y.top="bottom")),"bottom"===v.top&&("top"===y.top&&o+f>w[3]?(o-=p,v.top="top",o-=f,y.top="bottom"):"bottom"===y.top&&ow[3]&&"top"===y.top?(o-=f,y.top="bottom"):ow[2]&&"right"===v.left&&(i-=c,v.left="left")),"together"===h&&(iw[2]&&"right"===v.left?"left"===y.left?(i-=c,v.left="left",i-=l,y.left="right"):"right"===y.left&&(i-=c,v.left="left",i+=l,y.left="left"):"center"===v.left&&(i+l>w[2]&&"left"===y.left?(i-=l,y.left="right"):iw[3]&&"top"===y.top&&(o-=f,y.top="bottom")),"element"!==h&&"both"!==h||(iw[2]&&("left"===y.left?(i-=l,y.left="right"):"center"===y.left&&(i-=l/2,y.left="right"))),"string"==typeof a?a=a.split(",").map(function(t){return t.trim()}):a===!0&&(a=["top","left","right","bottom"]),a=a||[];var C=[],O=[];o=0?(o=w[1],C.push("top")):O.push("top")),o+f>w[3]&&(a.indexOf("bottom")>=0?(o=w[3]-f,C.push("bottom")):O.push("bottom")),i=0?(i=w[0],C.push("left")):O.push("left")),i+l>w[2]&&(a.indexOf("right")>=0?(i=w[2]-l,C.push("right")):O.push("right")),C.length&&!function(){var t=void 0;t="undefined"!=typeof e.options.pinnedClass?e.options.pinnedClass:e.getClass("pinned"),m.push(t),C.forEach(function(e){m.push(t+"-"+e)})}(),O.length&&!function(){var t=void 0;t="undefined"!=typeof e.options.outOfBoundsClass?e.options.outOfBoundsClass:e.getClass("out-of-bounds"),m.push(t),O.forEach(function(e){m.push(t+"-"+e)})}(),(C.indexOf("left")>=0||C.indexOf("right")>=0)&&(y.left=v.left=!1),(C.indexOf("top")>=0||C.indexOf("bottom")>=0)&&(y.top=v.top=!1),v.top===r.top&&v.left===r.left&&y.top===e.attachment.top&&y.left===e.attachment.left||(e.updateAttachClasses(y,v),e.trigger("update",{attachment:y,targetAttachment:v}))}),P(function(){e.options.addTargetClasses!==!1&&u(e.target,m,g),u(e.element,m,g)}),{top:o,left:i}}});var B=C.Utils,n=B.getBounds,u=B.updateClasses,P=B.defer;C.modules.push({position:function(t){var e=this,o=t.top,i=t.left,r=this.cache("element-bounds",function(){return n(e.element)}),s=r.height,a=r.width,f=this.getTargetBounds(),l=o+s,h=i+a,d=[];o<=f.bottom&&l>=f.top&&["left","right"].forEach(function(t){var e=f[t];e!==i&&e!==h||d.push(t)}),i<=f.right&&h>=f.left&&["top","bottom"].forEach(function(t){var e=f[t];e!==o&&e!==l||d.push(t)});var p=[],c=[],g=["left","top","right","bottom"];return p.push(this.getClass("abutted")),g.forEach(function(t){p.push(e.getClass("abutted")+"-"+t)}),d.length&&c.push(this.getClass("abutted")),d.forEach(function(t){c.push(e.getClass("abutted")+"-"+t)}),P(function(){e.options.addTargetClasses!==!1&&u(e.target,c,p),u(e.element,c,p)}),!0}});var k=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();return C.modules.push({position:function(t){var e=t.top,o=t.left;if(this.options.shift){var i=this.options.shift;"function"==typeof this.options.shift&&(i=this.options.shift.call(this,{top:e,left:o}));var n=void 0,r=void 0;if("string"==typeof i){i=i.split(" "),i[1]=i[1]||i[0];var s=i,a=k(s,2);n=a[0],r=a[1],n=parseFloat(n,10),r=parseFloat(r,10)}else n=i.top,r=i.left;return e+=n,o+=r,{top:e,left:o}}}}),R});
\ No newline at end of file