def __init__(self, DocumentRoot, secret='', http_host='localhost', poll_interval=60, ping_interval=600, hosts=[], ipv4_udp_multicast=False, certfile=None, keyfile=None): http_port = dispy.config.HTTPServerPort self.node_port = eval(dispy.config.NodePort) self.info_port = eval(dispy.config.ClientPort) self.lock = threading.Lock() self.client_uid = None self.client_uid_time = 0 self.nodes = {} self.updates = {} if poll_interval < 1: logger.warning('invalid poll_interval value %s; it must be at least 1', poll_interval) poll_interval = 1 self.poll_interval = poll_interval self.ping_interval = ping_interval self.secret = secret self.keyfile = keyfile self.certfile = certfile self.ipv4_udp_multicast = bool(ipv4_udp_multicast) self.addrinfos = [] if not hosts: hosts = [None] for host in hosts: addrinfo = dispy.host_addrinfo(host=host, ipv4_multicast=self.ipv4_udp_multicast) if not addrinfo: logger.warning('Ignoring invalid host %s', host) continue self.addrinfos.append(addrinfo) if not self.addrinfos: raise Exception('No valid host name / IP address found') self.sign = hashlib.sha1(os.urandom(20)) for addrinfo in self.addrinfos: self.sign.update(addrinfo.ip.encode()) self.sign = self.sign.hexdigest() self.auth = dispy.auth_code(self.secret, self.sign) self.tcp_tasks = [] self.udp_tasks = [] udp_addrinfos = {} for addrinfo in self.addrinfos: self.tcp_tasks.append(Task(self.tcp_server, addrinfo)) udp_addrinfos[addrinfo.bind_addr] = addrinfo for bind_addr, addrinfo in udp_addrinfos.items(): self.udp_tasks.append(Task(self.udp_server, addrinfo)) self._server = HTTPServer((http_host, http_port), lambda *args: self.__class__._HTTPRequestHandler(self, DocumentRoot, *args)) if certfile: self._server.socket = ssl.wrap_socket(self._server.socket, keyfile=keyfile, certfile=certfile, server_side=True) self.timer = Task(self.timer_proc) self._httpd_thread = threading.Thread(target=self._server.serve_forever) self._httpd_thread.daemon = True self._httpd_thread.start() self.client_host = self._server.socket.getsockname()[0] logger.info('Started HTTP%s server at %s:%s', 's' if certfile else '', self.client_host, self._server.socket.getsockname()[1])
def __init__(self, DocumentRoot, secret='', http_host='localhost', http_port=8181, info_port=51347, node_port=51348, poll_interval=60, ping_interval=600, ip_addrs=[], ipv4_udp_multicast=False, certfile=None, keyfile=None): self.lock = threading.Lock() self.client_uid = None self.client_uid_time = 0 self.nodes = {} self.updates = {} if poll_interval < 1: logger.warning('invalid poll_interval value %s; it must be at least 1', poll_interval) poll_interval = 1 self.info_port = info_port self.poll_interval = poll_interval self.ping_interval = ping_interval self.secret = secret self.node_port = node_port self.keyfile = keyfile self.certfile = certfile self.ipv4_udp_multicast = bool(ipv4_udp_multicast) self.addrinfos = {} if not ip_addrs: ip_addrs = [None] for i in range(len(ip_addrs)): ip_addr = ip_addrs[i] addrinfo = dispy.host_addrinfo(host=ip_addr, ipv4_multicast=self.ipv4_udp_multicast) if not addrinfo: logger.warning('Ignoring invalid ip_addr %s', ip_addr) continue self.addrinfos[addrinfo.ip] = addrinfo if not self.addrinfos: raise Exception('No valid IP address found') self.http_port = http_port self.sign = hashlib.sha1(os.urandom(20)) for ip_addr in self.addrinfos: self.sign.update(ip_addr.encode()) self.sign = self.sign.hexdigest() self.auth = dispy.auth_code(self.secret, self.sign) self.tcp_tasks = [] self.udp_tasks = [] udp_addrinfos = {} for addrinfo in self.addrinfos.values(): self.tcp_tasks.append(Task(self.tcp_server, addrinfo)) udp_addrinfos[addrinfo.bind_addr] = addrinfo for bind_addr, addrinfo in udp_addrinfos.items(): self.udp_tasks.append(Task(self.udp_server, addrinfo)) self._server = HTTPServer((http_host, http_port), lambda *args: self.__class__._HTTPRequestHandler(self, DocumentRoot, *args)) if certfile: self._server.socket = ssl.wrap_socket(self._server.socket, keyfile=keyfile, certfile=certfile, server_side=True) self.timer = Task(self.timer_proc) self._httpd_thread = threading.Thread(target=self._server.serve_forever) self._httpd_thread.daemon = True self._httpd_thread.start() logger.info('Started HTTP%s server at %s', 's' if certfile else '', ':'.join(map(str, self._server.socket.getsockname())))
def __init__(self, ip_addrs=[], node_port=51348, relay_port=0, scheduler_nodes=[], scheduler_port=51347, ipv4_udp_multicast=False, secret='', certfile=None, keyfile=None): self.ipv4_udp_multicast = bool(ipv4_udp_multicast) addrinfos = [] if not ip_addrs: ip_addrs = [None] for i in range(len(ip_addrs)): ip_addr = ip_addrs[i] addrinfo = dispy.host_addrinfo(host=ip_addr, ipv4_multicast=self.ipv4_udp_multicast) if not addrinfo: logger.warning('Ignoring invalid ip_addr %s', ip_addr) continue addrinfos.append(addrinfo) self.node_port = node_port if not relay_port: relay_port = node_port self.relay_port = relay_port self.ip_addrs = set() self.scheduler_ip_addr = None self.scheduler_port = scheduler_port self.secret = secret if certfile: self.certfile = os.path.abspath(certfile) else: self.certfile = None if keyfile: self.keyfile = os.path.abspath(keyfile) else: self.keyfile = None udp_addrinfos = {} for addrinfo in addrinfos: self.ip_addrs.add(addrinfo.ip) Task(self.relay_tcp_proc, addrinfo) udp_addrinfos[addrinfo.bind_addr] = addrinfo scheduler_ip_addrs = [] for addr in scheduler_nodes: addr = dispy._node_ipaddr(addr) if addr: scheduler_ip_addrs.append(addr) for bind_addr, addrinfo in udp_addrinfos.items(): Task(self.relay_udp_proc, bind_addr, addrinfo) Task(self.sched_udp_proc, bind_addr, addrinfo) for addr in scheduler_ip_addrs: msg = {'version': __version__, 'ip_addrs': [addr], 'port': self.scheduler_port, 'sign': None} Task(self.verify_broadcast, addrinfo, msg) logger.info('version %s started', dispy._dispy_version)
def __init__(self, ip_addrs=[], relay_port=0, scheduler_nodes=[], scheduler_port=0, ipv4_udp_multicast=False, secret='', certfile=None, keyfile=None): self.ipv4_udp_multicast = bool(ipv4_udp_multicast) addrinfos = [] if not ip_addrs: ip_addrs = [None] for i in range(len(ip_addrs)): ip_addr = ip_addrs[i] addrinfo = dispy.host_addrinfo(host=ip_addr, ipv4_multicast=self.ipv4_udp_multicast) if not addrinfo: logger.warning('Ignoring invalid ip_addr %s', ip_addr) continue addrinfos.append(addrinfo) self.node_port = eval(dispy.config.NodePort) self.scheduler_port = scheduler_port self.relay_port = relay_port self.ip_addrs = set() self.scheduler_ip_addr = None self.secret = secret if certfile: self.certfile = os.path.abspath(certfile) else: self.certfile = None if keyfile: self.keyfile = os.path.abspath(keyfile) else: self.keyfile = None udp_addrinfos = {} for addrinfo in addrinfos: self.ip_addrs.add(addrinfo.ip) Task(self.relay_tcp_proc, addrinfo) udp_addrinfos[addrinfo.bind_addr] = addrinfo scheduler_ip_addrs = [] for addr in scheduler_nodes: addr = dispy._node_ipaddr(addr) if addr: scheduler_ip_addrs.append(addr) for bind_addr, addrinfo in udp_addrinfos.items(): Task(self.relay_udp_proc, bind_addr, addrinfo) Task(self.sched_udp_proc, bind_addr, addrinfo) for addr in scheduler_ip_addrs: msg = {'version': __version__, 'ip_addrs': [addr], 'port': self.scheduler_port, 'sign': None} Task(self.verify_broadcast, addrinfo, msg) logger.info('version %s started', dispy._dispy_version)
def __init__(self, ip_addrs=[], node_port=51348, relay_port=0, scheduler_nodes=[], scheduler_port=51347, ipv4_udp_multicast=False, secret='', certfile=None, keyfile=None): addrinfos = [] if not ip_addrs: ip_addrs = [None] for i in range(len(ip_addrs)): ip_addr = ip_addrs[i] addrinfo = dispy.host_addrinfo(host=ip_addr) if not addrinfo: logger.warning('Ignoring invalid ip_addr %s', ip_addr) continue addrinfos.append(addrinfo) self.node_port = node_port if not relay_port: relay_port = node_port self.relay_port = relay_port self.ipv4_udp_multicast = bool(ipv4_udp_multicast) self.ip_addrs = set() self.scheduler_ip_addr = None self.scheduler_port = scheduler_port self.secret = secret if certfile: self.certfile = os.path.abspath(certfile) else: self.certfile = None if keyfile: self.keyfile = os.path.abspath(keyfile) else: self.keyfile = None udp_addrinfos = {} for addrinfo in addrinfos: self.ip_addrs.add(addrinfo.ip) if addrinfo.family == socket.AF_INET and self.ipv4_udp_multicast: addrinfo.broadcast = dispy.IPV4_MULTICAST_GROUP Task(self.relay_tcp_proc, addrinfo) if os.name == 'nt': bind_addr = addrinfo.ip elif sys.platform == 'darwin': if addrinfo.family == socket.AF_INET and ( not self.ipv4_udp_multicast): bind_addr = '' else: bind_addr = addrinfo.broadcast else: bind_addr = addrinfo.broadcast udp_addrinfos[bind_addr] = addrinfo scheduler_ip_addrs = [] for addr in scheduler_nodes: addr = dispy._node_ipaddr(addr) if addr: scheduler_ip_addrs.append(addr) for bind_addr, addrinfo in udp_addrinfos.items(): Task(self.relay_udp_proc, bind_addr, addrinfo) Task(self.sched_udp_proc, bind_addr, addrinfo) for addr in scheduler_ip_addrs: msg = { 'version': __version__, 'ip_addrs': [addr], 'port': self.scheduler_port, 'sign': None } Task(self.verify_broadcast, addrinfo, msg) logger.info('version %s started', dispy._dispy_version)