Implement VM_metrics Xen-API class.

Signed-off-by: Tom Wilkie <tom.wilkie@gmail.com>
Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
Ewan Mellor committed 2007-03-14 20:41:56 +00:00
1 parent 42b966d15c
commit ae6780b241
3 files changed
+117 -13

No files matched your search

+42 -13
View File
@@ -31,6 +31,7 @@ from xen.xend.XendError import *
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())
@@ -1139,6 +1142,10 @@ class XendAPI(object):
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):
dom = XendDomain.instance().get_vm_by_uuid(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
# ----------------------------------------------------------------
+10
View File
@@ -51,6 +51,8 @@ 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)
#
@@ -627,6 +631,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')
+65
View File
@@ -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' : {}
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.