[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Implement VM_metrics Xen-API class.
# HG changeset patch # User Ewan Mellor <ewan@xxxxxxxxxxxxx> # Date 1173904916 0 # Node ID 460dac5742cf0349f8968f5e9802e27d633f87ac # Parent 192bee4b09a6a90f226b81e2cfc1356bf9df595e Implement VM_metrics Xen-API class. Signed-off-by: Tom Wilkie <tom.wilkie@xxxxxxxxx> Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx> --- tools/python/xen/xend/XendAPI.py | 55 ++++++++++++++++++++------- tools/python/xen/xend/XendDomainInfo.py | 10 ++++ tools/python/xen/xend/XendVMMetrics.py | 65 ++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+), 13 deletions(-) diff -r 192bee4b09a6 -r 460dac5742cf tools/python/xen/xend/XendAPI.py --- a/tools/python/xen/xend/XendAPI.py Wed Mar 14 20:27:57 2007 +0000 +++ b/tools/python/xen/xend/XendAPI.py Wed Mar 14 20:41:56 2007 +0000 @@ -31,6 +31,7 @@ from xen.xend.XendClient import ERROR_IN from xen.xend.XendClient import ERROR_INVALID_DOMAIN from xen.xend.XendLogging import log from xen.xend.XendTask import XendTask +from xen.xend.XendVMMetrics import XendVMMetrics from xen.xend.XendAPIConstants import * from xen.util.xmlrpclib2 import stringify @@ -192,6 +193,16 @@ def valid_vm(func): _check_ref(XendDomain.instance().is_valid_vm, 'VM', func, *args, **kwargs) +def valid_vm_metrics(func): + """Decorator to verify if vm_metrics_ref is valid before calling method. + + @param func: function with params: (self, session, vm_metrics_ref, ...) + @rtype: callable object + """ + return lambda *args, **kwargs: \ + _check_ref(XendVMMetrics.is_valid_vm_metrics, + 'VM_metrics', func, *args, **kwargs) + def valid_network(func): """Decorator to verify if network_ref is valid before calling method. @@ -400,6 +411,7 @@ class XendAPI(object): 'host_metrics' : valid_host_metrics, 'network' : valid_network, 'VM' : valid_vm, + 'VM_metrics' : valid_vm_metrics, 'VBD' : valid_vbd, 'VBD_metrics' : valid_vbd_metrics, 'VIF' : valid_vif, @@ -990,11 +1002,9 @@ class XendAPI(object): VM_attr_ro = ['power_state', 'resident_on', - 'memory_actual', 'memory_static_max', 'memory_static_min', 'VCPUs_number', - 'VCPUs_utilisation', 'consoles', 'VIFs', 'VBDs', @@ -1002,6 +1012,7 @@ class XendAPI(object): 'tools_version', 'domid', 'is_control_domain', + 'metrics' ] VM_attr_rw = ['name_label', @@ -1098,11 +1109,7 @@ class XendAPI(object): def VM_get_resident_on(self, session, vm_ref): return xen_api_success(XendNode.instance().uuid) - - def VM_get_memory_actual(self, session, vm_ref): - dom = XendDomain.instance().get_vm_by_uuid(vm_ref) - return xen_api_todo() # unsupported by xc - + def VM_get_memory_static_max(self, session, vm_ref): dom = XendDomain.instance().get_vm_by_uuid(vm_ref) return xen_api_success(dom.get_memory_static_max()) @@ -1115,10 +1122,6 @@ class XendAPI(object): dom = XendDomain.instance().get_vm_by_uuid(vm_ref) return xen_api_success(dom.getVCpuCount()) - def VM_get_VCPUs_utilisation(self, session, vm_ref): - dom = XendDomain.instance().get_vm_by_uuid(vm_ref) - return xen_api_success(dom.get_vcpus_util()) - def VM_get_VIFs(self, session, vm_ref): dom = XendDomain.instance().get_vm_by_uuid(vm_ref) return xen_api_success(dom.get_vifs()) @@ -1138,6 +1141,10 @@ class XendAPI(object): def VM_get_tools_version(self, session, vm_ref): dom = XendDomain.instance().get_vm_by_uuid(vm_ref) return dom.get_tools_version() + + def VM_get_metrics(self, _, vm_ref): + dom = XendDomain.instance().get_vm_by_uuid(vm_ref) + return xen_api_success(dom.get_metrics()) # attributes (rw) def VM_get_name_label(self, session, vm_ref): @@ -1418,11 +1425,9 @@ class XendAPI(object): 'memory_static_max': xeninfo.get_memory_static_max(), 'memory_dynamic_min': xeninfo.get_memory_dynamic_min(), 'memory_dynamic_max': xeninfo.get_memory_dynamic_max(), - 'memory_actual': xeninfo.get_memory_static_min(), 'VCPUs_policy': xeninfo.get_vcpus_policy(), 'VCPUs_params': xeninfo.get_vcpus_params(), 'VCPUs_number': xeninfo.getVCpuCount(), - 'VCPUs_utilisation': xeninfo.get_vcpus_util(), 'actions_after_shutdown': xeninfo.get_on_shutdown(), 'actions_after_reboot': xeninfo.get_on_reboot(), 'actions_after_suspend': xeninfo.get_on_suspend(), @@ -1497,6 +1502,30 @@ class XendAPI(object): return XendTask.log_progress(0, 100, do_vm_func, "domain_unpause", vm_ref) + # Xen API: Class VM_metrics + # ---------------------------------------------------------------- + + VM_metrics_attr_ro = ['memory_actual', + 'vcpus_number', + 'vcpus_utilisation'] + VM_metrics_attr_rw = [] + VM_metrics_methods = [] + + def _VM_metrics_get(self, ref): + return XendVMMetrics.get_by_uuid(ref) + + def VM_metrics_get_record(self, _, ref): + return xen_api_success(self._VM_metrics_get(ref).get_record()) + + def VM_metrics_get_memory_actual(self, _, ref): + return xen_api_success(self._VM_metrics_get(ref).get_memory_actual()) + + def VM_metrics_get_vcpus_number(self, _, ref): + return xen_api_success(self._VM_metrics_get(ref).get_vcpus_number()) + + def VM_metrics_get_vcpus_utilisation(self, _, ref): + return xen_api_success(self._VM_metrics_get(ref).get_metrics_get_vcpus_utilisation()) + # Xen API: Class VBD # ---------------------------------------------------------------- diff -r 192bee4b09a6 -r 460dac5742cf tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Wed Mar 14 20:27:57 2007 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Mar 14 20:41:56 2007 +0000 @@ -50,6 +50,8 @@ from xen.xend.xenstore.xswatch import xs from xen.xend.xenstore.xswatch import xswatch from xen.xend.XendConstants import * from xen.xend.XendAPIConstants import * + +from xen.xend.XendVMMetrics import XendVMMetrics MIGRATE_TIMEOUT = 30.0 BOOTLOADER_LOOPBACK_DEVICE = '/dev/xvdp' @@ -369,6 +371,8 @@ class XendDomainInfo: self._augmentInfo(priv) self._checkName(self.info['name_label']) + + self.metrics = XendVMMetrics(uuid.createString(), self) # @@ -626,6 +630,10 @@ class XendDomainInfo: except RuntimeError, exn: raise XendError(str(exn)) + + + def getDomInfo(self): + return dom_get(self.domid) # # internal functions ... TODO: re-categorised @@ -2060,6 +2068,8 @@ class XendDomainInfo: return self.info.get('pci_bus', '') def get_tools_version(self): return self.info.get('tools_version', {}) + def get_metrics(self): + return self.metrics.get_uuid(); def get_on_shutdown(self): after_shutdown = self.info.get('actions_after_shutdown') diff -r 192bee4b09a6 -r 460dac5742cf tools/python/xen/xend/XendVMMetrics.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/python/xen/xend/XendVMMetrics.py Wed Mar 14 20:41:56 2007 +0000 @@ -0,0 +1,65 @@ +#============================================================================ +# This library is free software; you can redistribute it and/or +# modify it under the terms of version 2.1 of the GNU Lesser General Public +# License as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#============================================================================ +# Copyright (c) 2006-2007 Xensource Inc. +#============================================================================ + +from xen.xend.XendLogging import log + +instances = {} + +class XendVMMetrics: + """VM Metrics.""" + + def get_by_uuid(_, uuid): + return instances[uuid] + + get_by_uuid = classmethod(get_by_uuid) + + def is_valid_vm_metrics(_, uuid): + return uuid in instances + + is_valid_vm_metrics = classmethod(is_valid_vm_metrics) + + def __init__(self, uuid, xend_domain_instance): + self.uuid = uuid + self.xend_domain_instance = xend_domain_instance + instances[uuid] = self + + def get_uuid(self): + return self.uuid + + def get_memory_actual(self): + return self.get_record()["memory_actual"] + + def get_vcpus_number(self): + return self.get_record()["vcpus_number"] + + def get_vcpus_utilisation(self): + return self.xend_domain_instance.get_vcpus_util() + + def get_record(self): + domInfo = self.xend_domain_instance.getDomInfo() + if domInfo: + return { 'uuid' : self.uuid, + 'memory_actual' : domInfo["mem_kb"] * 1024, + 'vcpus_number' : domInfo["online_vcpus"], + 'vcpus_utilisation' : self.get_vcpus_utilisation() + } + else: + return { 'uuid' : self.uuid, + 'memory_actual' : 0, + 'vcpus_number' : 0, + 'vcpus_utilisation' : {} + } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |