diff --git a/README.md b/README.md index 43f4a8e..204a57d 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,10 @@ This plugin is based on "Heatmap" panel by Grafana and partly inspired by ideas #### Changelog +##### v0.0.3 + +- Fix display null values as zero + ##### v0.0.2 - Install with GF_INSTALL_PLUGINS diff --git a/dist/README.md b/dist/README.md index 43f4a8e..204a57d 100644 --- a/dist/README.md +++ b/dist/README.md @@ -144,6 +144,10 @@ This plugin is based on "Heatmap" panel by Grafana and partly inspired by ideas #### Changelog +##### v0.0.3 + +- Fix display null values as zero + ##### v0.0.2 - Install with GF_INSTALL_PLUGINS diff --git a/dist/color_mode_discrete.js b/dist/color_mode_discrete.js index 41db277..92239cf 100644 --- a/dist/color_mode_discrete.js +++ b/dist/color_mode_discrete.js @@ -103,6 +103,13 @@ System.register(["lodash"], function (_export, _context) { for (var i = 0; i < thresholds.length; i++) { for (var j = 0; j < values.length; j++) { + if (values[j] == null) { + if (this.panel.nullPointMode == 'as zero') { + return this.getMatchedThreshold(0).color; + } else { + return 'rgba(0,0,0,0)'; + } + } if (values[j] == thresholds[i].value) { return this.getDiscreteColor(i); } @@ -135,7 +142,7 @@ System.register(["lodash"], function (_export, _context) { key: "getMatchedThreshold", value: function getMatchedThreshold(value) { if (value == null) { - if (this.panel.color.nullPointMode == 'as empty') { + if (this.panel.nullPointMode == 'as empty') { // FIXME: make this explicit for user // Right now this color never used because null as empty handles in getCardOpacity method. return { diff --git a/dist/color_mode_discrete.js.map b/dist/color_mode_discrete.js.map index d9e3ee3..69a473c 100644 --- a/dist/color_mode_discrete.js.map +++ b/dist/color_mode_discrete.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/color_mode_discrete.js"],"names":["_","ColorModeDiscrete","scope","panelCtrl","ctrl","panel","values","thresholds","color","tooltips","i","length","j","value","push","tooltip","notMatched","getMatchedThreshold","threshold","index","getThreshold","getDiscreteColor","cardsData","noColorDefined","cards","nullPointMode","k","interval"],"mappings":"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","file":"color_mode_discrete.js","sourcesContent":["import _ from 'lodash';\n\n// Helper methods to handle discrete color mode\nexport class ColorModeDiscrete {\n constructor(scope) {\n this.scope = scope;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n }\n\n // get tooltip for each value ordered by thresholds priority\n convertValuesToTooltips(values) {\n let thresholds = this.panel.color.thresholds;\n let tooltips = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == thresholds[i].value) {\n tooltips.push({\n \"tooltip\": thresholds[i].tooltip?thresholds[i].tooltip:values[j],\n \"color\": thresholds[i].color\n });\n }\n }\n }\n return tooltips;\n }\n\n\n getNotMatchedValues(values) {\n let notMatched = [];\n for (let j = 0; j < values.length; j++) {\n if (!this.getMatchedThreshold(values[j])) {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getNotColoredValues(values) {\n let notMatched = [];\n for (let j = 0; j < values.length; j++) {\n let threshold = this.getMatchedThreshold(values[j]);\n if (!threshold || !threshold.color || threshold.color == \"\") {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n\n getDiscreteColor(index) {\n let color = this.getThreshold(index).color;\n if (!color || color == \"\") {\n return 'rgba(0,0,0,1)';\n }\n return color;\n }\n\n // returns color from first matched thresold in order from 0 to thresholds.length\n getBucketColor(values) {\n let thresholds = this.panel.color.thresholds;\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == thresholds[i].value) {\n return this.getDiscreteColor(i);\n }\n }\n }\n return 'rgba(0,0,0,1)';\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.cardsData) {\n return\n }\n this.panelCtrl.cardsData.noColorDefined = false;\n let cards = this.panelCtrl.cardsData.cards;\n for (let i=0; i= thresholds.length == null) {\n return {\n \"color\": \"rgba(0,0,0,0)\",\n \"value\": \"null\",\n \"tooltip\": \"null\",\n }\n }\n return thresholds[index];\n }\n\n roundIntervalCeil(interval) {\n switch (true) {\n case interval <= 10:\n return 10; // 0.01s\n case interval <= 20:\n return 20; // 0.02s\n case interval <= 50:\n return 50; // 0.05s\n case interval <= 100:\n return 100; // 0.1s\n case interval <= 200:\n return 200; // 0.2s\n case interval <= 500:\n return 500; // 0.5s\n case interval <= 1000:\n return 1000; // 1s\n case interval <= 2000:\n return 2000; // 2s\n case interval <= 5000:\n return 5000; // 5s\n case interval <= 10000:\n return 10000; // 10s\n case interval <= 15000:\n return 15000; // 15s\n case interval <= 20000:\n return 20000; // 20s\n case interval <= 30000:\n return 30000; // 30s\n case interval <= 60000:\n return 60000; // 1m\n case interval <= 120000:\n return 120000; // 2m\n case interval <= 300000:\n return 300000; // 5m\n case interval <= 600000:\n return 600000; // 10m\n case interval <= 900000:\n return 900000; // 15m\n case interval <= 1200000:\n return 1200000; // 20m\n case interval <= 1800000:\n return 1800000; // 30m\n case interval <= 3600000:\n return 3600000; // 1h\n case interval <= 7200000:\n return 7200000; // 2h\n case interval <= 10800000:\n return 10800000; // 3h\n case interval <= 21600000:\n return 21600000; // 6h\n case interval <= 43200000:\n return 43200000; // 12h\n case interval <= 86400000:\n return 86400000; // 1d\n case interval <= 604800000:\n return 604800000; // 1w\n case interval <= 2592000000:\n return 2592000000; // 30d\n default:\n return 31536000000; // 1y\n }\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../src/color_mode_discrete.js"],"names":["_","ColorModeDiscrete","scope","panelCtrl","ctrl","panel","values","thresholds","color","tooltips","i","length","j","value","push","tooltip","notMatched","getMatchedThreshold","threshold","index","getThreshold","nullPointMode","getDiscreteColor","cardsData","noColorDefined","cards","k","interval"],"mappings":"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","file":"color_mode_discrete.js","sourcesContent":["import _ from 'lodash';\n\n// Helper methods to handle discrete color mode\nexport class ColorModeDiscrete {\n constructor(scope) {\n this.scope = scope;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n }\n\n // get tooltip for each value ordered by thresholds priority\n convertValuesToTooltips(values) {\n let thresholds = this.panel.color.thresholds;\n let tooltips = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == thresholds[i].value) {\n tooltips.push({\n \"tooltip\": thresholds[i].tooltip?thresholds[i].tooltip:values[j],\n \"color\": thresholds[i].color\n });\n }\n }\n }\n return tooltips;\n }\n\n\n getNotMatchedValues(values) {\n let notMatched = [];\n for (let j = 0; j < values.length; j++) {\n if (!this.getMatchedThreshold(values[j])) {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getNotColoredValues(values) {\n let notMatched = [];\n for (let j = 0; j < values.length; j++) {\n let threshold = this.getMatchedThreshold(values[j]);\n if (!threshold || !threshold.color || threshold.color == \"\") {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n\n getDiscreteColor(index) {\n let color = this.getThreshold(index).color;\n if (!color || color == \"\") {\n return 'rgba(0,0,0,1)';\n }\n return color;\n }\n\n // returns color from first matched thresold in order from 0 to thresholds.length\n getBucketColor(values) {\n let thresholds = this.panel.color.thresholds;\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == null) {\n if (this.panel.nullPointMode == 'as zero') {\n return this.getMatchedThreshold(0).color;\n } else {\n return 'rgba(0,0,0,0)';\n }\n }\n if (values[j] == thresholds[i].value) {\n return this.getDiscreteColor(i);\n }\n }\n }\n return 'rgba(0,0,0,1)';\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.cardsData) {\n return\n }\n this.panelCtrl.cardsData.noColorDefined = false;\n let cards = this.panelCtrl.cardsData.cards;\n for (let i=0; i= thresholds.length == null) {\n return {\n \"color\": \"rgba(0,0,0,0)\",\n \"value\": \"null\",\n \"tooltip\": \"null\",\n }\n }\n return thresholds[index];\n }\n\n roundIntervalCeil(interval) {\n switch (true) {\n case interval <= 10:\n return 10; // 0.01s\n case interval <= 20:\n return 20; // 0.02s\n case interval <= 50:\n return 50; // 0.05s\n case interval <= 100:\n return 100; // 0.1s\n case interval <= 200:\n return 200; // 0.2s\n case interval <= 500:\n return 500; // 0.5s\n case interval <= 1000:\n return 1000; // 1s\n case interval <= 2000:\n return 2000; // 2s\n case interval <= 5000:\n return 5000; // 5s\n case interval <= 10000:\n return 10000; // 10s\n case interval <= 15000:\n return 15000; // 15s\n case interval <= 20000:\n return 20000; // 20s\n case interval <= 30000:\n return 30000; // 30s\n case interval <= 60000:\n return 60000; // 1m\n case interval <= 120000:\n return 120000; // 2m\n case interval <= 300000:\n return 300000; // 5m\n case interval <= 600000:\n return 600000; // 10m\n case interval <= 900000:\n return 900000; // 15m\n case interval <= 1200000:\n return 1200000; // 20m\n case interval <= 1800000:\n return 1800000; // 30m\n case interval <= 3600000:\n return 3600000; // 1h\n case interval <= 7200000:\n return 7200000; // 2h\n case interval <= 10800000:\n return 10800000; // 3h\n case interval <= 21600000:\n return 21600000; // 6h\n case interval <= 43200000:\n return 43200000; // 12h\n case interval <= 86400000:\n return 86400000; // 1d\n case interval <= 604800000:\n return 604800000; // 1w\n case interval <= 2592000000:\n return 2592000000; // 30d\n default:\n return 31536000000; // 1y\n }\n }\n}\n"]} \ No newline at end of file diff --git a/src/color_mode_discrete.js b/src/color_mode_discrete.js index 1474871..f697a71 100644 --- a/src/color_mode_discrete.js +++ b/src/color_mode_discrete.js @@ -63,6 +63,13 @@ export class ColorModeDiscrete { for (let i = 0; i < thresholds.length; i++) { for (let j = 0; j < values.length; j++) { + if (values[j] == null) { + if (this.panel.nullPointMode == 'as zero') { + return this.getMatchedThreshold(0).color; + } else { + return 'rgba(0,0,0,0)'; + } + } if (values[j] == thresholds[i].value) { return this.getDiscreteColor(i); } @@ -93,7 +100,7 @@ export class ColorModeDiscrete { getMatchedThreshold(value) { if (value == null) { - if (this.panel.color.nullPointMode == 'as empty') { + if (this.panel.nullPointMode == 'as empty') { // FIXME: make this explicit for user // Right now this color never used because null as empty handles in getCardOpacity method. return {