From 3a0c35da64b2b03fcafdf45072e6a46b5f4ceb63 Mon Sep 17 00:00:00 2001 From: szczerbp <01159503@pw.edu.pl> Date: Wed, 19 Mar 2025 20:48:38 +0100 Subject: [PATCH 1/4] add branding to dashboard --- .../grafana/dashboards/node_monitoring.json | 96 ++++++++++++------ .../raspberry_pi/grafana/img/web3pi_logo.png | Bin 0 -> 47278 bytes 2 files changed, 66 insertions(+), 30 deletions(-) create mode 100644 distros/raspberry_pi/grafana/img/web3pi_logo.png diff --git a/distros/raspberry_pi/grafana/dashboards/node_monitoring.json b/distros/raspberry_pi/grafana/dashboards/node_monitoring.json index ddcfe42..720fda4 100644 --- a/distros/raspberry_pi/grafana/dashboards/node_monitoring.json +++ b/distros/raspberry_pi/grafana/dashboards/node_monitoring.json @@ -18,7 +18,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": null, + "id": 3, "links": [], "panels": [ { @@ -124,7 +124,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.2.2", + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -251,7 +251,7 @@ "showThresholdMarkers": true, "sizing": "auto" }, - "pluginVersion": "11.2.2", + "pluginVersion": "11.5.2", "targets": [ { "alias": "cpu_load", @@ -445,10 +445,12 @@ "showLegend": true }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, + "pluginVersion": "11.5.2", "targets": [ { "alias": "download", @@ -607,10 +609,12 @@ "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -764,7 +768,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.2.2", + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -901,7 +905,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.2.2", + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -956,8 +960,8 @@ "overrides": [] }, "gridPos": { - "h": 3, - "w": 4, + "h": 2, + "w": 2, "x": 0, "y": 5 }, @@ -982,7 +986,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.2.2", + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -1014,6 +1018,31 @@ "title": "Chain head", "type": "stat" }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 2, + "y": 5 + }, + "id": 46, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "
\r\n \r\n \"Web3Pi\r\n \r\n
\r\n", + "mode": "markdown" + }, + "pluginVersion": "11.5.2", + "title": "", + "type": "text" + }, { "datasource": "InfluxDB_v1", "description": "", @@ -1138,10 +1167,12 @@ "showLegend": true }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, + "pluginVersion": "11.5.2", "targets": [ { "alias": "cpu_usage", @@ -1255,14 +1286,20 @@ "overrides": [] }, "gridPos": { - "h": 6, + "h": 7, "w": 4, "x": 0, - "y": 8 + "y": 7 }, "id": 16, "options": { "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, "maxVizHeight": 300, "minVizHeight": 16, "minVizWidth": 0, @@ -1283,7 +1320,7 @@ }, "valueMode": "text" }, - "pluginVersion": "11.2.2", + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -1508,10 +1545,12 @@ "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, + "pluginVersion": "11.5.2", "targets": [ { "alias": "", @@ -1651,10 +1690,12 @@ "sortDesc": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -1825,10 +1866,12 @@ "sortDesc": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, + "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -3909,56 +3952,53 @@ "type": "row" } ], - "refresh": "5s", - "schemaVersion": 39, + "preload": false, + "refresh": "10s", + "schemaVersion": 40, "tags": [], "templating": { "list": [ { - "current": {}, + "current": { + "text": "eop-5_s", + "value": "eop-5_s" + }, "datasource": "InfluxDB_v1", "definition": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "description": "Single device Ethereum nodes", - "hide": 0, "includeAll": false, "label": "Single device nodes", - "multi": false, "name": "single_dev", "options": [], "query": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "refresh": 1, "regex": "/^.*_s$/", - "skipUrlSync": false, - "sort": 0, "type": "query" }, { - "current": {}, + "current": { + "text": "", + "value": "" + }, "datasource": "InfluxDB_v1", "definition": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "description": "Ethereum node based on two devices", - "hide": 0, "includeAll": false, "label": "Dual device nodes", - "multi": false, "name": "dual_dev", "options": [], "query": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "refresh": 1, "regex": "/^.*_d$/", - "skipUrlSync": false, - "sort": 0, "type": "query" }, { "current": { - "selected": false, "text": "_exec", "value": "_exec" }, "hide": 2, "includeAll": false, - "multi": false, "name": "dual_exec", "options": [ { @@ -3968,18 +4008,15 @@ } ], "query": "${dual_dev}_exec", - "skipUrlSync": false, "type": "custom" }, { "current": { - "selected": false, "text": "_consensus", "value": "_consensus" }, "hide": 2, "includeAll": false, - "multi": false, "name": "dual_consensus", "options": [ { @@ -3989,7 +4026,6 @@ } ], "query": "${dual_dev}_consensus", - "skipUrlSync": false, "type": "custom" } ] @@ -4002,6 +4038,6 @@ "timezone": "browser", "title": "Ethereum Nodes Monitor v2", "uid": "web3piv2p6eiob", - "version": 1, + "version": 2, "weekStart": "" } \ No newline at end of file diff --git a/distros/raspberry_pi/grafana/img/web3pi_logo.png b/distros/raspberry_pi/grafana/img/web3pi_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e496f597227473a84829af07f6119ec783c246 GIT binary patch literal 47278 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

