aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Schneider <nils@nilsschneider.net>2014-08-17 18:40:15 +0200
committerNils Schneider <nils@nilsschneider.net>2014-08-17 18:53:09 +0200
commit2dfd11189dd419ab09cb0630accab78b37edefde (patch)
tree8b20b6c2a1e2ce29fc45acfeba9202bc8797a5b6
parent663539c2064e9c75aa8e87a35a3700d9b8f79f69 (diff)
count clients, instead of nodes
-rwxr-xr-xbat2nodes.py8
-rw-r--r--d3mapbuilder.py1
-rw-r--r--node.py1
-rw-r--r--nodedb.py129
4 files changed, 18 insertions, 121 deletions
diff --git a/bat2nodes.py b/bat2nodes.py
index ce6e596..78c2174 100755
--- a/bat2nodes.py
+++ b/bat2nodes.py
@@ -31,9 +31,6 @@ parser.add_argument('-a', '--aliases',
parser.add_argument('-m', '--mesh', action='append',
help='batman mesh interface')
-parser.add_argument('-o', '--obscure', action='store_true',
- help='obscure client macs')
-
parser.add_argument('-A', '--alfred', action='store_true',
help='retrieve aliases from alfred')
@@ -66,11 +63,6 @@ if options['alfred']:
af = alfred()
db.import_aliases(af.aliases())
-db.count_clients()
-
-if options['obscure']:
- db.obscure_clients()
-
db.load_state("state.json")
# remove nodes that have been offline for more than 30 days
diff --git a/d3mapbuilder.py b/d3mapbuilder.py
index ff7589f..8fb1961 100644
--- a/d3mapbuilder.py
+++ b/d3mapbuilder.py
@@ -13,7 +13,6 @@ class D3MapBuilder:
nodes = self._db.get_nodes()
output['nodes'] = [{'name': x.name, 'id': x.id,
- 'macs': ', '.join(x.macs),
'geo': [float(x) for x in x.gps.split(" ")] if x.gps else None,
'firmware': x.firmware,
'flags': x.flags,
diff --git a/node.py b/node.py
index a75f982..fce1866 100644
--- a/node.py
+++ b/node.py
@@ -7,7 +7,6 @@ class Node():
self.flags = dict({
"online": False,
"gateway": False,
- "client": False
})
self.gps = None
self.firmware = None
diff --git a/nodedb.py b/nodedb.py
index 973861d..6b3d503 100644
--- a/nodedb.py
+++ b/nodedb.py
@@ -28,9 +28,6 @@ class NodeDB:
obj = []
for node in self._nodes:
- if node.flags['client']:
- continue
-
obj.append({ 'id': node.id
, 'name': node.name
, 'lastseen': node.lastseen
@@ -102,8 +99,11 @@ class NodeDB:
node.add_mac(x['secondary'])
for x in vis_data:
-
if 'router' in x:
+ # TTs will be processed later
+ if x['label'] == "TT":
+ continue
+
try:
node = self.maybe_node_by_mac((x['router'], ))
except:
@@ -115,16 +115,6 @@ class NodeDB:
node.add_mac(x['router'])
self._nodes.append(node)
- # If it's a TT link and the MAC is very similar
- # consider this MAC as one of the routers
- # MACs
- if 'gateway' in x and x['label'] == "TT":
- if is_similar(x['router'], x['gateway']):
- node.add_mac(x['gateway'])
-
- # skip processing as regular link
- continue
-
try:
if 'neighbor' in x:
try:
@@ -140,15 +130,15 @@ class NodeDB:
node = Node()
node.lastseen = self.time
node.flags['online'] = True
- if x['label'] == 'TT':
- node.flags['client'] = True
-
node.add_mac(x['neighbor'])
self._nodes.append(node)
for x in vis_data:
-
if 'router' in x:
+ # TTs will be processed later
+ if x['label'] == "TT":
+ continue
+
try:
if 'gateway' in x:
x['neighbor'] = x['gateway']
@@ -172,13 +162,9 @@ class NodeDB:
link.quality = x['label']
link.id = "-".join(sorted((link.source.interface, link.target.interface)))
- if x['label'] == "TT":
- link.type = "client"
-
self._links.append(link)
for x in vis_data:
-
if 'primary' in x:
try:
node = self.maybe_node_by_mac((x['primary'], ))
@@ -187,6 +173,16 @@ class NodeDB:
node.id = x['primary']
+ for x in vis_data:
+ if 'router' in x and x['label'] == 'TT':
+ try:
+ node = self.maybe_node_by_mac((x['router'], ))
+ node.add_mac(x['gateway'])
+ if not is_similar(x['router'], x['gateway']):
+ node.clientcount += 1
+ except:
+ pass
+
def reduce_links(self):
tmp_links = defaultdict(list)
@@ -256,9 +252,6 @@ class NodeDB:
while changes > 0:
changes = 0
for link in self._links:
- if link.type == "client":
- continue
-
source_interface = self._nodes[link.source.id].interfaces[link.source.interface]
target_interface = self._nodes[link.target.id].interfaces[link.target.interface]
if source_interface.vpn or target_interface.vpn:
@@ -269,92 +262,6 @@ class NodeDB:
link.type = "vpn"
- def count_clients(self):
- for link in self._links:
- try:
- a = self.maybe_node_by_id(link.source.interface)
- b = self.maybe_node_by_id(link.target.interface)
-
- if a.flags['client']:
- client = a
- node = b
- elif b.flags['client']:
- client = b
- node = a
- else:
- continue
-
- node.clientcount += 1
- except:
- pass
-
- def obscure_clients(self):
-
- globalIdCounter = 0
- nodeCounters = {}
- clientIds = {}
-
- for node in self._nodes:
- if node.flags['client']:
- node.macs = set()
- clientIds[node.id] = None
-
- for link in self._links:
- ids = link.source.interface
- idt = link.target.interface
-
- try:
- node_source = self.maybe_node_by_fuzzy_mac(ids)
- node_target = self.maybe_node_by_id(idt)
-
- if not node_source.flags['client'] and not node_target.flags['client']:
- # if none of the nodes associated with this link are clients,
- # we do not want to obscure
- continue
-
- if ids in clientIds and idt in clientIds:
- # This is for corner cases, when a client
- # is linked to another client.
- clientIds[ids] = str(globalIdCounter)
- ids = str(globalIdCounter)
- globalIdCounter += 1
-
- clientIds[idt] = str(globalIdCounter)
- idt = str(globalIdCounter)
- globalIdCounter += 1
-
- elif ids in clientIds:
- newId = generateId(idt)
- clientIds[ids] = newId
- ids = newId
-
- link.source.interface = ids;
- node_source.id = ids;
-
- elif idt in clientIds:
- newId = generateId(ids,nodeCounters)
- clientIds[idt] = newId
- idt = newId
-
- link.target.interface = idt;
- node_target.id = idt;
-
- link.id = ids + "-" + idt
-
- except KeyError:
- pass
-
-# extends node id by incremented node counter
-def generateId(nodeId,nodeCounters):
- if nodeId in nodeCounters:
- n = nodeCounters[nodeId]
- nodeCounters[nodeId] = n + 1
- else:
- nodeCounters[nodeId] = 1
- n = 0
-
- return nodeId + "_" + str(n)
-
# compares two MACs and decides whether they are
# similar and could be from the same node
def is_similar(a, b):