-
diff --git a/dist/module.js.map b/dist/module.js.map
index b8a3058f..962a6d1c 100644
--- a/dist/module.js.map
+++ b/dist/module.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/module.js"],"names":["StatusPluginCtrl"],"mappings":";;;;;;;;AAAQA,sB,gBAAAA,gB;;;2BAGNA,gB","file":"module.js","sourcesContent":["import {StatusPluginCtrl} from './status_ctrl';\r\n\r\nexport {\r\n StatusPluginCtrl as PanelCtrl\r\n};\r\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/module.js"],"names":["StatusPluginCtrl"],"mappings":";;;;;;;;AAAQA,sB,gBAAAA,gB;;;2BAGNA,gB","file":"module.js","sourcesContent":["import {StatusPluginCtrl} from './status_ctrl';\n\nexport {\n StatusPluginCtrl as PanelCtrl\n};\n"]}
\ No newline at end of file
diff --git a/dist/plugin.json b/dist/plugin.json
index 0d94275e..f93ead75 100644
--- a/dist/plugin.json
+++ b/dist/plugin.json
@@ -23,8 +23,8 @@
{"name": "Warning State", "path": "img/warning.png"},
{"name": "Critical State", "path": "img/error.png"}
],
- "version": "1.0.2",
- "updated": "2017-3-14"
+ "version": "1.0.3",
+ "updated": "2017-3-23"
},
"dependencies": {
diff --git a/dist/status_ctrl.js b/dist/status_ctrl.js
index 6fbea6fa..1e4c0d81 100644
--- a/dist/status_ctrl.js
+++ b/dist/status_ctrl.js
@@ -76,8 +76,9 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
//this.log = $log.debug;
_this.filter = $filter;
- _this.displayTypes = ['Threshold', 'Disable Criteria', 'Annotation'];
+ _this.valueHandlers = ['Threshold', 'Disable Criteria', 'Text Only'];
_this.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg'];
+ _this.displayTypes = ['Regular', 'Annotation'];
_this.panel.flipTime = _this.panel.flipTime || 5;
@@ -88,13 +89,33 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
_this.events.on('data-received', _this.onDataReceived.bind(_this));
_this.events.on('data-snapshot-load', _this.onDataReceived.bind(_this));
_this.events.on('init-edit-mode', _this.onInitEditMode.bind(_this));
+
+ _this.addFilters();
return _this;
}
_createClass(StatusPluginCtrl, [{
+ key: "addFilters",
+ value: function addFilters() {
+ var _this2 = this;
+
+ coreModule.filter('numberOrText', function () {
+ var numberOrTextFilter = function numberOrTextFilter(input) {
+ if (angular.isNumber(input)) {
+ return _this2.filter('number')(input);
+ } else {
+ return input;
+ }
+ };
+
+ numberOrTextFilter.$stateful = true;
+ return numberOrTextFilter;
+ });
+ }
+ }, {
key: "postRefresh",
value: function postRefresh() {
- var _this2 = this;
+ var _this3 = this;
if (this.panel.fixedSpan) {
this.panel.span = this.panel.fixedSpan;
@@ -110,12 +131,12 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
});
_.each(this.measurements, function (m) {
- var res = _.filter(_this2.measurements, function (measurement) {
+ var res = _.filter(_this3.measurements, function (measurement) {
return (m.alias == measurement.alias || m.target == measurement.target && m.target) && !m.hide;
});
if (res.length > 1) {
- _this2.duplicates = true;
+ _this3.duplicates = true;
}
});
}
@@ -127,14 +148,26 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
}, {
key: "setElementHeight",
value: function setElementHeight() {
- this.$panelContainer.find('.status-panel').css('height', this.$panelContoller.height + 'px');
+ this.$panelContainer.find('.status-panel').css('min-height', this.$panelContoller.height + 'px');
+ this.minHeight = this.$panelContoller.height - 10;
+ }
+ }, {
+ key: "setTextMaxWidth",
+ value: function setTextMaxWidth() {
+ var tail = ' …';
+ var panelWidth = this.$panelContainer.innerWidth();
+ if (isNaN(panelWidth)) panelWidth = parseInt(panelWidth.slice(0, -2), 10) / 12;
+ panelWidth = panelWidth - 20;
+ this.maxWidth = panelWidth;
}
}, {
key: "onRender",
value: function onRender() {
- var _this3 = this;
+ var _this4 = this;
this.setElementHeight();
+ this.setTextMaxWidth();
+ this.upgradeOldVersion();
if (this.panel.clusterName) {
this.panel.displayName = this.filter('interpolateTemplateVars')(this.panel.clusterName, this.$scope).replace(new RegExp(this.panel.namePrefix, 'i'), '');
@@ -152,8 +185,8 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
this.crit = [];
this.warn = [];
- this.display = [];
this.disabled = [];
+ this.display = [];
this.annotation = [];
_.each(this.series, function (s) {
@@ -167,6 +200,8 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
s.alias = target.alias;
s.url = target.url;
+ s.display = true;
+ s.displayType = target.displayType;
var value = void 0;
switch (target.aggregation) {
@@ -201,19 +236,43 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
s.display_value = value;
- if (target.displayType == "Threshold") {
- _this3.handleThresholdStatus(s, target);
- } else if (target.displayType == "Disable Criteria") {
- _this3.handleDisabledStatus(s, target);
- } else if (target.displayType == "Annotation") {
- _this3.handleAnnotations(s, target);
+ if (target.valueHandler == "Threshold") {
+ _this4.handleThresholdStatus(s, target);
+ } else if (target.valueHandler == "Disable Criteria") {
+ _this4.handleDisabledStatus(s, target);
+ } else if (target.valueHandler == "Text Only") {
+ _this4.handleTextOnly(s, target);
}
});
+ if (this.disabled.length > 0) {
+ this.crit = [];
+ this.warn = [];
+ this.display = [];
+ }
+
this.autoFlip();
- this.handle_css_display();
+ this.handleCssDisplay();
this.parseUri();
}
+ }, {
+ key: "upgradeOldVersion",
+ value: function upgradeOldVersion() {
+ var _this5 = this;
+
+ var targets = this.panel.targets;
+
+ //Handle legacy code
+ _.each(targets, function (target) {
+ if (target.valueHandler == null) {
+ target.valueHandler = target.displayType;
+ if (target.valueHandler == "Annotation") {
+ target.valueHandler = "Text Only";
+ }
+ target.displayType = _this5.displayTypes[0];
+ }
+ });
+ }
}, {
key: "handleThresholdStatus",
value: function handleThresholdStatus(series, target) {
@@ -221,20 +280,41 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
series.inverted = series.thresholds.crit < series.thresholds.warn;
series.display = target.display;
- if (!series.inverted) {
- if (series.display_value >= series.thresholds.crit) {
- this.crit.push(series);
- } else if (series.display_value >= series.thresholds.warn) {
- this.warn.push(series);
- } else if (series.display) {
- this.display.push(series);
+ var isCritical = false;
+ var isWarning = false;
+ var isCheckRanges = series.thresholds.warnIsNumber && series.thresholds.critIsNumber;
+ if (isCheckRanges) {
+ if (!series.inverted) {
+ if (series.display_value >= series.thresholds.crit) {
+ isCritical = true;
+ } else if (series.display_value >= series.thresholds.warn) {
+ isWarning = true;
+ }
+ } else {
+ if (series.display_value <= series.thresholds.crit) {
+ isCritical = true;
+ } else if (series.display_value <= series.thresholds.warn) {
+ isWarning = true;
+ }
}
} else {
- if (series.display_value <= series.thresholds.crit) {
- this.crit.push(series);
- } else if (series.display_value <= series.thresholds.warn) {
- this.warn.push(series);
- } else if (series.display) {
+ if (series.display_value == series.thresholds.crit) {
+ isCritical = true;
+ } else if (series.display_value == series.thresholds.warn) {
+ isWarning = true;
+ }
+ }
+
+ if (isCritical) {
+ this.crit.push(series);
+ series.displayType = this.displayTypes[0];
+ } else if (isWarning) {
+ this.warn.push(series);
+ series.displayType = this.displayTypes[0];
+ } else if (series.display) {
+ if (series.displayType == "Annotation") {
+ this.annotation.push(series);
+ } else {
this.display.push(series);
}
}
@@ -242,7 +322,7 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
}, {
key: "handleDisabledStatus",
value: function handleDisabledStatus(series, target) {
-
+ series.displayType = this.displayTypes[0];
series.disabledValue = target.disabledValue;
if (series.display_value == series.disabledValue) {
@@ -250,13 +330,17 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
}
}
}, {
- key: "handleAnnotations",
- value: function handleAnnotations(series, target) {
- this.annotation.push(series);
+ key: "handleTextOnly",
+ value: function handleTextOnly(series, target) {
+ if (series.displayType == "Annotation") {
+ this.annotation.push(series);
+ } else {
+ this.display.push(series);
+ }
}
}, {
- key: "handle_css_display",
- value: function handle_css_display() {
+ key: "handleCssDisplay",
+ value: function handleCssDisplay() {
this.$panelContainer.removeClass('error-state warn-state disabled-state ok-state no-data-state');
if (this.duplicates) {
@@ -285,8 +369,7 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
}, {
key: "onDataReceived",
value: function onDataReceived(dataList) {
- this.series = dataList.map(this.seriesHandler.bind(this));
-
+ this.series = dataList.map(StatusPluginCtrl.seriesHandler.bind(this));
this.render();
}
}, {
@@ -295,18 +378,6 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
this.crit = [];
this.warn = [];
}
- }, {
- key: "seriesHandler",
- value: function seriesHandler(seriesData) {
- var series = new TimeSeries({
- datapoints: seriesData.datapoints,
- alias: seriesData.target
- });
-
- series.flotpairs = series.getFlotPairs("connected");
-
- return series;
- }
}, {
key: "$onDestroy",
value: function $onDestroy() {
@@ -315,12 +386,12 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
}, {
key: "autoFlip",
value: function autoFlip() {
- var _this4 = this;
+ var _this6 = this;
if (this.timeoutId) clearInterval(this.timeoutId);
- if (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0)) {
+ if (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0 || this.disabled.length > 0)) {
this.timeoutId = setInterval(function () {
- _this4.$panelContainer.toggleClass("flipped");
+ _this6.$panelContainer.toggleClass("flipped");
}, this.panel.flipTime * 1000);
}
}
@@ -337,10 +408,24 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi
var res = {};
res.warn = metricOptions.warn;
+ res.warnIsNumber = angular.isNumber(res.warn);
res.crit = metricOptions.crit;
+ res.critIsNumber = angular.isNumber(res.crit);
return res;
}
+ }, {
+ key: "seriesHandler",
+ value: function seriesHandler(seriesData) {
+ var series = new TimeSeries({
+ datapoints: seriesData.datapoints,
+ alias: seriesData.target
+ });
+
+ series.flotpairs = series.getFlotPairs("connected");
+
+ return series;
+ }
}]);
return StatusPluginCtrl;
diff --git a/dist/status_ctrl.js.map b/dist/status_ctrl.js.map
index f2ce379a..925f718d 100644
--- a/dist/status_ctrl.js.map
+++ b/dist/status_ctrl.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/status_ctrl.js"],"names":["MetricsPanelCtrl","_","TimeSeries","coreModule","StatusPluginCtrl","$scope","$injector","$log","$filter","annotationsSrv","filter","displayTypes","aggregations","panel","flipTime","events","on","onRender","bind","postRefresh","onDataError","onDataReceived","onInitEditMode","fixedSpan","span","measurements","targets","duplicates","measurement","hide","each","m","res","alias","target","length","addEditorTab","$panelContainer","find","css","$panelContoller","height","setElementHeight","clusterName","displayName","replace","RegExp","namePrefix","flipCard","addClass","removeClass","crit","warn","display","disabled","annotation","series","s","url","value","aggregation","max","datapoints","point","stats","min","total","avg","display_value","displayType","handleThresholdStatus","handleDisabledStatus","handleAnnotations","autoFlip","handle_css_display","parseUri","thresholds","parseThresholds","inverted","push","disabledValue","undefined","isGrayOnNoData","links","uri","dashUri","params","dataList","map","seriesHandler","render","seriesData","flotpairs","getFlotPairs","timeoutId","clearInterval","setInterval","toggleClass","scope","elem","attrs","ctrl","metricOptions","templateUrl"],"mappings":"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","file":"status_ctrl.js","sourcesContent":["import {MetricsPanelCtrl} from \"app/plugins/sdk\";\nimport \"app/plugins/panel/graph/legend\";\nimport \"app/plugins/panel/graph/series_overrides_ctrl\";\nimport _ from \"lodash\";\nimport TimeSeries from \"app/core/time_series2\";\nimport coreModule from \"app/core/core_module\"\n\nimport './css/status_panel.css!';\n\nexport class StatusPluginCtrl extends MetricsPanelCtrl {\n\t/** @ngInject */\n\tconstructor($scope, $injector, $log, $filter, annotationsSrv) {\n\t\tsuper($scope, $injector);\n\n\t\t//this.log = $log.debug;\n\t\tthis.filter = $filter;\n\n\t\tthis.displayTypes = ['Threshold', 'Disable Criteria', 'Annotation'];\n\t\tthis.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg'];\n\n\t\tthis.panel.flipTime = this.panel.flipTime || 5;\n\n\t\t/** Bind events to functions **/\n\t\tthis.events.on('render', this.onRender.bind(this));\n\t\tthis.events.on('refresh', this.postRefresh.bind(this));\n\t\tthis.events.on('data-error', this.onDataError.bind(this));\n\t\tthis.events.on('data-received', this.onDataReceived.bind(this));\n\t\tthis.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n\t\tthis.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n \t}\n\n\tpostRefresh() {\n\t\tif (this.panel.fixedSpan) {\n\t\t\tthis.panel.span = this.panel.fixedSpan;\n\t\t}\n\n\t\tthis.measurements = this.panel.targets;\n\n\t\t/** Duplicate alias validation **/\n\t\tthis.duplicates = false;\n\n\t\tthis.measurements = _.filter(this.measurements, (measurement) => {\n\t\t\treturn !measurement.hide;\n\t\t});\n\n\t\t_.each(this.measurements, (m) => {\n\t\t\tlet res = _.filter(this.measurements, (measurement) => {\n\t\t\t\treturn (m.alias == measurement.alias || (m.target == measurement.target && m.target)) && !m.hide;\n\t\t\t});\n\n\t\t\tif (res.length > 1) {\n\t\t\t\tthis.duplicates = true;\n\t\t\t}\n\t\t});\n\t}\n\n\tonInitEditMode() {\n\t\tthis.addEditorTab('Options', 'public/plugins/vonage-status-panel/editor.html', 2);\n\t}\n\n\tsetElementHeight() {\n\t\tthis.$panelContainer.find('.status-panel').css('height', this.$panelContoller.height + 'px');\n\t}\n\n\tonRender() {\n\t\tthis.setElementHeight();\n\n\t\tif (this.panel.clusterName) {\n\t\t\tthis.panel.displayName =\n\t\t\t\tthis.filter('interpolateTemplateVars')(this.panel.clusterName, this.$scope)\n\t\t\t\t\t.replace(new RegExp(this.panel.namePrefix, 'i'), '');\n\t\t} else {\n\t\t\tthis.panel.displayName = \"\";\n\t\t}\n\n\t\tif(this.panel.flipCard){\n\t\t this.$panelContainer.addClass(\"effect-hover\");\n\t\t} else {\n\t\t this.$panelContainer.removeClass(\"effect-hover\");\n\t\t}\n\n\t\tlet targets = this.panel.targets;\n\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t\tthis.display = [];\n\t\tthis.disabled = [];\n\t\tthis.annotation = [];\n\n\t\t_.each(this.series, (s) => {\n\t\t\tlet target = _.find(targets, (target) => {\n\t\t\t\treturn target.alias == s.alias || target.target == s.alias;\n\t\t\t});\n\n\t\t\tif (!target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ts.alias = target.alias;\n\t\t\ts.url = target.url;\n\n\t\t\tlet value;\n\t\t\tswitch (target.aggregation) {\n\t\t\t\tcase 'Max':\n\t\t\t\t\tvalue = _.max(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.max;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Min':\n\t\t\t\t\tvalue = _.min(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.min;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Sum':\n\t\t\t\t\tvalue = 0;\n\t\t\t\t\t_.each(s.datapoints, (point) => { value += point[0] });\n\t\t\t\t\tvalue = s.stats.total;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Avg':\n\t\t\t\t\tvalue = s.stats.avg;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'First':\n\t\t\t\t\tvalue = s.datapoints[0][0];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = s.datapoints[s.datapoints.length - 1][0];\n\t\t\t}\n\n\t\t\ts.display_value = value;\n\n\t\t\tif (target.displayType == \"Threshold\") {\n\t\t\t\tthis.handleThresholdStatus(s, target);\n\t\t\t}\n\t\t\telse if (target.displayType == \"Disable Criteria\") {\n\t\t\t\tthis.handleDisabledStatus(s,target);\n\t\t\t}\n\t\t\telse if (target.displayType == \"Annotation\") {\n\t\t\t\tthis.handleAnnotations(s, target);\n\t\t\t}\n\t\t});\n\n\t\tthis.autoFlip();\n\t\tthis.handle_css_display();\n\t\tthis.parseUri();\n\t}\n\n\thandleThresholdStatus(series, target) {\n\t\tseries.thresholds = StatusPluginCtrl.parseThresholds(target);\n\t\tseries.inverted = series.thresholds.crit < series.thresholds.warn;\n\t\tseries.display = target.display;\n\n\t\tif (!series.inverted) {\n\t\t\tif (series.display_value >= series.thresholds.crit) {\n\t\t\t\tthis.crit.push(series);\n\t\t\t} else if (series.display_value >= series.thresholds.warn) {\n\t\t\t\tthis.warn.push(series);\n\t\t\t} else if (series.display) {\n\t\t\t\tthis.display.push(series);\n\t\t\t}\n\t\t} else {\n\t\t\tif (series.display_value <= series.thresholds.crit) {\n\t\t\t\tthis.crit.push(series);\n\t\t\t} else if (series.display_value <= series.thresholds.warn) {\n\t\t\t\tthis.warn.push(series);\n\t\t\t} else if (series.display) {\n\t\t\t\tthis.display.push(series);\n\t\t\t}\n\t\t}\n\t}\n\n\thandleDisabledStatus(series, target) {\n\n\t\tseries.disabledValue = target.disabledValue;\n\n\t\tif (series.display_value == series.disabledValue) {\n\t\t\tthis.disabled.push(series);\n\t\t}\n\t}\n\n\thandleAnnotations(series, target) {\n\t\tthis.annotation.push(series);\n\t}\n\n\thandle_css_display() {\n\t\tthis.$panelContainer.removeClass('error-state warn-state disabled-state ok-state no-data-state');\n\n\t\tif(this.duplicates) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.disabled.length > 0) {\n\t\t\tthis.$panelContainer.addClass('disabled-state');\n\t\t} else if (this.crit.length > 0) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.warn.length > 0) {\n\t\t\tthis.$panelContainer.addClass('warn-state');\n\t\t} else if((this.series == undefined || this.series.length == 0) && this.panel.isGrayOnNoData) {\n\t\t\tthis.$panelContainer.addClass('no-data-state');\n\t\t} else {\n\t\t\tthis.$panelContainer.addClass('ok-state');\n\t\t}\n\t}\n\n\tparseUri() {\n\t\tif (this.panel.links && this.panel.links.length > 0) {\n\t\t\tthis.uri = this.panel.links[0].dashUri + \"?\" + this.panel.links[0].params;\n\t\t} else {\n\t\t\tthis.uri = undefined;\n\t\t}\n\t}\n\n\tstatic parseThresholds(metricOptions) {\n\t\tlet res = {};\n\n\t\tres.warn = metricOptions.warn;\n\t\tres.crit = metricOptions.crit;\n\n\t\treturn res;\n\t}\n\n\tonDataReceived(dataList) {\n\t\tthis.series = dataList.map(this.seriesHandler.bind(this));\n\n\t\tthis.render();\n\t}\n\n\tonDataError() {\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t}\n\n\tseriesHandler(seriesData) {\n\t\tvar series = new TimeSeries({\n\t\t\tdatapoints: seriesData.datapoints,\n\t\t\talias: seriesData.target\n\t\t});\n\n\t\tseries.flotpairs = series.getFlotPairs(\"connected\");\n\n\t\treturn series;\n\t}\n\n\t$onDestroy() {\n\t\tif(this.timeoutId) clearInterval(this.timeoutId);\n\t}\n\n\tautoFlip() {\n\t\tif (this.timeoutId) clearInterval(this.timeoutId);\n\t\tif (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0)) {\n\t\t\tthis.timeoutId = setInterval(() => {\n\t\t\t\tthis.$panelContainer.toggleClass(\"flipped\");\n\t\t\t}, this.panel.flipTime * 1000);\n\t\t}\n\t}\n\n\tlink(scope, elem, attrs, ctrl) {\n\t\tthis.$panelContainer = elem.find('.panel-container');\n\t\tthis.$panelContainer.addClass(\"st-card\");\n\t\tthis.$panelContoller = ctrl;\n\t}\n}\n\nStatusPluginCtrl.templateUrl = 'module.html';\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/status_ctrl.js"],"names":["MetricsPanelCtrl","_","TimeSeries","coreModule","StatusPluginCtrl","$scope","$injector","$log","$filter","annotationsSrv","filter","valueHandlers","aggregations","displayTypes","panel","flipTime","events","on","onRender","bind","postRefresh","onDataError","onDataReceived","onInitEditMode","addFilters","numberOrTextFilter","input","angular","isNumber","$stateful","fixedSpan","span","measurements","targets","duplicates","measurement","hide","each","m","res","alias","target","length","addEditorTab","$panelContainer","find","css","$panelContoller","height","minHeight","tail","panelWidth","innerWidth","isNaN","parseInt","slice","maxWidth","setElementHeight","setTextMaxWidth","upgradeOldVersion","clusterName","displayName","replace","RegExp","namePrefix","flipCard","addClass","removeClass","crit","warn","disabled","display","annotation","series","s","url","displayType","value","aggregation","max","datapoints","point","stats","min","total","avg","display_value","valueHandler","handleThresholdStatus","handleDisabledStatus","handleTextOnly","autoFlip","handleCssDisplay","parseUri","thresholds","parseThresholds","inverted","isCritical","isWarning","isCheckRanges","warnIsNumber","critIsNumber","push","disabledValue","undefined","isGrayOnNoData","links","uri","dashUri","params","dataList","map","seriesHandler","render","timeoutId","clearInterval","setInterval","toggleClass","scope","elem","attrs","ctrl","metricOptions","seriesData","flotpairs","getFlotPairs","templateUrl"],"mappings":"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","file":"status_ctrl.js","sourcesContent":["import {MetricsPanelCtrl} from \"app/plugins/sdk\";\nimport \"app/plugins/panel/graph/legend\";\nimport \"app/plugins/panel/graph/series_overrides_ctrl\";\nimport _ from \"lodash\";\nimport TimeSeries from \"app/core/time_series2\";\nimport coreModule from \"app/core/core_module\"\n\nimport './css/status_panel.css!';\n\nexport class StatusPluginCtrl extends MetricsPanelCtrl {\n\t/** @ngInject */\n\tconstructor($scope, $injector, $log, $filter, annotationsSrv) {\n\t\tsuper($scope, $injector);\n\n\t\t//this.log = $log.debug;\n\t\tthis.filter = $filter;\n\n\t\tthis.valueHandlers = ['Threshold', 'Disable Criteria', 'Text Only'];\n\t\tthis.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg'];\n\t\tthis.displayTypes = ['Regular', 'Annotation'];\n\n\t\tthis.panel.flipTime = this.panel.flipTime || 5;\n\n\t\t/** Bind events to functions **/\n\t\tthis.events.on('render', this.onRender.bind(this));\n\t\tthis.events.on('refresh', this.postRefresh.bind(this));\n\t\tthis.events.on('data-error', this.onDataError.bind(this));\n\t\tthis.events.on('data-received', this.onDataReceived.bind(this));\n\t\tthis.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n\t\tthis.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n\n\t\tthis.addFilters()\n\t}\n\n\taddFilters() {\n\t\tcoreModule.filter('numberOrText', () => {\n\t\t\tlet numberOrTextFilter = (input) => {\n\t\t\t\tif(angular.isNumber(input)) {\n\t\t\t\t\treturn this.filter('number')(input);\n\t\t\t\t} else {\n\t\t\t\t\treturn input;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tnumberOrTextFilter.$stateful = true;\n\t\t\treturn numberOrTextFilter;\n\t\t});\n\t}\n\n\tpostRefresh() {\n\t\tif (this.panel.fixedSpan) {\n\t\t\tthis.panel.span = this.panel.fixedSpan;\n\t\t}\n\n\t\tthis.measurements = this.panel.targets;\n\n\t\t/** Duplicate alias validation **/\n\t\tthis.duplicates = false;\n\n\t\tthis.measurements = _.filter(this.measurements, (measurement) => {\n\t\t\treturn !measurement.hide;\n\t\t});\n\n\t\t_.each(this.measurements, (m) => {\n\t\t\tlet res = _.filter(this.measurements, (measurement) => {\n\t\t\t\treturn (m.alias == measurement.alias || (m.target == measurement.target && m.target)) && !m.hide;\n\t\t\t});\n\n\t\t\tif (res.length > 1) {\n\t\t\t\tthis.duplicates = true;\n\t\t\t}\n\t\t});\n\t}\n\n\tonInitEditMode() {\n\t\tthis.addEditorTab('Options', 'public/plugins/vonage-status-panel/editor.html', 2);\n\t}\n\n\tsetElementHeight() {\n\t\tthis.$panelContainer.find('.status-panel').css('min-height', this.$panelContoller.height + 'px');\n\t\tthis.minHeight = this.$panelContoller.height-10;\n\t}\n\n\tsetTextMaxWidth() {\n\t\tlet tail = ' …';\n\t\tlet panelWidth = this.$panelContainer.innerWidth();\n\t\tif (isNaN(panelWidth))\n\t\t\tpanelWidth = parseInt(panelWidth.slice(0, -2), 10) / 12;\n\t\tpanelWidth = panelWidth - 20;\n\t\tthis.maxWidth = panelWidth;\n\t}\n\n\tonRender() {\n\t\tthis.setElementHeight();\n\t\tthis.setTextMaxWidth();\n\t\tthis.upgradeOldVersion();\n\n\t\tif (this.panel.clusterName) {\n\t\t\tthis.panel.displayName =\n\t\t\t\tthis.filter('interpolateTemplateVars')(this.panel.clusterName, this.$scope)\n\t\t\t\t\t.replace(new RegExp(this.panel.namePrefix, 'i'), '');\n\t\t} else {\n\t\t\tthis.panel.displayName = \"\";\n\t\t}\n\n\t\tif(this.panel.flipCard){\n\t\t this.$panelContainer.addClass(\"effect-hover\");\n\t\t} else {\n\t\t this.$panelContainer.removeClass(\"effect-hover\");\n\t\t}\n\n\t\tlet targets = this.panel.targets;\n\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t\tthis.disabled = [];\n\t\tthis.display = [];\n\t\tthis.annotation = [];\n\n\t\t_.each(this.series, (s) => {\n\t\t\tlet target = _.find(targets, (target) => {\n\t\t\t\treturn target.alias == s.alias || target.target == s.alias;\n\t\t\t});\n\n\t\t\tif (!target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ts.alias = target.alias;\n\t\t\ts.url = target.url;\n\t\t\ts.display = true;\n\t\t\ts.displayType = target.displayType;\n\n\t\t\tlet value;\n\t\t\tswitch (target.aggregation) {\n\t\t\t\tcase 'Max':\n\t\t\t\t\tvalue = _.max(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.max;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Min':\n\t\t\t\t\tvalue = _.min(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.min;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Sum':\n\t\t\t\t\tvalue = 0;\n\t\t\t\t\t_.each(s.datapoints, (point) => { value += point[0] });\n\t\t\t\t\tvalue = s.stats.total;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Avg':\n\t\t\t\t\tvalue = s.stats.avg;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'First':\n\t\t\t\t\tvalue = s.datapoints[0][0];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = s.datapoints[s.datapoints.length - 1][0];\n\t\t\t}\n\n\t\t\ts.display_value = value;\n\n\t\t\tif (target.valueHandler == \"Threshold\") {\n\t\t\t\tthis.handleThresholdStatus(s, target);\n\t\t\t}\n\t\t\telse if (target.valueHandler == \"Disable Criteria\") {\n\t\t\t\tthis.handleDisabledStatus(s,target);\n\t\t\t}\n\t\t\telse if (target.valueHandler == \"Text Only\") {\n\t\t\t\tthis.handleTextOnly(s, target);\n\t\t\t}\n\t\t});\n\n\t\tif(this.disabled.length > 0) {\n\t\t\tthis.crit = [];\n\t\t\tthis.warn = [];\n\t\t\tthis.display = [];\n\t\t}\n\n\t\tthis.autoFlip();\n\t\tthis.handleCssDisplay();\n\t\tthis.parseUri();\n\t}\n\n\tupgradeOldVersion() {\n\t\tlet targets = this.panel.targets;\n\n\t\t//Handle legacy code\n\t\t_.each(targets, (target) => {\n\t\t\tif(target.valueHandler == null) {\n\t\t\t\ttarget.valueHandler = target.displayType;\n\t\t\t\tif(target.valueHandler == \"Annotation\") {\n\t\t\t\t\ttarget.valueHandler = \"Text Only\"\n\t\t\t\t}\n\t\t\t\ttarget.displayType = this.displayTypes[0];\n\t\t\t}\n\t\t});\n\t}\n\n\thandleThresholdStatus(series, target) {\n\t\tseries.thresholds = StatusPluginCtrl.parseThresholds(target);\n\t\tseries.inverted = series.thresholds.crit < series.thresholds.warn;\n\t\tseries.display = target.display;\n\n\t\tlet isCritical = false;\n\t\tlet isWarning = false;\n\t\tlet isCheckRanges = series.thresholds.warnIsNumber && series.thresholds.critIsNumber;\n\t\tif (isCheckRanges) {\n\t\t\tif (!series.inverted) {\n\t\t\t\tif (series.display_value >= series.thresholds.crit) {\n\t\t\t\t\tisCritical = true\n\t\t\t\t} else if (series.display_value >= series.thresholds.warn) {\n\t\t\t\t\tisWarning = true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (series.display_value <= series.thresholds.crit) {\n\t\t\t\t\tisCritical = true\n\t\t\t\t} else if (series.display_value <= series.thresholds.warn) {\n\t\t\t\t\tisWarning = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (series.display_value == series.thresholds.crit) {\n\t\t\t\tisCritical = true\n\t\t\t} else if (series.display_value == series.thresholds.warn) {\n\t\t\t\tisWarning = true\n\t\t\t}\n\t\t}\n\n\t\tif(isCritical) {\n\t\t\tthis.crit.push(series);\n\t\t\tseries.displayType = this.displayTypes[0]\n\t\t} else if(isWarning) {\n\t\t\tthis.warn.push(series);\n\t\t\tseries.displayType = this.displayTypes[0]\n\t\t} else if (series.display) {\n\t\t\tif(series.displayType == \"Annotation\") {\n\t\t\t\tthis.annotation.push(series);\n\t\t\t} else {\n\t\t\t\tthis.display.push(series);\n\t\t\t}\n\t\t}\n\t}\n\n\thandleDisabledStatus(series, target) {\n\t\tseries.displayType = this.displayTypes[0];\n\t\tseries.disabledValue = target.disabledValue;\n\n\t\tif (series.display_value == series.disabledValue) {\n\t\t\tthis.disabled.push(series);\n\t\t}\n\t}\n\n\thandleTextOnly(series, target) {\n\t\tif(series.displayType == \"Annotation\") {\n\t\t\tthis.annotation.push(series);\n\t\t} else {\n\t\t\tthis.display.push(series);\n\t\t}\n\t}\n\n\thandleCssDisplay() {\n\t\tthis.$panelContainer.removeClass('error-state warn-state disabled-state ok-state no-data-state');\n\n\t\tif(this.duplicates) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.disabled.length > 0) {\n\t\t\tthis.$panelContainer.addClass('disabled-state');\n\t\t} else if (this.crit.length > 0) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.warn.length > 0) {\n\t\t\tthis.$panelContainer.addClass('warn-state');\n\t\t} else if((this.series == undefined || this.series.length == 0) && this.panel.isGrayOnNoData) {\n\t\t\tthis.$panelContainer.addClass('no-data-state');\n\t\t} else {\n\t\t\tthis.$panelContainer.addClass('ok-state');\n\t\t}\n\t}\n\n\tparseUri() {\n\t\tif (this.panel.links && this.panel.links.length > 0) {\n\t\t\tthis.uri = this.panel.links[0].dashUri + \"?\" + this.panel.links[0].params;\n\t\t} else {\n\t\t\tthis.uri = undefined;\n\t\t}\n\t}\n\n\tstatic parseThresholds(metricOptions) {\n\t\tlet res = {};\n\n\t\tres.warn = metricOptions.warn;\n\t\tres.warnIsNumber = angular.isNumber(res.warn);\n\t\tres.crit = metricOptions.crit;\n\t\tres.critIsNumber = angular.isNumber(res.crit);\n\n\t\treturn res;\n\t}\n\n\tonDataReceived(dataList) {\n\t\tthis.series = dataList.map(StatusPluginCtrl.seriesHandler.bind(this));\n\t\tthis.render();\n\t}\n\n\tonDataError() {\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t}\n\n\tstatic seriesHandler(seriesData) {\n\t\tvar series = new TimeSeries({\n\t\t\tdatapoints: seriesData.datapoints,\n\t\t\talias: seriesData.target\n\t\t});\n\n\t\tseries.flotpairs = series.getFlotPairs(\"connected\");\n\n\t\treturn series;\n\t}\n\n\t$onDestroy() {\n\t\tif(this.timeoutId) clearInterval(this.timeoutId);\n\t}\n\n\tautoFlip() {\n\t\tif (this.timeoutId) clearInterval(this.timeoutId);\n\t\tif (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0 || this.disabled.length > 0)) {\n\t\t\tthis.timeoutId = setInterval(() => {\n\t\t\t\tthis.$panelContainer.toggleClass(\"flipped\");\n\t\t\t}, this.panel.flipTime * 1000);\n\t\t}\n\t}\n\n\tlink(scope, elem, attrs, ctrl) {\n\t\tthis.$panelContainer = elem.find('.panel-container');\n\t\tthis.$panelContainer.addClass(\"st-card\");\n\t\tthis.$panelContoller = ctrl;\n\t}\n}\n\nStatusPluginCtrl.templateUrl = 'module.html';\n"]}
\ No newline at end of file
diff --git a/src/css/status_panel.scss b/src/css/status_panel.scss
index 1fa4de8b..9e1abb25 100644
--- a/src/css/status_panel.scss
+++ b/src/css/status_panel.scss
@@ -1,114 +1,121 @@
.status-panel {
- display: table;
position: relative;
width: 100%;
-
- > div{
- display: flex;
- flex-flow: column nowrap;
- justify-content: center;
- align-items: center;
- font-size: 1.5rem
- }
-
+ height: 100%;
+ text-align: center;
h1 {
font-size: 1.5rem;
}
-
- .status-panel-annotation_row {
+ .st-card-front {
position: absolute;
- top: 0;
width: 100%;
- text-align: left;
- font-size: 0.85rem;
+ height: 100%;
+
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-content: center;
}
- .ok-text, .warning-text, .fail-text, .gray-text{
- display: none;
- font-size: 3.5rem;
+ .st-card-back {
+ .top_section {
+ .status-panel-annotation_row {
+ text-align: left;
+ font-size: 0.85rem;
+ padding-bottom: 10px;
+
+ .row-overflow {
+ max-width: 150px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ }
+ }
+
+ .bottom_section {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-content: center;
+
+ .status_name_row {
+ }
+
+ .status_alerts_row {
+ min-height: 1px;
+ }
+ }
}
-}
-.error-state {
- background-color: red;
- .fail-text {
- display: block;
- }
+ .st-card-front,
+ .st-card-back {
+ backface-visibility: hidden;
+ transition: transform 0.5s;
+ }
}
-.warn-state {
- background-color: orange;
- .warning-text {
- display: block;
- }
+.st-card-front {
+ .ok-text, .warning-text, .fail-text, .no-data-text, .disabled-text {
+ display: none;
+ font-size: 2.0rem;
+ }
}
.ok-state {
- background-color: green;
- .ok-text {
- display: block;
- }
-}
+ background-color: green;
-.gray-state {
- background-color: gray;
- .gray-text {
- display: block;
- }
-}
-
-.gray-state .st-card-back{
- display: none;
+ .ok-text {
+ display: block;
+ }
}
-.st-card {
- position: relative;
- text-align: center;
+.warn-state {
+ background-color: orange;
+ .warning-text {
+ display: block;
+ }
}
-.st-card-front,
-.st-card-back {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
+.error-state {
+ background-color: red;
+ .fail-text {
+ display: block;
+ }
}
-.st-card-front,
-.st-card-back {
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-transition: -webkit-transform 0.5s;
- transition: transform 0.5s;
-}
+.no-data-state {
+ background-color: gray;
-.st-card.effect-hover .st-card-back {
- -webkit-transform: rotateY(-180deg);
- transform: rotateY(-180deg);
+ .no-data-text {
+ display: block;
+ }
}
-.st-card.effect-hover:hover:not(.gray-state) .st-card-front, .st-card.effect-hover.flipped:not(.gray-state) .st-card-front {
- -webkit-transform: rotateY(-180deg);
- transform: rotateY(-180deg);
+.disabled-state {
+ background-color: gray;
+ .disabled-text {
+ display: block;
+ }
}
-.st-card.effect-hover:hover:not(.gray-state) .st-card-back, .st-card.effect-hover.flipped:not(.gray-state) .st-card-back {
- -webkit-transform: rotateY(0);
- transform: rotateY(0);
+.st-card.effect-hover .st-card-back {
+ -webkit-transform: rotateY(-180deg);
+ transform: rotateY(-180deg);
}
-.st-card:not(.effect-hover):not(.gray-state) .st-card-front {
- display: none;
+.st-card.effect-hover:hover:not(.no-data-state) .st-card-front, .st-card.effect-hover.flipped:not(.no-data-state) .st-card-front {
+ -webkit-transform: rotateY(-180deg);
+ transform: rotateY(-180deg);
}
-
-.no-data-state {
- background-color: gray;
+.st-card.effect-hover:hover:not(.no-data-state) .st-card-back, .st-card.effect-hover.flipped:not(.no-data-state) .st-card-back {
+ -webkit-transform: rotateY(0);
+ transform: rotateY(0);
}
-.disabled-state {
- background-color: gray;
+.st-card:not(.effect-hover):not(.no-data-state) .st-card-front {
+ display: none;
}
diff --git a/src/editor.html b/src/editor.html
index 0b8b2d30..b62a17c2 100644
--- a/src/editor.html
+++ b/src/editor.html
@@ -1,166 +1,192 @@
- Note: Every metric has to have a unique Alias to be used
+ Note: Every metric has to have a unique Alias to be used
- Error: There are multiple metrics with the same alias. Please give each metric a unique name.
+ Error: There are multiple metrics with the same alias. Please give each metric a unique name.
-
-
-
-
{{ measurement.alias }}
-
-
Metric: {{ measurement.refId }}
-
Please enter an alias for this measurement bellow
-
-
-
-
-
-
-
-
-
+
+
+
+
{{ measurement.alias }}
+
+
Metric: {{ measurement.refId }}
+
Please enter an alias for this measurement bellow
+
+
+
+
+
+
+
+
+
diff --git a/src/module.html b/src/module.html
index 84508cef..7e0d59ca 100644
--- a/src/module.html
+++ b/src/module.html
@@ -1,57 +1,67 @@
-
-
ok
-
warning
-
critical
-
No data
-
-
-
- Error: There are multiple measurements with the same alias. Please give each measurement a unique name.
-
-
-
-
+
+ Error: There are multiple measurements with the same alias. Please give each measurement a unique name.
-
-
+
+
OK
+
Warning
+
Critical
+
No data
+
Disabled
+
-
diff --git a/src/plugin.json b/src/plugin.json
index 0d94275e..f93ead75 100644
--- a/src/plugin.json
+++ b/src/plugin.json
@@ -23,8 +23,8 @@
{"name": "Warning State", "path": "img/warning.png"},
{"name": "Critical State", "path": "img/error.png"}
],
- "version": "1.0.2",
- "updated": "2017-3-14"
+ "version": "1.0.3",
+ "updated": "2017-3-23"
},
"dependencies": {
diff --git a/src/status_ctrl.js b/src/status_ctrl.js
index c3ba9794..9d0b93d0 100644
--- a/src/status_ctrl.js
+++ b/src/status_ctrl.js
@@ -15,8 +15,9 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
//this.log = $log.debug;
this.filter = $filter;
- this.displayTypes = ['Threshold', 'Disable Criteria', 'Annotation'];
+ this.valueHandlers = ['Threshold', 'Disable Criteria', 'Text Only'];
this.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg'];
+ this.displayTypes = ['Regular', 'Annotation'];
this.panel.flipTime = this.panel.flipTime || 5;
@@ -27,7 +28,24 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
this.events.on('data-received', this.onDataReceived.bind(this));
this.events.on('data-snapshot-load', this.onDataReceived.bind(this));
this.events.on('init-edit-mode', this.onInitEditMode.bind(this));
- }
+
+ this.addFilters()
+ }
+
+ addFilters() {
+ coreModule.filter('numberOrText', () => {
+ let numberOrTextFilter = (input) => {
+ if(angular.isNumber(input)) {
+ return this.filter('number')(input);
+ } else {
+ return input;
+ }
+ };
+
+ numberOrTextFilter.$stateful = true;
+ return numberOrTextFilter;
+ });
+ }
postRefresh() {
if (this.panel.fixedSpan) {
@@ -59,11 +77,23 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
}
setElementHeight() {
- this.$panelContainer.find('.status-panel').css('height', this.$panelContoller.height + 'px');
+ this.$panelContainer.find('.status-panel').css('min-height', this.$panelContoller.height + 'px');
+ this.minHeight = this.$panelContoller.height-10;
+ }
+
+ setTextMaxWidth() {
+ let tail = ' …';
+ let panelWidth = this.$panelContainer.innerWidth();
+ if (isNaN(panelWidth))
+ panelWidth = parseInt(panelWidth.slice(0, -2), 10) / 12;
+ panelWidth = panelWidth - 20;
+ this.maxWidth = panelWidth;
}
onRender() {
this.setElementHeight();
+ this.setTextMaxWidth();
+ this.upgradeOldVersion();
if (this.panel.clusterName) {
this.panel.displayName =
@@ -83,8 +113,8 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
this.crit = [];
this.warn = [];
- this.display = [];
this.disabled = [];
+ this.display = [];
this.annotation = [];
_.each(this.series, (s) => {
@@ -98,6 +128,8 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
s.alias = target.alias;
s.url = target.url;
+ s.display = true;
+ s.displayType = target.displayType;
let value;
switch (target.aggregation) {
@@ -126,48 +158,90 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
s.display_value = value;
- if (target.displayType == "Threshold") {
+ if (target.valueHandler == "Threshold") {
this.handleThresholdStatus(s, target);
}
- else if (target.displayType == "Disable Criteria") {
+ else if (target.valueHandler == "Disable Criteria") {
this.handleDisabledStatus(s,target);
}
- else if (target.displayType == "Annotation") {
- this.handleAnnotations(s, target);
+ else if (target.valueHandler == "Text Only") {
+ this.handleTextOnly(s, target);
}
});
+ if(this.disabled.length > 0) {
+ this.crit = [];
+ this.warn = [];
+ this.display = [];
+ }
+
this.autoFlip();
- this.handle_css_display();
+ this.handleCssDisplay();
this.parseUri();
}
+ upgradeOldVersion() {
+ let targets = this.panel.targets;
+
+ //Handle legacy code
+ _.each(targets, (target) => {
+ if(target.valueHandler == null) {
+ target.valueHandler = target.displayType;
+ if(target.valueHandler == "Annotation") {
+ target.valueHandler = "Text Only"
+ }
+ target.displayType = this.displayTypes[0];
+ }
+ });
+ }
+
handleThresholdStatus(series, target) {
series.thresholds = StatusPluginCtrl.parseThresholds(target);
series.inverted = series.thresholds.crit < series.thresholds.warn;
series.display = target.display;
- if (!series.inverted) {
- if (series.display_value >= series.thresholds.crit) {
- this.crit.push(series);
- } else if (series.display_value >= series.thresholds.warn) {
- this.warn.push(series);
- } else if (series.display) {
- this.display.push(series);
+ let isCritical = false;
+ let isWarning = false;
+ let isCheckRanges = series.thresholds.warnIsNumber && series.thresholds.critIsNumber;
+ if (isCheckRanges) {
+ if (!series.inverted) {
+ if (series.display_value >= series.thresholds.crit) {
+ isCritical = true
+ } else if (series.display_value >= series.thresholds.warn) {
+ isWarning = true
+ }
+ } else {
+ if (series.display_value <= series.thresholds.crit) {
+ isCritical = true
+ } else if (series.display_value <= series.thresholds.warn) {
+ isWarning = true
+ }
}
} else {
- if (series.display_value <= series.thresholds.crit) {
- this.crit.push(series);
- } else if (series.display_value <= series.thresholds.warn) {
- this.warn.push(series);
- } else if (series.display) {
+ if (series.display_value == series.thresholds.crit) {
+ isCritical = true
+ } else if (series.display_value == series.thresholds.warn) {
+ isWarning = true
+ }
+ }
+
+ if(isCritical) {
+ this.crit.push(series);
+ series.displayType = this.displayTypes[0]
+ } else if(isWarning) {
+ this.warn.push(series);
+ series.displayType = this.displayTypes[0]
+ } else if (series.display) {
+ if(series.displayType == "Annotation") {
+ this.annotation.push(series);
+ } else {
this.display.push(series);
}
}
}
handleDisabledStatus(series, target) {
-
+ series.displayType = this.displayTypes[0];
series.disabledValue = target.disabledValue;
if (series.display_value == series.disabledValue) {
@@ -175,11 +249,15 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
}
}
- handleAnnotations(series, target) {
- this.annotation.push(series);
+ handleTextOnly(series, target) {
+ if(series.displayType == "Annotation") {
+ this.annotation.push(series);
+ } else {
+ this.display.push(series);
+ }
}
- handle_css_display() {
+ handleCssDisplay() {
this.$panelContainer.removeClass('error-state warn-state disabled-state ok-state no-data-state');
if(this.duplicates) {
@@ -209,14 +287,15 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
let res = {};
res.warn = metricOptions.warn;
+ res.warnIsNumber = angular.isNumber(res.warn);
res.crit = metricOptions.crit;
+ res.critIsNumber = angular.isNumber(res.crit);
return res;
}
onDataReceived(dataList) {
- this.series = dataList.map(this.seriesHandler.bind(this));
-
+ this.series = dataList.map(StatusPluginCtrl.seriesHandler.bind(this));
this.render();
}
@@ -225,7 +304,7 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
this.warn = [];
}
- seriesHandler(seriesData) {
+ static seriesHandler(seriesData) {
var series = new TimeSeries({
datapoints: seriesData.datapoints,
alias: seriesData.target
@@ -242,7 +321,7 @@ export class StatusPluginCtrl extends MetricsPanelCtrl {
autoFlip() {
if (this.timeoutId) clearInterval(this.timeoutId);
- if (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0)) {
+ if (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0 || this.disabled.length > 0)) {
this.timeoutId = setInterval(() => {
this.$panelContainer.toggleClass("flipped");
}, this.panel.flipTime * 1000);