I#2Xk9AEla$-bI*$ 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 XzZ#N&pkFusf{Ij?G!?P(<^lf$wlLIU literal 0 HcmV?d00001 From e5d5facf86d0dc18bf5992b42f287f79f5bb0e9c Mon Sep 17 00:00:00 2001 From: szczerbp <01159503@pw.edu.pl> Date: Thu, 20 Mar 2025 16:03:50 +0100 Subject: [PATCH 2/4] Add cp images to Grafana directory --- distros/raspberry_pi/install.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/distros/raspberry_pi/install.sh b/distros/raspberry_pi/install.sh index 0eb599f..33adf8a 100644 --- a/distros/raspberry_pi/install.sh +++ b/distros/raspberry_pi/install.sh @@ -506,6 +506,9 @@ if [ "$(get_install_stage)" -eq 2 ]; then # Copy dashboards.yaml for grafana cp /opt/web3pi/Ethereum-On-Raspberry-Pi/distros/raspberry_pi/grafana/yaml/dashboards.yaml /etc/grafana/provisioning/dashboards/dashboards.yaml + # Copy images for grafana + cp /opt/web3pi/Ethereum-On-Raspberry-Pi/distros/raspberry_pi/grafana/img/*.png /usr/share/grafana/public/img/ + grafana-server # systemctl enable grafana-server systemctl start grafana-server From fd439d3e7a1b033f53259d44786e2c29bb4482af Mon Sep 17 00:00:00 2001 From: szczerbp <01159503@pw.edu.pl> Date: Wed, 26 Mar 2025 09:43:02 +0100 Subject: [PATCH 3/4] Revert some changes --- .../grafana/dashboards/node_monitoring.json | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/distros/raspberry_pi/grafana/dashboards/node_monitoring.json b/distros/raspberry_pi/grafana/dashboards/node_monitoring.json index 720fda4..719704f 100644 --- a/distros/raspberry_pi/grafana/dashboards/node_monitoring.json +++ b/distros/raspberry_pi/grafana/dashboards/node_monitoring.json @@ -18,7 +18,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 3, + "id": null, "links": [], "panels": [ { @@ -445,12 +445,10 @@ "showLegend": true }, "tooltip": { - "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.5.2", "targets": [ { "alias": "download", @@ -609,12 +607,10 @@ "showLegend": false }, "tooltip": { - "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -1167,12 +1163,10 @@ "showLegend": true }, "tooltip": { - "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.5.2", "targets": [ { "alias": "cpu_usage", @@ -1545,12 +1539,10 @@ "showLegend": false }, "tooltip": { - "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.5.2", "targets": [ { "alias": "", @@ -1690,12 +1682,10 @@ "sortDesc": false }, "tooltip": { - "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -1866,12 +1856,10 @@ "sortDesc": false }, "tooltip": { - "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.5.2", "targets": [ { "datasource": "InfluxDB_v1", @@ -3952,53 +3940,56 @@ "type": "row" } ], - "preload": false, "refresh": "10s", "schemaVersion": 40, "tags": [], "templating": { "list": [ { - "current": { - "text": "eop-5_s", - "value": "eop-5_s" - }, + "current": {}, "datasource": "InfluxDB_v1", "definition": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "description": "Single device Ethereum nodes", + "hide": 0, "includeAll": false, "label": "Single device nodes", + "multi": false, "name": "single_dev", "options": [], "query": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "refresh": 1, "regex": "/^.*_s$/", + "skipUrlSync": false, + "sort": 0, "type": "query" }, { - "current": { - "text": "", - "value": "" - }, + "current": {}, "datasource": "InfluxDB_v1", "definition": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "description": "Ethereum node based on two devices", + "hide": 0, "includeAll": false, "label": "Dual device nodes", + "multi": false, "name": "dual_dev", "options": [], "query": "SHOW TAG VALUES FROM \"status_node\" with Key= \"host\" ", "refresh": 1, "regex": "/^.*_d$/", + "skipUrlSync": false, + "sort": 0, "type": "query" }, { "current": { + "selected": false, "text": "_exec", "value": "_exec" }, "hide": 2, "includeAll": false, + "multi": false, "name": "dual_exec", "options": [ { @@ -4008,15 +3999,18 @@ } ], "query": "${dual_dev}_exec", + "skipUrlSync": false, "type": "custom" }, { "current": { + "selected": false, "text": "_consensus", "value": "_consensus" }, "hide": 2, "includeAll": false, + "multi": false, "name": "dual_consensus", "options": [ { @@ -4026,6 +4020,7 @@ } ], "query": "${dual_dev}_consensus", + "skipUrlSync": false, "type": "custom" } ] @@ -4038,6 +4033,6 @@ "timezone": "browser", "title": "Ethereum Nodes Monitor v2", "uid": "web3piv2p6eiob", - "version": 2, + "version": 1, "weekStart": "" } \ No newline at end of file From 3a6a5a8777c99c4ef8fea076a10f7460f91bbdda Mon Sep 17 00:00:00 2001 From: szczerbp <01159503@pw.edu.pl> Date: Wed, 26 Mar 2025 14:41:30 +0100 Subject: [PATCH 4/4] Change branch name --- distros/raspberry_pi/rc.local | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distros/raspberry_pi/rc.local b/distros/raspberry_pi/rc.local index d6b5f68..265841b 100644 --- a/distros/raspberry_pi/rc.local +++ b/distros/raspberry_pi/rc.local @@ -3,7 +3,7 @@ # Web3 Pi - rc.local # -BRANCH="v0.7.4" +BRANCH="branded-dashboard" # Function: echolog # Description: Logs messages with a timestamp prefix. If no arguments are provided,