def __init__(self, config, type_info, sandesh_instance, unit_names, update_process_list=False): self.config = config self.type_info = type_info self.max_cores = 4 self.max_old_cores = 3 self.max_new_cores = 1 self.all_core_file_list = [] self.core_dir_modified_time = 0 self.tick_count = 0 self.fail_status_bits = 0 self.prev_fail_status_bits = 1 self.instance_id = INSTANCE_ID_DEFAULT self.collector_addr = self.config.collectors self.sandesh_instance = sandesh_instance self.curr_build_info = None self.new_build_info = None self.last_cpu = None self.last_time = 0 self.own_version = None self.hostname = socket.gethostname() event_handlers = {} event_handlers['PROCESS_STATE'] = self.event_process_state event_handlers['PROCESS_COMMUNICATION'] = self.event_process_communication event_handlers['PROCESS_LIST_UPDATE'] = self.update_current_processes ConnectionState.init(self.sandesh_instance, self.hostname, self.type_info._module_name, self.instance_id, staticmethod(ConnectionState.get_conn_state_cb), NodeStatusUVE, NodeStatus, self.type_info._object_table, self.get_process_state_cb) self.sandesh_instance.init_generator( self.type_info._module_name, self.hostname, self.type_info._node_type_name, self.instance_id, self.collector_addr, self.type_info._module_name, ServiceHttpPortMap[self.type_info._module_name], ['nodemgr.common.sandesh'] + self.type_info._sandesh_packages, config=SandeshConfig.from_parser_arguments(self.config)) self.sandesh_instance.set_logging_params( enable_local_log=self.config.log_local, category=self.config.log_category, level=self.config.log_level, file=self.config.log_file, enable_syslog=self.config.use_syslog, syslog_facility=self.config.syslog_facility) self.logger = self.sandesh_instance.logger() if DockerProcessInfoManager and (utils.is_running_in_docker() or utils.is_running_in_kubepod()): self.process_info_manager = DockerProcessInfoManager( type_info._module_type, unit_names, event_handlers, update_process_list) else: self.msg_log('Node manager could not detect process manager', SandeshLevel.SYS_ERR) exit(-1) self.process_state_db = self.get_current_processes() for group in self.process_state_db: self.send_init_info(group)
def __init__(self, unit_names, event_handlers, update_process_list): if not pydbus_present: self.msg_log('Node manager cannot run without pydbus', SandeshLevel.SYS_ERR) exit(-1) # In docker, systemd notifications via sd_notify do not # work, hence we will poll the process status self._poll = is_running_in_docker() self._event_handlers = event_handlers self._update_process_list = update_process_list self._units = dict() bus = pydbus.SystemBus() for unit_name in unit_names: self._units[unit_name] = bus.get(SystemdUtils.SYSTEMD_BUS_NAME, get_unit_path(unit_name)) self._cached_process_infos = {}
def __init__(self, config, type_info, unit_names, update_process_list=False): self.config = config self.type_info = type_info self.max_cores = 4 self.max_old_cores = 3 self.max_new_cores = 1 self.all_core_file_list = [] self.tick_count = 0 self.fail_status_bits = 0 self.prev_fail_status_bits = 1 self.instance_id = INSTANCE_ID_DEFAULT self.sandesh_instance = sandesh_global self.curr_build_info = None self.new_build_info = None self.hostip = self.config.hostip self.hostname = socket.getfqdn(self.hostip) if self.config.hostname is None \ else self.config.hostname self.collector_chksum = 0 self.random_collectors = list() if config.collectors: config.collectors.sort() self.collector_chksum = hashlib.md5("".join( config.collectors)).hexdigest() self.random_collectors = random.sample(config.collectors, len(config.collectors)) ConnectionState.init(self.sandesh_instance, self.hostname, self.type_info._module_name, self.instance_id, staticmethod(ConnectionState.get_conn_state_cb), NodeStatusUVE, NodeStatus, self.type_info._object_table, self._get_process_state_cb) self.sandesh_instance.init_generator( self.type_info._module_name, self.hostname, self.type_info._node_type_name, self.instance_id, self.random_collectors, self.type_info._module_name, ServiceHttpPortMap[self.type_info._module_name], ['nodemgr.common.sandesh'] + self.type_info._sandesh_packages, config=SandeshConfig.from_parser_arguments(self.config)) self.sandesh_instance.set_logging_params( enable_local_log=self.config.log_local, category=self.config.log_category, level=self.config.log_level, file=self.config.log_file, enable_syslog=self.config.use_syslog, syslog_facility=self.config.syslog_facility) self.logger = self.sandesh_instance.logger() event_handlers = {} event_handlers['PROCESS_STATE'] = self._event_process_state event_handlers[ 'PROCESS_COMMUNICATION'] = self._event_process_communication event_handlers['PROCESS_LIST_UPDATE'] = self._update_current_processes if platform.system() == 'Windows': self.system_data = WindowsSysData() self.process_info_manager = WindowsProcessInfoManager( event_handlers) else: gevent.signal(signal.SIGHUP, self.nodemgr_sighup_handler) self.system_data = LinuxSysData(self.msg_log, self.config.corefile_path) if DockerProcessInfoManager and (utils.is_running_in_docker() or utils.is_running_in_kubepod()): self.process_info_manager = DockerProcessInfoManager( type_info._module_type, unit_names, event_handlers, update_process_list) else: self.msg_log('Node manager could not detect process manager', SandeshLevel.SYS_ERR) exit(-1) self.process_state_db = self._get_current_processes() for group in self.process_state_db: self._send_init_info(group)
def __init__(self, config, type_info, unit_names, update_process_list=False): self.config = config self.type_info = type_info self.max_cores = 4 self.max_old_cores = 3 self.max_new_cores = 1 self.all_core_file_list = [] self.tick_count = 0 self.fail_status_bits = 0 self.prev_fail_status_bits = 1 self.instance_id = INSTANCE_ID_DEFAULT self.sandesh_instance = sandesh_global self.curr_build_info = None self.new_build_info = None self.hostip = self.config.hostip self.hostname = socket.getfqdn(self.hostip) self.collector_chksum = 0 self.random_collectors = list() if config.collectors: config.collectors.sort() self.collector_chksum = hashlib.md5("".join(config.collectors)).hexdigest() self.random_collectors = random.sample(config.collectors, len(config.collectors)) ConnectionState.init(self.sandesh_instance, self.hostname, self.type_info._module_name, self.instance_id, staticmethod(ConnectionState.get_conn_state_cb), NodeStatusUVE, NodeStatus, self.type_info._object_table, self._get_process_state_cb) self.sandesh_instance.init_generator( self.type_info._module_name, self.hostname, self.type_info._node_type_name, self.instance_id, self.random_collectors, self.type_info._module_name, ServiceHttpPortMap[self.type_info._module_name], ['nodemgr.common.sandesh'] + self.type_info._sandesh_packages, config=SandeshConfig.from_parser_arguments(self.config)) self.sandesh_instance.set_logging_params( enable_local_log=self.config.log_local, category=self.config.log_category, level=self.config.log_level, file=self.config.log_file, enable_syslog=self.config.use_syslog, syslog_facility=self.config.syslog_facility) self.logger = self.sandesh_instance.logger() event_handlers = {} event_handlers['PROCESS_STATE'] = self._event_process_state event_handlers['PROCESS_COMMUNICATION'] = self._event_process_communication event_handlers['PROCESS_LIST_UPDATE'] = self._update_current_processes if platform.system() == 'Windows': self.system_data = WindowsSysData() self.process_info_manager = WindowsProcessInfoManager(event_handlers) else: gevent.signal(signal.SIGHUP, self.nodemgr_sighup_handler) self.system_data = LinuxSysData(self.msg_log, self.config.corefile_path) if DockerProcessInfoManager and (utils.is_running_in_docker() or utils.is_running_in_kubepod()): self.process_info_manager = DockerProcessInfoManager( type_info._module_type, unit_names, event_handlers, update_process_list) else: self.msg_log('Node manager could not detect process manager', SandeshLevel.SYS_ERR) exit(-1) self.process_state_db = self._get_current_processes() for group in self.process_state_db: self._send_init_info(group)
def __init__(self, config, type_info, rule_file, sandesh_instance, unit_names, update_process_list=False): self.config = config self.type_info = type_info self.stdin = sys.stdin self.stdout = sys.stdout self.stderr = sys.stderr self.rule_file = rule_file self.rules_data = {'Rules': []} self.max_cores = 4 self.max_old_cores = 3 self.max_new_cores = 1 self.all_core_file_list = [] self.core_dir_modified_time = 0 self.tick_count = 0 self.fail_status_bits = 0 self.prev_fail_status_bits = 1 self.instance_id = INSTANCE_ID_DEFAULT self.collector_addr = self.config.collectors self.sandesh_instance = sandesh_instance self.curr_build_info = None self.new_build_info = None self.last_cpu = None self.last_time = 0 self.installed_package_version = None SupervisorEventsReq.handle_request = self.sandesh_supervisor_handle_request event_handlers = {} event_handlers['PROCESS_STATE'] = self.event_process_state event_handlers['PROCESS_COMMUNICATION'] = self.event_process_communication event_handlers['PROCESS_LIST_UPDATE'] = self.update_current_process ConnectionState.init(self.sandesh_instance, socket.gethostname(), self.type_info._module_name, self.instance_id, staticmethod(ConnectionState.get_process_state_cb), NodeStatusUVE, NodeStatus, self.type_info._object_table) self.sandesh_instance.init_generator( self.type_info._module_name, socket.gethostname(), self.type_info._node_type_name, self.instance_id, self.collector_addr, self.type_info._module_name, ServiceHttpPortMap[self.type_info._module_name], ['nodemgr.common.sandesh'] + self.type_info._sandesh_packages, config=SandeshConfig.from_parser_arguments(self.config)) self.sandesh_instance.set_logging_params( enable_local_log=self.config.log_local, category=self.config.log_category, level=self.config.log_level, file=self.config.log_file, enable_syslog=self.config.use_syslog, syslog_facility=self.config.syslog_facility) self.logger = self.sandesh_instance.logger() # TODO: handle difference between 'fat' containers and microservices smartly if DockerProcessInfoManager and (is_running_in_docker() or is_running_in_kubepod()): self.process_info_manager = DockerProcessInfoManager( unit_names, event_handlers, update_process_list) elif is_systemd_based(): self.process_info_manager = SystemdProcessInfoManager( unit_names, event_handlers, update_process_list) elif 'SUPERVISOR_SERVER_URL' in os.environ: self.process_info_manager = SupervisorProcessInfoManager( self.stdin, self.stdout, self.type_info._supervisor_serverurl, event_handlers, update_process_list) else: self.msg_log('Node manager could not detect process manager', SandeshLevel.SYS_ERR) exit(-1) self.add_current_process() for group in self.process_state_db: self.send_init_info(group) self.third_party_process_dict = self.type_info._third_party_processes