diff --git a/ceilometer/agent/manager.py b/ceilometer/agent/manager.py index 274760d2e9..2c58e52ce2 100644 --- a/ceilometer/agent/manager.py +++ b/ceilometer/agent/manager.py @@ -210,7 +210,7 @@ class PollingTask(object): exc_info=True) def _send_notification(self, samples): - self.manager.notifier.info( + self.manager.notifier.sample( self.manager.context.to_dict(), 'telemetry.polling', {'samples': samples} diff --git a/ceilometer/agent/plugin_base.py b/ceilometer/agent/plugin_base.py index a026226751..4d50c6cb51 100644 --- a/ceilometer/agent/plugin_base.py +++ b/ceilometer/agent/plugin_base.py @@ -123,7 +123,7 @@ class NotificationBase(PluginBase): """ def info(self, ctxt, publisher_id, event_type, payload, metadata): - """RPC endpoint for notification messages + """RPC endpoint for notification messages at info level When another service sends a notification over the message bus, this method receives it. @@ -139,6 +139,23 @@ class NotificationBase(PluginBase): 'info', ctxt, publisher_id, event_type, payload, metadata) self.to_samples_and_publish(context.get_admin_context(), notification) + def sample(self, ctxt, publisher_id, event_type, payload, metadata): + """RPC endpoint for notification messages at sample level + + When another service sends a notification over the message + bus at sample priority, this method receives it. + + :param ctxt: oslo.messaging context + :param publisher_id: publisher of the notification + :param event_type: type of notification + :param payload: notification payload + :param metadata: metadata about the notification + + """ + notification = messaging.convert_to_old_notification_format( + 'sample', ctxt, publisher_id, event_type, payload, metadata) + self.to_samples_and_publish(context.get_admin_context(), notification) + def to_samples_and_publish(self, context, notification): """Return samples produced by *process_notification*. diff --git a/ceilometer/api/controllers/v2/meters.py b/ceilometer/api/controllers/v2/meters.py index f359449fd6..571e3292de 100644 --- a/ceilometer/api/controllers/v2/meters.py +++ b/ceilometer/api/controllers/v2/meters.py @@ -367,8 +367,8 @@ class MeterController(rest.RestController): tenant=def_project_id, is_admin=True) notifier = pecan.request.notifier - notifier.info(ctxt.to_dict(), 'telemetry.api', - {'samples': published_samples}) + notifier.sample(ctxt.to_dict(), 'telemetry.api', + {'samples': published_samples}) return samples diff --git a/ceilometer/event/endpoint.py b/ceilometer/event/endpoint.py index ed10b72254..cbe8cf913f 100644 --- a/ceilometer/event/endpoint.py +++ b/ceilometer/event/endpoint.py @@ -36,7 +36,7 @@ class EventsNotificationEndpoint(object): self.manager = manager def info(self, ctxt, publisher_id, event_type, payload, metadata): - """Convert message to Ceilometer Event. + """Convert message at info level to Ceilometer Event. :param ctxt: oslo_messaging context :param publisher_id: publisher of the notification diff --git a/ceilometer/telemetry/notifications.py b/ceilometer/telemetry/notifications.py index 4c47c0794b..3a13d1c956 100644 --- a/ceilometer/telemetry/notifications.py +++ b/ceilometer/telemetry/notifications.py @@ -42,8 +42,11 @@ class TelemetryBase(plugin_base.NotificationBase): for topic in conf.notification_topics] -class TelemetryApiPost(TelemetryBase): - """Handle sample from notification bus, which is posted via API.""" +class TelemetryIpc(TelemetryBase): + """Handle sample from notification bus + + Telemetry samples can be posted via API or polled by Polling agent. + """ event_types = ['telemetry.api', 'telemetry.polling'] diff --git a/ceilometer/tests/functional/api/v2/test_post_samples_scenarios.py b/ceilometer/tests/functional/api/v2/test_post_samples_scenarios.py index 0ec78c89f2..32fdfd4a91 100644 --- a/ceilometer/tests/functional/api/v2/test_post_samples_scenarios.py +++ b/ceilometer/tests/functional/api/v2/test_post_samples_scenarios.py @@ -37,7 +37,7 @@ class TestPostSamples(v2.FunctionalTest, def setUp(self): self.published = [] notifier = mock.Mock() - notifier.info.side_effect = self.fake_notifier_sample + notifier.sample.side_effect = self.fake_notifier_sample self.useFixture(mockpatch.Patch('oslo_messaging.Notifier', return_value=notifier)) super(TestPostSamples, self).setUp() diff --git a/ceilometer/tests/unit/agent/test_manager.py b/ceilometer/tests/unit/agent/test_manager.py index e76b26741c..4d70bcb92e 100644 --- a/ceilometer/tests/unit/agent/test_manager.py +++ b/ceilometer/tests/unit/agent/test_manager.py @@ -246,7 +246,7 @@ class TestRunTasks(agentbase.BaseAgentManagerTestCase): def setUp(self): self.notified_samples = [] self.notifier = mock.Mock() - self.notifier.info.side_effect = self.fake_notifier_sample + self.notifier.sample.side_effect = self.fake_notifier_sample self.useFixture(mockpatch.Patch('oslo_messaging.Notifier', return_value=self.notifier)) self.source_resources = True @@ -418,7 +418,7 @@ class TestRunTasks(agentbase.BaseAgentManagerTestCase): samples = self.notified_samples self.assertEqual(expected_samples, len(samples)) - self.assertEqual(call_count, self.notifier.info.call_count) + self.assertEqual(call_count, self.notifier.sample.call_count) def test_start_with_reloadable_pipeline(self): diff --git a/ceilometer/tests/unit/telemetry/test_notifications.py b/ceilometer/tests/unit/telemetry/test_notifications.py index e6a1e3b845..292c7cd0a8 100644 --- a/ceilometer/tests/unit/telemetry/test_notifications.py +++ b/ceilometer/tests/unit/telemetry/test_notifications.py @@ -60,10 +60,10 @@ NOTIFICATION = { } -class TelemetryApiPostTestCase(base.BaseTestCase): +class TelemetryIpcTestCase(base.BaseTestCase): def test_process_notification(self): - sample_creation = notifications.TelemetryApiPost(None) + sample_creation = notifications.TelemetryIpc(None) samples = list(sample_creation.process_notification(NOTIFICATION)) self.assertEqual(2, len(samples)) payload = NOTIFICATION["payload"]['samples'] diff --git a/setup.cfg b/setup.cfg index df3d9351a2..ee474ab18b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -52,7 +52,7 @@ ceilometer.notification = network.services.vpn.ipsecpolicy = ceilometer.network.notifications:IPSecPolicy network.services.vpn.ikepolicy = ceilometer.network.notifications:IKEPolicy network.services.vpn.connections = ceilometer.network.notifications:IPSecSiteConnection - _sample = ceilometer.telemetry.notifications:TelemetryApiPost + _sample = ceilometer.telemetry.notifications:TelemetryIpc trove.instance.exists = ceilometer.database.notifications:InstanceExists dns.domain.exists = ceilometer.dns.notifications:DomainExists meter = ceilometer.meter.notifications:ProcessMeterNotifications