fuel-plugin-xenserver/plugin_source/deployment_scripts/patchset/ceilometer-rates-always-zer...

151 lines
6.6 KiB
Diff

diff --git a/ceilometer/compute/virt/xenapi/inspector.py b/ceilometer/compute/virt/xenapi/inspector.py
index 9632cba..18ed5d7 100644
--- a/ceilometer/compute/virt/xenapi/inspector.py
+++ b/ceilometer/compute/virt/xenapi/inspector.py
@@ -160,18 +160,19 @@ class XenapiInspector(virt_inspector.Inspector):
if vif_refs:
for vif_ref in vif_refs:
vif_rec = self._call_xenapi("VIF.get_record", vif_ref)
- vif_metrics_ref = self._call_xenapi(
- "VIF.get_metrics", vif_ref)
- vif_metrics_rec = self._call_xenapi(
- "VIF_metrics.get_record", vif_metrics_ref)
+
+ rx_rate = float(self._call_xenapi(
+ "VM.query_data_source", vm_ref,
+ "vif_%s_rx" % vif_rec['device']))
+ tx_rate = float(self._call_xenapi(
+ "VM.query_data_source", vm_ref,
+ "vif_%s_tx" % vif_rec['device']))
interface = virt_inspector.Interface(
name=vif_rec['uuid'],
mac=vif_rec['MAC'],
fref=None,
parameters=None)
- rx_rate = float(vif_metrics_rec['io_read_kbs']) * units.Ki
- tx_rate = float(vif_metrics_rec['io_write_kbs']) * units.Ki
stats = virt_inspector.InterfaceRateStats(rx_rate, tx_rate)
yield (interface, stats)
@@ -182,16 +183,14 @@ class XenapiInspector(virt_inspector.Inspector):
if vbd_refs:
for vbd_ref in vbd_refs:
vbd_rec = self._call_xenapi("VBD.get_record", vbd_ref)
- vbd_metrics_ref = self._call_xenapi("VBD.get_metrics",
- vbd_ref)
- vbd_metrics_rec = self._call_xenapi("VBD_metrics.get_record",
- vbd_metrics_ref)
disk = virt_inspector.Disk(device=vbd_rec['device'])
- # Stats provided from XenServer are in KB/s,
- # converting it to B/s.
- read_rate = float(vbd_metrics_rec['io_read_kbs']) * units.Ki
- write_rate = float(vbd_metrics_rec['io_write_kbs']) * units.Ki
+ read_rate = float(self._call_xenapi(
+ "VM.query_data_source", vm_ref,
+ "vbd_%s_read" % vbd_rec['device']))
+ write_rate = float(self._call_xenapi(
+ "VM.query_data_source", vm_ref,
+ "vbd_%s_write" % vbd_rec['device']))
disk_rate_info = virt_inspector.DiskRateStats(
read_bytes_rate=read_rate,
read_requests_rate=0,
diff --git a/ceilometer/tests/unit/compute/virt/xenapi/test_inspector.py b/ceilometer/tests/unit/compute/virt/xenapi/test_inspector.py
index caa1c93..7e8f827 100644
--- a/ceilometer/tests/unit/compute/virt/xenapi/test_inspector.py
+++ b/ceilometer/tests/unit/compute/virt/xenapi/test_inspector.py
@@ -142,75 +142,42 @@ class TestXenapiInspection(base.BaseTestCase):
fake_instance = {'OS-EXT-SRV-ATTR:instance_name': 'fake_instance_name',
'id': 'fake_instance_id'}
- def fake_xenapi_request(method, args):
- vif_rec = {
- 'metrics': 'vif_metrics_ref',
- 'uuid': 'vif_uuid',
- 'MAC': 'vif_mac',
- }
-
- vif_metrics_rec = {
- 'io_read_kbs': '1',
- 'io_write_kbs': '2',
- }
- if method == 'VM.get_by_name_label':
- return ['vm_ref']
- elif method == 'VM.get_VIFs':
- return ['vif_ref']
- elif method == 'VIF.get_record':
- return vif_rec
- elif method == 'VIF.get_metrics':
- return 'vif_metrics_ref'
- elif method == 'VIF_metrics.get_record':
- return vif_metrics_rec
- else:
- return None
+ vif_rec = {
+ 'metrics': 'vif_metrics_ref',
+ 'uuid': 'vif_uuid',
+ 'MAC': 'vif_mac',
+ 'device': '0',
+ }
+ side_effects = [['vm_ref'], ['vif_ref'], vif_rec, 1024.0, 2048.0]
session = self.inspector.session
with mock.patch.object(session, 'xenapi_request',
- side_effect=fake_xenapi_request):
+ side_effect=side_effects):
interfaces = list(self.inspector.inspect_vnic_rates(fake_instance))
self.assertEqual(1, len(interfaces))
vnic0, info0 = interfaces[0]
self.assertEqual('vif_uuid', vnic0.name)
self.assertEqual('vif_mac', vnic0.mac)
- self.assertEqual(1024, info0.rx_bytes_rate)
- self.assertEqual(2048, info0.tx_bytes_rate)
+ self.assertEqual(1024.0, info0.rx_bytes_rate)
+ self.assertEqual(2048.0, info0.tx_bytes_rate)
def test_inspect_disk_rates(self):
fake_instance = {'OS-EXT-SRV-ATTR:instance_name': 'fake_instance_name',
'id': 'fake_instance_id'}
- def fake_xenapi_request(method, args):
- vbd_rec = {
- 'device': 'xvdd'
- }
-
- vbd_metrics_rec = {
- 'io_read_kbs': '1',
- 'io_write_kbs': '2'
- }
- if method == 'VM.get_by_name_label':
- return ['vm_ref']
- elif method == 'VM.get_VBDs':
- return ['vbd_ref']
- elif method == 'VBD.get_record':
- return vbd_rec
- elif method == 'VBD.get_metrics':
- return 'vbd_metrics_ref'
- elif method == 'VBD_metrics.get_record':
- return vbd_metrics_rec
- else:
- return None
+ vbd_rec = {
+ 'device': 'xvdd'
+ }
+ side_effects = [['vm_ref'], ['vbd_ref'], vbd_rec, 1024.0, 2048.0]
session = self.inspector.session
with mock.patch.object(session, 'xenapi_request',
- side_effect=fake_xenapi_request):
+ side_effect=side_effects):
disks = list(self.inspector.inspect_disk_rates(fake_instance))
self.assertEqual(1, len(disks))
disk0, info0 = disks[0]
self.assertEqual('xvdd', disk0.device)
- self.assertEqual(1024, info0.read_bytes_rate)
- self.assertEqual(2048, info0.write_bytes_rate)
+ self.assertEqual(1024.0, info0.read_bytes_rate)
+ self.assertEqual(2048.0, info0.write_bytes_rate)