[PATCH v2 2/3] fff-web: Label Freifunk routers individually in wifiscan.html

Tim Niemeyer tim at tn-x.org
Sa Nov 4 15:32:47 CET 2017


Hi

Am Freitag, den 20.10.2017, 00:25 +0200 schrieb Adrian Schmutzler:
> This patch enables labelling of routers in the WebUI's WiFi
> scan page, so their hostname is displayed instead of
> freifunk.franken.net. The evaluation is performed based on
> a WifiAnalyzer style node file /tmp/wifinodelist.
> 
> In the WebUI, this file may be provided by file upload or by
> downloading from the Monitoring API (if the router has
> internet access).
> 
> Changes in v2: none
> 
> Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
> 
> Tested-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
> ---
>  .../fff-web/files/www/ssl/cgi-bin/wifiscan.html    | 91
> ++++++++++++++++++++--
>  1 file changed, 85 insertions(+), 6 deletions(-)
> 
> diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-
> bin/wifiscan.html b/src/packages/fff/fff-web/files/www/ssl/cgi-
> bin/wifiscan.html
> index 254c24b..29f99e5 100755
> --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
> +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
> @@ -1,8 +1,61 @@
> -#!/usr/bin/haserl
> +#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=12000
Können bei dem upload-dir wichtige Status-Files etc überschrieben
werden? Sollte ein extra Verzeichnis gewählt werden?

Vielleicht mit sowas: mktemp -d, vielleicht geht auch -u (für den Fall,
dass gar nicht hochgeladen wurde).

> +<%
> +# treat post
> +if [ "$REQUEST_METHOD" == "POST" ] ; then
> > +	if [ "$POST_wifiupload" != "" ] ; then
> > +		if [ ! -f "$HASERL_nodelist_path" ] ; then
> > +			MSG='<span class="red">Node-Datei nicht gefunden!</span>'
> > +		elif [ "$(du -k "$HASERL_nodelist_path" | cut -f1)" == "0" ] ; then
> > +			MSG='<span class="red">Node-Datei ist leer!</span>'
> > +		else
> > +			mv "$HASERL_nodelist_path" /tmp/wifinodelist
> > +			MSG='<span class="green">Upload erfolgreich!</span>'
> > +		fi
> > +	fi
> > +	if [ "$POST_wifidownload" != "" ] ; then
> +		if [ ! -n "$POST_hood" ] ; then
Vielleicht direkt aus dem Hoodfile laden?

> +			MSG='<span class="red">Hood nicht angegeben!</span>'
> > +		else
> +			if /bin/wget -T 10 -O /tmp/wifinodelist "https://monitoring.freifunk-franken.de/api/wifianal/$POST_hood" 2> /dev/null ; then
Wenn wir das monitoring endlich per v6 im Freifunk erreichbar haben,
sollte da eigentlich jeder Knoten drauf zugreifen können.. :-)

