api: Merge code for different node lists
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
parent
e495b200eb
commit
339122bc0c
|
@ -347,18 +347,18 @@ def dnsentries():
|
||||||
|
|
||||||
return Response(s,mimetype='text/plain')
|
return Response(s,mimetype='text/plain')
|
||||||
|
|
||||||
@api.route('/routers')
|
def nodelist_helper(where = "",data=()):
|
||||||
def routers():
|
|
||||||
# Suppresses routers without br-mesh
|
# Suppresses routers without br-mesh
|
||||||
mysql = FreifunkMySQL()
|
mysql = FreifunkMySQL()
|
||||||
router_data = mysql.fetchall("""
|
router_data = mysql.fetchall("""
|
||||||
SELECT router.id, hostname, status, hoods.id AS hoodid, hoods.name AS hood, contact, nickname, hardware, firmware, clients, lat, lng, last_contact, mac, sys_loadavg
|
SELECT router.id, hostname, status, hoods.id AS hoodid, hoods.name AS hood, contact, nickname, hardware, firmware, clients, lat, lng, last_contact, mac, sys_loadavg, fe80_addr
|
||||||
FROM router
|
FROM router
|
||||||
INNER JOIN hoods ON router.hood = hoods.id
|
INNER JOIN hoods ON router.hood = hoods.id
|
||||||
INNER JOIN router_netif ON router.id = router_netif.router
|
INNER JOIN router_netif ON router.id = router_netif.router
|
||||||
LEFT JOIN users ON router.contact = users.email
|
LEFT JOIN users ON router.contact = users.email
|
||||||
WHERE netif = 'br-mesh'
|
WHERE netif = 'br-mesh' {}
|
||||||
""")
|
ORDER BY hostname ASC
|
||||||
|
""".format(where),data)
|
||||||
router_data = mysql.utcawaretuple(router_data,"last_contact")
|
router_data = mysql.utcawaretuple(router_data,"last_contact")
|
||||||
router_net = mysql.fetchall("""
|
router_net = mysql.fetchall("""
|
||||||
SELECT id, netif, COUNT(router) AS count
|
SELECT id, netif, COUNT(router) AS count
|
||||||
|
@ -367,12 +367,13 @@ def routers():
|
||||||
GROUP BY id, netif
|
GROUP BY id, netif
|
||||||
""")
|
""")
|
||||||
mysql.close()
|
mysql.close()
|
||||||
|
|
||||||
net_dict = {}
|
net_dict = {}
|
||||||
for rs in router_net:
|
for rs in router_net:
|
||||||
if not rs["id"] in net_dict:
|
if not rs["id"] in net_dict:
|
||||||
net_dict[rs["id"]] = []
|
net_dict[rs["id"]] = []
|
||||||
net_dict[rs["id"]].append(rs["netif"])
|
net_dict[rs["id"]].append(rs["netif"])
|
||||||
nodelist_data = {'version': '1.0.0'}
|
nodelist_data = {'version': '1.1.0'}
|
||||||
nodelist_data['nodes'] = list()
|
nodelist_data['nodes'] = list()
|
||||||
|
|
||||||
for router in router_data:
|
for router in router_data:
|
||||||
|
@ -406,6 +407,7 @@ def routers():
|
||||||
'href': 'https://monitoring.freifunk-franken.de/mac/' + int2shortmac(router['mac']),
|
'href': 'https://monitoring.freifunk-franken.de/mac/' + int2shortmac(router['mac']),
|
||||||
'clients': router['clients'],
|
'clients': router['clients'],
|
||||||
'lastcontact': router['last_contact'].isoformat(),
|
'lastcontact': router['last_contact'].isoformat(),
|
||||||
|
'fe80_addr': bintoipv6(router['fe80_addr']),
|
||||||
'uplink': {
|
'uplink': {
|
||||||
'fastd': fastd,
|
'fastd': fastd,
|
||||||
'l2tp': l2tp
|
'l2tp': l2tp
|
||||||
|
@ -416,7 +418,7 @@ def routers():
|
||||||
'lat': router['lat'],
|
'lat': router['lat'],
|
||||||
'lng': router['lng']
|
'lng': router['lng']
|
||||||
}
|
}
|
||||||
return jsonify(nodelist_data)
|
return nodelist_data
|
||||||
|
|
||||||
@api.route('/nopos')
|
@api.route('/nopos')
|
||||||
def no_position():
|
def no_position():
|
||||||
|
@ -450,6 +452,11 @@ def no_position():
|
||||||
|
|
||||||
return jsonify(nodes)
|
return jsonify(nodes)
|
||||||
|
|
||||||
|
@api.route('/routers')
|
||||||
|
def routers():
|
||||||
|
# Suppresses routers without br-mesh
|
||||||
|
return jsonify(nodelist_helper())
|
||||||
|
|
||||||
@api.route('/routers_by_nickname/<nickname>')
|
@api.route('/routers_by_nickname/<nickname>')
|
||||||
def get_routers_by_nickname(nickname):
|
def get_routers_by_nickname(nickname):
|
||||||
mysql = FreifunkMySQL()
|
mysql = FreifunkMySQL()
|
||||||
|
@ -459,31 +466,11 @@ def get_routers_by_nickname(nickname):
|
||||||
WHERE nickname = %s
|
WHERE nickname = %s
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""",(nickname,))
|
""",(nickname,))
|
||||||
|
mysql.close()
|
||||||
if len(users)==0:
|
if len(users)==0:
|
||||||
mysql.close()
|
|
||||||
return "User not found"
|
return "User not found"
|
||||||
|
|
||||||
nodelist_data = dict()
|
return jsonify(nodelist_helper("AND nickname = %s",(nickname,)))
|
||||||
nodelist_data['nodes'] = list()
|
|
||||||
routers = mysql.fetchall("""
|
|
||||||
SELECT router.id, hostname, contact, nickname, firmware, mac, fe80_addr
|
|
||||||
FROM router
|
|
||||||
INNER JOIN users ON router.contact = users.email
|
|
||||||
INNER JOIN router_netif ON router.id = router_netif.router
|
|
||||||
WHERE nickname = %s AND netif = 'br-mesh'
|
|
||||||
ORDER BY hostname ASC
|
|
||||||
""",(nickname,))
|
|
||||||
mysql.close()
|
|
||||||
for router in routers:
|
|
||||||
nodelist_data['nodes'].append(
|
|
||||||
{
|
|
||||||
'name': router['hostname'],
|
|
||||||
'oid': str(router['id']),
|
|
||||||
'mac': int2mac(router['mac']),
|
|
||||||
'fe80_addr': bintoipv6(router['fe80_addr'])
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return jsonify(nodelist_data)
|
|
||||||
|
|
||||||
@api.route('/routers_by_keyxchange_id/<keyxchange_id>')
|
@api.route('/routers_by_keyxchange_id/<keyxchange_id>')
|
||||||
def get_routers_by_keyxchange_id(keyxchange_id):
|
def get_routers_by_keyxchange_id(keyxchange_id):
|
||||||
|
@ -493,38 +480,9 @@ def get_routers_by_keyxchange_id(keyxchange_id):
|
||||||
FROM hoodsv1
|
FROM hoodsv1
|
||||||
WHERE id = %s
|
WHERE id = %s
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""",(int(keyxchange_id),))
|
""",(int(keyxchange_id),),"name")
|
||||||
|
mysql.close()
|
||||||
if not hood:
|
if not hood:
|
||||||
mysql.close()
|
|
||||||
return "Hood not found"
|
return "Hood not found"
|
||||||
|
|
||||||
nodelist_data = dict()
|
return jsonify(nodelist_helper('AND hoods.name = %s',(hood,)))
|
||||||
nodelist_data['nodes'] = list()
|
|
||||||
routers = mysql.fetchall("""
|
|
||||||
SELECT router.id, hostname, hardware, mac, fe80_addr, firmware, lat, lng, contact, position_comment, description
|
|
||||||
FROM router
|
|
||||||
INNER JOIN router_netif ON router.id = router_netif.router
|
|
||||||
INNER JOIN hoods ON router.hood = hoods.id
|
|
||||||
WHERE hoods.name = %s AND netif = 'br-mesh'
|
|
||||||
ORDER BY hostname ASC
|
|
||||||
""",(hood["name"],))
|
|
||||||
mysql.close()
|
|
||||||
for router in routers:
|
|
||||||
nodelist_data['nodes'].append(
|
|
||||||
{
|
|
||||||
'name': router['hostname'],
|
|
||||||
'ipv6_fe80_addr': bintoipv6(router['fe80_addr']),
|
|
||||||
'href': 'https://monitoring.freifunk-franken.de/routers/' + str(router['id']),
|
|
||||||
'firmware': router['firmware'],
|
|
||||||
'hardware': router['hardware'],
|
|
||||||
'contact': router['contact'],
|
|
||||||
'description': router['description']
|
|
||||||
}
|
|
||||||
)
|
|
||||||
nodelist_data['nodes'][-1]['position'] = {
|
|
||||||
'lat': router['lat'],
|
|
||||||
'long': router['lng']
|
|
||||||
}
|
|
||||||
if router['position_comment']:
|
|
||||||
nodelist_data['nodes'][-1]['position']['comment'] = router['position_comment']
|
|
||||||
return jsonify(nodelist_data)
|
|
||||||
|
|
Loading…
Reference in New Issue