router.html: Fix long loading times

The mysql queries had been executed in a for loop, this is
moved to a single query now.

Side effect may be a little more JavaScript execution time.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
Adrian Schmutzler 2017-11-16 11:19:30 +01:00
parent b89468d655
commit bf1d1b8b2a
3 changed files with 26 additions and 22 deletions

View File

@ -98,21 +98,21 @@ def router_info(dbid):
router["stats"] = mysql.fetchall("""SELECT * FROM router_stats WHERE router = %s""",(dbid,))
for s in router["stats"]:
s["netifs"] = mysql.fetchdict("""
SELECT netif, rx, tx FROM router_stats_netif WHERE router = %s AND time = %s
""",(dbid,s["time"],),"netif")
s["neighbours"] = mysql.fetchdict("""
SELECT quality, mac FROM router_stats_neighbor WHERE router = %s AND time = %s
""",(dbid,s["time"],),"mac","quality")
#s["neighbours"] = mysql.fetchdict("""
# SELECT nb.mac, nb.quality, r.hostname, r.id
# FROM router_stats_neighbor AS nb
# INNER JOIN (
# SELECT router, mac FROM router_netif GROUP BY mac, router
# ) AS net ON nb.mac = net.mac
# INNER JOIN router as r ON net.router = r.id
# WHERE nb.router = %s AND time = %s""",(dbid,s["time"],),"mac")
mysql.utcaware(s["time"])
netiffetch = mysql.fetchall("""
SELECT netif, rx, tx, time FROM router_stats_netif WHERE router = %s
""",(dbid,))
for ns in netiffetch:
mysql.utcaware(ns["time"])
neighfetch = mysql.fetchall("""
SELECT quality, mac, time FROM router_stats_neighbor WHERE router = %s
""",(dbid,))
for ns in neighfetch:
mysql.utcaware(ns["time"])
if request.method == 'POST':
if request.form.get("act") == "delete":
@ -138,7 +138,7 @@ def router_info(dbid):
#FIXME: Only as admin
return Response(bson2json(router, sort_keys=True, indent=4), mimetype='application/json')
else:
return render_template("router.html", router=router, tileurls=tileurls)
return render_template("router.html", router=router, tileurls=tileurls, netifstats=netiffetch, neighstats=neighfetch)
except Exception as e: # most generic exception you can catch
logf = open("/data/fff/fail3.txt", "a")
logf.write("{}\n".format(str(e)))

View File

@ -70,11 +70,12 @@ function network_graph(netif) {
var netstat = $("#netstat");
var tx = [], rx = [];
var len, i;
for (len=router_stats.length, i=0; i<len; i++) {
for (len=netif_stats.length, i=0; i<len; i++) {
if (netif_stats[i].netif != netif) { continue; }
try {
var tx_value = router_stats[i].netifs[netif].tx;
var rx_value = router_stats[i].netifs[netif].rx;
var date_value = router_stats[i].time.$date;
var tx_value = netif_stats[i].tx;
var rx_value = netif_stats[i].rx;
var date_value = netif_stats[i].time.$date;
if(tx_value != null && rx_value != null) {
tx.push([date_value, tx_value]);
rx.push([date_value, rx_value]);
@ -115,10 +116,11 @@ function neighbour_graph(neighbours) {
var mac = neighbours[j].mac;
var data = [];
var len, i;
for (len=router_stats.length, i=0; i<len; i++) {
for (len=neigh_stats.length, i=0; i<len; i++) {
if (neigh_stats[i].mac != mac) { continue; }
try {
var quality = router_stats[i].neighbours[mac];
var date_value = router_stats[i].time.$date;
var quality = neigh_stats[i].quality;
var date_value = neigh_stats[i].time.$date;
if(quality == null) {
quality = 0;
}

View File

@ -310,6 +310,8 @@
</div>
<script type="text/javascript">
var router_stats = {{ router.stats|statbson2json|safe }};
var netif_stats = {{ netifstats|statbson2json|safe }};
var neigh_stats = {{ neighstats|statbson2json|safe }};
var neighbours = [
{%- for neighbour in router.neighbours %}
{"name": "{{ neighbour.hostname or neighbour.mac }}", "mac": "{{ neighbour.mac }}", "net_if": "{{ neighbour.net_if }}"},