Wir betreiben fuer unsere Karte eine Yanic-Installation auf ffs03. Wir benutzen als Datenbank fuer Yanic influxdb und als Karte meshviewer.
Yanic sammelt in unserem Netz die respondd-Daten von allen Nodes ein. Sie werden dann in folgenden Formaten zur Verfuegung gestellt:
URL | Zweck | generiert von |
---|---|---|
https://map.freifunk-stuttgart.de/data/nodelist.json | nodelist fuer ffapi | yanic, output nodes.output.nodelist |
https://map.freifunk-stuttgart.de/data/meshviewer.json | Daten fuer meshviewer | yanic, output nodes.output.meshviewer-ffrgb |
https://map.freifunk-stuttgart.de/data/nodelist.json | Details fuer freifunk-karte.de | yanic, output nodes.output.nodelist |
https://map.freifunk-stuttgart.de/data/nodes.geojson | ? | yanic, output nodes.output.geojson |
https://map.freifunk-stuttgart.de/data/raw.json | Restricted, monitore | yanic, output nodes.output.raw |
https://map.freifunk-stuttgart.de/json/FreifunkStuttgart-api.json | API | respondd-alfred-converter, update_apifile.py |
https://map.freifunk-stuttgart.de/json/nodes.json | appmap, unklar? | respondd-alfred-converter, update_appmap.py |
https://map.freifunk-stuttgart.de/nodelist/ | Nodelist | respondd-alfred-converter, nodes-list.py |
Aus historischen Gruenden™ gibt es auf yanic ein Konvertierskript carbon.py, das die raw.json von Yanic aus dem Dateisystem liest und in collectd-Format konvertiert. Collectd wird dann wiederrum per Prometheus gescraped.
Ja, das muesste mal™ jemand aufraeumen.
apt install npm
git clone https://github.com/ffsh/meshviewer.git cd meshviewer npm install ./node_modules/.bin/yarn ./node_modules/.bin/yarn run gulp
Eine Buildumgebung fuer Meshviewer liegt auf ffs-yanic01 unter /opt/meshviewer. Die erzeugten Dateien aus dem Build-Verzeichnuss muessen nach /var/www/html/meshviewer kopiert werden.
In der meshviewer Config haben wir fuer das Segment und die PLZ benutzerdefinierte Felder hinterlegt. Die interessanten Codezeilen sind:
{ 'name': 'node.segment', 'value': function(d) { var seg = null d.addresses.forEach(function(addr) { if (addr.startsWith("fd21:b4dc")) { addr_split = addr.split(":") if (addr_split.length > 2) { seg = addr_split[2].replace("4b", "") } } }) if (!seg) { return "?" } return seg } }, { 'name': 'node.zip', 'value': function(d) { if (d.custom_fields && d.custom_fields.zip) { return d.custom_fields.zip } return "?" } },