> +				MSG='<span class="green">Download erfolgreich!</span>'
> > +			else
> > +				MSG='<span class="red">Download fehlgeschlagen!</span>'
> > +			fi
> > +		fi
> > +	fi
> +fi
> +%>
>  <%in /www/ssl/cgi-bin/header %>
> +<%in /www/ssl/cgi-bin/helpers %>
> +<% show_msg %>
> +<%
> +if [ -s /tmp/wifinodelist ] ; then
> > +	numentries="$(grep -c '^[^#]' /tmp/wifinodelist)"
> > +	filehood="$(grep -e "#Hood:" /tmp/wifinodelist | awk -F" " '{print $2}')"
> > +	havelist="<span style='color:green'>Ja (Hood: ${filehood}, ${numentries} Einträge)</span>"
> +else
> > +	havelist='<span style="color:red">Nein</span>'
> +fi
> +%>
>  <table style="width: 100%">
>  <tr><td>
> +<form method="post" enctype="multipart/form-data">
> +<fieldset>
> > +	<legend>Wifi Node File</legend>
> > +	<table>
> > +		<tr><th style="width: 20em;text-align:left;padding-bottom:10px">Alias Liste vorhanden:</th><td style="padding-bottom:10px"><%= "$havelist" %></td></tr>
> > +		<tr><th style="width: 20em;text-align:left">Upload Node-Liste:</th><td><input type="file" name="nodelist" /></td></tr>
> > +		<tr><td colspan="2" style="padding:10px 0">Hier kann eine Node-Liste (WiFiAnalyzer-Stil) hochgeladen werden.</td></tr>
> > +		<tr><td colspan="2"><input type="submit" name="wifiupload" value="Datei-Upload auf Router" /></td></tr>
> > +		<tr><td colspan="2" style="padding:10px 0">Wenn der Router mit dem Internet verbunden ist, kann die Node-Liste vom Monitoring bezogen werden:</td></tr>
> > +		<tr><th style="width: 20em;text-align:left">Name der Hood:</th><td><input type="text" name="hood" value="" /></td></tr>
> > +		<tr><td colspan="2" style="padding:10px 0"><input type="submit" name="wifidownload" value="Datei-Download von Monitoring" /></td></tr>
> > +	</table>
> +</fieldset>
> +</form>
> +</td></tr>
> +<tr><td>
>  <fieldset>
> >  	<legend>Wifi Scan</legend>
> >  	<table class="wifitable">
> @@ -16,11 +69,37 @@
> >  		</tr>
>  
>  <%
> -iwinfo w2mesh scan |\
> > -	awk -v RS='' \
> > -	'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
> > -	"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&#'
> > -	# The HTML comment contains the signal quality to allow sorting
> +if [ -s /tmp/wifinodelist ] ; then
> > +	firststep=$(iwinfo w2mesh scan |\
> > +		awk -v RS='' \
> > +		'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
> > +		"<!-- \\5 --><tr><ssid>\\2</ssid><td>\\4</td><td>\\5 dBm</td><td>\\3</td><mac>\\1</mac><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&#')
> +		# The HTML comment contains the signal quality to allow sorting
Die Zuweisung von firststep kann man vor der If-Abfrage machen.

> +
> > +	echo "$firststep" | while read line ; do
> > +		mac="$(echo "$line" | sed -e 's#.*<mac>\(.*\)</mac>.*#\1#')"
> > +		routerid="$(grep -i -e "$mac" /tmp/wifinodelist | awk -F"|" '{print $2}')"
> > +		if [ -n "$routerid" ] ; then
> > +			ssid="<span style='color:green'>${routerid}</span>"
> > +		else
> > +			ssidtmp="$(echo "$line" | sed -e 's#.*<ssid>\(.*\)</ssid>.*#\1#')"
> > +			if [ "$ssidtmp" = "unknown" ] ; then
> > +				ssid="<span style='color:blue'>${ssidtmp}</span>"
> > +			else
> > +				ssid="$ssidtmp"
> > +			fi
> > +		fi
> > +		midpart=$(echo "$line" | sed -e 's#.*</ssid>\(.*\)<mac>.*#\1#')
> > +		endpart=$(echo "$line" | sed -e 's#.*</mac>\(.*\)</tr>.*#\1#')
> +		echo "<tr><td>${ssid}</td>${midpart}<td>${mac}</td>${endpart}</tr>"
Irgendwie wirkt der ganze Abschnitt von hinten durchs Knie.. Erst wird
alles kompliziert geparsed und in HTML gebracht. Dann schnibbelst du
das ganze html wieder auseinader, um am Ende teile davon dann doch
wieder dran zu kleben .. uff .. Naja. Es ist eine Lösung, ich könnte
damit leben, aber wirklich schön ist das nicht.

Vielleicht kann man das Zeug aus firststep irgendwie in ein
Übergangsformat bringen? Vielleicht sogar einfach eine Funktion
aufrufen oder so..


> +	done
> +else
+	iwinfo w2mesh scan |\
> > +		awk -v RS='' \
> > +		'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
> > +		"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&#'
> +		# The HTML comment contains the signal quality to allow sorting
Man kann hier einfach "echo $firststep" machen.

Tim
> +fi
>  %>
> >  	</table>
>  </fieldset>
> -- 
> 2.7.4
> 
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 488 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20171104/0d735967/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev