def __init__(self, hostname, port, home_dir, node_name='anonymous_node', ks_path=None, ks_passwd=None, node_type=None, bind_host='0.0.0.0', config={}): self.hostname = hostname self.bind_host = bind_host self.port = port self.home_dir = home_dir self.node_name = node_name self.node_type = node_type self.config = config self.__auth_key = hashlib.sha1(str(uuid.uuid4())).hexdigest() config_file = os.path.join(home_dir, CONFIG_FILE_NAME) Config.load(config_file) self.config.update(Config.get_config_dict()) if ks_path: self.keystore = init_keystore(ks_path, ks_passwd) ca_files = self.keystore.autodetect_ca(home_dir) if ca_files: logger.info('CA certificates detected at: %s'%(' '.join(ca_files),)) else: logger.warning('No one CA certificate autodetected') else: self.keystore = None self.server = None self.operator_process = None self.osproc_stat = None cur_thread = threading.current_thread() cur_thread.setName('%s-main'%self.node_name) self.operators_map = {'base': Operator} self.operators_map.update( PluginsManager.get_operators() )
def create_net(self, nodes_count): global PROCESSES global ADDRESSES for unuse in range(nodes_count): if not ADDRESSES: n_node = 'init-fabnet' i = 1900 else: n_node = random.choice(ADDRESSES) i = int(ADDRESSES[-1].split(':')[-1])+1 self._wait_node(n_node) address = '127.0.0.1:%s'%i ADDRESSES.append(address) home = '/tmp/node_%s'%i if os.path.exists(home): shutil.rmtree(home) os.mkdir(home) os.system('cp fabnet_core/tests/cert/test_certs.ca %s/'%home) logger.warning('{SNP} STARTING NODE %s'%address) if n_node == 'init-fabnet': ntype = 'MGMT' Config.load(os.path.join(home, 'fabnet.conf')) Config.update_config({'db_engine': 'mongodb', \ 'db_conn_str': "mongodb://127.0.0.1/%s"%MONITOR_DB,\ 'COLLECT_NODES_STAT_TIMEOUT': 1, \ 'mgmt_cli_port': 2323, 'AUTH_KEY_CHANGE_PERIOD': 2, \ 'mgmt_rest_port': 9923}) print open(os.path.join(home, 'fabnet.conf')).read() else: ntype = 'Base' args = ['/usr/bin/python', './fabnet_core/bin/fabnet-node', address, n_node, 'NODE%.02i'%i, home, ntype, \ KS_PATH, '--input-pwd', '--nodaemon'] if DEBUG: args.append('--debug') print ' '.join(args) #p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,\ p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=sys.stdout,\ env={'FABNET_PLUGINS_CONF': 'tests/plugins.yaml', 'PYTHONPATH': os.path.abspath('.')}) p.stdin.write(KS_PASSWD+'\n') logger.warning('{SNP} PROCESS STARTED') time.sleep(1) PROCESSES.append(p) #if len(ADDRESSES) > 2: # self._check_stat(address) for address in ADDRESSES: self._check_stat(address) time.sleep(1.5) print 'NETWORK STARTED'
def create_net(self, nodes_count): global PROCESSES global ADDRESSES for unuse in range(nodes_count): if not ADDRESSES: n_node = "init-fabnet" i = 1900 else: n_node = random.choice(ADDRESSES) i = int(ADDRESSES[-1].split(":")[-1]) + 1 self._wait_node(n_node) address = "127.0.0.1:%s" % i ADDRESSES.append(address) home = "/tmp/node_%s" % i if os.path.exists(home): shutil.rmtree(home) os.mkdir(home) logger.warning("{SNP} STARTING NODE %s" % address) if n_node == "init-fabnet": ntype = "Monitor" Config.load(os.path.join(home, "node_config")) Config.update_config( {"db_engine": "postgresql", "db_conn_str": "dbname=%s user=postgres" % MONITOR_DB}, "Monitor" ) else: ntype = "DHT" args = [ "/usr/bin/python", "./fabnet/bin/fabnet-node", address, n_node, "%.02i" % i, home, ntype, "--nodaemon", ] if DEBUG: args.append("--debug") p = subprocess.Popen(args) logger.warning("{SNP} PROCESS STARTED") time.sleep(1) PROCESSES.append(p) # if len(ADDRESSES) > 2: # self._check_stat(address) for address in ADDRESSES: self._check_stat(address) time.sleep(1.5) print "NETWORK STARTED"
def create_monitor(neigbour): os.system('rm -rf %s'%monitoring_home) os.system('mkdir %s'%monitoring_home) Config.load(os.path.join(monitoring_home, 'node_config')) Config.update_config({'db_engine': 'postgresql', \ 'db_conn_str': "dbname=%s user=postgres"%MONITOR_DB}, 'Monitor') address = '%s:%s'%('127.0.0.1', 1989) logger.warning('{SNP} STARTING MONITORING NODE %s'%address) mon_p = subprocess.Popen(['/usr/bin/python', './fabnet/bin/fabnet-node', address, neigbour, 'monitor', monitoring_home, 'Monitor', '--nodaemon']) logger.warning('{SNP} PROCESS STARTED') time.sleep(1) return mon_p
def __init__(self, self_address, home_dir='/tmp/', key_storage=None, \ is_init_node=False, node_name='unknown-node', config={}): config_file = os.path.join(home_dir, 'node_config') Config.load(config_file) self.update_config(config, self.OPTYPE) self.msg_container = MessageContainer(MC_SIZE) self.__lock = threading.RLock() self.self_address = self_address self.home_dir = home_dir self.node_name = node_name self.__neighbours = {NT_SUPERIOR: {}, NT_UPPER: {}} self.__upper_keep_alives = {} self.__superior_keep_alives = {} if key_storage: cert = key_storage.get_node_cert() ckey = key_storage.get_node_cert_key() else: cert = ckey = None self.fri_client = FriClient(bool(cert), cert, ckey) self.__fri_agents_manager = WorkersManager(FriAgent, server_name=node_name, \ init_params=(self,)) self.__fri_agents_manager.start_carefully() self.__async_requests = self.__fri_agents_manager.get_queue() self.__check_neighbours_thread = CheckNeighboursThread(self) self.__check_neighbours_thread.setName('%s-CheckNeighbours'%(node_name,)) self.__check_neighbours_thread.start() self.start_datetime = datetime.now() self.is_init_node = is_init_node self.__session_manager = SessionsManager(home_dir) self.__discovery = NeigboursDiscoveryRoutines(self) self.__api_workers_mgr = None self.__stat = Statistic() init_oper_stat = {} for opclass in self.OPERATIONS_LIST: init_oper_stat[opclass.get_name()] = 0 self.__null_oper_stat = init_oper_stat self.stopped = threading.Event()