summaryrefslogtreecommitdiff
path: root/ceilometer/compute
diff options
context:
space:
mode:
authorArnaud Morin <arnaud.morin@corp.ovh.com>2019-01-29 17:22:25 +0100
committerMatthias Runge <mrunge@redhat.com>2020-10-29 13:36:59 +0000
commitcc8e109065be0bbbaf32e80757268488d5239231 (patch)
treec5d1cd19891c97e65daf46b5877f8c00789d3495 /ceilometer/compute
parent758d3c26541ec960c7ee6a802cad5441977656ae (diff)
downloadceilometer-cc8e109065be0bbbaf32e80757268488d5239231.tar.gz
Implement some new meters for vnic delta
Add two new meters called network.incoming.bytes.delta and network.outgoing.bytes.delta that give the delta Bytes that were send or received by an vNic. Change-Id: Icf45a8d185cdb4a7b00a83586c98f998cbc0e928 Signed-off-by: Arnaud Morin <arnaud.morin@gmail.com>
Diffstat (limited to 'ceilometer/compute')
-rw-r--r--ceilometer/compute/pollsters/net.py14
-rw-r--r--ceilometer/compute/virt/hyperv/inspector.py4
-rw-r--r--ceilometer/compute/virt/inspector.py3
-rwxr-xr-xceilometer/compute/virt/libvirt/inspector.py28
-rw-r--r--ceilometer/compute/virt/xenapi/inspector.py3
5 files changed, 48 insertions, 4 deletions
diff --git a/ceilometer/compute/pollsters/net.py b/ceilometer/compute/pollsters/net.py
index 3dd94899..a452e802 100644
--- a/ceilometer/compute/pollsters/net.py
+++ b/ceilometer/compute/pollsters/net.py
@@ -109,3 +109,17 @@ class OutgoingErrorsPollster(NetworkPollster):
sample_type = sample.TYPE_CUMULATIVE
sample_unit = 'packet'
sample_stats_key = 'tx_errors'
+
+
+class IncomingBytesDeltaPollster(NetworkPollster):
+ sample_name = 'network.incoming.bytes.delta'
+ sample_type = sample.TYPE_DELTA
+ sample_unit = 'B'
+ sample_stats_key = 'rx_bytes_delta'
+
+
+class OutgoingBytesDeltaPollster(NetworkPollster):
+ sample_name = 'network.outgoing.packets.delta'
+ sample_type = sample.TYPE_DELTA
+ sample_unit = 'B'
+ sample_stats_key = 'tx_bytes_delta'
diff --git a/ceilometer/compute/virt/hyperv/inspector.py b/ceilometer/compute/virt/hyperv/inspector.py
index 3d4fcb42..9fdd0de6 100644
--- a/ceilometer/compute/virt/hyperv/inspector.py
+++ b/ceilometer/compute/virt/hyperv/inspector.py
@@ -127,7 +127,9 @@ class HyperVInspector(virt_inspector.Inspector):
tx_bytes=vnic_metrics['tx_mb'] * units.Mi,
tx_packets=0,
tx_drop=0,
- tx_errors=0)
+ tx_errors=0,
+ rx_bytes_delta=0,
+ tx_bytes_delta=0)
@convert_exceptions(exception_conversion_map)
def inspect_disks(self, instance, duration):
diff --git a/ceilometer/compute/virt/inspector.py b/ceilometer/compute/virt/inspector.py
index eb705168..0ec9bc73 100644
--- a/ceilometer/compute/virt/inspector.py
+++ b/ceilometer/compute/virt/inspector.py
@@ -82,7 +82,8 @@ InterfaceStats = collections.namedtuple('InterfaceStats',
'rx_bytes', 'tx_bytes',
'rx_packets', 'tx_packets',
'rx_drop', 'tx_drop',
- 'rx_errors', 'tx_errors'])
+ 'rx_errors', 'tx_errors',
+ 'rx_bytes_delta', 'tx_bytes_delta'])
# Named tuple representing vNIC rate statistics.
diff --git a/ceilometer/compute/virt/libvirt/inspector.py b/ceilometer/compute/virt/libvirt/inspector.py
index b1e2c1aa..b5710723 100755
--- a/ceilometer/compute/virt/libvirt/inspector.py
+++ b/ceilometer/compute/virt/libvirt/inspector.py
@@ -38,6 +38,7 @@ class LibvirtInspector(virt_inspector.Inspector):
super(LibvirtInspector, self).__init__(conf)
# NOTE(sileht): create a connection on startup
self.connection
+ self.cache = {}
@property
def connection(self):
@@ -115,6 +116,29 @@ class LibvirtInspector(virt_inspector.Inspector):
params['bridge'] = bridge
dom_stats = domain.interfaceStats(name)
+
+ # Retrieve previous values
+ prev = self.cache.get(name)
+
+ # Store values for next call
+ self.cache[name] = dom_stats
+
+ if prev:
+ # Compute stats
+ rx_delta = dom_stats[0] - prev[0]
+ tx_delta = dom_stats[4] - prev[4]
+
+ # Avoid negative values
+ if rx_delta < 0:
+ rx_delta = dom_stats[0]
+ if tx_delta < 0:
+ tx_delta = dom_stats[4]
+ else:
+ LOG.debug('No delta meter predecessor for %s / %s' %
+ (instance.id, name))
+ rx_delta = 0
+ tx_delta = 0
+
yield virt_inspector.InterfaceStats(name=name,
mac=mac_address,
fref=fref,
@@ -123,10 +147,12 @@ class LibvirtInspector(virt_inspector.Inspector):
rx_packets=dom_stats[1],
rx_errors=dom_stats[2],
rx_drop=dom_stats[3],
+ rx_bytes_delta=rx_delta,
tx_bytes=dom_stats[4],
tx_packets=dom_stats[5],
tx_errors=dom_stats[6],
- tx_drop=dom_stats[7])
+ tx_drop=dom_stats[7],
+ tx_bytes_delta=tx_delta)
@staticmethod
def _get_disk_devices(domain):
diff --git a/ceilometer/compute/virt/xenapi/inspector.py b/ceilometer/compute/virt/xenapi/inspector.py
index 6fa6f53e..31adaacc 100644
--- a/ceilometer/compute/virt/xenapi/inspector.py
+++ b/ceilometer/compute/virt/xenapi/inspector.py
@@ -141,7 +141,8 @@ class XenapiInspector(virt_inspector.Inspector):
parameters=None,
rx_bytes=bw_vif['bw_in'], rx_packets=-1, rx_drop=-1,
rx_errors=-1, tx_bytes=bw_vif['bw_out'], tx_packets=-1,
- tx_drop=-1, tx_errors=-1)
+ tx_drop=-1, tx_errors=-1, rx_bytes_delta=-1,
+ tx_bytes_delta=-1)
def inspect_vnic_rates(self, instance, duration):
instance_name = util.instance_name(instance)