alfred: Retrieve aliases from alfred and integrate batadv-vis.
Extending the visualisation data sources by the new batadv-vis, which itself base ontop of alfred. Also extending the aliases import by parsing informations from alfred. The last part is possible through the preprocessing of data with alfred-json, so we don't need to process the 'broken' format alfred itself supports. This patch needs batadv-vis and tcatm/alfred-json in the PATH.alfred-data
parent
33d7b3aefc
commit
2c79b1d91c
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import subprocess
|
||||||
|
import json
|
||||||
|
|
||||||
|
class alfred:
|
||||||
|
def __init__(self,request_data_type = 158):
|
||||||
|
self.request_data_type = request_data_type
|
||||||
|
|
||||||
|
def aliases(self):
|
||||||
|
output = subprocess.check_output(["alfred-json","-r",str(self.request_data_type),"-f","json"])
|
||||||
|
alfred_data = json.loads(output.decode("utf-8"))
|
||||||
|
alias = {}
|
||||||
|
for mac,node in alfred_data.items():
|
||||||
|
node_alias = {}
|
||||||
|
if 'location' in node:
|
||||||
|
node_alias['gps'] = str(node['location']['latitude']) + ' ' + str(node['location']['longitude'])
|
||||||
|
if 'hostname' in node:
|
||||||
|
node_alias['name'] = node['hostname']
|
||||||
|
elif 'name' in node:
|
||||||
|
node_alias['name'] = node['name']
|
||||||
|
if len(node_alias):
|
||||||
|
alias[mac] = node_alias
|
||||||
|
return alias
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
ad = alfred()
|
||||||
|
al = ad.alias()
|
||||||
|
print(al)
|
|
@ -6,6 +6,7 @@ import argparse
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from batman import batman
|
from batman import batman
|
||||||
|
from alfred import alfred
|
||||||
from rrd import rrd
|
from rrd import rrd
|
||||||
from nodedb import NodeDB
|
from nodedb import NodeDB
|
||||||
from d3mapbuilder import D3MapBuilder
|
from d3mapbuilder import D3MapBuilder
|
||||||
|
@ -32,6 +33,9 @@ parser.add_argument('-m', '--mesh', action='append',
|
||||||
parser.add_argument('-o', '--obscure', action='store_true',
|
parser.add_argument('-o', '--obscure', action='store_true',
|
||||||
help='obscure client macs')
|
help='obscure client macs')
|
||||||
|
|
||||||
|
parser.add_argument('-A', '--alfred', action='store_true',
|
||||||
|
help='retrieve aliases from alfred')
|
||||||
|
|
||||||
parser.add_argument('-d', '--destination-directory', action='store',
|
parser.add_argument('-d', '--destination-directory', action='store',
|
||||||
help='destination directory for generated files',required=True)
|
help='destination directory for generated files',required=True)
|
||||||
|
|
||||||
|
@ -56,6 +60,10 @@ if options['aliases']:
|
||||||
for aliases in options['aliases']:
|
for aliases in options['aliases']:
|
||||||
db.import_aliases(json.load(open(aliases)))
|
db.import_aliases(json.load(open(aliases)))
|
||||||
|
|
||||||
|
if options['alfred']:
|
||||||
|
af = alfred()
|
||||||
|
db.import_aliases(af.aliases())
|
||||||
|
|
||||||
if options['obscure']:
|
if options['obscure']:
|
||||||
db.obscure_clients()
|
db.obscure_clients()
|
||||||
|
|
||||||
|
|
21
batman.py
21
batman.py
|
@ -10,10 +10,9 @@ class batman:
|
||||||
self.mesh_interface = mesh_interface
|
self.mesh_interface = mesh_interface
|
||||||
|
|
||||||
def vis_data(self):
|
def vis_data(self):
|
||||||
""" Parse "batctl -m <mesh_interface> vd json -n" into an array of dictionaries.
|
return self.vis_data_batadv_vis() + self.vis_data_batctl_legacy()
|
||||||
"""
|
|
||||||
output = subprocess.check_output(["batctl","-m",self.mesh_interface,"vd","json","-n"])
|
def vis_data_helper(self,lines):
|
||||||
lines = output.splitlines()
|
|
||||||
vd = []
|
vd = []
|
||||||
for line in lines:
|
for line in lines:
|
||||||
try:
|
try:
|
||||||
|
@ -23,6 +22,20 @@ class batman:
|
||||||
pass
|
pass
|
||||||
return vd
|
return vd
|
||||||
|
|
||||||
|
def vis_data_batctl_legacy(self):
|
||||||
|
""" Parse "batctl -m <mesh_interface> vd json -n" into an array of dictionaries.
|
||||||
|
"""
|
||||||
|
output = subprocess.check_output(["batctl","-m",self.mesh_interface,"vd","json","-n"])
|
||||||
|
lines = output.splitlines()
|
||||||
|
return self.vis_data_helper(lines)
|
||||||
|
|
||||||
|
def vis_data_batadv_vis(self):
|
||||||
|
""" Parse "batadv-vis -i <mesh_interface> -f json" into an array of dictionaries.
|
||||||
|
"""
|
||||||
|
output = subprocess.check_output(["batadv-vis","-i",self.mesh_interface,"-f","json"])
|
||||||
|
lines = output.splitlines()
|
||||||
|
return self.vis_data_helper(lines)
|
||||||
|
|
||||||
def gateway_list(self):
|
def gateway_list(self):
|
||||||
""" Parse "batctl -m <mesh_interface> gwl -n" into an array of dictionaries.
|
""" Parse "batctl -m <mesh_interface> gwl -n" into an array of dictionaries.
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue