def measure_time(*args, **kwargs): t1 = time.time() result = fn(*args, **kwargs) t2 = time.time() logger.debug("@timefn:" + fn.__name__ + " took " + str(t2 - t1) + " seconds") return result
def get_nic_util(self): try: nics_io = psutil.net_io_counters(pernic=True) virtual_net_device = os.listdir('/sys/devices/virtual/net/') physical_net_device = [ dev for dev in nics_io if dev not in virtual_net_device and not dev.startswith("tap") ] monitor_net_devices = physical_net_device # add bond, drop bond's slave physical nic bond_info = self.get_bonds_dict() if bond_info: bond_masters = bond_info.get("bond_masters", []) bond_slaves = bond_info.get("bond_slaves", []) monitor_net_devices.extend(bond_masters) monitor_net_devices = [ dev for dev in monitor_net_devices if dev not in bond_slaves ] with self.app.app_context(): for nic in monitor_net_devices: bytes_send = nics_io[nic].bytes_sent bytes_recv = nics_io[nic].bytes_recv if nic not in current_app.statistic['nic_util'].keys(): current_app.statistic['nic_util'][nic] = {} current_app.statistic['nic_util'][nic]['ip'] = "" if (nic in psutil.net_if_addrs()) and ( psutil.net_if_addrs()[nic][0].family == socket.AF_INET): current_app.statistic['nic_util'][nic][ 'ip'] = psutil.net_if_addrs()[nic][0].address current_app.statistic['nic_util'][nic][ 'read_bytes'] = [] current_app.statistic['nic_util'][nic][ 'write_bytes'] = [] if len(current_app.statistic['nic_util'][nic] ['write_bytes']) == self.record_cnt: current_app.statistic['nic_util'][nic][ 'write_bytes'].pop(0) current_app.statistic['nic_util'][nic][ 'write_bytes'].append(bytes_send) if len(current_app.statistic['nic_util'][nic] ['read_bytes']) == self.record_cnt: current_app.statistic['nic_util'][nic][ 'read_bytes'].pop(0) current_app.statistic['nic_util'][nic][ 'read_bytes'].append(bytes_recv) logger.debug(current_app.statistic['nic_util']) except Exception as err: logger.error(err) logger.error(''.join(traceback.format_exc()))
def get_cpu_util(self): try: cpu_utilization = psutil.cpu_percent() with self.app.app_context(): if cpu_utilization: if len(current_app.statistic['cpu_util'] ) == self.record_cnt: current_app.statistic['cpu_util'].pop(0) current_app.statistic['cpu_util'].append(cpu_utilization) logger.debug(current_app.statistic['cpu_util']) except Exception as err: logger.error(err) logger.error(''.join(traceback.format_exc()))
def get_memory_util(self): try: mem_info = psutil.virtual_memory() with self.app.app_context(): if mem_info.percent: if not current_app.statistic['memory_util'].keys(): current_app.statistic['memory_util']['used'] = [] current_app.statistic['memory_util']['percent'] = [] if len(current_app.statistic['memory_util'] ['percent']) == self.record_cnt: current_app.statistic['memory_util']['percent'].pop(0) current_app.statistic['memory_util']['used'].pop(0) current_app.statistic['memory_util']['percent'].append( mem_info.percent) current_app.statistic['memory_util']['used'].append( mem_info.used) logger.debug(current_app.statistic['memory_util']) except Exception as err: logger.error(err) logger.error(''.join(traceback.format_exc()))
def get_disk_util(self): try: disk_parts = psutil.disk_partitions() with self.app.app_context(): for disk in disk_parts: disk_mountpoint = disk.mountpoint disk_usage = psutil.disk_usage(disk_mountpoint) if disk_mountpoint not in current_app.statistic[ 'disk_util'].keys(): current_app.statistic['disk_util'][ disk_mountpoint] = {} current_app.statistic['disk_util'][disk_mountpoint][ 'rate'] = "%0.2f" % disk_usage.percent current_app.statistic['disk_util'][disk_mountpoint][ 'used'] = disk_usage.used current_app.statistic['disk_util'][disk_mountpoint][ 'total'] = disk_usage.total logger.debug(current_app.statistic['disk_util']) except Exception as err: logger.error(err) logger.error(''.join(traceback.format_exc()))
def get_diskio_util(self): try: with self.app.app_context(): disks_io = psutil.disk_io_counters(perdisk=True) for disk_name in self.get_disk_list(): # disk_io = disks_io[disk_name] write_bytes = disks_io[disk_name].write_bytes read_bytes = disks_io[disk_name].read_bytes io_use_ticks = self.get_disk_io_ticks(disk_name) if disk_name not in current_app.statistic[ 'disk_io_util'].keys(): current_app.statistic['disk_io_util'][disk_name] = {} current_app.statistic['disk_io_util'][disk_name][ 'read_bytes'] = [] current_app.statistic['disk_io_util'][disk_name][ 'write_bytes'] = [] current_app.statistic['disk_io_util'][disk_name][ 'io_use_ticks'] = [] if len(current_app.statistic['disk_io_util'][disk_name] ['write_bytes']) == self.record_cnt: current_app.statistic['disk_io_util'][disk_name][ 'write_bytes'].pop(0) current_app.statistic['disk_io_util'][disk_name][ 'read_bytes'].pop(0) current_app.statistic['disk_io_util'][disk_name][ 'io_use_ticks'].pop(0) current_app.statistic['disk_io_util'][disk_name][ 'write_bytes'].append(write_bytes) current_app.statistic['disk_io_util'][disk_name][ 'read_bytes'].append(read_bytes) current_app.statistic['disk_io_util'][disk_name][ 'io_use_ticks'].append(io_use_ticks) logger.debug(current_app.statistic['disk_io_util']) except Exception as err: logger.error(err) logger.error(''.join(traceback.format_exc()))
def monitor_timer(msq, handlers): # default pause timer handlers for timer in handlers: exec_func = getattr(timer, "pause") if timer.name == "statistic": continue logger.debug('timer = {}'.format(timer.name)) exec_func() while True: # 1. get queue msg ['pause', 'resume', 'update'] try: cmd_msg = msq.get(block=False) for timer in handlers: exec_func = getattr(timer, cmd_msg) exec_func() logger.info('monitor_timer exec: {}'.format(cmd_msg)) except Exception as err: if type(err) is queue.Empty: #logger.debug('timer_queue no msq, go to sleep 5 seconds...') pass else: logger.error('monitor_timer error: {}'.format(err)) # 2. exec thread process time.sleep(5)