Add 2500 nodes with non-standard (Gluon) version numbers#119
Add 2500 nodes with non-standard (Gluon) version numbers#119T-X wants to merge 9 commits intofreifunk-gluon:mainfrom
Conversation
2264ee6 to
27ee671
Compare
|
This PR was mainly motivated by slightly misleading values in this graph: https://gluon-census.ffrn.de/d/CA5PRFmMz/gluon-census3a-dashboard?orgId=1&from=now-10d&to=now&timezone=browser&var-community=$__all&var-version_major=$__all&var-version=v2025.1&var-version=v2023.2.5&var-version=v2023.2.4&var-version=v2023.2.3&var-version=v2023.2.2&var-version=v2023.2.1&var-version=v2023.2&var-version=v2023.1.2&var-version=v2023.1.1&var-version=v2023.1&var-models=$__all&refresh=15m&viewPanel=panel-28. |
|
Thanks for sharing the motivation :) Is there a better way to filter non gluon devices out, even if they provide respondd data? |
|
(it feels like they are out of scope, but I might be wrong) |
|
@AiyionPrime to always leave out non-gluon devices one could just omit the last two patches in this PR. But I thought these aren't that many and I still found it interesting to know. Of course, with the last two patches (nearly) all graphs probably would need an update/addition to filter out outputs for vtype=foreign and vtype=undefined, if a graph is supposed to only show counts for devices running Gluon. My preference would be to do this. And then I would be interested to create one new graph showing the number of Gluon nodes vs. "foreign" vs. "undefined". |
|
@AiyionPrime hm, or another option could be to use a separate table for the "foreign" (e.g. "version=Debian/NixOs/Ubuntu/..." and "undefined" (no version info) ones. So instead of putting these nodes into metric_gluon_version_total, one could introduce a new metric_gluon_foreign_total, for instance? Advantage: No changes needed to current graphs only showing Gluon nodes? |
e061026 to
a9485e1
Compare
|
Rebased onto:
Also migrated the foreign/unknown node counting to a separate prometheus collection. |
The global "seen" and "duplicates" variables are used in a sub function. Therefore it is not necessary to declare them global in the parser functions. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
As we already use classes just use an appropriate initializer to avoid initializing per parser. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
Adding a "Collections summaries" debug output line as follows: ``` [...] 2026-01-20 02:56:04 [info ] Collections summaries domain_sum=31569 model_sum=37589 version_sum=34872 2026-01-20 02:56:04 [info ] Summary duplicate=82 unique=39152 ``` This allows to more easily and early on check that a change likely/hopefully has no regression. Without needing to manually sum things up from the gluon-census.prom file, without needing to wait for rendered Grafana graphs. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
Currently we only consider nodes which have a base version string which has which a typical Gluon release version string prefix. However there are several nodes / communities which have a different format, for instance because they didn't import the Gluon tags or because they copied the repository without Git metadata. This restructuring allows to add more pattern matches later. This also adds a new label "vtype", currently defaulting to a value of "gluon-base", intended for the current behaviour of matching nodes with an expected Gluon version tag prefix. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
This adds the following ~1132 nodes:
gluon_base_total{base="gluon-unknown",community="Erfurt",version="gluon-unknown",vtype="gluon-unknown"} 25.0
gluon_base_total{base="gluon-unknown",community="Harz",version="gluon-unknown",vtype="gluon-unknown"} 803.0
gluon_base_total{base="gluon-unknown",community="Ingolstadt",version="gluon-unknown",vtype="gluon-unknown"} 1.0
gluon_base_total{base="gluon-unknown",community="Rhein-Sieg",version="gluon-unknown",vtype="gluon-unknown"} 303.0
"(gluon-)unknown" is output and baked into a firmware by Gluon's
./scripts/getversion.sh if no .git repository is present.
Track these nodes with a 'vtype="gluon-unknown"' label.
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
This adds the following ~114 nodes:
gluon_base_total{base="gluon-ff0c72f",community="Erfurt",version="gluon-ff0c72f",vtype="gluon-commitid"} 55.0
gluon_base_total{base="gluon-d2a9cc3",community="Erfurt",version="gluon-d2a9cc3",vtype="gluon-commitid"} 3.0
gluon_base_total{base="gluon-031a835",community="Erfurt",version="gluon-031a835",vtype="gluon-commitid"} 7.0
gluon_base_total{base="gluon-b9a621f",community="Erfurt",version="gluon-b9a621f",vtype="gluon-commitid"} 3.0
gluon_base_total{base="gluon-2ea83c4",community="Erfurt",version="gluon-2ea83c4",vtype="gluon-commitid"} 6.0
gluon_base_total{base="gluon-d0f43ae",community="Erfurt",version="gluon-d0f43ae",vtype="gluon-commitid"} 10.0
gluon_base_total{base="gluon-f1f7f61",community="Südholstein",version="gluon-f1f7f61",vtype="gluon-commitid"} 30.0
"(gluon-)$commitid" is output and baked into a firmware by Gluon's
./scripts/getversion.sh if a .git repository is present, but without any
annotated Git tags. Track these nodes with a 'vtype="gluon-commitid"' label.
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
This adds the following ~29 nodes:
gluon_base_total{base="gluon-2019-09-27",community="Halle",version="gluon-2019-09-27",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-2022.1+mwu1",community="Mainz/Wiesbaden",version="gluon-2022.1+mwu1",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-15-05-2018",community="Münsterland",version="gluon-15-05-2018",vtype="gluon-custom"} 2.0
gluon_base_total{base="gluon-experimental-2025-05-27",community="Stuttgart",version="gluon-experimental-2025-05-27",vtype="gluon-custom"} 13.0
gluon_base_total{base="gluon-experimental-2025-05-18",community="Stuttgart",version="gluon-experimental-2025-05-18",vtype="gluon-custom"} 5.0
gluon_base_total{base="gluon-experimental-2025-01-06",community="Stuttgart",version="gluon-experimental-2025-01-06",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-experimental-2025-10-02",community="Stuttgart",version="gluon-experimental-2025-10-02",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-experimental-2025-09-19",community="Stuttgart",version="gluon-experimental-2025-09-19",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-experimental-2025-10-15",community="Stuttgart",version="gluon-experimental-2025-10-15",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-experimental-2025-05-08",community="Stuttgart",version="gluon-experimental-2025-05-08",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-experimental-2025-10-23-base-28-g423258a+",community="Stuttgart",version="gluon-experimental-2025-10-23-base-28-g423258a+",vtype="gluon-custom"} 1.0
gluon_base_total{base="gluon-experimental-2024-11-24-4-g4b02790",community="Stuttgart",version="gluon-experimental-2024-11-24-4-g4b02790",vtype="gluon-custom"} 1.0
These were likely created via a custom .scmversion in the Gluon
repository / via a GLUON_VERSION environment variable.
Track these nodes with a 'vtype="gluon-custom"' label.
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
This adds the following ~1211 nodes:
gluon_base_total{base="Debian",community="Bremen",version="Debian",vtype="foreign"} 3.0
gluon_base_total{base="NixOS",community="Darmstadt",version="NixOS",vtype="foreign"} 149.0
gluon_base_total{base="Debian",community="Chemnitz",version="Debian",vtype="foreign"} 2.0
gluon_base_total{base="Debian",community="Altdorf",version="Debian",vtype="foreign"} 11.0
gluon_base_total{base="Ubuntu",community="Aachen",version="Ubuntu",vtype="foreign"} 20.0
gluon_base_total{base="Debian",community="Aachen",version="Debian",vtype="foreign"} 20.0
gluon_base_total{base="Debian",community="Einbeck",version="Debian",vtype="foreign"} 2.0
gluon_base_total{base="Ubuntu",community="Emskirchen",version="Ubuntu",vtype="foreign"} 3.0
gluon_base_total{base="Debian",community="Essen",version="Debian",vtype="foreign"} 1.0
gluon_base_total{base="Ubuntu",community="Essen",version="Ubuntu",vtype="foreign"} 1.0
gluon_base_total{base="Debian",community="Dreiländereck",version="Debian",vtype="foreign"} 95.0
gluon_base_total{base="OpenWrt 18.06.2 r7676-cddd7b4c77",community="Dreiländereck",version="OpenWrt 18.06.2 r7676-cddd7b4c77" vtype="foreign"} 1.0
gluon_base_total{base="Ubuntu 20.04",community="Dresden",version="Ubuntu 20.04",vtype="foreign"} 3.0
gluon_base_total{base="Debian 12",community="Dresden",version="Debian 12",vtype="foreign"} 18.0
gluon_base_total{base="Debian 11",community="Dresden",version="Debian 11",vtype="foreign"} 7.0
gluon_base_total{base="OpenWrt 22.03.7",community="Dresden",version="OpenWrt 22.03.7",vtype="foreign"} 437.0
gluon_base_total{base="OpenWrt 18.06-SNAPSHOT r0+8073-5625f5bc36",community="Dresden",version="OpenWrt 18.06-SNAPSHOT r0+8073-5625f5bc36",vtype="foreign"} 223.0
gluon_base_total{base="OpenWrt 21.02.3",community="Dresden",version="OpenWrt 21.02.3",vtype="foreign"} 151.0
gluon_base_total{base="OpenWrt 21.02.1",community="Dresden",version="OpenWrt 21.02.1",vtype="foreign"} 1.0
gluon_base_total{base="OpenWrt 22.03.6",community="Dresden",version="OpenWrt 22.03.6",vtype="foreign"} 14.0
gluon_base_total{base="OpenWrt 22.03.5",community="Dresden",version="OpenWrt 22.03.5",vtype="foreign"} 31.0
gluon_base_total{base="OpenWrt 21.02.2",community="Dresden",version="OpenWrt 21.02.2",vtype="foreign"} 3.0
gluon_base_total{base="Freifunk Dresden 24.10.2",community="Dresden",version="Freifunk Dresden 24.10.2",vtype="foreign"} 12.0
gluon_base_total{base="OpenWrt 19.07.6",community="Dresden",version="OpenWrt 19.07.6",vtype="foreign"} 1.0
gluon_base_total{base="Ubuntu 22.04",community="Dresden",version="Ubuntu 22.04",vtype="foreign"} 1.0
gluon_base_total{base="Freifunk Dresden 24.10.0-rc5",community="Dresden",version="Freifunk Dresden 24.10.0-rc5",vtype="foreign"} 1.0
These are nodes which provide respondd data to meshviewer etc., but
which are not Gluon nodes. Track these nodes with a "vtype=foreign"
label. Track these nodes with a 'vtype="foreign"' label.
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
This adds the following ~30 nodes:
gluon_base_total{base="undefined",community="Frankfurt",version="undefined",vtype="undefined"} 1.0
gluon_base_total{base="undefined",community="Mainz/Wiesbaden",version="undefined",vtype="undefined"} 1.0
gluon_base_total{base="undefined",community="München",version="undefined",vtype="undefined"} 15.0
gluon_base_total{base="undefined",community="Nordhessen",version="undefined",vtype="undefined"} 14.0
These nodes provide a node_id but don't provide a .firmware.base
or .nodeinfo.software.firmware.base version.
Track these nodes with a 'vtype="undefined"' label.
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
|
Changelog v3:
|
This adds around 1250 Gluon nodes which have some slightly "unconventional" version strings. Which, even though their Gluon base cannot be determined, are still clearly Gluon nodes.
For a bit more control on graph creation with these nodes included the extra label "vtype" is added. So if one would like to keep a graph as is, with these new nodes excluded, one can filter for a
vtype="gluon-base"label. The new nodes are using avtype="gluon-unknown",vtype="gluon-commitid"andvtype="gluon-custom"label. See the respective Git commits for details.Furthermore, this adds around 1250 nodes which do not run Gluon, but which still announce themselves to the Gluon census exporter. These are mainly Debian/Ubuntu/NixOS systems. But also OpenWrt routers from Freifunk Dresden. To ignore these nodes in graphs, one can filter them out via the new
vtype="foreign"label. And some announce no version at all, these can be filtered out via the newvtype="undefined".