diff options
author | Pradeep Kilambi <pkilambi@redhat.com> | 2016-04-20 15:48:38 -0400 |
---|---|---|
committer | Jens Rosenboom <j.rosenboom@x-ion.de> | 2016-07-19 11:46:06 +0200 |
commit | 0e0fe559b9f365a78504bf2742dab995f62030ce (patch) | |
tree | 752ff8d30d7f715483f607b2b6aababbb325d3f1 | |
parent | f7e27a2cf6a8ad084f36575a05a856cdbd9e528c (diff) | |
download | ceilometer-0e0fe559b9f365a78504bf2742dab995f62030ce.tar.gz |
Refactor floatingip pollster to use discovery
Note: The bug isn't present in master because it is fixed as a side
effect of the patch that is cherry-picked here. Still it seems better to
use this code than to come up with a dedicated bug-fix patch.
Closes-Bug: 1604328
Change-Id: I47cd14fb6c06ea2c83adab987a0442ef9bd3f404
(cherry picked from commit c262389819cc31c9b87ca5207a809fb2aa1ac882)
-rw-r--r-- | ceilometer/network/floatingip.py | 44 | ||||
-rw-r--r-- | ceilometer/network/services/discovery.py | 7 | ||||
-rw-r--r-- | ceilometer/tests/unit/network/test_floating_ip.py | 32 | ||||
-rw-r--r-- | setup.cfg | 1 |
4 files changed, 38 insertions, 46 deletions
diff --git a/ceilometer/network/floatingip.py b/ceilometer/network/floatingip.py index ad169abc..62a5101d 100644 --- a/ceilometer/network/floatingip.py +++ b/ceilometer/network/floatingip.py @@ -20,9 +20,8 @@ from oslo_config import cfg from oslo_log import log from oslo_utils import timeutils -from ceilometer.agent import plugin_base from ceilometer.i18n import _LW -from ceilometer import neutron_client +from ceilometer.network.services import base from ceilometer import sample LOG = log.getLogger(__name__) @@ -30,43 +29,28 @@ LOG = log.getLogger(__name__) cfg.CONF.import_group('service_types', 'ceilometer.neutron_client') -class FloatingIPPollster(plugin_base.PollsterBase): +class FloatingIPPollster(base.BaseServicesPollster): - STATUS = { - 'inactive': 0, - 'active': 1, - 'pending_create': 2, - } - - def __init__(self): - self.neutron_cli = neutron_client.Client() + FIELDS = ['router_id', + 'status', + 'floating_network_id', + 'fixed_ip_address', + 'port_id', + 'floating_ip_address', + ] @property def default_discovery(self): - return 'endpoint:%s' % cfg.CONF.service_types.neutron - - @staticmethod - def _form_metadata_for_fip(fip): - """Return a metadata dictionary for the fip usage data.""" - metadata = { - 'router_id': fip.get("router_id"), - 'status': fip.get("status"), - 'floating_network_id': fip.get("floating_network_id"), - 'fixed_ip_address': fip.get("fixed_ip_address"), - 'port_id': fip.get("port_id"), - 'floating_ip_address': fip.get("floating_ip_address") - } - return metadata + return 'fip_services' def get_samples(self, manager, cache, resources): - for fip in self.neutron_cli.fip_get_all(): - status = self.STATUS.get(fip['status'].lower()) - if status is None: + for fip in resources or []: + if fip['status'] is None: LOG.warning(_LW("Invalid status, skipping IP address %s") % fip['floating_ip_address']) continue - res_metadata = self._form_metadata_for_fip(fip) + status = self.get_status_id(fip['status']) yield sample.Sample( name='ip.floating', type=sample.TYPE_GAUGE, @@ -76,5 +60,5 @@ class FloatingIPPollster(plugin_base.PollsterBase): project_id=fip['tenant_id'], resource_id=fip['id'], timestamp=timeutils.utcnow().isoformat(), - resource_metadata=res_metadata + resource_metadata=self.extract_metadata(fip) ) diff --git a/ceilometer/network/services/discovery.py b/ceilometer/network/services/discovery.py index d8e690b9..f20af9d4 100644 --- a/ceilometer/network/services/discovery.py +++ b/ceilometer/network/services/discovery.py @@ -109,3 +109,10 @@ class FirewallPolicyDiscovery(_BaseServicesDiscovery): """Discover resources to monitor.""" return self.neutron_cli.fw_policy_get_all() + + +class FloatingIPDiscovery(_BaseServicesDiscovery): + def discover(self, manager, param=None): + """Discover floating IP resources to monitor.""" + + return self.neutron_cli.fip_get_all() diff --git a/ceilometer/tests/unit/network/test_floating_ip.py b/ceilometer/tests/unit/network/test_floating_ip.py index d194ec51..5e8f7e72 100644 --- a/ceilometer/tests/unit/network/test_floating_ip.py +++ b/ceilometer/tests/unit/network/test_floating_ip.py @@ -21,6 +21,7 @@ from oslotest import mockpatch from ceilometer.agent import manager from ceilometer.agent import plugin_base from ceilometer.network import floatingip +from ceilometer.network.services import discovery class _BaseTestFloatingIPPollster(base.BaseTestCase): @@ -72,30 +73,29 @@ class TestFloatingIPPollster(_BaseTestFloatingIPPollster): 'port_id': '67a0d2c7-a397-444c-9d75-d2ac89b6f209', 'id': '90ca27bf-72bc-40c8-9c13-414d564ea367'}] - def test_default_discovery(self): - self.assertEqual('endpoint:network', self.pollster.default_discovery) - def test_fip_get_samples(self): samples = list(self.pollster.get_samples( - self.manager, {}, - resources=['http://localhost:9696/'])) - self.assertEqual(1, len(samples)) - self.assertEqual('18ca27bf-72bc-40c8-9c13-414d564ea367', - samples[0].resource_id) - self.assertEqual("65.79.162.11", samples[0].resource_metadata[ - "floating_ip_address"]) - self.assertEqual("10.0.0.6", samples[0].resource_metadata[ - "fixed_ip_address"]) + self.manager, {}, + resources=self.fake_get_fip_service())) + self.assertEqual(3, len(samples)) + for field in self.pollster.FIELDS: + self.assertEqual(self.fake_get_fip_service()[0][field], + samples[0].resource_metadata[field]) def test_fip_volume(self): samples = list(self.pollster.get_samples( - self.manager, {}, - resources=['http://localhost:9696/'])) + self.manager, {}, + resources=self.fake_get_fip_service())) self.assertEqual(1, samples[0].volume) def test_get_fip_meter_names(self): samples = list(self.pollster.get_samples( - self.manager, {}, - resources=['http://localhost:9696/'])) + self.manager, {}, + resources=self.fake_get_fip_service())) self.assertEqual(set(['ip.floating']), set([s.name for s in samples])) + + def test_fip_discovery(self): + discovered_fips = discovery.FloatingIPDiscovery().discover( + self.manager) + self.assertEqual(3, len(discovered_fips)) @@ -70,6 +70,7 @@ ceilometer.discover = fw_services = ceilometer.network.services.discovery:FirewallDiscovery fw_policy = ceilometer.network.services.discovery:FirewallPolicyDiscovery tripleo_overcloud_nodes = ceilometer.hardware.discovery:NodesDiscoveryTripleO + fip_services = ceilometer.network.services.discovery:FloatingIPDiscovery ceilometer.poll.compute = disk.read.requests = ceilometer.compute.pollsters.disk:ReadRequestsPollster |