diff options
author | makefu <root@pigstarter.de> | 2015-09-09 14:41:38 +0200 |
---|---|---|
committer | makefu <root@pigstarter.de> | 2015-09-09 14:41:38 +0200 |
commit | 05bf2c8be209e619f8c9e727fd1353198b042642 (patch) | |
tree | 4f7a9439137fe78f979b235666a3533f9e249eca /retiolum/scripts/adv_graphgen/tinc_graphs/Supernodes.py | |
parent | e9e7d6baf986488c43d418887f6cf95f5d896189 (diff) |
begin packaging of tinc_stats
Diffstat (limited to 'retiolum/scripts/adv_graphgen/tinc_graphs/Supernodes.py')
-rwxr-xr-x | retiolum/scripts/adv_graphgen/tinc_graphs/Supernodes.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/retiolum/scripts/adv_graphgen/tinc_graphs/Supernodes.py b/retiolum/scripts/adv_graphgen/tinc_graphs/Supernodes.py new file mode 100755 index 00000000..c8514c66 --- /dev/null +++ b/retiolum/scripts/adv_graphgen/tinc_graphs/Supernodes.py @@ -0,0 +1,65 @@ +#!/usr/bin/python3 + +def find_potential_super(path="/etc/tinc/retiolum/hosts"): + import os + import re + + needle_addr = re.compile("Address\s*=\s*(.*)") + needle_port = re.compile("Port\s*=\s*(.*)") + for f in os.listdir(path): + with open(path+"/"+f) as of: + addrs = [] + port = "655" + + for line in of.readlines(): + + addr_found = needle_addr.match(line) + if addr_found: + addrs.append(addr_found.group(1)) + + port_found = needle_port.match(line) + if port_found: + port = port_found.group(1) + + if addrs : yield (f ,[(addr ,int(port)) for addr in addrs]) + + +def try_connect(addr): + try: + from socket import socket,AF_INET,SOCK_STREAM + s = socket(AF_INET,SOCK_STREAM) + s.settimeout(2) + s.connect(addr) + s.settimeout(None) + s.close() + return addr + except Exception as e: + pass + + +def check_one_super(ha): + host,addrs = ha + valid_addrs = [] + for addr in addrs: + ret = try_connect(addr) + if ret: valid_addrs.append(ret) + if valid_addrs: return (host,valid_addrs) + + +def check_all_the_super(path): + from multiprocessing import Pool + p = Pool(20) + return filter(None,p.map(check_one_super,find_potential_super(path))) + + +def main(): + import os + hostpath=os.environment.get("TINC_HOSTPATH", "/etc/tinc/retiolum/hosts") + + for host,addrs in check_all_the_super(hostpath): + print("%s %s" %(host,str(addrs))) + +if __name__ == "__main__": + main() + +# vim: set expandtab:ts=:sw=2 |