summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPradeep Kilambi <pkilambi@redhat.com>2016-04-20 15:48:38 -0400
committerJens Rosenboom <j.rosenboom@x-ion.de>2016-07-19 11:46:06 +0200
commit0e0fe559b9f365a78504bf2742dab995f62030ce (patch)
tree752ff8d30d7f715483f607b2b6aababbb325d3f1
parentf7e27a2cf6a8ad084f36575a05a856cdbd9e528c (diff)
downloadceilometer-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.py44
-rw-r--r--ceilometer/network/services/discovery.py7
-rw-r--r--ceilometer/tests/unit/network/test_floating_ip.py32
-rw-r--r--setup.cfg1
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))
diff --git a/setup.cfg b/setup.cfg
index 06f1029d..c65bd7c3 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -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