diff --git a/dist/data_formatter.js b/dist/data_formatter.js
index 3607705..acba960 100644
--- a/dist/data_formatter.js
+++ b/dist/data_formatter.js
@@ -168,11 +168,11 @@ System.register(['lodash', './geohash'], function (_export, _context) {
var lowestValue = Number.MAX_VALUE;
tableData[0].forEach(function (datapoint) {
- if (!datapoint.geohash) {
+ if (!datapoint[_this3.ctrl.panel.tableGeohash]) {
return;
}
- var encodedGeohash = datapoint.geohash;
+ var encodedGeohash = datapoint[_this3.ctrl.panel.tableGeohash];
var decodedGeohash = decodeGeoHash(encodedGeohash);
var dataValue = {
diff --git a/dist/data_formatter.js.map b/dist/data_formatter.js.map
index e583fc9..ea6bfc8 100644
--- a/dist/data_formatter.js.map
+++ b/dist/data_formatter.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/data_formatter.js"],"names":["_","decodeGeoHash","DataFormatter","ctrl","kbn","data","series","length","highestValue","lowestValue","Number","MAX_VALUE","forEach","serie","lastPoint","last","datapoints","lastValue","isArray","location","find","locations","loc","key","toUpperCase","alias","isString","push","value","valueFormatted","valueRounded","dataValue","locationName","name","locationLatitude","latitude","locationLongitude","longitude","stats","panel","valueName","roundValue","parseInt","decimals","valueRange","encodedGeohash","decodedGeohash","dataList","esGeoPoint","esMetric","result","type","columnNames","columns","column","columnIndex","text","rows","row","esLocationName","createDataValue","datapoint","tableData","geohash","tableLabel","metric","point","undefined","Math","round"],"mappings":"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","file":"data_formatter.js","sourcesContent":["import _ from 'lodash';\nimport decodeGeoHash from './geohash';\n\nexport default class DataFormatter {\n constructor(ctrl, kbn) {\n this.ctrl = ctrl;\n this.kbn = kbn;\n }\n\n setValues(data) {\n if (this.ctrl.series && this.ctrl.series.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n this.ctrl.series.forEach((serie) => {\n const lastPoint = _.last(serie.datapoints);\n const lastValue = _.isArray(lastPoint) ? lastPoint[0] : null;\n const location = _.find(this.ctrl.locations, (loc) => { return loc.key.toUpperCase() === serie.alias.toUpperCase(); });\n\n if (!location) return;\n\n if (_.isString(lastValue)) {\n data.push({key: serie.alias, value: 0, valueFormatted: lastValue, valueRounded: 0});\n } else {\n const dataValue = {\n key: serie.alias,\n locationName: location.name,\n locationLatitude: location.latitude,\n locationLongitude: location.longitude,\n value: serie.stats[this.ctrl.panel.valueName],\n valueFormatted: lastValue,\n valueRounded: 0\n };\n\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n\n dataValue.valueRounded = this.kbn.roundValue(dataValue.value, parseInt(this.ctrl.panel.decimals, 10) || 0);\n data.push(dataValue);\n }\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n }\n\n createDataValue(encodedGeohash, decodedGeohash, locationName, value) {\n const dataValue = {\n key: encodedGeohash,\n locationName: locationName,\n locationLatitude: decodedGeohash.latitude,\n locationLongitude: decodedGeohash.longitude,\n value: value,\n valueFormatted: value,\n valueRounded: 0\n };\n\n dataValue.valueRounded = this.kbn.roundValue(dataValue.value, this.ctrl.panel.decimals || 0);\n return dataValue;\n }\n\n setGeohashValues(dataList, data) {\n if (!this.ctrl.panel.esGeoPoint || !this.ctrl.panel.esMetric) return;\n\n if (dataList && dataList.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n dataList.forEach((result) => {\n if (result.type === 'table') {\n const columnNames = {};\n\n result.columns.forEach((column, columnIndex) => {\n columnNames[column.text] = columnIndex;\n });\n\n result.rows.forEach((row) => {\n const encodedGeohash = row[columnNames[this.ctrl.panel.esGeoPoint]];\n const decodedGeohash = decodeGeoHash(encodedGeohash);\n const locationName = this.ctrl.panel.esLocationName ? row[columnNames[this.ctrl.panel.esLocationName]] : encodedGeohash;\n const value = row[columnNames[this.ctrl.panel.esMetric]];\n\n const dataValue = this.createDataValue(encodedGeohash, decodedGeohash, locationName, value, highestValue, lowestValue);\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n data.push(dataValue);\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n } else {\n result.datapoints.forEach((datapoint) => {\n const encodedGeohash = datapoint[this.ctrl.panel.esGeoPoint];\n const decodedGeohash = decodeGeoHash(encodedGeohash);\n const locationName = this.ctrl.panel.esLocationName ? datapoint[this.ctrl.panel.esLocationName] : encodedGeohash;\n const value = datapoint[this.ctrl.panel.esMetric];\n\n const dataValue = this.createDataValue(encodedGeohash, decodedGeohash, locationName, value, highestValue, lowestValue);\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n data.push(dataValue);\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n });\n }\n }\n\n static tableHandler(tableData) {\n const datapoints = [];\n\n if (tableData.type === 'table') {\n const columnNames = {};\n\n tableData.columns.forEach((column, columnIndex) => {\n columnNames[columnIndex] = column.text;\n });\n\n tableData.rows.forEach((row) => {\n const datapoint = {};\n\n row.forEach((value, columnIndex) => {\n const key = columnNames[columnIndex];\n datapoint[key] = value;\n });\n\n datapoints.push(datapoint);\n });\n }\n\n return datapoints;\n }\n\n setTableValues(tableData, data) {\n if (tableData && tableData.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n tableData[0].forEach((datapoint) => {\n if (!datapoint.geohash) {\n return;\n }\n\n const encodedGeohash = datapoint.geohash;\n const decodedGeohash = decodeGeoHash(encodedGeohash);\n\n const dataValue = {\n key: encodedGeohash,\n locationName: datapoint[this.ctrl.panel.tableLabel] || 'n/a',\n locationLatitude: decodedGeohash.latitude,\n locationLongitude: decodedGeohash.longitude,\n value: datapoint.metric,\n valueFormatted: datapoint.metric,\n valueRounded: 0\n };\n\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n\n dataValue.valueRounded = this.kbn.roundValue(dataValue.value, this.ctrl.panel.decimals || 0);\n data.push(dataValue);\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n }\n\n setJsonValues(data) {\n if (this.ctrl.series && this.ctrl.series.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n this.ctrl.series.forEach((point) => {\n const dataValue = {\n key: point.key,\n locationName: point.name,\n locationLatitude: point.latitude,\n locationLongitude: point.longitude,\n value: (point.value !== undefined) ? point.value : 1,\n valueRounded: 0\n };\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n dataValue.valueRounded = Math.round(dataValue.value);\n data.push(dataValue);\n });\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n }\n}\n\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/data_formatter.js"],"names":["_","decodeGeoHash","DataFormatter","ctrl","kbn","data","series","length","highestValue","lowestValue","Number","MAX_VALUE","forEach","serie","lastPoint","last","datapoints","lastValue","isArray","location","find","locations","loc","key","toUpperCase","alias","isString","push","value","valueFormatted","valueRounded","dataValue","locationName","name","locationLatitude","latitude","locationLongitude","longitude","stats","panel","valueName","roundValue","parseInt","decimals","valueRange","encodedGeohash","decodedGeohash","dataList","esGeoPoint","esMetric","result","type","columnNames","columns","column","columnIndex","text","rows","row","esLocationName","createDataValue","datapoint","tableData","tableGeohash","tableLabel","metric","point","undefined","Math","round"],"mappings":"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","file":"data_formatter.js","sourcesContent":["import _ from 'lodash';\nimport decodeGeoHash from './geohash';\n\nexport default class DataFormatter {\n constructor(ctrl, kbn) {\n this.ctrl = ctrl;\n this.kbn = kbn;\n }\n\n setValues(data) {\n if (this.ctrl.series && this.ctrl.series.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n this.ctrl.series.forEach((serie) => {\n const lastPoint = _.last(serie.datapoints);\n const lastValue = _.isArray(lastPoint) ? lastPoint[0] : null;\n const location = _.find(this.ctrl.locations, (loc) => { return loc.key.toUpperCase() === serie.alias.toUpperCase(); });\n\n if (!location) return;\n\n if (_.isString(lastValue)) {\n data.push({key: serie.alias, value: 0, valueFormatted: lastValue, valueRounded: 0});\n } else {\n const dataValue = {\n key: serie.alias,\n locationName: location.name,\n locationLatitude: location.latitude,\n locationLongitude: location.longitude,\n value: serie.stats[this.ctrl.panel.valueName],\n valueFormatted: lastValue,\n valueRounded: 0\n };\n\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n\n dataValue.valueRounded = this.kbn.roundValue(dataValue.value, parseInt(this.ctrl.panel.decimals, 10) || 0);\n data.push(dataValue);\n }\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n }\n\n createDataValue(encodedGeohash, decodedGeohash, locationName, value) {\n const dataValue = {\n key: encodedGeohash,\n locationName: locationName,\n locationLatitude: decodedGeohash.latitude,\n locationLongitude: decodedGeohash.longitude,\n value: value,\n valueFormatted: value,\n valueRounded: 0\n };\n\n dataValue.valueRounded = this.kbn.roundValue(dataValue.value, this.ctrl.panel.decimals || 0);\n return dataValue;\n }\n\n setGeohashValues(dataList, data) {\n if (!this.ctrl.panel.esGeoPoint || !this.ctrl.panel.esMetric) return;\n\n if (dataList && dataList.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n dataList.forEach((result) => {\n if (result.type === 'table') {\n const columnNames = {};\n\n result.columns.forEach((column, columnIndex) => {\n columnNames[column.text] = columnIndex;\n });\n\n result.rows.forEach((row) => {\n const encodedGeohash = row[columnNames[this.ctrl.panel.esGeoPoint]];\n const decodedGeohash = decodeGeoHash(encodedGeohash);\n const locationName = this.ctrl.panel.esLocationName ? row[columnNames[this.ctrl.panel.esLocationName]] : encodedGeohash;\n const value = row[columnNames[this.ctrl.panel.esMetric]];\n\n const dataValue = this.createDataValue(encodedGeohash, decodedGeohash, locationName, value, highestValue, lowestValue);\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n data.push(dataValue);\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n } else {\n result.datapoints.forEach((datapoint) => {\n const encodedGeohash = datapoint[this.ctrl.panel.esGeoPoint];\n const decodedGeohash = decodeGeoHash(encodedGeohash);\n const locationName = this.ctrl.panel.esLocationName ? datapoint[this.ctrl.panel.esLocationName] : encodedGeohash;\n const value = datapoint[this.ctrl.panel.esMetric];\n\n const dataValue = this.createDataValue(encodedGeohash, decodedGeohash, locationName, value, highestValue, lowestValue);\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n data.push(dataValue);\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n });\n }\n }\n\n static tableHandler(tableData) {\n const datapoints = [];\n\n if (tableData.type === 'table') {\n const columnNames = {};\n\n tableData.columns.forEach((column, columnIndex) => {\n columnNames[columnIndex] = column.text;\n });\n\n tableData.rows.forEach((row) => {\n const datapoint = {};\n\n row.forEach((value, columnIndex) => {\n const key = columnNames[columnIndex];\n datapoint[key] = value;\n });\n\n datapoints.push(datapoint);\n });\n }\n\n return datapoints;\n }\n\n setTableValues(tableData, data) {\n if (tableData && tableData.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n tableData[0].forEach((datapoint) => {\n if (!datapoint[this.ctrl.panel.tableGeohash]) {\n return;\n }\n\n const encodedGeohash = datapoint[this.ctrl.panel.tableGeohash];\n const decodedGeohash = decodeGeoHash(encodedGeohash);\n\n const dataValue = {\n key: encodedGeohash,\n locationName: datapoint[this.ctrl.panel.tableLabel] || 'n/a',\n locationLatitude: decodedGeohash.latitude,\n locationLongitude: decodedGeohash.longitude,\n value: datapoint.metric,\n valueFormatted: datapoint.metric,\n valueRounded: 0\n };\n\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n\n dataValue.valueRounded = this.kbn.roundValue(dataValue.value, this.ctrl.panel.decimals || 0);\n data.push(dataValue);\n });\n\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n }\n\n setJsonValues(data) {\n if (this.ctrl.series && this.ctrl.series.length > 0) {\n let highestValue = 0;\n let lowestValue = Number.MAX_VALUE;\n\n this.ctrl.series.forEach((point) => {\n const dataValue = {\n key: point.key,\n locationName: point.name,\n locationLatitude: point.latitude,\n locationLongitude: point.longitude,\n value: (point.value !== undefined) ? point.value : 1,\n valueRounded: 0\n };\n if (dataValue.value > highestValue) highestValue = dataValue.value;\n if (dataValue.value < lowestValue) lowestValue = dataValue.value;\n dataValue.valueRounded = Math.round(dataValue.value);\n data.push(dataValue);\n });\n data.highestValue = highestValue;\n data.lowestValue = lowestValue;\n data.valueRange = highestValue - lowestValue;\n }\n }\n}\n\n"]}
\ No newline at end of file
diff --git a/dist/partials/editor.html b/dist/partials/editor.html
index 2140e0b..7376b83 100644
--- a/dist/partials/editor.html
+++ b/dist/partials/editor.html
@@ -58,6 +58,10 @@
Map Data Options
+
+
+
+
diff --git a/dist/worldmap_ctrl.js b/dist/worldmap_ctrl.js
index 7aed5cb..1db3c8d 100644
--- a/dist/worldmap_ctrl.js
+++ b/dist/worldmap_ctrl.js
@@ -87,7 +87,8 @@ System.register(['app/plugins/sdk', 'app/core/time_series2', 'app/core/utils/kbn
decimals: 0,
hideEmpty: false,
hideZero: false,
- stickyLabels: false
+ stickyLabels: false,
+ tableGeohash: 'geohash'
};
mapCenters = {
'(0°, 0°)': { mapCenterLatitude: 0, mapCenterLongitude: 0 },
diff --git a/dist/worldmap_ctrl.js.map b/dist/worldmap_ctrl.js.map
index 7a5102a..e8f639d 100644
--- a/dist/worldmap_ctrl.js.map
+++ b/dist/worldmap_ctrl.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/worldmap_ctrl.js"],"names":["MetricsPanelCtrl","TimeSeries","kbn","_","mapRenderer","DataFormatter","panelDefaults","maxDataPoints","mapCenter","mapCenterLatitude","mapCenterLongitude","initialZoom","valueName","circleMinSize","circleMaxSize","locationData","thresholds","colors","unitSingle","unitPlural","showLegend","esMetric","decimals","hideEmpty","hideZero","stickyLabels","mapCenters","WorldmapCtrl","$scope","$injector","contextSrv","setMapProvider","defaults","panel","dataFormatter","events","on","onInitEditMode","bind","onDataReceived","onPanelTeardown","onDataSnapshotLoad","loadLocationDataFromFile","tileServer","user","lightTheme","setMapSaturationClass","saturationClass","reload","map","snapshotLocationData","locations","jsonpUrl","jsonpCallback","window","$","ajax","type","url","contentType","dataType","success","res","render","jsonUrl","getJSON","then","reloadLocations","refresh","remove","addEditorTab","dataList","dashboard","snapshot","data","setGeohashValues","tableData","tableHandler","setTableValues","series","setJsonValues","seriesHandler","setValues","updateThresholdData","length","centerOnLastGeoHash","last","locationLatitude","locationLongitude","setNewMapCenter","snapshotData","seriesData","datapoints","alias","target","flotpairs","getFlotPairs","nullPointMode","mapCenterMoved","setZoom","removeLegend","clearCircles","legend","update","split","strValue","Number","trim","size","pop","newColor","push","scope","elem","attrs","ctrl","templateUrl"],"mappings":"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","file":"worldmap_ctrl.js","sourcesContent":["/* eslint import/no-extraneous-dependencies: 0 */\nimport {MetricsPanelCtrl} from 'app/plugins/sdk';\nimport TimeSeries from 'app/core/time_series2';\nimport kbn from 'app/core/utils/kbn';\n\nimport _ from 'lodash';\nimport mapRenderer from './map_renderer';\nimport DataFormatter from './data_formatter';\nimport './css/worldmap-panel.css!';\n\nconst panelDefaults = {\n maxDataPoints: 1,\n mapCenter: '(0°, 0°)',\n mapCenterLatitude: 0,\n mapCenterLongitude: 0,\n initialZoom: 1,\n valueName: 'total',\n circleMinSize: 2,\n circleMaxSize: 30,\n locationData: 'countries',\n thresholds: '0,10',\n colors: ['rgba(245, 54, 54, 0.9)', 'rgba(237, 129, 40, 0.89)', 'rgba(50, 172, 45, 0.97)'],\n unitSingle: '',\n unitPlural: '',\n showLegend: true,\n esMetric: 'Count',\n decimals: 0,\n hideEmpty: false,\n hideZero: false,\n stickyLabels: false\n};\n\nconst mapCenters = {\n '(0°, 0°)': {mapCenterLatitude: 0, mapCenterLongitude: 0},\n 'North America': {mapCenterLatitude: 40, mapCenterLongitude: -100},\n 'Europe': {mapCenterLatitude: 46, mapCenterLongitude: 14},\n 'West Asia': {mapCenterLatitude: 26, mapCenterLongitude: 53},\n 'SE Asia': {mapCenterLatitude: 10, mapCenterLongitude: 106},\n 'Last GeoHash': {mapCenterLatitude: 0, mapCenterLongitude: 0}\n};\n\nexport default class WorldmapCtrl extends MetricsPanelCtrl {\n constructor($scope, $injector, contextSrv) {\n super($scope, $injector);\n\n this.setMapProvider(contextSrv);\n _.defaults(this.panel, panelDefaults);\n\n this.dataFormatter = new DataFormatter(this, kbn);\n\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('data-received', this.onDataReceived.bind(this));\n this.events.on('panel-teardown', this.onPanelTeardown.bind(this));\n this.events.on('data-snapshot-load', this.onDataSnapshotLoad.bind(this));\n\n this.loadLocationDataFromFile();\n }\n\n setMapProvider(contextSrv) {\n this.tileServer = contextSrv.user.lightTheme ? 'CartoDB Positron' : 'CartoDB Dark';\n this.setMapSaturationClass();\n }\n\n setMapSaturationClass() {\n if (this.tileServer === 'CartoDB Dark') {\n this.saturationClass = 'map-darken';\n } else {\n this.saturationClass = '';\n }\n }\n\n loadLocationDataFromFile(reload) {\n if (this.map && !reload) return;\n\n if (this.panel.snapshotLocationData) {\n this.locations = this.panel.snapshotLocationData;\n return;\n }\n\n if (this.panel.locationData === 'jsonp endpoint') {\n if (!this.panel.jsonpUrl || !this.panel.jsonpCallback) return;\n\n window.$.ajax({\n type: 'GET',\n url: this.panel.jsonpUrl + '?callback=?',\n contentType: 'application/json',\n jsonpCallback: this.panel.jsonpCallback,\n dataType: 'jsonp',\n success: (res) => {\n this.locations = res;\n this.render();\n }\n });\n } else if (this.panel.locationData === 'json endpoint') {\n if (!this.panel.jsonUrl) return;\n\n window.$.getJSON(this.panel.jsonUrl).then((res) => {\n this.locations = res;\n this.render();\n });\n } else if (this.panel.locationData === 'table') {\n // .. Do nothing\n } else if (this.panel.locationData !== 'geohash' && this.panel.locationData !== 'json result') {\n window.$.getJSON('public/plugins/grafana-worldmap-panel/data/' + this.panel.locationData + '.json')\n .then(this.reloadLocations.bind(this));\n }\n }\n\n reloadLocations(res) {\n this.locations = res;\n this.refresh();\n }\n\n onPanelTeardown() {\n if (this.map) this.map.remove();\n }\n\n onInitEditMode() {\n this.addEditorTab('Worldmap', 'public/plugins/grafana-worldmap-panel/partials/editor.html', 2);\n }\n\n onDataReceived(dataList) {\n if (!dataList) return;\n\n if (this.dashboard.snapshot && this.locations) {\n this.panel.snapshotLocationData = this.locations;\n }\n\n const data = [];\n\n if (this.panel.locationData === 'geohash') {\n this.dataFormatter.setGeohashValues(dataList, data);\n } else if (this.panel.locationData === 'table') {\n const tableData = dataList.map(DataFormatter.tableHandler.bind(this));\n this.dataFormatter.setTableValues(tableData, data);\n } else if (this.panel.locationData === 'json result') {\n this.series = dataList;\n this.dataFormatter.setJsonValues(data);\n } else {\n this.series = dataList.map(this.seriesHandler.bind(this));\n this.dataFormatter.setValues(data);\n }\n this.data = data;\n\n this.updateThresholdData();\n\n if (this.data.length && this.panel.mapCenter === 'Last GeoHash') {\n this.centerOnLastGeoHash();\n } else {\n this.render();\n }\n }\n\n centerOnLastGeoHash() {\n mapCenters[this.panel.mapCenter].mapCenterLatitude = _.last(this.data).locationLatitude;\n mapCenters[this.panel.mapCenter].mapCenterLongitude = _.last(this.data).locationLongitude;\n this.setNewMapCenter();\n }\n\n onDataSnapshotLoad(snapshotData) {\n this.onDataReceived(snapshotData);\n }\n\n seriesHandler(seriesData) {\n const series = new TimeSeries({\n datapoints: seriesData.datapoints,\n alias: seriesData.target,\n });\n\n series.flotpairs = series.getFlotPairs(this.panel.nullPointMode);\n return series;\n }\n\n setNewMapCenter() {\n if (this.panel.mapCenter !== 'custom') {\n this.panel.mapCenterLatitude = mapCenters[this.panel.mapCenter].mapCenterLatitude;\n this.panel.mapCenterLongitude = mapCenters[this.panel.mapCenter].mapCenterLongitude;\n }\n this.mapCenterMoved = true;\n this.render();\n }\n\n setZoom() {\n this.map.setZoom(this.panel.initialZoom || 1);\n }\n\n toggleLegend() {\n if (!this.panel.showLegend) {\n this.map.removeLegend();\n }\n this.render();\n }\n\n toggleStickyLabels() {\n this.map.clearCircles();\n this.render();\n }\n\n changeThresholds() {\n this.updateThresholdData();\n this.map.legend.update();\n this.render();\n }\n\n updateThresholdData() {\n this.data.thresholds = this.panel.thresholds.split(',').map((strValue) => {\n return Number(strValue.trim());\n });\n while (_.size(this.panel.colors) > _.size(this.data.thresholds) + 1) {\n // too many colors. remove the last one.\n this.panel.colors.pop();\n }\n while (_.size(this.panel.colors) < _.size(this.data.thresholds) + 1) {\n // not enough colors. add one.\n const newColor = 'rgba(50, 172, 45, 0.97)';\n this.panel.colors.push(newColor);\n }\n }\n\n changeLocationData() {\n this.loadLocationDataFromFile(true);\n\n if (this.panel.locationData === 'geohash') {\n this.render();\n }\n }\n\n/* eslint class-methods-use-this: 0 */\n link(scope, elem, attrs, ctrl) {\n mapRenderer(scope, elem, attrs, ctrl);\n }\n}\n\nWorldmapCtrl.templateUrl = 'module.html';\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/worldmap_ctrl.js"],"names":["MetricsPanelCtrl","TimeSeries","kbn","_","mapRenderer","DataFormatter","panelDefaults","maxDataPoints","mapCenter","mapCenterLatitude","mapCenterLongitude","initialZoom","valueName","circleMinSize","circleMaxSize","locationData","thresholds","colors","unitSingle","unitPlural","showLegend","esMetric","decimals","hideEmpty","hideZero","stickyLabels","tableGeohash","mapCenters","WorldmapCtrl","$scope","$injector","contextSrv","setMapProvider","defaults","panel","dataFormatter","events","on","onInitEditMode","bind","onDataReceived","onPanelTeardown","onDataSnapshotLoad","loadLocationDataFromFile","tileServer","user","lightTheme","setMapSaturationClass","saturationClass","reload","map","snapshotLocationData","locations","jsonpUrl","jsonpCallback","window","$","ajax","type","url","contentType","dataType","success","res","render","jsonUrl","getJSON","then","reloadLocations","refresh","remove","addEditorTab","dataList","dashboard","snapshot","data","setGeohashValues","tableData","tableHandler","setTableValues","series","setJsonValues","seriesHandler","setValues","updateThresholdData","length","centerOnLastGeoHash","last","locationLatitude","locationLongitude","setNewMapCenter","snapshotData","seriesData","datapoints","alias","target","flotpairs","getFlotPairs","nullPointMode","mapCenterMoved","setZoom","removeLegend","clearCircles","legend","update","split","strValue","Number","trim","size","pop","newColor","push","scope","elem","attrs","ctrl","templateUrl"],"mappings":"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","file":"worldmap_ctrl.js","sourcesContent":["/* eslint import/no-extraneous-dependencies: 0 */\nimport {MetricsPanelCtrl} from 'app/plugins/sdk';\nimport TimeSeries from 'app/core/time_series2';\nimport kbn from 'app/core/utils/kbn';\n\nimport _ from 'lodash';\nimport mapRenderer from './map_renderer';\nimport DataFormatter from './data_formatter';\nimport './css/worldmap-panel.css!';\n\nconst panelDefaults = {\n maxDataPoints: 1,\n mapCenter: '(0°, 0°)',\n mapCenterLatitude: 0,\n mapCenterLongitude: 0,\n initialZoom: 1,\n valueName: 'total',\n circleMinSize: 2,\n circleMaxSize: 30,\n locationData: 'countries',\n thresholds: '0,10',\n colors: ['rgba(245, 54, 54, 0.9)', 'rgba(237, 129, 40, 0.89)', 'rgba(50, 172, 45, 0.97)'],\n unitSingle: '',\n unitPlural: '',\n showLegend: true,\n esMetric: 'Count',\n decimals: 0,\n hideEmpty: false,\n hideZero: false,\n stickyLabels: false,\n tableGeohash: 'geohash'\n};\n\nconst mapCenters = {\n '(0°, 0°)': {mapCenterLatitude: 0, mapCenterLongitude: 0},\n 'North America': {mapCenterLatitude: 40, mapCenterLongitude: -100},\n 'Europe': {mapCenterLatitude: 46, mapCenterLongitude: 14},\n 'West Asia': {mapCenterLatitude: 26, mapCenterLongitude: 53},\n 'SE Asia': {mapCenterLatitude: 10, mapCenterLongitude: 106},\n 'Last GeoHash': {mapCenterLatitude: 0, mapCenterLongitude: 0}\n};\n\nexport default class WorldmapCtrl extends MetricsPanelCtrl {\n constructor($scope, $injector, contextSrv) {\n super($scope, $injector);\n\n this.setMapProvider(contextSrv);\n _.defaults(this.panel, panelDefaults);\n\n this.dataFormatter = new DataFormatter(this, kbn);\n\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('data-received', this.onDataReceived.bind(this));\n this.events.on('panel-teardown', this.onPanelTeardown.bind(this));\n this.events.on('data-snapshot-load', this.onDataSnapshotLoad.bind(this));\n\n this.loadLocationDataFromFile();\n }\n\n setMapProvider(contextSrv) {\n this.tileServer = contextSrv.user.lightTheme ? 'CartoDB Positron' : 'CartoDB Dark';\n this.setMapSaturationClass();\n }\n\n setMapSaturationClass() {\n if (this.tileServer === 'CartoDB Dark') {\n this.saturationClass = 'map-darken';\n } else {\n this.saturationClass = '';\n }\n }\n\n loadLocationDataFromFile(reload) {\n if (this.map && !reload) return;\n\n if (this.panel.snapshotLocationData) {\n this.locations = this.panel.snapshotLocationData;\n return;\n }\n\n if (this.panel.locationData === 'jsonp endpoint') {\n if (!this.panel.jsonpUrl || !this.panel.jsonpCallback) return;\n\n window.$.ajax({\n type: 'GET',\n url: this.panel.jsonpUrl + '?callback=?',\n contentType: 'application/json',\n jsonpCallback: this.panel.jsonpCallback,\n dataType: 'jsonp',\n success: (res) => {\n this.locations = res;\n this.render();\n }\n });\n } else if (this.panel.locationData === 'json endpoint') {\n if (!this.panel.jsonUrl) return;\n\n window.$.getJSON(this.panel.jsonUrl).then((res) => {\n this.locations = res;\n this.render();\n });\n } else if (this.panel.locationData === 'table') {\n // .. Do nothing\n } else if (this.panel.locationData !== 'geohash' && this.panel.locationData !== 'json result') {\n window.$.getJSON('public/plugins/grafana-worldmap-panel/data/' + this.panel.locationData + '.json')\n .then(this.reloadLocations.bind(this));\n }\n }\n\n reloadLocations(res) {\n this.locations = res;\n this.refresh();\n }\n\n onPanelTeardown() {\n if (this.map) this.map.remove();\n }\n\n onInitEditMode() {\n this.addEditorTab('Worldmap', 'public/plugins/grafana-worldmap-panel/partials/editor.html', 2);\n }\n\n onDataReceived(dataList) {\n if (!dataList) return;\n\n if (this.dashboard.snapshot && this.locations) {\n this.panel.snapshotLocationData = this.locations;\n }\n\n const data = [];\n\n if (this.panel.locationData === 'geohash') {\n this.dataFormatter.setGeohashValues(dataList, data);\n } else if (this.panel.locationData === 'table') {\n const tableData = dataList.map(DataFormatter.tableHandler.bind(this));\n this.dataFormatter.setTableValues(tableData, data);\n } else if (this.panel.locationData === 'json result') {\n this.series = dataList;\n this.dataFormatter.setJsonValues(data);\n } else {\n this.series = dataList.map(this.seriesHandler.bind(this));\n this.dataFormatter.setValues(data);\n }\n this.data = data;\n\n this.updateThresholdData();\n\n if (this.data.length && this.panel.mapCenter === 'Last GeoHash') {\n this.centerOnLastGeoHash();\n } else {\n this.render();\n }\n }\n\n centerOnLastGeoHash() {\n mapCenters[this.panel.mapCenter].mapCenterLatitude = _.last(this.data).locationLatitude;\n mapCenters[this.panel.mapCenter].mapCenterLongitude = _.last(this.data).locationLongitude;\n this.setNewMapCenter();\n }\n\n onDataSnapshotLoad(snapshotData) {\n this.onDataReceived(snapshotData);\n }\n\n seriesHandler(seriesData) {\n const series = new TimeSeries({\n datapoints: seriesData.datapoints,\n alias: seriesData.target,\n });\n\n series.flotpairs = series.getFlotPairs(this.panel.nullPointMode);\n return series;\n }\n\n setNewMapCenter() {\n if (this.panel.mapCenter !== 'custom') {\n this.panel.mapCenterLatitude = mapCenters[this.panel.mapCenter].mapCenterLatitude;\n this.panel.mapCenterLongitude = mapCenters[this.panel.mapCenter].mapCenterLongitude;\n }\n this.mapCenterMoved = true;\n this.render();\n }\n\n setZoom() {\n this.map.setZoom(this.panel.initialZoom || 1);\n }\n\n toggleLegend() {\n if (!this.panel.showLegend) {\n this.map.removeLegend();\n }\n this.render();\n }\n\n toggleStickyLabels() {\n this.map.clearCircles();\n this.render();\n }\n\n changeThresholds() {\n this.updateThresholdData();\n this.map.legend.update();\n this.render();\n }\n\n updateThresholdData() {\n this.data.thresholds = this.panel.thresholds.split(',').map((strValue) => {\n return Number(strValue.trim());\n });\n while (_.size(this.panel.colors) > _.size(this.data.thresholds) + 1) {\n // too many colors. remove the last one.\n this.panel.colors.pop();\n }\n while (_.size(this.panel.colors) < _.size(this.data.thresholds) + 1) {\n // not enough colors. add one.\n const newColor = 'rgba(50, 172, 45, 0.97)';\n this.panel.colors.push(newColor);\n }\n }\n\n changeLocationData() {\n this.loadLocationDataFromFile(true);\n\n if (this.panel.locationData === 'geohash') {\n this.render();\n }\n }\n\n/* eslint class-methods-use-this: 0 */\n link(scope, elem, attrs, ctrl) {\n mapRenderer(scope, elem, attrs, ctrl);\n }\n}\n\nWorldmapCtrl.templateUrl = 'module.html';\n"]}
\ No newline at end of file
diff --git a/src/data_formatter.js b/src/data_formatter.js
index 6f2a2d1..57ec408 100644
--- a/src/data_formatter.js
+++ b/src/data_formatter.js
@@ -143,11 +143,11 @@ export default class DataFormatter {
let lowestValue = Number.MAX_VALUE;
tableData[0].forEach((datapoint) => {
- if (!datapoint.geohash) {
+ if (!datapoint[this.ctrl.panel.tableGeohash]) {
return;
}
- const encodedGeohash = datapoint.geohash;
+ const encodedGeohash = datapoint[this.ctrl.panel.tableGeohash];
const decodedGeohash = decodeGeoHash(encodedGeohash);
const dataValue = {
diff --git a/src/partials/editor.html b/src/partials/editor.html
index 2140e0b..7376b83 100644
--- a/src/partials/editor.html
+++ b/src/partials/editor.html
@@ -58,6 +58,10 @@
Map Data Options
+
+
+
+
diff --git a/src/worldmap_ctrl.js b/src/worldmap_ctrl.js
index c62b3a1..57d3ed6 100644
--- a/src/worldmap_ctrl.js
+++ b/src/worldmap_ctrl.js
@@ -27,7 +27,8 @@ const panelDefaults = {
decimals: 0,
hideEmpty: false,
hideZero: false,
- stickyLabels: false
+ stickyLabels: false,
+ tableGeohash: 'geohash'
};
const mapCenters = {