From 31317c4cee7d948ca614b49bb86fed1edd7938f4 Mon Sep 17 00:00:00 2001 From: Yochpaz Yehonatan Date: Sun, 9 Apr 2017 11:20:09 +0300 Subject: [PATCH] * bugfix - thresholds by strings doesn't work --- dist/status_ctrl.js | 27 +++++++++++++++++++++++---- dist/status_ctrl.js.map | 2 +- src/status_ctrl.js | 28 ++++++++++++++++++++++++---- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/dist/status_ctrl.js b/dist/status_ctrl.js index 1e4c0d81..93b3d094 100644 --- a/dist/status_ctrl.js +++ b/dist/status_ctrl.js @@ -407,13 +407,32 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi value: function parseThresholds(metricOptions) { var res = {}; - res.warn = metricOptions.warn; - res.warnIsNumber = angular.isNumber(res.warn); - res.crit = metricOptions.crit; - res.critIsNumber = angular.isNumber(res.crit); + res.warnIsNumber = StatusPluginCtrl.isFloat(metricOptions.warn); + if (res.warnIsNumber) { + res.warn = parseFloat(metricOptions.warn); + } else { + res.warn = metricOptions.warn; + } + + res.critIsNumber = StatusPluginCtrl.isFloat(metricOptions.crit); + if (res.critIsNumber) { + res.crit = parseFloat(metricOptions.crit); + } else { + res.crit = metricOptions.crit; + } return res; } + }, { + key: "isFloat", + value: function isFloat(val) { + var floatRegex = /^-?\d+(?:[.,]\d*?)?$/; + if (!floatRegex.test(val)) return false; + + val = parseFloat(val); + if (isNaN(val)) return false; + return true; + } }, { key: "seriesHandler", value: function seriesHandler(seriesData) { diff --git a/dist/status_ctrl.js.map b/dist/status_ctrl.js.map index 925f718d..74f0595d 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","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 +{"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","isFloat","parseFloat","val","floatRegex","test","seriesData","flotpairs","getFlotPairs","templateUrl"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAQA,mB,kBAAAA,gB;;AAGDC,I;;AACAC,a;;AACAC,a;;;;;;;;;;;;;;;;;;;;;+BAIMC,gB;;;AACZ;AACA,8BAAYC,MAAZ,EAAoBC,SAApB,EAA+BC,IAA/B,EAAqCC,OAArC,EAA8CC,cAA9C,EAA8D;AAAA;;AAAA,qIACvDJ,MADuD,EAC/CC,SAD+C;;AAG7D;AACA,WAAKI,MAAL,GAAcF,OAAd;;AAEA,WAAKG,aAAL,GAAqB,CAAC,WAAD,EAAc,kBAAd,EAAkC,WAAlC,CAArB;AACA,WAAKC,YAAL,GAAoB,CAAC,MAAD,EAAS,OAAT,EAAkB,KAAlB,EAAyB,KAAzB,EAAgC,KAAhC,EAAuC,KAAvC,CAApB;AACA,WAAKC,YAAL,GAAoB,CAAC,SAAD,EAAY,YAAZ,CAApB;;AAEA,WAAKC,KAAL,CAAWC,QAAX,GAAsB,MAAKD,KAAL,CAAWC,QAAX,IAAuB,CAA7C;;AAEA;AACA,WAAKC,MAAL,CAAYC,EAAZ,CAAe,QAAf,EAAyB,MAAKC,QAAL,CAAcC,IAAd,OAAzB;AACA,WAAKH,MAAL,CAAYC,EAAZ,CAAe,SAAf,EAA0B,MAAKG,WAAL,CAAiBD,IAAjB,OAA1B;AACA,WAAKH,MAAL,CAAYC,EAAZ,CAAe,YAAf,EAA6B,MAAKI,WAAL,CAAiBF,IAAjB,OAA7B;AACA,WAAKH,MAAL,CAAYC,EAAZ,CAAe,eAAf,EAAgC,MAAKK,cAAL,CAAoBH,IAApB,OAAhC;AACA,WAAKH,MAAL,CAAYC,EAAZ,CAAe,oBAAf,EAAqC,MAAKK,cAAL,CAAoBH,IAApB,OAArC;AACA,WAAKH,MAAL,CAAYC,EAAZ,CAAe,gBAAf,EAAiC,MAAKM,cAAL,CAAoBJ,IAApB,OAAjC;;AAEA,WAAKK,UAAL;AApB6D;AAqB7D;;;;kCAEY;AAAA;;AACZrB,iBAAWO,MAAX,CAAkB,cAAlB,EAAkC,YAAM;AACvC,WAAIe,qBAAqB,SAArBA,kBAAqB,CAACC,KAAD,EAAW;AACnC,YAAGC,QAAQC,QAAR,CAAiBF,KAAjB,CAAH,EAA4B;AAC3B,gBAAO,OAAKhB,MAAL,CAAY,QAAZ,EAAsBgB,KAAtB,CAAP;AACA,SAFD,MAEO;AACN,gBAAOA,KAAP;AACA;AACD,QAND;;AAQAD,0BAAmBI,SAAnB,GAA+B,IAA/B;AACA,cAAOJ,kBAAP;AACA,OAXD;AAYA;;;mCAEa;AAAA;;AACb,UAAI,KAAKX,KAAL,CAAWgB,SAAf,EAA0B;AACzB,YAAKhB,KAAL,CAAWiB,IAAX,GAAkB,KAAKjB,KAAL,CAAWgB,SAA7B;AACA;;AAED,WAAKE,YAAL,GAAoB,KAAKlB,KAAL,CAAWmB,OAA/B;;AAEA;AACA,WAAKC,UAAL,GAAkB,KAAlB;;AAEA,WAAKF,YAAL,GAAoB/B,EAAES,MAAF,CAAS,KAAKsB,YAAd,EAA4B,UAACG,WAAD,EAAiB;AAChE,cAAO,CAACA,YAAYC,IAApB;AACA,OAFmB,CAApB;;AAIAnC,QAAEoC,IAAF,CAAO,KAAKL,YAAZ,EAA0B,UAACM,CAAD,EAAO;AAChC,WAAIC,MAAMtC,EAAES,MAAF,CAAS,OAAKsB,YAAd,EAA4B,UAACG,WAAD,EAAiB;AACtD,eAAO,CAACG,EAAEE,KAAF,IAAWL,YAAYK,KAAvB,IAAiCF,EAAEG,MAAF,IAAYN,YAAYM,MAAxB,IAAkCH,EAAEG,MAAtE,KAAkF,CAACH,EAAEF,IAA5F;AACA,QAFS,CAAV;;AAIA,WAAIG,IAAIG,MAAJ,GAAa,CAAjB,EAAoB;AACnB,eAAKR,UAAL,GAAkB,IAAlB;AACA;AACD,OARD;AASA;;;sCAEgB;AAChB,WAAKS,YAAL,CAAkB,SAAlB,EAA6B,gDAA7B,EAA+E,CAA/E;AACA;;;wCAEkB;AAClB,WAAKC,eAAL,CAAqBC,IAArB,CAA0B,eAA1B,EAA2CC,GAA3C,CAA+C,YAA/C,EAA6D,KAAKC,eAAL,CAAqBC,MAArB,GAA8B,IAA3F;AACA,WAAKC,SAAL,GAAiB,KAAKF,eAAL,CAAqBC,MAArB,GAA4B,EAA7C;AACA;;;uCAEiB;AACjB,UAAIE,OAAO,IAAX;AACA,UAAIC,aAAa,KAAKP,eAAL,CAAqBQ,UAArB,EAAjB;AACA,UAAIC,MAAMF,UAAN,CAAJ,EACCA,aAAaG,SAASH,WAAWI,KAAX,CAAiB,CAAjB,EAAoB,CAAC,CAArB,CAAT,EAAkC,EAAlC,IAAwC,EAArD;AACDJ,mBAAaA,aAAa,EAA1B;AACA,WAAKK,QAAL,GAAgBL,UAAhB;AACA;;;gCAEU;AAAA;;AACV,WAAKM,gBAAL;AACA,WAAKC,eAAL;AACA,WAAKC,iBAAL;;AAEA,UAAI,KAAK7C,KAAL,CAAW8C,WAAf,EAA4B;AAC3B,YAAK9C,KAAL,CAAW+C,WAAX,GACC,KAAKnD,MAAL,CAAY,yBAAZ,EAAuC,KAAKI,KAAL,CAAW8C,WAAlD,EAA+D,KAAKvD,MAApE,EACEyD,OADF,CACU,IAAIC,MAAJ,CAAW,KAAKjD,KAAL,CAAWkD,UAAtB,EAAkC,GAAlC,CADV,EACkD,EADlD,CADD;AAGA,OAJD,MAIO;AACN,YAAKlD,KAAL,CAAW+C,WAAX,GAAyB,EAAzB;AACA;;AAED,UAAG,KAAK/C,KAAL,CAAWmD,QAAd,EAAuB;AACrB,YAAKrB,eAAL,CAAqBsB,QAArB,CAA8B,cAA9B;AACD,OAFD,MAEO;AACL,YAAKtB,eAAL,CAAqBuB,WAArB,CAAiC,cAAjC;AACD;;AAED,UAAIlC,UAAU,KAAKnB,KAAL,CAAWmB,OAAzB;;AAEA,WAAKmC,IAAL,GAAY,EAAZ;AACA,WAAKC,IAAL,GAAY,EAAZ;AACA,WAAKC,QAAL,GAAgB,EAAhB;AACA,WAAKC,OAAL,GAAe,EAAf;AACA,WAAKC,UAAL,GAAkB,EAAlB;;AAEAvE,QAAEoC,IAAF,CAAO,KAAKoC,MAAZ,EAAoB,UAACC,CAAD,EAAO;AAC1B,WAAIjC,SAASxC,EAAE4C,IAAF,CAAOZ,OAAP,EAAgB,UAACQ,MAAD,EAAY;AACxC,eAAOA,OAAOD,KAAP,IAAgBkC,EAAElC,KAAlB,IAA2BC,OAAOA,MAAP,IAAiBiC,EAAElC,KAArD;AACA,QAFY,CAAb;;AAIA,WAAI,CAACC,MAAL,EAAa;AACZ;AACA;;AAEDiC,SAAElC,KAAF,GAAUC,OAAOD,KAAjB;AACAkC,SAAEC,GAAF,GAAQlC,OAAOkC,GAAf;AACAD,SAAEH,OAAF,GAAY,IAAZ;AACAG,SAAEE,WAAF,GAAgBnC,OAAOmC,WAAvB;;AAEA,WAAIC,cAAJ;AACA,eAAQpC,OAAOqC,WAAf;AACC,aAAK,KAAL;AACCD,iBAAQ5E,EAAE8E,GAAF,CAAML,EAAEM,UAAR,EAAoB,UAACC,KAAD,EAAW;AAAE,iBAAOA,MAAM,CAAN,CAAP;AAAkB,UAAnD,EAAqD,CAArD,CAAR;AACAJ,iBAAQH,EAAEQ,KAAF,CAAQH,GAAhB;AACA;AACD,aAAK,KAAL;AACCF,iBAAQ5E,EAAEkF,GAAF,CAAMT,EAAEM,UAAR,EAAoB,UAACC,KAAD,EAAW;AAAE,iBAAOA,MAAM,CAAN,CAAP;AAAkB,UAAnD,EAAqD,CAArD,CAAR;AACAJ,iBAAQH,EAAEQ,KAAF,CAAQC,GAAhB;AACA;AACD,aAAK,KAAL;AACCN,iBAAQ,CAAR;AACA5E,WAAEoC,IAAF,CAAOqC,EAAEM,UAAT,EAAqB,UAACC,KAAD,EAAW;AAAEJ,mBAASI,MAAM,CAAN,CAAT;AAAmB,UAArD;AACAJ,iBAAQH,EAAEQ,KAAF,CAAQE,KAAhB;AACA;AACD,aAAK,KAAL;AACCP,iBAAQH,EAAEQ,KAAF,CAAQG,GAAhB;AACA;AACD,aAAK,OAAL;AACCR,iBAAQH,EAAEM,UAAF,CAAa,CAAb,EAAgB,CAAhB,CAAR;AACA;AACD;AACCH,iBAAQH,EAAEM,UAAF,CAAaN,EAAEM,UAAF,CAAatC,MAAb,GAAsB,CAAnC,EAAsC,CAAtC,CAAR;AArBF;;AAwBAgC,SAAEY,aAAF,GAAkBT,KAAlB;;AAEA,WAAIpC,OAAO8C,YAAP,IAAuB,WAA3B,EAAwC;AACvC,eAAKC,qBAAL,CAA2Bd,CAA3B,EAA8BjC,MAA9B;AACA,QAFD,MAGK,IAAIA,OAAO8C,YAAP,IAAuB,kBAA3B,EAA+C;AACnD,eAAKE,oBAAL,CAA0Bf,CAA1B,EAA4BjC,MAA5B;AACA,QAFI,MAGA,IAAIA,OAAO8C,YAAP,IAAuB,WAA3B,EAAwC;AAC5C,eAAKG,cAAL,CAAoBhB,CAApB,EAAuBjC,MAAvB;AACA;AACD,OAlDD;;AAoDA,UAAG,KAAK6B,QAAL,CAAc5B,MAAd,GAAuB,CAA1B,EAA6B;AAC5B,YAAK0B,IAAL,GAAY,EAAZ;AACA,YAAKC,IAAL,GAAY,EAAZ;AACA,YAAKE,OAAL,GAAe,EAAf;AACA;;AAED,WAAKoB,QAAL;AACA,WAAKC,gBAAL;AACA,WAAKC,QAAL;AACA;;;yCAEmB;AAAA;;AACnB,UAAI5D,UAAU,KAAKnB,KAAL,CAAWmB,OAAzB;;AAEA;AACAhC,QAAEoC,IAAF,CAAOJ,OAAP,EAAgB,UAACQ,MAAD,EAAY;AAC3B,WAAGA,OAAO8C,YAAP,IAAuB,IAA1B,EAAgC;AAC/B9C,eAAO8C,YAAP,GAAsB9C,OAAOmC,WAA7B;AACA,YAAGnC,OAAO8C,YAAP,IAAuB,YAA1B,EAAwC;AACvC9C,gBAAO8C,YAAP,GAAsB,WAAtB;AACA;AACD9C,eAAOmC,WAAP,GAAqB,OAAK/D,YAAL,CAAkB,CAAlB,CAArB;AACA;AACD,OARD;AASA;;;2CAEqB4D,M,EAAQhC,M,EAAQ;AACrCgC,aAAOqB,UAAP,GAAoB1F,iBAAiB2F,eAAjB,CAAiCtD,MAAjC,CAApB;AACAgC,aAAOuB,QAAP,GAAkBvB,OAAOqB,UAAP,CAAkB1B,IAAlB,GAAyBK,OAAOqB,UAAP,CAAkBzB,IAA7D;AACAI,aAAOF,OAAP,GAAiB9B,OAAO8B,OAAxB;;AAEA,UAAI0B,aAAa,KAAjB;AACA,UAAIC,YAAY,KAAhB;AACA,UAAIC,gBAAgB1B,OAAOqB,UAAP,CAAkBM,YAAlB,IAAkC3B,OAAOqB,UAAP,CAAkBO,YAAxE;AACA,UAAIF,aAAJ,EAAmB;AAClB,WAAI,CAAC1B,OAAOuB,QAAZ,EAAsB;AACrB,YAAIvB,OAAOa,aAAP,IAAwBb,OAAOqB,UAAP,CAAkB1B,IAA9C,EAAoD;AACnD6B,sBAAa,IAAb;AACA,SAFD,MAEO,IAAIxB,OAAOa,aAAP,IAAwBb,OAAOqB,UAAP,CAAkBzB,IAA9C,EAAoD;AAC1D6B,qBAAY,IAAZ;AACA;AACD,QAND,MAMO;AACN,YAAIzB,OAAOa,aAAP,IAAwBb,OAAOqB,UAAP,CAAkB1B,IAA9C,EAAoD;AACnD6B,sBAAa,IAAb;AACA,SAFD,MAEO,IAAIxB,OAAOa,aAAP,IAAwBb,OAAOqB,UAAP,CAAkBzB,IAA9C,EAAoD;AAC1D6B,qBAAY,IAAZ;AACA;AACD;AACD,OAdD,MAcO;AACN,WAAIzB,OAAOa,aAAP,IAAwBb,OAAOqB,UAAP,CAAkB1B,IAA9C,EAAoD;AACnD6B,qBAAa,IAAb;AACA,QAFD,MAEO,IAAIxB,OAAOa,aAAP,IAAwBb,OAAOqB,UAAP,CAAkBzB,IAA9C,EAAoD;AAC1D6B,oBAAY,IAAZ;AACA;AACD;;AAED,UAAGD,UAAH,EAAe;AACd,YAAK7B,IAAL,CAAUkC,IAAV,CAAe7B,MAAf;AACAA,cAAOG,WAAP,GAAqB,KAAK/D,YAAL,CAAkB,CAAlB,CAArB;AACA,OAHD,MAGO,IAAGqF,SAAH,EAAc;AACpB,YAAK7B,IAAL,CAAUiC,IAAV,CAAe7B,MAAf;AACAA,cAAOG,WAAP,GAAqB,KAAK/D,YAAL,CAAkB,CAAlB,CAArB;AACA,OAHM,MAGA,IAAI4D,OAAOF,OAAX,EAAoB;AAC1B,WAAGE,OAAOG,WAAP,IAAsB,YAAzB,EAAuC;AACtC,aAAKJ,UAAL,CAAgB8B,IAAhB,CAAqB7B,MAArB;AACA,QAFD,MAEO;AACN,aAAKF,OAAL,CAAa+B,IAAb,CAAkB7B,MAAlB;AACA;AACD;AACD;;;0CAEoBA,M,EAAQhC,M,EAAQ;AACpCgC,aAAOG,WAAP,GAAqB,KAAK/D,YAAL,CAAkB,CAAlB,CAArB;AACA4D,aAAO8B,aAAP,GAAuB9D,OAAO8D,aAA9B;;AAEA,UAAI9B,OAAOa,aAAP,IAAwBb,OAAO8B,aAAnC,EAAkD;AACjD,YAAKjC,QAAL,CAAcgC,IAAd,CAAmB7B,MAAnB;AACA;AACD;;;oCAEcA,M,EAAQhC,M,EAAQ;AAC9B,UAAGgC,OAAOG,WAAP,IAAsB,YAAzB,EAAuC;AACtC,YAAKJ,UAAL,CAAgB8B,IAAhB,CAAqB7B,MAArB;AACA,OAFD,MAEO;AACN,YAAKF,OAAL,CAAa+B,IAAb,CAAkB7B,MAAlB;AACA;AACD;;;wCAEkB;AAClB,WAAK7B,eAAL,CAAqBuB,WAArB,CAAiC,8DAAjC;;AAEA,UAAG,KAAKjC,UAAR,EAAoB;AACnB,YAAKU,eAAL,CAAqBsB,QAArB,CAA8B,aAA9B;AACA,OAFD,MAEO,IAAI,KAAKI,QAAL,CAAc5B,MAAd,GAAuB,CAA3B,EAA8B;AACpC,YAAKE,eAAL,CAAqBsB,QAArB,CAA8B,gBAA9B;AACA,OAFM,MAEA,IAAI,KAAKE,IAAL,CAAU1B,MAAV,GAAmB,CAAvB,EAA0B;AAChC,YAAKE,eAAL,CAAqBsB,QAArB,CAA8B,aAA9B;AACA,OAFM,MAEA,IAAI,KAAKG,IAAL,CAAU3B,MAAV,GAAmB,CAAvB,EAA0B;AAChC,YAAKE,eAAL,CAAqBsB,QAArB,CAA8B,YAA9B;AACA,OAFM,MAEA,IAAG,CAAC,KAAKO,MAAL,IAAe+B,SAAf,IAA4B,KAAK/B,MAAL,CAAY/B,MAAZ,IAAsB,CAAnD,KAAyD,KAAK5B,KAAL,CAAW2F,cAAvE,EAAuF;AAC7F,YAAK7D,eAAL,CAAqBsB,QAArB,CAA8B,eAA9B;AACA,OAFM,MAEA;AACN,YAAKtB,eAAL,CAAqBsB,QAArB,CAA8B,UAA9B;AACA;AACD;;;gCAEU;AACV,UAAI,KAAKpD,KAAL,CAAW4F,KAAX,IAAoB,KAAK5F,KAAL,CAAW4F,KAAX,CAAiBhE,MAAjB,GAA0B,CAAlD,EAAqD;AACpD,YAAKiE,GAAL,GAAW,KAAK7F,KAAL,CAAW4F,KAAX,CAAiB,CAAjB,EAAoBE,OAApB,GAA8B,GAA9B,GAAoC,KAAK9F,KAAL,CAAW4F,KAAX,CAAiB,CAAjB,EAAoBG,MAAnE;AACA,OAFD,MAEO;AACN,YAAKF,GAAL,GAAWH,SAAX;AACA;AACD;;;oCAiCcM,Q,EAAU;AACxB,WAAKrC,MAAL,GAAcqC,SAASC,GAAT,CAAa3G,iBAAiB4G,aAAjB,CAA+B7F,IAA/B,CAAoC,IAApC,CAAb,CAAd;AACA,WAAK8F,MAAL;AACA;;;mCAEa;AACb,WAAK7C,IAAL,GAAY,EAAZ;AACA,WAAKC,IAAL,GAAY,EAAZ;AACA;;;kCAaY;AACZ,UAAG,KAAK6C,SAAR,EAAmBC,cAAc,KAAKD,SAAnB;AACnB;;;gCAEU;AAAA;;AACV,UAAI,KAAKA,SAAT,EAAoBC,cAAc,KAAKD,SAAnB;AACpB,UAAI,KAAKpG,KAAL,CAAWmD,QAAX,KAAwB,KAAKG,IAAL,CAAU1B,MAAV,GAAmB,CAAnB,IAAwB,KAAK2B,IAAL,CAAU3B,MAAV,GAAmB,CAA3C,IAAgD,KAAK4B,QAAL,CAAc5B,MAAd,GAAuB,CAA/F,CAAJ,EAAuG;AACtG,YAAKwE,SAAL,GAAiBE,YAAY,YAAM;AAClC,eAAKxE,eAAL,CAAqByE,WAArB,CAAiC,SAAjC;AACA,QAFgB,EAEd,KAAKvG,KAAL,CAAWC,QAAX,GAAsB,IAFR,CAAjB;AAGA;AACD;;;0BAEIuG,K,EAAOC,I,EAAMC,K,EAAOC,I,EAAM;AAC9B,WAAK7E,eAAL,GAAuB2E,KAAK1E,IAAL,CAAU,kBAAV,CAAvB;AACA,WAAKD,eAAL,CAAqBsB,QAArB,CAA8B,SAA9B;AACA,WAAKnB,eAAL,GAAuB0E,IAAvB;AACA;;;qCArEsBC,a,EAAe;AACrC,UAAInF,MAAM,EAAV;;AAEAA,UAAI6D,YAAJ,GAAmBhG,iBAAiBuH,OAAjB,CAAyBD,cAAcrD,IAAvC,CAAnB;AACA,UAAG9B,IAAI6D,YAAP,EAAqB;AACpB7D,WAAI8B,IAAJ,GAAWuD,WAAWF,cAAcrD,IAAzB,CAAX;AACA,OAFD,MAEO;AACN9B,WAAI8B,IAAJ,GAAWqD,cAAcrD,IAAzB;AACA;;AAED9B,UAAI8D,YAAJ,GAAmBjG,iBAAiBuH,OAAjB,CAAyBD,cAActD,IAAvC,CAAnB;AACA,UAAG7B,IAAI8D,YAAP,EAAqB;AACpB9D,WAAI6B,IAAJ,GAAWwD,WAAWF,cAActD,IAAzB,CAAX;AACA,OAFD,MAEO;AACN7B,WAAI6B,IAAJ,GAAWsD,cAActD,IAAzB;AACA;;AAED,aAAO7B,GAAP;AACA;;;6BAEcsF,G,EAAK;AACnB,UAAIC,aAAa,sBAAjB;AACA,UAAI,CAACA,WAAWC,IAAX,CAAgBF,GAAhB,CAAL,EACC,OAAO,KAAP;;AAEDA,YAAMD,WAAWC,GAAX,CAAN;AACA,UAAIxE,MAAMwE,GAAN,CAAJ,EACC,OAAO,KAAP;AACD,aAAO,IAAP;AACA;;;mCAYoBG,U,EAAY;AAChC,UAAIvD,SAAS,IAAIvE,UAAJ,CAAe;AAC3B8E,mBAAYgD,WAAWhD,UADI;AAE3BxC,cAAOwF,WAAWvF;AAFS,OAAf,CAAb;;AAKAgC,aAAOwD,SAAP,GAAmBxD,OAAOyD,YAAP,CAAoB,WAApB,CAAnB;;AAEA,aAAOzD,MAAP;AACA;;;;KAtUoCzE,gB;;;;AA4VtCI,oBAAiB+H,WAAjB,GAA+B,aAA/B","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.warnIsNumber = StatusPluginCtrl.isFloat(metricOptions.warn)\n\t\tif(res.warnIsNumber) {\n\t\t\tres.warn = parseFloat(metricOptions.warn);\n\t\t} else {\n\t\t\tres.warn = metricOptions.warn;\n\t\t}\n\n\t\tres.critIsNumber = StatusPluginCtrl.isFloat(metricOptions.crit);\n\t\tif(res.critIsNumber) {\n\t\t\tres.crit = parseFloat(metricOptions.crit);\n\t\t} else {\n\t\t\tres.crit = metricOptions.crit;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tstatic isFloat(val) {\n\t\tvar floatRegex = /^-?\\d+(?:[.,]\\d*?)?$/;\n\t\tif (!floatRegex.test(val))\n\t\t\treturn false;\n\n\t\tval = parseFloat(val);\n\t\tif (isNaN(val))\n\t\t\treturn false;\n\t\treturn true;\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/status_ctrl.js b/src/status_ctrl.js index 9d0b93d0..43da09af 100644 --- a/src/status_ctrl.js +++ b/src/status_ctrl.js @@ -286,14 +286,34 @@ export class StatusPluginCtrl extends MetricsPanelCtrl { static parseThresholds(metricOptions) { let res = {}; - res.warn = metricOptions.warn; - res.warnIsNumber = angular.isNumber(res.warn); - res.crit = metricOptions.crit; - res.critIsNumber = angular.isNumber(res.crit); + res.warnIsNumber = StatusPluginCtrl.isFloat(metricOptions.warn) + if(res.warnIsNumber) { + res.warn = parseFloat(metricOptions.warn); + } else { + res.warn = metricOptions.warn; + } + + res.critIsNumber = StatusPluginCtrl.isFloat(metricOptions.crit); + if(res.critIsNumber) { + res.crit = parseFloat(metricOptions.crit); + } else { + res.crit = metricOptions.crit; + } return res; } + static isFloat(val) { + var floatRegex = /^-?\d+(?:[.,]\d*?)?$/; + if (!floatRegex.test(val)) + return false; + + val = parseFloat(val); + if (isNaN(val)) + return false; + return true; + } + onDataReceived(dataList) { this.series = dataList.map(StatusPluginCtrl.seriesHandler.bind(this)); this.render();