From 02dc1dade56e05cd6ae5b5e0133baadd3013b435 Mon Sep 17 00:00:00 2001 From: Mohammad Saboorian Date: Sat, 4 Feb 2017 14:15:43 +0330 Subject: [PATCH] always refresh if the previous rate calc failed --- README.md | 3 +++ dist/README.md | 3 +++ dist/ctrl.js | 8 ++++++-- dist/ctrl.js.map | 2 +- dist/plugin.json | 4 ++-- src/ctrl.js | 10 +++++++--- src/plugin.json | 4 ++-- 7 files changed, 24 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5a3dd01..163fffe 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,9 @@ This panel is based on [FlipClock](http://flipclockjs.com/) and built upon [Graf #### Changelog +##### v0.0.4 +- Always refresh if the previous rate calculation failed + ##### v0.0.3 - Throttle refresh frequency diff --git a/dist/README.md b/dist/README.md index 5a3dd01..163fffe 100644 --- a/dist/README.md +++ b/dist/README.md @@ -51,6 +51,9 @@ This panel is based on [FlipClock](http://flipclockjs.com/) and built upon [Graf #### Changelog +##### v0.0.4 +- Always refresh if the previous rate calculation failed + ##### v0.0.3 - Throttle refresh frequency diff --git a/dist/ctrl.js b/dist/ctrl.js index 4fc5eae..02d6ea7 100644 --- a/dist/ctrl.js +++ b/dist/ctrl.js @@ -124,6 +124,7 @@ System.register(['app/plugins/sdk', 'lodash', 'jquery', 'app/core/utils/kbn', 'a }); _this.statChangeInterval = null; _this.lastRefreshTime = new Date(2016, 1, 1, 1, 1, 1); + _this.refreshRate = 0; _this.newData = false; _this.events.on('init-edit-mode', _this.onInitEditMode.bind(_this)); _this.events.on('render', _this.onRender.bind(_this)); @@ -222,14 +223,17 @@ System.register(['app/plugins/sdk', 'lodash', 'jquery', 'app/core/utils/kbn', 'a var timeDiff = lastPoint[1] - prevPoint[1]; var rate = Math.floor(timeDiff / lastPoint[0]); this.statCounter.setTime(whole - lastPoint[0]); + if (this.statChangeInterval) clearInterval(this.statChangeInterval); if (rate > 0) { - if (this.statChangeInterval) clearInterval(this.statChangeInterval); var sc = this.statCounter; if (isFinite(rate)) { + this.refreshRate = rate; this.statChangeInterval = setInterval(function () { //for (var i=0; i<7; i++) sc.increment(); }, rate); + } else { + this.refreshRate = 0; } } } @@ -430,7 +434,7 @@ System.register(['app/plugins/sdk', 'lodash', 'jquery', 'app/core/utils/kbn', 'a this.data = data; var now = Date.now(); - if (Math.floor(now - this.lastRefreshTime) >= this.panel.refreshMinSec * 1000) { + if (this.refreshRate === 0 || Math.floor(now - this.lastRefreshTime) >= this.panel.refreshMinSec * 1000) { this.newData = true; this.lastRefreshTime = now; this.render(); diff --git a/dist/ctrl.js.map b/dist/ctrl.js.map index 1ea8d1d..53c3f45 100644 --- a/dist/ctrl.js.map +++ b/dist/ctrl.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/ctrl.js"],"names":["getColorForValue","data","value","i","thresholds","length","colorMap","_","first","MetricsPanelCtrl","$","kbn","config","TimeSeries","panelDefaults","fontSizes","fontTypes","unitFormats","getUnitFormats","operatorNameOptions","valueMaps","op","text","mappingTypes","name","rangeMaps","from","to","mappingType","colors","decimals","format","operatorName","refreshMinSec","CounterPanelCtrl","$scope","$injector","alertSrv","defaults","panel","scoperef","alertSrvRef","initialized","panelContainer","panelWidth","panelHeight","valueFormatted","valueRounded","series","statCounter","FlipClock","elem","clockFace","countdown","statChangeInterval","lastRefreshTime","Date","newData","events","on","onInitEditMode","bind","onRender","onDataReceived","onDataError","panels","grafanaBootData","settings","thisPanel","pluginId","thisPanelPath","baseUrl","optionsPath","addEditorTab","container","tmpPanelWidth","clientWidth","getPanelHeight","actualWidth","tmpPanelHeight","ctrl","height","row","replace","actualHeight","parseInt","parentElem","find","css","children","angular","element","size","datapoints","dataPoints","whole","lastPoint","prevPoint","timeDiff","rate","Math","floor","setTime","clearInterval","sc","isFinite","setInterval","increment","map","index","indexOf","splice","render","push","rangeMap","scope","attrs","$panelContainer","setContainer","isNumber","scaledDecimals","delta","dec","log","LN10","magn","pow","norm","result","max","flotpairs","error","Error","message","JSON","stringify","last","lastValue","isArray","alias","isString","escape","stats","decimalInfo","getDecimalsForValue","formatFunc","valueFormats","roundValue","scopedVars","__name","label","parseFloat","j","subItem","err","dataList","seriesHandler","setValues","now","seriesData","target","getFlotPairs","nullPointMode","tmp","templateUrl"],"mappings":"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","file":"ctrl.js","sourcesContent":["import { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport kbn from 'app/core/utils/kbn';\nimport config from 'app/core/config';\nimport TimeSeries from 'app/core/time_series2';\nimport './css/counter.css!';\nimport './external/flipclock.css!';\nimport './external/flipclock.min.js';\n\nconst panelDefaults = {\n fontSizes: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70],\n fontTypes: [\n 'Arial', 'Avant Garde', 'Bookman',\n 'Consolas', 'Courier', 'Courier New',\n 'Garamond', 'Helvetica', 'Open Sans',\n 'Palatino', 'Times', 'Times New Roman',\n 'Verdana'\n ],\n unitFormats: kbn.getUnitFormats(),\n operatorNameOptions: ['min', 'max', 'avg', 'current', 'total', 'name'],\n valueMaps: [\n { value: 'null', op: '=', text: 'N/A' }\n ],\n mappingTypes: [\n { name: 'value to text', value: 1 },\n { name: 'range to text', value: 2 },\n ],\n rangeMaps: [\n { from: 'null', to: 'null', text: 'N/A' }\n ],\n mappingType: 1,\n thresholds: '',\n colors: [\"rgba(245, 54, 54, 0.9)\", \"rgba(237, 129, 40, 0.89)\", \"rgba(50, 172, 45, 0.97)\"],\n decimals: 2, // decimal precision\n format: 'none', // unit format\n operatorName: 'total', // operator applied to time series\n refreshMinSec: 60\n //digitColor: \"#ccc\",\n //backColor: \"rgb(147, 238, 132)\",\n};\n\nclass CounterPanelCtrl extends MetricsPanelCtrl {\n\n constructor($scope, $injector, alertSrv) {\n super($scope, $injector);\n // merge existing settings with our defaults\n _.defaults(this.panel, panelDefaults);\n this.scoperef = $scope;\n this.alertSrvRef = alertSrv;\n this.initialized = false;\n this.panelContainer = null;\n this.panelWidth = null;\n this.panelHeight = null;\n this.data = {\n value: 0,\n valueFormatted: 0,\n valueRounded: 0\n };\n this.series = [];\n this.statCounter = new FlipClock(this.elem, 0, {\n clockFace: 'Counter',\n countdown: true\n });\n this.statChangeInterval = null;\n this.lastRefreshTime = new Date(2016, 1, 1, 1, 1, 1);\n this.newData = false;\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('render', this.onRender.bind(this));\n this.events.on('data-received', this.onDataReceived.bind(this));\n this.events.on('data-error', this.onDataError.bind(this));\n this.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n }\n\n onInitEditMode() {\n var panels = grafanaBootData.settings.panels;\n var thisPanel = panels[this.pluginId];\n var thisPanelPath = thisPanel.baseUrl + '/';\n var optionsPath = thisPanelPath + 'partials/editor.options.html';\n this.addEditorTab('Options', optionsPath, 2);\n }\n\n /**\n * [setContainer description]\n * @param {[type]} container [description]\n */\n setContainer(container) {\n this.panelContainer = container;\n }\n\n getPanelWidth() {\n // with a full sized panel, this comes back as zero, so calculate from the div panel instead\n //debugger;\n var tmpPanelWidth = this.panelContainer[0].clientWidth;\n if (tmpPanelWidth === 0) {\n // just use the height...\n tmpPanelWidth = this.getPanelHeight();\n tmpPanelWidth -= 24;\n if (tmpPanelWidth < 250) {\n tmpPanelWidth = 250;\n }\n return tmpPanelWidth;\n //var tmpPanelWidthCSS = $(\"div.panel\").css(\"width\");\n //var tmpPanelWidthPx = tmpPanelWidthCSS.replace(\"px\",\"\");\n //tmpPanelWidth = parseInt(tmpPanelWidthPx);\n }\n var actualWidth = tmpPanelWidth;\n return actualWidth;\n }\n\n getPanelHeight() {\n // panel can have a fixed height via options\n var tmpPanelHeight = this.$scope.ctrl.panel.height;\n // if that is blank, try to get it from our row\n if (typeof tmpPanelHeight === 'undefined') {\n // get from the row instead\n tmpPanelHeight = this.row.height;\n // default to 250px if that was undefined also\n if (typeof tmpPanelHeight === 'undefined') {\n tmpPanelHeight = 250;\n }\n }\n else {\n // convert to numeric value\n tmpPanelHeight = tmpPanelHeight.replace(\"px\", \"\");\n }\n var actualHeight = parseInt(tmpPanelHeight);\n // grafana minimum height for a panel is 250px\n if (actualHeight < 250) {\n actualHeight = 250;\n }\n return actualHeight;\n }\n\n changeRefresh(){\n }\n\n onRender() {\n ///this.setValues(this.data);\n if (typeof this.data.value !== 'undefined') {\n this.parentElem.find('.grafana-stat-counter-value-container').css('height', this.height + 'px');\n if ($('.grafana-stat-counter-value').children().length === 0) {\n this.statCounter = angular.element('.grafana-stat-counter-value').FlipClock(this.data.value, {\n clockFace: 'Counter',\n countdown: true\n });\n }\n// else\n// this.statCounter.setTime(this.data.value);\n\n if (this.newData && typeof this.series[0] !== 'undefined' && _.size(this.series[0].datapoints) > 1) {\n this.newData = false;\n var dataPoints = this.series[0].datapoints;\n var whole = this.data.value;\n //for (var i=0; i 0) {\n if (this.statChangeInterval)\n clearInterval(this.statChangeInterval);\n var sc = this.statCounter;\n if (isFinite(rate)){\n this.statChangeInterval = setInterval(function () {\n //for (var i=0; i<7; i++)\n sc.increment();\n }, rate);\n }\n }\n }\n }\n //setElementHeight();\n\n }\n\n removeValueMap(map) {\n var index = _.indexOf(this.panel.valueMaps, map);\n this.panel.valueMaps.splice(index, 1);\n this.render();\n }\n\n addValueMap() {\n this.panel.valueMaps.push({ value: '', op: '=', text: '' });\n }\n\n removeRangeMap(rangeMap) {\n var index = _.indexOf(this.panel.rangeMaps, rangeMap);\n this.panel.rangeMaps.splice(index, 1);\n this.render();\n }\n\n addRangeMap() {\n this.panel.rangeMaps.push({ from: '', to: '', text: '' });\n }\n\n link(scope, elem, attrs, ctrl) { \n var $panelContainer = elem.find('.panel-container');\n this.parentElem = elem.find('.grafana-stat-counter');\n ctrl.setContainer(this.parentElem);\n this.elem = this.parentElem.find('.grafana-stat-counter-value');\n //ctrl.setContainer(elem.find('.panel-container'));\n\n this.render(); \n }\n\n\n getDecimalsForValue(value) {\n if (_.isNumber(this.panel.decimals)) {\n return { decimals: this.panel.decimals, scaledDecimals: null };\n }\n\n var delta = value / 2;\n var dec = -Math.floor(Math.log(delta) / Math.LN10);\n\n var magn = Math.pow(10, -dec),\n norm = delta / magn, // norm is between 1.0 and 10.0\n size;\n\n if (norm < 1.5) {\n size = 1;\n } else if (norm < 3) {\n size = 2;\n // special case for 2.5, requires an extra decimal\n if (norm > 2.25) {\n size = 2.5;\n ++dec;\n }\n } else if (norm < 7.5) {\n size = 5;\n } else {\n size = 10;\n }\n\n size *= magn;\n\n // reduce starting decimals if not needed\n if (Math.floor(value) === value) { dec = 0; }\n\n var result = {};\n result.decimals = Math.max(0, dec);\n result.scaledDecimals = result.decimals - Math.floor(Math.log(size) / Math.LN10) + 2;\n return result;\n }\n\n setValues(data) {\n data.flotpairs = [];\n if (this.series.length > 1) {\n var error = new Error();\n error.message = 'Multiple Series Error';\n error.data = 'Metric query returns ' + this.series.length +\n ' series. Single Stat Panel expects a single series.\\n\\nResponse:\\n' + JSON.stringify(this.series);\n throw error;\n }\n\n if (this.series && this.series.length > 0) {\n var lastPoint = _.last(this.series[0].datapoints);\n var lastValue = _.isArray(lastPoint) ? lastPoint[0] : null;\n\n if (this.panel.operatorName === 'name') {\n data.value = 0;\n data.valueRounded = 0;\n data.valueFormatted = this.series[0].alias;\n } else if (_.isString(lastValue)) {\n data.value = 0;\n data.valueFormatted = _.escape(lastValue);\n data.valueRounded = 0;\n } else {\n data.value = this.series[0].stats[this.panel.operatorName];\n data.flotpairs = this.series[0].flotpairs;\n var decimalInfo = this.getDecimalsForValue(data.value);\n var formatFunc = kbn.valueFormats[this.panel.format];\n data.valueFormatted = formatFunc(data.value, decimalInfo.decimals, decimalInfo.scaledDecimals);\n data.valueRounded = kbn.roundValue(data.value, decimalInfo.decimals);\n }\n\n // Add $__name variable for using in prefix or postfix\n data.scopedVars = {\n __name: {\n value: this.series[0].label\n }\n };\n }\n\n // check value to text mappings if its enabled\n if (this.panel.mappingType === 1) {\n for (var i = 0; i < this.panel.valueMaps.length; i++) {\n var map = this.panel.valueMaps[i];\n // special null case\n if (map.value === 'null') {\n if (data.value === null || data.value === void 0) {\n data.valueFormatted = map.text;\n return;\n }\n continue;\n }\n\n // value/number to text mapping\n var value = parseFloat(map.value);\n if (value === data.valueRounded) {\n data.valueFormatted = map.text;\n return;\n }\n }\n } else if (this.panel.mappingType === 2) {\n for (var j = 0; j < this.panel.rangeMaps.length; j++) {\n var rangeMap = this.panel.rangeMaps[j];\n // special null case\n if (rangeMap.from === 'null' && rangeMap.to === 'null') {\n if (data.value === null || data.value === void 0) {\n data.valueFormatted = rangeMap.text;\n return;\n }\n continue;\n }\n\n // value/number to range mapping\n var from = parseFloat(rangeMap.from);\n var to = parseFloat(rangeMap.to);\n if (to >= data.valueRounded && from <= data.valueRounded) {\n data.valueFormatted = rangeMap.text;\n return;\n }\n }\n }\n\n if (data.value === null || data.value === void 0) {\n data.valueFormatted = \"no value\";\n }\n }\n\n getValueText() {\n return this.data.valueFormatted;\n }\n\n getValueRounded() {\n return this.data.valueRounded;\n }\n\n setUnitFormat(subItem) {\n this.panel.format = subItem.value;\n this.render();\n }\n\n onDataError(err) {\n this.onDataReceived([]);\n }\n\n onDataReceived(dataList) {\n\n this.series = dataList.map(this.seriesHandler.bind(this));\n var data = {};\n this.setValues(data);\n this.data = data;\n\n var now = Date.now();\n if (Math.floor(now - this.lastRefreshTime) >= this.panel.refreshMinSec*1000){\n this.newData = true;\n this.lastRefreshTime = now;\n this.render();\n }\n }\n\n seriesHandler(seriesData) {\n var series = new TimeSeries({\n datapoints: seriesData.datapoints,\n alias: seriesData.target,\n });\n series.flotpairs = series.getFlotPairs(this.panel.nullPointMode);\n return series;\n }\n\n invertColorOrder() {\n var tmp = this.panel.colors[0];\n this.panel.colors[0] = this.panel.colors[2];\n this.panel.colors[2] = tmp;\n this.render();\n }\n}\n\nfunction getColorForValue(data, value) {\n for (var i = data.thresholds.length; i > 0; i--) {\n if (value >= data.thresholds[i - 1]) {\n return data.colorMap[i];\n }\n }\n return _.first(data.colorMap);\n}\n\nCounterPanelCtrl.templateUrl = 'partials/template.html';\nexport {\n CounterPanelCtrl,\n CounterPanelCtrl as MetricsPanelCtrl\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../src/ctrl.js"],"names":["getColorForValue","data","value","i","thresholds","length","colorMap","_","first","MetricsPanelCtrl","$","kbn","config","TimeSeries","panelDefaults","fontSizes","fontTypes","unitFormats","getUnitFormats","operatorNameOptions","valueMaps","op","text","mappingTypes","name","rangeMaps","from","to","mappingType","colors","decimals","format","operatorName","refreshMinSec","CounterPanelCtrl","$scope","$injector","alertSrv","defaults","panel","scoperef","alertSrvRef","initialized","panelContainer","panelWidth","panelHeight","valueFormatted","valueRounded","series","statCounter","FlipClock","elem","clockFace","countdown","statChangeInterval","lastRefreshTime","Date","refreshRate","newData","events","on","onInitEditMode","bind","onRender","onDataReceived","onDataError","panels","grafanaBootData","settings","thisPanel","pluginId","thisPanelPath","baseUrl","optionsPath","addEditorTab","container","tmpPanelWidth","clientWidth","getPanelHeight","actualWidth","tmpPanelHeight","ctrl","height","row","replace","actualHeight","parseInt","parentElem","find","css","children","angular","element","size","datapoints","dataPoints","whole","lastPoint","prevPoint","timeDiff","rate","Math","floor","setTime","clearInterval","sc","isFinite","setInterval","increment","map","index","indexOf","splice","render","push","rangeMap","scope","attrs","$panelContainer","setContainer","isNumber","scaledDecimals","delta","dec","log","LN10","magn","pow","norm","result","max","flotpairs","error","Error","message","JSON","stringify","last","lastValue","isArray","alias","isString","escape","stats","decimalInfo","getDecimalsForValue","formatFunc","valueFormats","roundValue","scopedVars","__name","label","parseFloat","j","subItem","err","dataList","seriesHandler","setValues","now","seriesData","target","getFlotPairs","nullPointMode","tmp","templateUrl"],"mappings":"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","file":"ctrl.js","sourcesContent":["import { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport kbn from 'app/core/utils/kbn';\nimport config from 'app/core/config';\nimport TimeSeries from 'app/core/time_series2';\nimport './css/counter.css!';\nimport './external/flipclock.css!';\nimport './external/flipclock.min.js';\n\nconst panelDefaults = {\n fontSizes: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70],\n fontTypes: [\n 'Arial', 'Avant Garde', 'Bookman',\n 'Consolas', 'Courier', 'Courier New',\n 'Garamond', 'Helvetica', 'Open Sans',\n 'Palatino', 'Times', 'Times New Roman',\n 'Verdana'\n ],\n unitFormats: kbn.getUnitFormats(),\n operatorNameOptions: ['min', 'max', 'avg', 'current', 'total', 'name'],\n valueMaps: [\n { value: 'null', op: '=', text: 'N/A' }\n ],\n mappingTypes: [\n { name: 'value to text', value: 1 },\n { name: 'range to text', value: 2 },\n ],\n rangeMaps: [\n { from: 'null', to: 'null', text: 'N/A' }\n ],\n mappingType: 1,\n thresholds: '',\n colors: [\"rgba(245, 54, 54, 0.9)\", \"rgba(237, 129, 40, 0.89)\", \"rgba(50, 172, 45, 0.97)\"],\n decimals: 2, // decimal precision\n format: 'none', // unit format\n operatorName: 'total', // operator applied to time series\n refreshMinSec: 60\n //digitColor: \"#ccc\",\n //backColor: \"rgb(147, 238, 132)\",\n};\n\nclass CounterPanelCtrl extends MetricsPanelCtrl {\n\n constructor($scope, $injector, alertSrv) {\n super($scope, $injector);\n // merge existing settings with our defaults\n _.defaults(this.panel, panelDefaults);\n this.scoperef = $scope;\n this.alertSrvRef = alertSrv;\n this.initialized = false;\n this.panelContainer = null;\n this.panelWidth = null;\n this.panelHeight = null;\n this.data = {\n value: 0,\n valueFormatted: 0,\n valueRounded: 0\n };\n this.series = [];\n this.statCounter = new FlipClock(this.elem, 0, {\n clockFace: 'Counter',\n countdown: true\n });\n this.statChangeInterval = null;\n this.lastRefreshTime = new Date(2016, 1, 1, 1, 1, 1);\n this.refreshRate = 0;\n this.newData = false;\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('render', this.onRender.bind(this));\n this.events.on('data-received', this.onDataReceived.bind(this));\n this.events.on('data-error', this.onDataError.bind(this));\n this.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n }\n\n onInitEditMode() {\n var panels = grafanaBootData.settings.panels;\n var thisPanel = panels[this.pluginId];\n var thisPanelPath = thisPanel.baseUrl + '/';\n var optionsPath = thisPanelPath + 'partials/editor.options.html';\n this.addEditorTab('Options', optionsPath, 2);\n }\n\n /**\n * [setContainer description]\n * @param {[type]} container [description]\n */\n setContainer(container) {\n this.panelContainer = container;\n }\n\n getPanelWidth() {\n // with a full sized panel, this comes back as zero, so calculate from the div panel instead\n //debugger;\n var tmpPanelWidth = this.panelContainer[0].clientWidth;\n if (tmpPanelWidth === 0) {\n // just use the height...\n tmpPanelWidth = this.getPanelHeight();\n tmpPanelWidth -= 24;\n if (tmpPanelWidth < 250) {\n tmpPanelWidth = 250;\n }\n return tmpPanelWidth;\n //var tmpPanelWidthCSS = $(\"div.panel\").css(\"width\");\n //var tmpPanelWidthPx = tmpPanelWidthCSS.replace(\"px\",\"\");\n //tmpPanelWidth = parseInt(tmpPanelWidthPx);\n }\n var actualWidth = tmpPanelWidth;\n return actualWidth;\n }\n\n getPanelHeight() {\n // panel can have a fixed height via options\n var tmpPanelHeight = this.$scope.ctrl.panel.height;\n // if that is blank, try to get it from our row\n if (typeof tmpPanelHeight === 'undefined') {\n // get from the row instead\n tmpPanelHeight = this.row.height;\n // default to 250px if that was undefined also\n if (typeof tmpPanelHeight === 'undefined') {\n tmpPanelHeight = 250;\n }\n }\n else {\n // convert to numeric value\n tmpPanelHeight = tmpPanelHeight.replace(\"px\", \"\");\n }\n var actualHeight = parseInt(tmpPanelHeight);\n // grafana minimum height for a panel is 250px\n if (actualHeight < 250) {\n actualHeight = 250;\n }\n return actualHeight;\n }\n\n changeRefresh(){\n }\n\n onRender() {\n ///this.setValues(this.data);\n if (typeof this.data.value !== 'undefined') {\n this.parentElem.find('.grafana-stat-counter-value-container').css('height', this.height + 'px');\n if ($('.grafana-stat-counter-value').children().length === 0) {\n this.statCounter = angular.element('.grafana-stat-counter-value').FlipClock(this.data.value, {\n clockFace: 'Counter',\n countdown: true\n });\n }\n// else\n// this.statCounter.setTime(this.data.value);\n\n if (this.newData && typeof this.series[0] !== 'undefined' && _.size(this.series[0].datapoints) > 1) {\n this.newData = false;\n var dataPoints = this.series[0].datapoints;\n var whole = this.data.value;\n //for (var i=0; i 0) {\n var sc = this.statCounter;\n if (isFinite(rate)){\n this.refreshRate = rate;\n this.statChangeInterval = setInterval(function () {\n //for (var i=0; i<7; i++)\n sc.increment();\n }, rate);\n }else{\n this.refreshRate = 0;\n }\n }\n }\n }\n //setElementHeight();\n\n }\n\n removeValueMap(map) {\n var index = _.indexOf(this.panel.valueMaps, map);\n this.panel.valueMaps.splice(index, 1);\n this.render();\n }\n\n addValueMap() {\n this.panel.valueMaps.push({ value: '', op: '=', text: '' });\n }\n\n removeRangeMap(rangeMap) {\n var index = _.indexOf(this.panel.rangeMaps, rangeMap);\n this.panel.rangeMaps.splice(index, 1);\n this.render();\n }\n\n addRangeMap() {\n this.panel.rangeMaps.push({ from: '', to: '', text: '' });\n }\n\n link(scope, elem, attrs, ctrl) { \n var $panelContainer = elem.find('.panel-container');\n this.parentElem = elem.find('.grafana-stat-counter');\n ctrl.setContainer(this.parentElem);\n this.elem = this.parentElem.find('.grafana-stat-counter-value');\n //ctrl.setContainer(elem.find('.panel-container'));\n\n this.render(); \n }\n\n\n getDecimalsForValue(value) {\n if (_.isNumber(this.panel.decimals)) {\n return { decimals: this.panel.decimals, scaledDecimals: null };\n }\n\n var delta = value / 2;\n var dec = -Math.floor(Math.log(delta) / Math.LN10);\n\n var magn = Math.pow(10, -dec),\n norm = delta / magn, // norm is between 1.0 and 10.0\n size;\n\n if (norm < 1.5) {\n size = 1;\n } else if (norm < 3) {\n size = 2;\n // special case for 2.5, requires an extra decimal\n if (norm > 2.25) {\n size = 2.5;\n ++dec;\n }\n } else if (norm < 7.5) {\n size = 5;\n } else {\n size = 10;\n }\n\n size *= magn;\n\n // reduce starting decimals if not needed\n if (Math.floor(value) === value) { dec = 0; }\n\n var result = {};\n result.decimals = Math.max(0, dec);\n result.scaledDecimals = result.decimals - Math.floor(Math.log(size) / Math.LN10) + 2;\n return result;\n }\n\n setValues(data) {\n data.flotpairs = [];\n if (this.series.length > 1) {\n var error = new Error();\n error.message = 'Multiple Series Error';\n error.data = 'Metric query returns ' + this.series.length +\n ' series. Single Stat Panel expects a single series.\\n\\nResponse:\\n' + JSON.stringify(this.series);\n throw error;\n }\n\n if (this.series && this.series.length > 0) {\n var lastPoint = _.last(this.series[0].datapoints);\n var lastValue = _.isArray(lastPoint) ? lastPoint[0] : null;\n\n if (this.panel.operatorName === 'name') {\n data.value = 0;\n data.valueRounded = 0;\n data.valueFormatted = this.series[0].alias;\n } else if (_.isString(lastValue)) {\n data.value = 0;\n data.valueFormatted = _.escape(lastValue);\n data.valueRounded = 0;\n } else {\n data.value = this.series[0].stats[this.panel.operatorName];\n data.flotpairs = this.series[0].flotpairs;\n var decimalInfo = this.getDecimalsForValue(data.value);\n var formatFunc = kbn.valueFormats[this.panel.format];\n data.valueFormatted = formatFunc(data.value, decimalInfo.decimals, decimalInfo.scaledDecimals);\n data.valueRounded = kbn.roundValue(data.value, decimalInfo.decimals);\n }\n\n // Add $__name variable for using in prefix or postfix\n data.scopedVars = {\n __name: {\n value: this.series[0].label\n }\n };\n }\n\n // check value to text mappings if its enabled\n if (this.panel.mappingType === 1) {\n for (var i = 0; i < this.panel.valueMaps.length; i++) {\n var map = this.panel.valueMaps[i];\n // special null case\n if (map.value === 'null') {\n if (data.value === null || data.value === void 0) {\n data.valueFormatted = map.text;\n return;\n }\n continue;\n }\n\n // value/number to text mapping\n var value = parseFloat(map.value);\n if (value === data.valueRounded) {\n data.valueFormatted = map.text;\n return;\n }\n }\n } else if (this.panel.mappingType === 2) {\n for (var j = 0; j < this.panel.rangeMaps.length; j++) {\n var rangeMap = this.panel.rangeMaps[j];\n // special null case\n if (rangeMap.from === 'null' && rangeMap.to === 'null') {\n if (data.value === null || data.value === void 0) {\n data.valueFormatted = rangeMap.text;\n return;\n }\n continue;\n }\n\n // value/number to range mapping\n var from = parseFloat(rangeMap.from);\n var to = parseFloat(rangeMap.to);\n if (to >= data.valueRounded && from <= data.valueRounded) {\n data.valueFormatted = rangeMap.text;\n return;\n }\n }\n }\n\n if (data.value === null || data.value === void 0) {\n data.valueFormatted = \"no value\";\n }\n }\n\n getValueText() {\n return this.data.valueFormatted;\n }\n\n getValueRounded() {\n return this.data.valueRounded;\n }\n\n setUnitFormat(subItem) {\n this.panel.format = subItem.value;\n this.render();\n }\n\n onDataError(err) {\n this.onDataReceived([]);\n }\n\n onDataReceived(dataList) {\n\n this.series = dataList.map(this.seriesHandler.bind(this));\n var data = {};\n this.setValues(data);\n this.data = data;\n\n var now = Date.now();\n if (this.refreshRate === 0 || Math.floor(now - this.lastRefreshTime) >= this.panel.refreshMinSec*1000){\n this.newData = true;\n this.lastRefreshTime = now;\n this.render();\n }\n }\n\n seriesHandler(seriesData) {\n var series = new TimeSeries({\n datapoints: seriesData.datapoints,\n alias: seriesData.target,\n });\n series.flotpairs = series.getFlotPairs(this.panel.nullPointMode);\n return series;\n }\n\n invertColorOrder() {\n var tmp = this.panel.colors[0];\n this.panel.colors[0] = this.panel.colors[2];\n this.panel.colors[2] = tmp;\n this.render();\n }\n}\n\nfunction getColorForValue(data, value) {\n for (var i = data.thresholds.length; i > 0; i--) {\n if (value >= data.thresholds[i - 1]) {\n return data.colorMap[i];\n }\n }\n return _.first(data.colorMap);\n}\n\nCounterPanelCtrl.templateUrl = 'partials/template.html';\nexport {\n CounterPanelCtrl,\n CounterPanelCtrl as MetricsPanelCtrl\n};\n"]} \ No newline at end of file diff --git a/dist/plugin.json b/dist/plugin.json index 8298bd9..76ce4ec 100644 --- a/dist/plugin.json +++ b/dist/plugin.json @@ -20,8 +20,8 @@ "name": "Showcase", "path": "screenshots/counter1.png" }], - "version": "0.0.2", - "updated": "2017-01-18" + "version": "0.0.4", + "updated": "2017-02-04" }, "dependencies": { diff --git a/src/ctrl.js b/src/ctrl.js index b9e6fff..2a6e339 100644 --- a/src/ctrl.js +++ b/src/ctrl.js @@ -64,6 +64,7 @@ class CounterPanelCtrl extends MetricsPanelCtrl { }); this.statChangeInterval = null; this.lastRefreshTime = new Date(2016, 1, 1, 1, 1, 1); + this.refreshRate = 0; this.newData = false; this.events.on('init-edit-mode', this.onInitEditMode.bind(this)); this.events.on('render', this.onRender.bind(this)); @@ -160,15 +161,18 @@ class CounterPanelCtrl extends MetricsPanelCtrl { var timeDiff = lastPoint[1] - prevPoint[1]; var rate = Math.floor(timeDiff / lastPoint[0]); this.statCounter.setTime(whole-lastPoint[0]); + if (this.statChangeInterval) + clearInterval(this.statChangeInterval); if (rate > 0) { - if (this.statChangeInterval) - clearInterval(this.statChangeInterval); var sc = this.statCounter; if (isFinite(rate)){ + this.refreshRate = rate; this.statChangeInterval = setInterval(function () { //for (var i=0; i<7; i++) sc.increment(); }, rate); + }else{ + this.refreshRate = 0; } } } @@ -357,7 +361,7 @@ class CounterPanelCtrl extends MetricsPanelCtrl { this.data = data; var now = Date.now(); - if (Math.floor(now - this.lastRefreshTime) >= this.panel.refreshMinSec*1000){ + if (this.refreshRate === 0 || Math.floor(now - this.lastRefreshTime) >= this.panel.refreshMinSec*1000){ this.newData = true; this.lastRefreshTime = now; this.render(); diff --git a/src/plugin.json b/src/plugin.json index 8298bd9..76ce4ec 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -20,8 +20,8 @@ "name": "Showcase", "path": "screenshots/counter1.png" }], - "version": "0.0.2", - "updated": "2017-01-18" + "version": "0.0.4", + "updated": "2017-02-04" }, "dependencies": {