From 669895cd7b478f55fe5b4551fcc14cf6dcd10d48 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Fri, 12 Jan 2018 13:41:50 +0100 Subject: [PATCH] router.html/statistics.html: Display gateway/batX where available Signed-off-by: Adrian Schmutzler --- ffmap/gwtools.py | 16 +++++++++++++++- ffmap/stattools.py | 26 ++++++++++++++++++++++++++ ffmap/web/application.py | 15 +++++++++++++-- ffmap/web/templates/router.html | 6 ++++-- ffmap/web/templates/statistics.html | 2 +- 5 files changed, 59 insertions(+), 6 deletions(-) diff --git a/ffmap/gwtools.py b/ffmap/gwtools.py index 6d2e7a7..c71fe74 100644 --- a/ffmap/gwtools.py +++ b/ffmap/gwtools.py @@ -7,7 +7,7 @@ sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/' + '..')) from ffmap.mysqltools import FreifunkMySQL from ffmap.misc import * from ffmap.config import CONFIG -from flask import request +from flask import request, url_for import datetime import time @@ -62,3 +62,17 @@ def import_gw_data(mysql, gw_data): """,adata) else: writelog(CONFIG["debug_dir"] + "/fail_gwinfo.txt", "{} - Corrupted file.".format(request.environ['REMOTE_ADDR'])) + +def gw_name(gw): + if gw["gw"] and gw["gwif"]: + s = gw["gw"] + " (" + gw["gwif"] + ")" + else: + s = gw["mac"] + return s + +def gw_bat(gw): + if gw["batif"] and gw["batmac"]: + s = gw["batmac"] + " (" + gw["batif"] + ")" + else: + s = "---" + return s diff --git a/ffmap/stattools.py b/ffmap/stattools.py index b6c651c..8fc0629 100644 --- a/ffmap/stattools.py +++ b/ffmap/stattools.py @@ -5,6 +5,7 @@ import sys sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/' + '..')) from ffmap.mysqltools import FreifunkMySQL +from ffmap.gwtools import gw_name, gw_bat from ffmap.misc import * from ffmap.config import CONFIG @@ -209,6 +210,31 @@ def gws_sum(mysql,selecthood=None): result[rs["mac"]] = {"routers": rs["count"], "clients": rs["clients"]} return result +def gws_info(mysql,selecthood=None): + if selecthood: + where = "WHERE hood=%s" + tup = (selecthood,) + else: + where = "" + tup = () + + data = mysql.fetchdict(""" + SELECT router_gw.mac AS mac, gw.name AS gw, stats_page, n1.netif AS gwif, n2.netif AS batif, n2.mac AS batmac + FROM router + INNER JOIN router_gw ON router.id = router_gw.router + LEFT JOIN ( + gw_netif AS n1 + INNER JOIN gw ON n1.gw = gw.id + LEFT JOIN gw_netif AS n2 ON n1.netif = n2.vpnif AND n1.gw = n2.gw + ) ON router_gw.mac = n1.mac + {} + GROUP BY router_gw.mac, n2.netif, n2.mac + """.format(where),tup,"mac") + for d in data.values(): + d["label"] = gw_name(d) + d["batX"] = gw_bat(d) + return data + def record_global_stats(mysql): threshold=(utcnow() - datetime.timedelta(days=CONFIG["global_stat_days"])).timestamp() time = mysql.utctimestamp() diff --git a/ffmap/web/application.py b/ffmap/web/application.py index 5cc8a8c..50bce05 100755 --- a/ffmap/web/application.py +++ b/ffmap/web/application.py @@ -10,6 +10,7 @@ from ffmap.mysqltools import FreifunkMySQL from ffmap import stattools from ffmap.usertools import * from ffmap.routertools import delete_router, ban_router +from ffmap.gwtools import gw_name, gw_bat from ffmap.web.helpers import * from ffmap.config import CONFIG from ffmap.misc import writelog, writefulllog @@ -119,10 +120,18 @@ def router_info(dbid): # FIX SQL: only one from router_netif router["gws"] = mysql.fetchall(""" - SELECT mac, quality, netif, gw_class, selected + SELECT router_gw.mac AS mac, quality, router_gw.netif AS netif, gw_class, selected, gw.name AS gw, n1.netif AS gwif, n2.netif AS batif, n2.mac AS batmac FROM router_gw + LEFT JOIN ( + gw_netif AS n1 + INNER JOIN gw ON n1.gw = gw.id + LEFT JOIN gw_netif AS n2 ON n1.netif = n2.vpnif AND n1.gw = n2.gw + ) ON router_gw.mac = n1.mac WHERE router = %s """,(dbid,)) + for gw in router["gws"]: + gw["label"] = gw_name(gw) + gw["batX"] = gw_bat(gw) router["events"] = mysql.fetchall("""SELECT * FROM router_events WHERE router = %s""",(dbid,)) router["events"] = mysql.utcawaretuple(router["events"],"time") @@ -382,6 +391,7 @@ def helper_statistics(mysql,stats,selecthood,selectgw): hoods_sum = stattools.hoods_sum(mysql,selectgw) gws = stattools.gws(mysql,selecthood) gws_sum = stattools.gws_sum(mysql,selecthood) + gws_info = stattools.gws_info(mysql,selecthood) mysql.close() return render_template("statistics.html", @@ -396,7 +406,8 @@ def helper_statistics(mysql,stats,selecthood,selectgw): hoods_sum = hoods_sum, newest_routers = newest_routers, gws = gws, - gws_sum = gws_sum + gws_sum = gws_sum, + gws_info = gws_info ) except Exception as e: writelog(CONFIG["debug_dir"] + "/fail_stats.txt", str(e)) diff --git a/ffmap/web/templates/router.html b/ffmap/web/templates/router.html index 8183b7c..9ca3eb1 100644 --- a/ffmap/web/templates/router.html +++ b/ffmap/web/templates/router.html @@ -322,7 +322,8 @@
- + + @@ -333,7 +334,8 @@ {%- else %} {%- endif %} - + + diff --git a/ffmap/web/templates/statistics.html b/ffmap/web/templates/statistics.html index fd74baf..235387c 100644 --- a/ffmap/web/templates/statistics.html +++ b/ffmap/web/templates/statistics.html @@ -138,7 +138,7 @@ {%- for mac, value in gws|dictsort %} - +
MAC (fastd/l2tp)GatewaybatX Qual Netif Class
{{ gw.mac }}{{ gw.label }}{{ gw.batX }} {{ gw.quality }} {{ gw.netif }} {{ gw.gw_class }}
{{ mac }}{{ gws_info[mac]["label"] }} {{ value["selected"]["online"] or 0 }} / {{ value["others"]["online"] or 0 }} {{ value["selected"]["offline"] or 0 }} / {{ value["others"]["offline"] or 0 }} {{ value["selected"]["unknown"] or 0 }} / {{ value["others"]["unknown"] or 0 }}