Added check for disabled autoupdater and branch

This commit is contained in:
Simon Wüllhorst 2016-01-08 17:24:41 +01:00
parent 1d66bb7418
commit 330e78c85f
4 changed files with 38 additions and 7 deletions

View file

@ -4,7 +4,7 @@
import json, urllib import json, urllib
from graph import Graph from graph import Graph
class DomainSelector: class DomainSelector:
def __init__(self, nodesFile, graphFile, dataPath = './', printStatus = False, targets = None): def __init__(self, nodesFile, graphFile, dataPath = './', printStatus = False, targets = None, branch = 'stable'):
self.printStatus = printStatus self.printStatus = printStatus
self.targets = targets self.targets = targets
self.nodesData = self.__getFile__(nodesFile) self.nodesData = self.__getFile__(nodesFile)
@ -18,7 +18,7 @@ class DomainSelector:
else: else:
nodes = {} nodes = {}
for k,v in self.targets.iteritems(): for k,v in self.targets.iteritems():
nodes = self.graph.getNodeCloudsIn(v) nodes = self.graph.getNodeCloudsIn(v,branch)
self.writeConfigFiles(nodes,k) self.writeConfigFiles(nodes,k)
self.writeDumpFile(nodes,k) self.writeDumpFile(nodes,k)
nodes = {} nodes = {}

View file

@ -21,7 +21,7 @@ class Graph:
def parseNodes(self): def parseNodes(self):
for k,v in self.nodes['nodes'].iteritems(): for k,v in self.nodes['nodes'].iteritems():
lat, lon = self.getGeo(k) lat, lon = self.getGeo(k)
node = Node(k, ipv6 = self.getPublicAddress(k), hostname = self.getHostname(k), isOnline = self.getOnlineState(k), lat=lat, lon=lon, coder = self.coder) node = Node(k, ipv6 = self.getPublicAddress(k), hostname = self.getHostname(k), isOnline = self.getOnlineState(k), lat=lat, lon=lon, coder = self.coder, autoupdater = self.getAutoupdaterStatus(k), branch = self.getBranch(k))
self.nodes_list[k] = node self.nodes_list[k] = node
def parseLinks(self): def parseLinks(self):
@ -73,6 +73,22 @@ class Graph:
def getHostname(self,node_id): def getHostname(self,node_id):
return self.nodes['nodes'][node_id]['nodeinfo']['hostname'] return self.nodes['nodes'][node_id]['nodeinfo']['hostname']
def getAutoupdaterStatus(self, node_id):
#return True
if 'autoupdater' in self.nodes['nodes'][node_id]['nodeinfo']['software']:
return self.nodes['nodes'][node_id]['nodeinfo']['software']['autoupdater']['enabled']
else:
#if node is offline for a long time sometimes no autoupdater status can be found
return False
def getBranch(self, node_id):
#return True
if 'autoupdater' in self.nodes['nodes'][node_id]['nodeinfo']['software']:
return self.nodes['nodes'][node_id]['nodeinfo']['software']['autoupdater']['branch']
else:
#if node is offline for a long time sometimes no autoupdater status can be found
return None
def getGeo(self, node_id): def getGeo(self, node_id):
if 'location' in self.nodes['nodes'][node_id]['nodeinfo'] and 'latitude' in self.nodes['nodes'][node_id]['nodeinfo']['location'] and 'longitude' in self.nodes['nodes'][node_id]['nodeinfo']['location']: if 'location' in self.nodes['nodes'][node_id]['nodeinfo'] and 'latitude' in self.nodes['nodes'][node_id]['nodeinfo']['location'] and 'longitude' in self.nodes['nodes'][node_id]['nodeinfo']['location']:
return self.nodes['nodes'][node_id]['nodeinfo']['location']['latitude'], self.nodes['nodes'][node_id]['nodeinfo']['location']['longitude'] return self.nodes['nodes'][node_id]['nodeinfo']['location']['latitude'], self.nodes['nodes'][node_id]['nodeinfo']['location']['longitude']
@ -90,11 +106,15 @@ class Graph:
return self.nodes['nodes'][node_id]['flags']['online'] return self.nodes['nodes'][node_id]['flags']['online']
def getNodeCloudsIn(self, region): def getNodeCloudsIn(self, region, branch = 'stable'):
results = {} results = {}
for k,v in self.getAllLevelXNodes(0).iteritems(): for k,v in self.getAllLevelXNodes(0).iteritems():
if v.geodata != None and v.isOnline == True: if v.geodata != None and v.isOnline == True:
if v.isInRegion(region): if v.isInRegion(region):
for ksub,vsub in v.getNodeCloud({}).iteritems():
if not vsub.autoupdater or vsub.branch != branch:
break
else:
results.update(v.getNodeCloud({})) results.update(v.getNodeCloud({}))
print "Result:",len(results), region print "Result:",len(results), region
return results return results

View file

@ -4,7 +4,7 @@ from geocode import Geocode
import time import time
class Node(object): class Node(object):
def __init__(self, nodeid, ipv6 = None, hostname = None, isOnline = False, lastSeen = None, lat = None, lon = None, coder = None): def __init__(self, nodeid, ipv6 = None, hostname = None, isOnline = False, lastSeen = None, lat = None, lon = None, coder = None, autoupdater = False, branch = None):
self.coder = coder self.coder = coder
if self.coder == None: if self.coder == None:
self.coder = Geocode(geocoderCache = True, printStatus = True) self.coder = Geocode(geocoderCache = True, printStatus = True)
@ -15,6 +15,8 @@ class Node(object):
self.stepsToVpn = -1 self.stepsToVpn = -1
self.isOnline = isOnline self.isOnline = isOnline
self.lastSeen = lastSeen self.lastSeen = lastSeen
self.autoupdater = autoupdater
self.branch = branch
self._geo = None self._geo = None
self.geodata = None self.geodata = None
if lat != None and lon != None: if lat != None and lon != None:

View file

@ -68,8 +68,17 @@ targets = {
{'village' : u'Südlohn'}, {'village' : u'Südlohn'},
{'town' : u'Velen'}, {'town' : u'Velen'},
{'town' : u'Vreden'}, {'town' : u'Vreden'},
],
'sassenberg' : [
{'town' : u'Sassenberg'},
],
'telgte' : [
{'town' : u'Telgte'},
],
'warendorf_stadt' : [
{'town' : u'Warendorf'},
] ]
} }
#ds = DomainSelector(nodesFile = 'nodes.json', graphFile = 'graph.json', printStatus = True, dataPath = '../domaenensplit_webserver_config/', targets = targets) #ds = DomainSelector(nodesFile = 'nodes.json', graphFile = 'graph.json', printStatus = True, dataPath = '../domaenensplit_webserver_config/', targets = targets)
ds = DomainSelector(nodesFile = 'https://freifunk-muensterland.de/map/data/nodes.json', graphFile = 'https://freifunk-muensterland.de/map/data/graph.json', printStatus = True, dataPath = '../domaenensplit_webserver_config/', targets = targets) ds = DomainSelector(nodesFile = 'https://freifunk-muensterland.de/map/data/nodes.json', graphFile = 'https://freifunk-muensterland.de/map/data/graph.json', printStatus = True, dataPath = '../domaenensplit_webserver_config/', targets = targets, branch = 'stable')