Data for World Map Panel Plugin in Grafana from MySQL

Data for World Map Panel Plugin in Grafana from MySQL

Data for World Map Panel Plugin in Grafana:

Approach 1:

Using the InfluxDB data:

Here, the data is pulled from the database(InfluxDB) from a single measurement(table).

Schema of the hdb7 table is:

Time
DS_ID
from
graphStatement
latitude
longitude
to
totalPower
value

The above is the data that is pushed to the measurement(hdb7) of the InfluxDB database. Here, the hdb7 table’s graphStatement field values will be shown on the world map.

Query:

SELECT * from “hdb7” GROUP BY * ORDER BY DESC LIMIT 4

col1
col2

Location Data
table

Aggregation
current

Map Data Options

Field Mapping

col1
col2

Table Query Format
coordinates

Location Name Field
graphStatement

Metric Field
value

Latitude Field
latitude

Longitude Field
longitude

Field Mapping

DrawBack:

1.

The requirement specifically mentions having 2 tables like shown below.
JOIN statements are not supported in InfluxDB.

Table1
DS_ID, Lat, Long

Table2
DS_ID, Sum(pump),sum(light),..total value

Table1:

DS_ID
latitude
longitude
value
time

Table2:

DS_ID
graphStatement
totalPower
value
time

The graphStatement covers the fields sum(boosterPump), sum(lighting), sum(lift) which are to be displayed on the map.

“JOIN is no longer a concept in 0.9. Series sharing a measurement can be queried together simply by omitting the differentiating tags from the WHERE clause.”
Link:
https://github.com/influxdata/influxdb/issues/624

However, there is one alternative called transformations in Grafana that can be used to join 2 tables of same datasource/mixed datasource as shown below.

Here, the data for Table1 (DS_ID, Lat, Long) will be queried from MySQL database. The data for Table2 (DS_ID, Sum(pump),sum(light),..total value) will be queried from InfluxDB database.

Implementation:

We can implement the above by choosing the datasource as Mixed.
The query 1 will be:
SELECT * from hdb10

The query 2 will be:
SELECT * from hdb9

The transform we are going to apply is :
Outer join: DS_ID

All the pictures are shown below:

When we change the metric field to Total(field from hdb10) we get the value on the map as shown below:

Approach 2:

Using the MYSQL data:

Here, the data is pulled from the database(MySQL) from a 2 tables.

// hidden setup JavaScript code goes in this preamble area
const hiddenVar = 42

k@k-Lenovo-G50-70:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 7

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| database_name |
| mysql |
| performance_schema |
| sys |
+——————–+
5 rows in set (0.00 sec)

mysql> use database_name
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+————————-+
| Tables_in_database_name |
+————————-+
| a_one |
| total_power |
| worldmap_latlng |
| worldmap_latlng_a |
+————————-+
4 rows in set (0.00 sec)

Table creation:
mysql> INSERT INTO worldmap_latlng_a
-> (lat,
-> lng,
-> DS_ID,
-> value,
-> timestamp)
-> VALUES
-> (1.3521,
-> 103.8198,
-> ‘0’,
-> 1.0,
-> now());
Query OK, 1 row affected (0.13 sec)

mysql> CREATE TABLE worldmap_latlng_a (
-> id int(11) NOT NULL AUTO_INCREMENT,
-> lat FLOAT NOT NULL,
-> lng FLOAT NOT NULL,
-> DS_ID VARCHAR(20) NOT NULL,
-> value FLOAT NOT NULL,
-> timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-> PRIMARY KEY (id)
-> ) AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.65 sec)

mysql> describe total_power;
+————-+————-+——+—–+——————-+—————————–+
| Field | Type | Null | Key | Default | Extra |
+————-+————-+——+—–+——————-+—————————–+
| id | int(11) | NO | PRI | NULL | auto_increment |
| Lift | float | NO | | NULL | |
| Lighting | float | NO | | NULL | |
| Total | float | NO | | NULL | |
| BoosterPump | float | NO | | NULL | |
| DS_ID | varchar(20) | NO | | NULL | |
| value | float | NO | | NULL | |
| timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+————-+————-+——+—–+——————-+—————————–+
8 rows in set (0.00 sec)

mysql> describe worldmap_latlng_a;
+———–+————-+——+—–+——————-+—————————–+
| Field | Type | Null | Key | Default | Extra |
+———–+————-+——+—–+——————-+—————————–+
| id | int(11) | NO | PRI | NULL | auto_increment |
| lat | float | NO | | NULL | |
| lng | float | NO | | NULL | |
| DS_ID | varchar(20) | NO | | NULL | |
| value | float | NO | | NULL | |
| timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+———–+————-+——+—–+——————-+—————————–+
6 rows in set (0.00 sec)

Table1: worldmap_latlng_a
DS_ID
lat
lng
value
timestamp

Table2: total_power
DS_ID
Lift
Lighting
BoosterPump
Total
value
timestamp

INSERTING Records:

mysql> INSERT INTO worldmap_latlng_a
-> (lat,
-> lng,
-> DS_ID,
-> value,
-> timestamp)
-> VALUES
-> (1.3521,
-> 103.8198,
-> ‘0’,
-> 1.0,
-> now());
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO total_power
-> (Lift,
-> Lighting,
-> Total,
-> BoosterPump,
-> DS_ID,
-> value,
-> timestamp)
-> VALUES
-> ( 10474.1997022,
-> 8.97861111111,
-> 14987.6236142,
-> 4504.44530083,
-> ‘0’,
-> 1.0,
-> now());
Query OK, 1 row affected (0.11 sec)

DB Connection in Grafana(Add Data sources MySQL):
Host localhost:3306
Database database_name

SELECT CONCAT( “-“) AS Conca, worldmap_latlng_a.lat, worldmap_latlng_a.lng, worldmap_latlng_a.DS_ID, total_power.Total
FROM total_power
INNER JOIN worldmap_latlng_a
ON worldmap_latlng_a.DS_ID = total_power.DS_I

The data we get is:
Conca lat lng DS_ID Total

1.4 104 0 14988

Here, we are getting both the data of the table1(worldmap_latlng_a) and the table2(total_power) from the join query executed above.