statistics.html/gws.html: Show gwinfo version of gateways

This requires changes to the MySQL database!

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
Adrian Schmutzler 2018-11-23 16:35:47 +01:00
parent 0bdb90d020
commit f26f01f73c
5 changed files with 14 additions and 9 deletions

View File

@ -13,6 +13,7 @@ mysql.execute("""
`id` smallint(5) UNSIGNED NOT NULL, `id` smallint(5) UNSIGNED NOT NULL,
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`stats_page` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, `stats_page` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`version` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`last_contact` datetime NOT NULL `last_contact` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
""") """)

View File

@ -16,17 +16,20 @@ def import_gw_data(mysql, gw_data):
if "hostname" in gw_data and "netifs" in gw_data: if "hostname" in gw_data and "netifs" in gw_data:
time = utcnow().strftime('%Y-%m-%d %H:%M:%S') time = utcnow().strftime('%Y-%m-%d %H:%M:%S')
stats_page = gw_data.get("stats_page","") stats_page = gw_data.get("stats_page","")
version = gw_data.get("version","")
# Make None if empty (gw_data.get() only checks for existing key) # Make None if empty (gw_data.get() only checks for existing key)
if not stats_page: if not stats_page:
stats_page = None stats_page = None
if not version:
version = None
newid = mysql.findone("SELECT id FROM gw WHERE name = %s LIMIT 1",(gw_data["hostname"],),"id") newid = mysql.findone("SELECT id FROM gw WHERE name = %s LIMIT 1",(gw_data["hostname"],),"id")
if newid: if newid:
mysql.execute(""" mysql.execute("""
UPDATE gw UPDATE gw
SET stats_page = %s, last_contact = %s SET stats_page = %s, version = %s, last_contact = %s
WHERE id = %s WHERE id = %s
""",(stats_page,time,newid,)) """,(stats_page,version,time,newid,))
mysql.execute(""" mysql.execute("""
UPDATE gw_netif UPDATE gw_netif
SET ipv4 = NULL, ipv6 = NULL, dhcpstart = NULL, dhcpend = NULL SET ipv4 = NULL, ipv6 = NULL, dhcpstart = NULL, dhcpend = NULL
@ -34,9 +37,9 @@ def import_gw_data(mysql, gw_data):
""",(newid,)) """,(newid,))
else: else:
mysql.execute(""" mysql.execute("""
INSERT INTO gw (name, stats_page, last_contact) INSERT INTO gw (name, stats_page, version, last_contact)
VALUES (%s, %s, %s) VALUES (%s, %s, %s, %s)
""",(gw_data["hostname"],stats_page,time,)) """,(gw_data["hostname"],stats_page,version,time,))
newid = mysql.cursor().lastrowid newid = mysql.cursor().lastrowid
nmacs = {} nmacs = {}

View File

@ -250,7 +250,7 @@ def hoods_gws(mysql):
def gateways(mysql): def gateways(mysql):
macs = mysql.fetchall(""" macs = mysql.fetchall("""
SELECT router_gw.mac, gw.name, gw.id AS gw, gw_netif.netif SELECT router_gw.mac, gw.name, gw.id AS gw, gw.version, gw_netif.netif
FROM router FROM router
INNER JOIN router_gw ON router.id = router_gw.router INNER JOIN router_gw ON router.id = router_gw.router
LEFT JOIN (gw_netif INNER JOIN gw ON gw_netif.gw = gw.id) LEFT JOIN (gw_netif INNER JOIN gw ON gw_netif.gw = gw.id)
@ -279,7 +279,7 @@ def gateways(mysql):
result = OrderedDict() result = OrderedDict()
for m in macs: for m in macs:
if not m["gw"] in result: if not m["gw"] in result:
result[m["gw"]] = {"name":m["name"],"macs":[],"selected":{},"others":{}} result[m["gw"]] = {"name":m["name"],"version":m["version"],"macs":[],"selected":{},"others":{}}
result[m["gw"]]["macs"].append(m["mac"]) result[m["gw"]]["macs"].append(m["mac"])
for rs in selected: for rs in selected:
result[rs["gw"]]["selected"][rs["status"]] = rs["count"] result[rs["gw"]]["selected"][rs["status"]] = rs["count"]
@ -394,7 +394,7 @@ def gws_info(mysql,selecthood=None):
tup = () tup = ()
data = mysql.fetchdict(""" 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, n2.ipv4 AS ipv4, n2.ipv6 AS ipv6, n2.dhcpstart AS dhcpstart, n2.dhcpend AS dhcpend SELECT router_gw.mac AS mac, gw.name AS gw, stats_page, version, n1.netif AS gwif, n2.netif AS batif, n2.mac AS batmac, n2.ipv4 AS ipv4, n2.ipv6 AS ipv6, n2.dhcpstart AS dhcpstart, n2.dhcpend AS dhcpend
FROM router FROM router
INNER JOIN router_gw ON router.id = router_gw.router INNER JOIN router_gw ON router.id = router_gw.router
LEFT JOIN ( LEFT JOIN (

View File

@ -67,7 +67,7 @@
<tbody> <tbody>
{%- for gw, value in gws.items() %} {%- for gw, value in gws.items() %}
<tr> <tr>
<td class="firstrow"><p style="margin:0">{{ value["name"] }}</p></td> <td class="firstrow"><p style="margin:0">{{ value["name"] }}{%- if value["version"] %} <span style="font-size:12px">({{ value["version"] }})</span>{%- endif %}</p></td>
<td class="success" data-order="{{ (value["selected"]["online"] or 0) + (value["others"]["online"] or 0) }}"><span style="font-weight:bold">{{ value["selected"]["online"] or 0 }}</span> / {{ value["others"]["online"] or 0 }}</td> <td class="success" data-order="{{ (value["selected"]["online"] or 0) + (value["others"]["online"] or 0) }}"><span style="font-weight:bold">{{ value["selected"]["online"] or 0 }}</span> / {{ value["others"]["online"] or 0 }}</td>
<td class="danger" data-order="{{ (value["selected"]["offline"] or 0) + (value["others"]["offline"] or 0) }}"><span style="font-weight:bold">{{ value["selected"]["offline"] or 0 }}</span> / {{ value["others"]["offline"] or 0 }}</td> <td class="danger" data-order="{{ (value["selected"]["offline"] or 0) + (value["others"]["offline"] or 0) }}"><span style="font-weight:bold">{{ value["selected"]["offline"] or 0 }}</span> / {{ value["others"]["offline"] or 0 }}</td>
<td class="warning" data-order="{{ (value["selected"]["unknown"] or 0) + (value["others"]["unknown"] or 0) }}"><span style="font-weight:bold">{{ value["selected"]["unknown"] or 0 }}</span> / {{ value["others"]["unknown"] or 0 }}</td> <td class="warning" data-order="{{ (value["selected"]["unknown"] or 0) + (value["others"]["unknown"] or 0) }}"><span style="font-weight:bold">{{ value["selected"]["unknown"] or 0 }}</span> / {{ value["others"]["unknown"] or 0 }}</td>

View File

@ -206,6 +206,7 @@
{%- for a in gws_admin %} {%- for a in gws_admin %}
<tr><th>Admin</th><td>{{ a }}</td></tr> <tr><th>Admin</th><td>{{ a }}</td></tr>
{%- endfor %} {%- endfor %}
<tr><th>gwinfo version</th><td>{{ gws_info[selectgwint]["version"] if gws_info[selectgwint]["version"] else "< 1.4 or custom" }}</td></tr>
</table> </table>
</div> </div>
</div> </div>