node_hierarchy/NodeHierarchy.py

83 lines
4.4 KiB
Python
Raw Permalink Normal View History

2016-05-29 18:56:50 +02:00
#!/usr/bin/python3
import argparse
from parser.NodesParser import NodesParser
from parser.GraphParser import GraphParser
from cloud.Node import Node
from cloud.Link import Link
from cloud.GlobalGraph import GlobalGraph
from parser.ShapesParser import ShapesParser
from cloud.Domaene import Domaene
from generator.NginxConfGen import NginxConfGen
from info.Info import Info
2016-05-29 18:56:50 +02:00
class NodeHierarchy(object):
def __init__(self):
self.__args__ = self.__parseArguments__()
self.__nodesJson__ = NodesParser(self.__args__.json_path)
self.__graphJson__ = GraphParser(self.__args__.json_path)
self.__shapesJson__ = self.__parseShapes__()
self.nodes = self.__createNodeObjects__()
self.links = self.__createLinkObjects__()
self.globalGraph = self.__createGlobalGraph__()
self.domains = self.__createDomains__()
self.nginxConf = NginxConfGen(self.domains, self.__args__)
self.nginxConf.writeNginxConfigFile()
self.infos = Info(self.__args__.info, self.__args__.info_out_path, self.__args__.info_out_type, self.__args__.info_filters, self.nodes, self.globalGraph, self.domains)
2016-05-29 18:56:50 +02:00
def __parseShapes__(self):
shapesJson = {}
for targetName in self.__args__.targets:
shapesJson[targetName] = ShapesParser(self.__args__.shapes_path, targetName)
return shapesJson
def __createDomains__(self):
domains = {}
for k, v in self.__shapesJson__.items():
print('Create Domain object #',len(domains), '\r',end = '')
domains[k] = Domaene(k,v, self.globalGraph)
print('')
return domains
def __createNodeObjects__(self):
nodes = {}
for nodeID, nodeValue in self.__nodesJson__.nodes.items():
print('Create Node object #',len(nodes), '\r',end = '')
nodes[nodeID] = Node(nodeValue)
print('')
return nodes
def __createLinkObjects__(self):
links = []
for link in self.__graphJson__.links:
try:
srcNode = self.nodes[link['source']['node_id']]
except:
srcNode = None
try:
dstNode = self.nodes[link['target']['node_id']]
except:
dstNode = None
print('Create Link object #',len(links), '\r',end = '')
links.append(Link(link, srcNode, dstNode))
print('')
return links
def __createGlobalGraph__(self):
return GlobalGraph(self.nodes, self.links, self.__args__.debug)
def __parseArguments__(self):
parser = argparse.ArgumentParser(description='This Script generates a hierarchical nodes list for node migration using nginx geo feature.')
parser.add_argument('-j', '--json-path', required=False, default='https://service.freifunk-muensterland.de/maps/data/', help='Path of nodes.json and graph.json (can be local folder or remote URL).')
parser.add_argument('-s', '--shapes-path', required=False, default='https://freifunk-muensterland.de/md-fw-dl/shapes/', help='Path of shapefiles (can be local folder or remote URL).')
parser.add_argument('-t', '--targets', nargs='+', required=True, help='List of targets which should be proceeded. Example: -t citya cityb ...')
parser.add_argument('-o', '--out-file', default='./webserver-configuration', required=False, help='Filename where the generated Output should stored.')
2016-05-29 18:56:50 +02:00
parser.add_argument('-v', '--debug', required=False, action='store_true', help='Enable debugging output.')
parser.add_argument('-f', '--filters', nargs='*', required=False, choices=('exclude_clouds_with_lan_links', 'no_lan'), help='Filter out nodes and local clouds based on filter rules.')
parser.add_argument('-i', '--info', nargs='*', required=False, choices=('get_offline_nodes','offline'), help='Get infos about the graph, links and nodes.')
parser.add_argument('-if', '--info-filters', nargs='*', required=False, help='Filter info results. Currently supported: min_age:TIME_RANGE, max_age:TIME_RANGE. Examples: -if min_age:1d max_age:2w')
parser.add_argument('-iop', '--info-out-path', required=False, default='./', help='Folder where info files should be written. Default: ./')
parser.add_argument('-iot', '--info-out-type', nargs='+', required=False, default='csv', choices=('json', 'csv'), help='Defines the format of info output. Default: csv')
2016-05-29 18:56:50 +02:00
return parser.parse_args()
NodeHierarchy()