Deze tool is ontstaan omdat ik op mijn werk in grafana een dashboard wilde hebben uit verschillende bronnen welke elke nacht geupdaten moet worden. We hadden 3 waarheden en deze tool maakte een overzicht of al deze waarheden nog overeenkwamen.
Deze tool kan aangeroepen worden met de SimpleJson plugin binnen Grafana link
installeren op de grafana machine:
grafana-cli plugins install grafana-simple-json-datasource
Een compleet overzicht (table) opsturen voor een dashboard.
Met deze tool is het mogelijk om onder een noemer (in ons geval een landschap), meerdere key-value lijsten op te sturen. De keys worden bij elkaar gezet en de values worden in een kolom gezet. Een voorbeeld:
input:
lijst Kolom A voor noemer TEST
key | value |
---|---|
abc-001 | 1 |
abc-003 | 1 |
abc-004 | 2 |
lijst Kolom B voor noemer TEST
key | value |
---|---|
abc-001 | A |
abc-002 | B |
abc-003 | C |
abc-004 | C |
lijst Kolom C voor noemer TEST
key | value |
---|---|
abc-001 | 12 |
abc-002 | 14 |
abc-003 | 17 |
abc-004 | 12 |
abc-005 | 12 |
geeft voor noemer TEST als output (mits geconfigureerd):
key | A | B | C |
---|---|---|---|
abc-001 | 1 | A | 12 |
abc-002 | B | 14 | |
abc-003 | 1 | C | 17 |
abc-004 | 2 | C | 12 |
abc-005 | 2 | 12 |
Dit is een voorbeeld van 1 noemer. maar je kan er dus meerdere hebben. Dus meerdere tabellen kan je zo genereren.
Hier een voorbeeld van een docker-compose file hoe je deze tool kan draaien
version: '2'
services:
grafana:
image: grafana/grafana:6.5.0
container_name: grafana
ports:
- 8182:3000
networks:
default:
aliases:
- grafana
jsongrafana:
image: opvolger/json.grafana.datasources:latest
container_name: jsongrafanadatasources
ports:
- 8181:80
networks:
default:
aliases:
- jsongrafana
volumes:
- $PWD/data:/home/data
restart: always
installeer plugin:
grafana-cli plugins install grafana-simple-json-datasource
Aanmaken DataSource in grafana
zet deze naar de "json.grafana.datasources" http://jsongrafana:80/simpeljson
Je kan een compleet tabel sturen met de volgende manier.
Post de volgende info in storedata/set_info, dit kan via swagger
{
"name": "test_enkel",
"info": {
"description": "Overzicht voor test_enkel",
"type": "default"
},
"table": [
{
"jsonvalue": "key",
"type": "string",
"text": "Machinename"
},
{
"jsonvalue": "kolom_bool",
"type": "bool",
"text": "bool kolom"
},
{
"jsonvalue": "kolom_time",
"type": "time",
"text": "tijd kolom"
},
{
"jsonvalue": "kolom_string",
"type": "string",
"text": "string kolom"
}
]
}
Dit zal in de data-folder een dit test aanmaken met 2 files erin, table.json en info.json
Post de volgende info in storedata/send_data, dit kan via swagger
4x dus
{
"name": "test_enkel",
"json_data": [
{ "key": "machine1", "kolom_bool": true, "kolom_time": "2020-10-27T21:24:31.78Z", "kolom_string": "iets" },
{ "key": "machine2", "kolom_bool": true, "kolom_time": "2020-10-27T21:24:31.78Z", "kolom_string": "iets meer" },
{ "key": "machine3", "kolom_bool": false, "kolom_time": "2020-10-28T21:24:31.78Z", "kolom_string": "iets minder" },
{ "key": "machine4", "kolom_bool": false, "kolom_time": "2020-11-27T21:24:31.78Z", "kolom_string": "niets" },
{ "key": "machine5", "kolom_bool": true, "kolom_time": "2019-10-27T21:24:31.78Z", "kolom_string": "hoi iets" }
]
}
We willen uit 3 bronnen data halen en in 1 overzicht hebben, we zullen dus eerst het overzicht moeten maken, dit kan met:
Post de volgende info in storedatakeyvalue/set_info, dit kan via swagger
{
"name": "test",
"info": {
"description": "Overzicht voor test",
"type": "key_value"
},
"table": [
{
"jsonvalue": "key",
"type": "string",
"text": "Machinename"
},
{
"jsonvalue": "bron1_bool",
"type": "bool",
"text": "Bron1 bool"
},
{
"jsonvalue": "bron1_time",
"type": "time",
"text": "Bron1 tijd"
},
{
"jsonvalue": "bron2_bool",
"type": "bool",
"text": "Bron2 Bool"
},
{
"jsonvalue": "bron3_string",
"type": "string",
"text": "Bron3 string"
}
]
}
Dit zal in de data-folder een dit test aanmaken met 2 files erin, table.json en info.json
Post de volgende info in storedatakeyvalue/send_data, dit kan via swagger
4x dus
{
"subject": "bron1_bool",
"name": "test",
"json_data": { "machine1": true , "machine2": true , "machine3": false , "machine5": true }
}
{
"subject": "bron1_time",
"name": "test",
"json_data": { "machine1": "2020-10-27T21:24:31.78Z" , "machine3": "2020-10-29T23:24:32.78Z", "machine4": "2020-10-30T22:24:34.78Z", "machine5": "2020-09-01T21:24:36.78Z" }
}
{
"subject": "bron2_bool",
"name": "test",
"json_data": { "machine1": false , "machine2": false , "machine3": false , "machine4": true, "machine5": true }
}
{
"subject": "bron3_string",
"name": "test",
"json_data": { "machine1": "heel goed" , "machine2": "erg fout" , "machine3": "welkom" , "machine4": "iets anders", "machine5": "iets" }
}
Je kan nu in Grafana een dashboard maken kies table ipv timeserie en natuurlijk de SimpleJson Als bron. Kies test en zie je dashboard.
Als je info wegschrijft via API worden in de info.json en table.json enums als getallen weggeschreven ipv enum-strings