def translate(vm_stats): stats = {} for var in vm_stats: if var == "ioTune": # Convert ioTune numbers to strings to avoid xml-rpc issue # with numbers bigger than int32_t for ioTune in vm_stats["ioTune"]: ioTune["ioTune"] = dict((k, convertToStr(v)) for k, v in ioTune["ioTune"].iteritems()) stats[var] = vm_stats[var] elif type(vm_stats[var]) is not dict: stats[var] = convertToStr(vm_stats[var]) elif var in ('network', 'balloonInfo'): stats[var] = vm_stats[var] else: # avoid to add empty values if 'disks' not in stats: stats['disks'] = {} try: stats['disks'][var] = {} for value in vm_stats[var]: stats['disks'][var][value] = \ convertToStr(vm_stats[var][value]) except Exception: logging.exception("Error setting vm disk stats") return stats
def getStats(self): """ Report host statistics. """ def _readSwapTotalFree(): meminfo = utils.readMemInfo() return meminfo['SwapTotal'] / 1024, meminfo['SwapFree'] / 1024 stats = {} decStats = self._cif._hostStats.get() for var in decStats: stats[var] = utils.convertToStr(decStats[var]) stats['memAvailable'] = self._memAvailable() / Mbytes stats['memShared'] = self._memShared() / Mbytes stats['memCommitted'] = self._memCommitted() / Mbytes stats['swapTotal'], stats['swapFree'] = _readSwapTotalFree() stats['vmCount'], stats['vmActive'], stats['vmMigrating'] = self._countVms() (tm_year, tm_mon, tm_day, tm_hour, tm_min, tm_sec, dummy, dummy, dummy) = time.gmtime(time.time()) stats['dateTime'] = '%02d-%02d-%02dT%02d:%02d:%02d GMT' % ( tm_year, tm_mon, tm_day, tm_hour, tm_min, tm_sec) stats['ksmState'] = self._cif.ksmMonitor.state stats['ksmPages'] = self._cif.ksmMonitor.pages stats['ksmCpu'] = self._cif.ksmMonitor.cpuUsage stats['netConfigDirty'] = str(self._cif._netConfigDirty) stats['generationID'] = self._cif._generationID return {'status': doneCode, 'info': stats}
def translate(vm_stats): stats = {} for var in vm_stats: if var == "ioTune": value = vm_stats[var] if value: # Convert ioTune numbers to strings to avoid xml-rpc issue # with numbers bigger than int32_t for ioTune in value: ioTune["ioTune"] = dict( (k, convertToStr(v)) for k, v in ioTune["ioTune"].iteritems()) stats[var] = vm_stats[var] elif type(vm_stats[var]) is not dict: stats[var] = convertToStr(vm_stats[var]) elif var in ('disks', 'network', 'balloonInfo'): value = vm_stats[var] if value: stats[var] = value return stats
def get_stats(cif, sample, multipath=False): """ Retreive host internal statistics """ hooks.before_get_stats() ret = {} first_sample, last_sample, _ = sample decStats = stats.produce(first_sample, last_sample) if cif.irs: decStats['storageDomains'] = cif.irs.repoStats() del decStats['storageDomains']['status'] if multipath: decStats['multipathHealth'] = cif.irs.multipath_health() del decStats['multipathHealth']['status'] else: decStats['storageDomains'] = {} for var in decStats: ret[var] = utils.convertToStr(decStats[var]) avail, commit = _memUsageInfo(cif) ret['memAvailable'] = avail // Mbytes ret['memCommitted'] = commit // Mbytes ret['memFree'] = _memFree() // Mbytes ret['swapTotal'], ret['swapFree'] = _readSwapTotalFree() (ret['vmCount'], ret['vmActive'], ret['vmMigrating'], ret['incomingVmMigrations'], ret['outgoingVmMigrations']) = \ _countVms(cif) (tm_year, tm_mon, tm_day, tm_hour, tm_min, tm_sec, dummy, dummy, dummy) = time.gmtime(time.time()) ret['dateTime'] = '%02d-%02d-%02dT%02d:%02d:%02d GMT' % ( tm_year, tm_mon, tm_day, tm_hour, tm_min, tm_sec) ret['momStatus'] = cif.mom.getStatus() ret.update(cif.mom.getKsmStats()) ret['netConfigDirty'] = str(cif._netConfigDirty) ret['haStats'] = _getHaInfo() if ret['haStats']['configured']: # For backwards compatibility, will be removed in the future ret['haScore'] = ret['haStats']['score'] ret = hooks.after_get_stats(ret) return ret
def getStats(self): def _getGuestStatus(): GUEST_WAIT_TIMEOUT = 60 now = time.time() if now - self._guestEventTime < 5 * GUEST_WAIT_TIMEOUT and \ self._guestEvent == 'Powering down': return self._guestEvent if self.guestAgent and self.guestAgent.isResponsive() and \ self.guestAgent.getStatus(): return self.guestAgent.getStatus() if now - self._guestEventTime < GUEST_WAIT_TIMEOUT: return self._guestEvent return 'Up' # used by clientIF.getVmStats if self.lastStatus == 'Down': stats = {} stats['exitCode'] = self.conf['exitCode'] stats['status'] = self.lastStatus stats['exitMessage'] = self.conf['exitMessage'] if 'timeOffset' in self.conf: stats['timeOffset'] = self.conf['timeOffset'] return stats stats = {'displayPort': self.conf['displayPort'], 'displaySecurePort': self.conf['displaySecurePort'], 'displayType': self.conf['display'], 'displayIp': self.conf['displayIp'], 'pid': self.conf['pid'], 'vmType': self.conf['vmType'], 'kvmEnable': self._kvmEnable, 'network': {}, 'disks': {}, 'monitorResponse': str(self._monitorResponse), 'nice': self._nice, 'elapsedTime' : str(int(time.time() - self._startTime)), } if 'cdrom' in self.conf: stats['cdrom'] = self.conf['cdrom'] if 'boot' in self.conf: stats['boot'] = self.conf['boot'] decStats = {} try: if self._vmStats: decStats = self._vmStats.get() if (not self.isMigrating() and decStats['statsAge'] > config.getint('vars', 'vm_command_timeout')): stats['monitorResponse'] = '-1' except: self.log.error("Error fetching vm stats", exc_info=True) for var in decStats: if type(decStats[var]) is not dict: stats[var] = utils.convertToStr(decStats[var]) elif var == 'network': stats['network'] = decStats[var] else: try: stats['disks'][var] = {} for value in decStats[var]: stats['disks'][var][value] = utils.convertToStr(decStats[var][value]) except: self.log.error("Error setting vm disk stats", exc_info=True) if self.lastStatus in ('Saving State', 'Restoring state', 'Migration Source', 'Migration Destination', 'Paused'): stats['status'] = self.lastStatus elif self.isMigrating(): if self._migrationSourceThread._mode == 'file': stats['status'] = 'Saving State' else: stats['status'] = 'Migration Source' elif self.lastStatus == 'Up': stats['status'] = _getGuestStatus() else: stats['status'] = self.lastStatus stats['acpiEnable'] = self.conf.get('acpiEnable', 'true') stats['timeOffset'] = self.conf.get('timeOffset', '0') stats['clientIp'] = self.conf.get('clientIp', '') if 'pauseCode' in self.conf: stats['pauseCode'] = self.conf['pauseCode'] try: stats.update(self.guestAgent.getGuestInfo()) except: return stats memUsage = 0 realMemUsage = int(stats['memUsage']) if realMemUsage != 0: memUsage = 100 - float(realMemUsage) / int(self.conf['memSize']) * 100 stats['memUsage'] = utils.convertToStr(int(memUsage)) return stats