Add alfred_leagcy_provider
It gets a list of pre-0.5.1 routers from netmon mysql db, crawls them and sends the results to a (patched) alfred master.
This commit is contained in:
parent
19329ef85c
commit
b3a0131b63
|
@ -0,0 +1 @@
|
||||||
|
macs.txt
|
|
@ -0,0 +1,29 @@
|
||||||
|
From: Dominik Heidler <dominik@heidler.eu>
|
||||||
|
Date: Mon, 29 Feb 2016 19:07:00 +0100
|
||||||
|
Subject: [PATCH] Allow setting the source mac via unix sock
|
||||||
|
|
||||||
|
The server will only overwrite the mac if it is zero.
|
||||||
|
The alfred client sets the mac to zero by default
|
||||||
|
so this shouldn't break existing behaviour.
|
||||||
|
---
|
||||||
|
unix_sock.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/unix_sock.c b/unix_sock.c
|
||||||
|
index 3c7e583..12a10e6 100644
|
||||||
|
--- a/unix_sock.c
|
||||||
|
+++ b/unix_sock.c
|
||||||
|
@@ -119,7 +119,9 @@ static int unix_sock_add_data(struct globals *globals,
|
||||||
|
|
||||||
|
data = push->data;
|
||||||
|
data_len = ntohs(data->header.length);
|
||||||
|
- memcpy(data->source, &interface->hwaddr, sizeof(interface->hwaddr));
|
||||||
|
+ static const char zero[ETH_ALEN] = { 0 };
|
||||||
|
+ if (!memcmp(zero, data->source, sizeof(data->source)))
|
||||||
|
+ memcpy(data->source, &interface->hwaddr, sizeof(interface->hwaddr));
|
||||||
|
|
||||||
|
if ((int)(data_len + sizeof(*data)) > len)
|
||||||
|
goto err;
|
||||||
|
--
|
||||||
|
1.7.10.4
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
import re
|
||||||
|
import pyalfred
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CONFIG = {
|
||||||
|
#"crawl_outgoing_netif": "br-mesh",
|
||||||
|
# this old system sucks
|
||||||
|
"crawl_outgoing_netif": "25%s" % open("/sys/class/net/br-mesh/ifindex").read().strip(),
|
||||||
|
}
|
||||||
|
|
||||||
|
def mac_to_ipv6_linklocal(mac):
|
||||||
|
# Remove the most common delimiters; dots, dashes, etc.
|
||||||
|
mac_bare = re.sub('[%s]+' % re.escape(' .:-'), '', mac)
|
||||||
|
mac_value = int(mac_bare, 16)
|
||||||
|
|
||||||
|
# Split out the bytes that slot into the IPv6 address
|
||||||
|
# XOR the most significant byte with 0x02, inverting the
|
||||||
|
# Universal / Local bit
|
||||||
|
high2 = mac_value >> 32 & 0xffff ^ 0x0200
|
||||||
|
high1 = mac_value >> 24 & 0xff
|
||||||
|
low1 = mac_value >> 16 & 0xff
|
||||||
|
low2 = mac_value & 0xffff
|
||||||
|
|
||||||
|
return 'fe80::{:04x}:{:02x}ff:fe{:02x}:{:04x}'.format(high2, high1, low1, low2)
|
||||||
|
|
||||||
|
mac = sys.argv[1]
|
||||||
|
fe80_ip = mac_to_ipv6_linklocal(mac)
|
||||||
|
|
||||||
|
node_data = subprocess.check_output(["curl", "-s", "--max-time", "5", "-g", "http://[%s%%%s]/node.data" % (
|
||||||
|
fe80_ip,
|
||||||
|
CONFIG["crawl_outgoing_netif"]
|
||||||
|
)])
|
||||||
|
try:
|
||||||
|
node_data = gzip.decompress(node_data)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
assert "<TITLE>404" not in str(node_data).upper()
|
||||||
|
|
||||||
|
|
||||||
|
#print(node_data)
|
||||||
|
|
||||||
|
ac = pyalfred.AlfredConnection()
|
||||||
|
ac.send(64, node_data.decode("UTF-8", errors="replace"), mac, gzip_data=True)
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
for mac in `cat /home/dominik/alfred_legacy_provider/macs.txt` ; do
|
||||||
|
echo "Crawling $mac"
|
||||||
|
/home/dominik/alfred_legacy_provider/crawl.py $mac
|
||||||
|
done
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
/home/dominik/alfred_legacy_provider/list_old.sh 2>/dev/null | grep br-mesh | awk -F ' ' '{print $NF}' > /home/dominik/alfred_legacy_provider/macs.txt
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
MYSQL_PWD="`grep mysql_password /var/www/netmon/config/config.local.inc.php | cut -d '"' -f 2`"
|
||||||
|
mysql -u netmon -"p$MYSQL_PWD" netmon -e 'SELECT r.id, r.hostname, c.firmware_version, i.name, i.mac_addr FROM routers r JOIN crawl_routers c ON c.id = (SELECT MAX(id) FROM crawl_routers WHERE router_id = r.id) LEFT JOIN crawl_interfaces i ON i.id = (SELECT MAX(id) FROM crawl_interfaces WHERE router_id = r.id AND name = "br-mesh") WHERE c.status = "online" AND c.firmware_version <= "0.5.0" ORDER BY r.id;';
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
./get_macs.sh
|
||||||
|
./crawl_all.sh
|
|
@ -9,7 +9,9 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-8 col-sm-8"><p>
|
<div class="col-xs-8 col-sm-8"><p>
|
||||||
Monitoring für das Freifunk Franken Funknetzwerk.<br />
|
Monitoring für das Freifunk Franken Funknetzwerk.<br />
|
||||||
Hier werden nur Daten von Routern ab Firmware 0.5.1 angezeigt.<br />
|
Hier werden Daten von Routern ab Firmware 0.5.1 direkt angezeigt.<br />
|
||||||
|
Die alten Router werden über den <a href="https://github.com/asdil12/fff-monitoring/tree/master/contrib/alfred_legacy_provider">Alfred Legacy Provider</a> abgefragt,<br />
|
||||||
|
sodass sie ebenfalls hier angezeigt werden können.<br />
|
||||||
Der Quellcode für diese Webanwendung steht unter der GPL und kann <a href="https://github.com/asdil12/fff-monitoring">hier</a>
|
Der Quellcode für diese Webanwendung steht unter der GPL und kann <a href="https://github.com/asdil12/fff-monitoring">hier</a>
|
||||||
heruntergeladen werden.
|
heruntergeladen werden.
|
||||||
</p></div>
|
</p></div>
|
||||||
|
|
Loading…
Reference in New Issue