From 180f0445ac1fa04cc00e927634f4fb721be713dc Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Thu, 19 Aug 2021 12:36:31 -0400 Subject: [PATCH] Properly handle exceptions getting VM stats --- node-daemon/pvcnoded/Daemon.py | 78 ++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/node-daemon/pvcnoded/Daemon.py b/node-daemon/pvcnoded/Daemon.py index 16e1d0ae..97773981 100644 --- a/node-daemon/pvcnoded/Daemon.py +++ b/node-daemon/pvcnoded/Daemon.py @@ -1675,11 +1675,7 @@ def collect_vm_stats(queue): domain_memory_stats = domain.memoryStats() domain_cpu_stats = domain.getCPUStats(True)[0] except Exception as e: - if debug: - try: - logger.out("Failed getting VM information for {}: {}".format(domain.name(), e), state='d', prefix='vm-thread') - except Exception: - pass + logger.out("Failed getting VM information for {}: {}".format(domain.name(), e), state='w', prefix='vm-thread') continue # Ensure VM is present in the domain_list @@ -1689,42 +1685,50 @@ def collect_vm_stats(queue): if debug: logger.out("Getting disk statistics for VM {}".format(domain_name), state='d', prefix='vm-thread') domain_disk_stats = [] - for disk in tree.findall('devices/disk'): - disk_name = disk.find('source').get('name') - if not disk_name: - disk_name = disk.find('source').get('file') - disk_stats = domain.blockStats(disk.find('target').get('dev')) - domain_disk_stats.append({ - "name": disk_name, - "rd_req": disk_stats[0], - "rd_bytes": disk_stats[1], - "wr_req": disk_stats[2], - "wr_bytes": disk_stats[3], - "err": disk_stats[4] - }) + try: + for disk in tree.findall('devices/disk'): + disk_name = disk.find('source').get('name') + if not disk_name: + disk_name = disk.find('source').get('file') + disk_stats = domain.blockStats(disk.find('target').get('dev')) + domain_disk_stats.append({ + "name": disk_name, + "rd_req": disk_stats[0], + "rd_bytes": disk_stats[1], + "wr_req": disk_stats[2], + "wr_bytes": disk_stats[3], + "err": disk_stats[4] + }) + except Exception as e: + logger.out("Failed to get disk stats for VM {}: {}".format(domain_name, e), state='w', prefix='vm-thread') + continue if debug: logger.out("Getting network statistics for VM {}".format(domain_name), state='d', prefix='vm-thread') domain_network_stats = [] - for interface in tree.findall('devices/interface'): - interface_type = interface.get('type') - if interface_type not in ['bridge']: - continue - interface_name = interface.find('target').get('dev') - interface_bridge = interface.find('source').get('bridge') - interface_stats = domain.interfaceStats(interface_name) - domain_network_stats.append({ - "name": interface_name, - "bridge": interface_bridge, - "rd_bytes": interface_stats[0], - "rd_packets": interface_stats[1], - "rd_errors": interface_stats[2], - "rd_drops": interface_stats[3], - "wr_bytes": interface_stats[4], - "wr_packets": interface_stats[5], - "wr_errors": interface_stats[6], - "wr_drops": interface_stats[7] - }) + try: + for interface in tree.findall('devices/interface'): + interface_type = interface.get('type') + if interface_type not in ['bridge']: + continue + interface_name = interface.find('target').get('dev') + interface_bridge = interface.find('source').get('bridge') + interface_stats = domain.interfaceStats(interface_name) + domain_network_stats.append({ + "name": interface_name, + "bridge": interface_bridge, + "rd_bytes": interface_stats[0], + "rd_packets": interface_stats[1], + "rd_errors": interface_stats[2], + "rd_drops": interface_stats[3], + "wr_bytes": interface_stats[4], + "wr_packets": interface_stats[5], + "wr_errors": interface_stats[6], + "wr_drops": interface_stats[7] + }) + except Exception as e: + logger.out("Failed to get network stats for VM {}: {}".format(domain_name, e), state='w', prefix='vm-thread') + continue # Create the final dictionary domain_stats = {