diff options
author | Arnaud Morin <arnaud.morin@corp.ovh.com> | 2019-01-29 17:22:25 +0100 |
---|---|---|
committer | Matthias Runge <mrunge@redhat.com> | 2020-10-29 13:36:59 +0000 |
commit | cc8e109065be0bbbaf32e80757268488d5239231 (patch) | |
tree | c5d1cd19891c97e65daf46b5877f8c00789d3495 /ceilometer/compute | |
parent | 758d3c26541ec960c7ee6a802cad5441977656ae (diff) | |
download | ceilometer-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.py | 14 | ||||
-rw-r--r-- | ceilometer/compute/virt/hyperv/inspector.py | 4 | ||||
-rw-r--r-- | ceilometer/compute/virt/inspector.py | 3 | ||||
-rwxr-xr-x | ceilometer/compute/virt/libvirt/inspector.py | 28 | ||||
-rw-r--r-- | ceilometer/compute/virt/xenapi/inspector.py | 3 |
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) |