def send_nodemgr_process_status(self): if self.prev_fail_status_bits == self.fail_status_bits: return self.prev_fail_status_bits = self.fail_status_bits fail_status_bits = self.fail_status_bits state, description = self._get_process_state(fail_status_bits) conn_infos = ConnectionState._connection_map.values() (cb_state, cb_description) = ConnectionState.get_conn_state_cb(conn_infos) if (cb_state == ProcessState.NON_FUNCTIONAL): state = ProcessState.NON_FUNCTIONAL if description != '': description += ' ' description += cb_description process_status = ProcessStatus(module_id=self.type_info._module_name, instance_id=self.instance_id, state=ProcessStateNames[state], description=description, connection_infos=conn_infos) process_status_list = [] process_status_list.append(process_status) node_status = NodeStatus(name=self.hostname, process_status=process_status_list) node_status_uve = NodeStatusUVE(table=self.type_info._object_table, data=node_status) msg = 'send_nodemgr_process_status: Sending UVE:' + str( node_status_uve) self.msg_log(msg, SandeshLevel.SYS_INFO) node_status_uve.send()
def _event_tick_60(self): # get disk usage info periodically disk_usage_info = self.system_data.get_disk_usage() for group in self.process_state_db: key = next(key for key in self.process_state_db[group]) # typical ntp sync time is about 5 min - first time # thus let's sync after 5 minutes and each 5 minutes to decrease load if 0 < self.tick_count and (self.tick_count % 5) == 0: if self.system_data.check_ntp_status(): self.fail_status_bits &= ~self.FAIL_STATUS_NTP_SYNC else: self.fail_status_bits |= self.FAIL_STATUS_NTP_SYNC self.send_nodemgr_process_status() if self._update_process_core_file_list(): self.send_process_state_db([group]) process_mem_cpu_usage = self._get_group_processes_mem_cpu_usage( group) # get system mem/cpu usage system_mem_usage = self.system_data.get_sys_mem_info( self.type_info._uve_node_type) system_cpu_usage = self.system_data.get_sys_cpu_info( self.type_info._uve_node_type) # send above encoded buffer node_status = NodeStatus( name=self.process_state_db[group][key].name, disk_usage_info=disk_usage_info, system_mem_usage=system_mem_usage, system_cpu_usage=system_cpu_usage, process_mem_cpu_usage=process_mem_cpu_usage) # encode other core file if self.system_data.update_all_core_file(): self.send_process_state_db(self.group_names) node_status.all_core_file_list = self.all_core_file_list node_status_uve = NodeStatusUVE(table=self.type_info._object_table, data=node_status) self.msg_log('DBG: event_tick_60: node_status=%s' % node_status, SandeshLevel.SYS_DEBUG) node_status_uve.send() self.tick_count += 1
def _send_init_info(self, group_name): key = next(key for key in self.process_state_db[group_name]) # system_cpu_info sys_cpu = SystemCpuInfo() sys_cpu.num_socket = self.system_data.get_num_socket() sys_cpu.num_cpu = self.system_data.get_num_cpu() sys_cpu.num_core_per_socket = self.system_data.get_num_core_per_socket() sys_cpu.num_thread_per_core = self.system_data.get_num_thread_per_core() node_status = NodeStatus( name=self.process_state_db[group_name][key].name, system_cpu_info=sys_cpu, build_info=self._get_build_info()) # installed/running package version pkg_version = self._get_package_version() node_status.installed_package_version = pkg_version node_status.running_package_version = pkg_version node_status_uve = NodeStatusUVE(table=self.type_info._object_table, data=node_status) node_status_uve.send()
def send_process_state_db(self, group_names): name = self.hostname for group in group_names: process_infos = [] delete_status = True for key in self.process_state_db[group]: pstat = self.process_state_db[group][key] process_info = ProcessInfo() process_info.process_name = key process_info.process_state = pstat.process_state process_info.start_count = pstat.start_count process_info.stop_count = pstat.stop_count process_info.exit_count = pstat.exit_count process_info.last_start_time = pstat.start_time process_info.last_stop_time = pstat.stop_time process_info.last_exit_time = pstat.exit_time process_info.core_file_list = pstat.core_file_list process_infos.append(process_info) # in tor-agent case, we should use tor-agent name as uve key name = pstat.name if pstat.deleted is False: delete_status = False if not process_infos: continue # send node UVE node_status = NodeStatus() node_status.name = name node_status.deleted = delete_status node_status.process_info = process_infos node_status.build_info = self._get_build_info() node_status_uve = NodeStatusUVE(table=self.type_info._object_table, data=node_status) msg = ('send_process_state_db: Sending UVE: {}'.format( node_status_uve)) self.msg_log(msg, SandeshLevel.SYS_INFO) node_status_uve.send()