import collections
from lxml import etree
import json
import threading
import time
libvirt = None
libvirt_type = 'kvm'
libvirt_uri = ''
Instance = collections.namedtuple('Instance', ['name', 'UUID', 'state'])
CPUStats = collections.namedtuple('CPUStats', ['number', 'util'])
Interface = collections.namedtuple('Interface', ['name', 'mac',
'fref', 'parameters'])
InterfaceStats = collections.namedtuple('InterfaceStats',
['rx_bytes', 'rx_packets',
'tx_bytes', 'tx_packets'])
Disk = collections.namedtuple('Disk', ['device'])
DiskStats = collections.namedtuple('DiskStats',
['read_bytes', 'read_requests',
'write_bytes', 'write_requests',
'errors'])
DiskSize = collections.namedtuple('DiskSize',['total','allocation','physical'])
Memory = collections.namedtuple('Memory',['total','used','util'])
class InspectorException(Exception):
def __init__(self, message=None):
super(InspectorException, self).__init__(message)
class InstanceNotFoundException(InspectorException):
pass
class LibvirtInspector():
per_type_uris = dict(uml='uml:///system', xen='xen:///', lxc='lxc:///')
def __init__(self):
self.uri = self._get_uri()
self.connection = None
def _get_uri(self):
return libvirt_uri or self.per_type_uris.get(libvirt_type,
'qemu:///system')
def _get_connection(self):
if not self.connection or not self._test_connection():
global libvirt
if libvirt is None:
libvirt = __import__('libvirt')
# LOG.debug('Connecting to libvirt: %s', self.uri)
self.connection = libvirt.open(self.uri)
return self.connection
def _test_connection(self):
try:
self.connection.getCapabilities()
return True
except libvirt.libvirtError as e:
if (e.get_error_code() == libvirt.VIR_ERR_SYSTEM_ERROR and
e.get_error_domain() in (libvirt.VIR_FROM_REMOTE,
libvirt.VIR_FROM_RPC)):
# LOG.debug('Connection to libvirt broke')
return False
raise
def _lookup_by_name(self, instance_name):
try:
return self._get_connection().lookupByName(instance_name)
except Exception as ex:
if not libvirt or not isinstance(ex, libvirt.libvirtError):
raise InspectorException(unicode(ex))
error_code = ex.get_error_code()
msg = ("Error from libvirt while looking
通过libvirt获取对虚拟机的监控数据
最新推荐文章于 2024-06-19 09:42:14 发布
本文介绍如何借助libvirt库在版本1.1.2及以上获取虚拟机的内存监控数据,特别是针对Linux系统的应用。
摘要由CSDN通过智能技术生成