diff --git a/ceilometer/publisher/direct.py b/ceilometer/publisher/direct.py deleted file mode 100644 index 657dac95bd..0000000000 --- a/ceilometer/publisher/direct.py +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright 2015 Red Hat -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -from oslo_log import log -import six.moves.urllib.parse as urlparse -from stevedore import driver -import stevedore.exception - -from ceilometer import publisher -from ceilometer.publisher import utils - -LOG = log.getLogger(__name__) - - -class DirectPublisher(publisher.ConfigPublisherBase): - """A publisher that allows saving directly from the pipeline. - - Samples are saved to a configured dispatcher. This is useful - where it is desirable to limit the number of external services that - are required. - - By default, the database dispatcher is used to select another one we - can use direct://?dispatcher=name_of_dispatcher, ... - """ - def __init__(self, conf, parsed_url): - super(DirectPublisher, self).__init__(conf, parsed_url) - default_dispatcher = parsed_url.scheme - if default_dispatcher == 'direct': - LOG.warning('Direct publisher is deprecated for removal. Use ' - 'an explicit publisher instead, e.g. ' - '"database", "file", ...') - default_dispatcher = 'database' - options = urlparse.parse_qs(parsed_url.query) - self.dispatcher_name = options.get('dispatcher', - [default_dispatcher])[-1] - self._sample_dispatcher = None - self._event_dispatcher = None - - try: - self.sample_driver = driver.DriverManager( - 'ceilometer.dispatcher.meter', self.dispatcher_name).driver - except stevedore.exception.NoMatches: - self.sample_driver = None - - try: - self.event_driver = driver.DriverManager( - 'ceilometer.dispatcher.event', self.dispatcher_name).driver - except stevedore.exception.NoMatches: - self.event_driver = None - - def get_sample_dispatcher(self): - if not self._sample_dispatcher: - self._sample_dispatcher = self.sample_driver(self.conf) - return self._sample_dispatcher - - def get_event_dispatcher(self): - if not self._event_dispatcher: - if self.event_driver != self.sample_driver: - self._event_dispatcher = self.event_driver(self.conf) - else: - self._event_dispatcher = self.get_sample_dispatcher() - return self._event_dispatcher - - def publish_samples(self, samples): - if not self.sample_driver: - LOG.error("Can't publish samples to a non-existing dispatcher " - "'%s'", self.dispatcher_name) - return - - if not isinstance(samples, list): - samples = [samples] - # not published externally; skip signing - self.get_sample_dispatcher().record_metering_data([ - utils.meter_message_from_counter(sample, secret=None) - for sample in samples]) - - def publish_events(self, events): - if not self.event_driver: - LOG.error("Can't publish events to a non-existing dispatcher " - "'%s'", self.dispatcher_name) - return - - if not isinstance(events, list): - events = [events] - # not published externally; skip signing - self.get_event_dispatcher().record_events([ - utils.message_from_event(event, secret=None) for event in events]) diff --git a/ceilometer/tests/functional/publisher/__init__.py b/ceilometer/tests/functional/publisher/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ceilometer/tests/functional/publisher/test_direct.py b/ceilometer/tests/functional/publisher/test_direct.py deleted file mode 100644 index ce1cbffbcd..0000000000 --- a/ceilometer/tests/functional/publisher/test_direct.py +++ /dev/null @@ -1,80 +0,0 @@ -# -# Copyright 2015 Red Hat -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -"""Tests for ceilometer/publisher/direct.py -""" - -import datetime -import uuid - -from oslo_utils import netutils - -from ceilometer.publisher import direct -from ceilometer import sample -from ceilometer.tests import db as tests_db - - -class TestDirectPublisher(tests_db.TestBase): - - resource_id = str(uuid.uuid4()) - - test_data = [ - sample.Sample( - name='alpha', - type=sample.TYPE_CUMULATIVE, - unit='', - volume=1, - user_id='test', - project_id='test', - resource_id=resource_id, - timestamp=datetime.datetime.utcnow().isoformat(), - resource_metadata={'name': 'TestPublish'}, - ), - sample.Sample( - name='beta', - type=sample.TYPE_CUMULATIVE, - unit='', - volume=1, - user_id='test', - project_id='test', - resource_id=resource_id, - timestamp=datetime.datetime.utcnow().isoformat(), - resource_metadata={'name': 'TestPublish'}, - ), - sample.Sample( - name='gamma', - type=sample.TYPE_CUMULATIVE, - unit='', - volume=1, - user_id='test', - project_id='test', - resource_id=resource_id, - timestamp=datetime.datetime.now().isoformat(), - resource_metadata={'name': 'TestPublish'}, - ), - ] - - def test_direct_publisher(self): - """Test samples are saved.""" - self.CONF.set_override('connection', self.db_manager.url, - group='database') - parsed_url = netutils.urlsplit('direct://') - publisher = direct.DirectPublisher(self.CONF, parsed_url) - publisher.publish_samples(self.test_data) - - meters = list(self.conn.get_meters(resource=self.resource_id)) - names = sorted([meter.name for meter in meters]) - - self.assertEqual(3, len(meters), 'There should be 3 samples') - self.assertEqual(['alpha', 'beta', 'gamma'], names) diff --git a/releasenotes/notes/remove-direct-publisher-5785ee7edd16c4d9.yaml b/releasenotes/notes/remove-direct-publisher-5785ee7edd16c4d9.yaml new file mode 100644 index 0000000000..a8519ab716 --- /dev/null +++ b/releasenotes/notes/remove-direct-publisher-5785ee7edd16c4d9.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - | + Remove direct publisher and use the explicit publisher instead. diff --git a/setup.cfg b/setup.cfg index 02c46b7731..3a146864a2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -245,25 +245,17 @@ ceilometer.sample.publisher = notifier = ceilometer.publisher.messaging:SampleNotifierPublisher udp = ceilometer.publisher.udp:UDPPublisher file = ceilometer.publisher.file:FilePublisher - direct = ceilometer.publisher.direct:DirectPublisher http = ceilometer.publisher.http:HttpPublisher https = ceilometer.publisher.http:HttpPublisher gnocchi = ceilometer.publisher.gnocchi:GnocchiPublisher - database = ceilometer.publisher.direct:DirectPublisher - file_alt = ceilometer.publisher.direct:DirectPublisher - http_alt = ceilometer.publisher.direct:DirectPublisher zaqar = ceilometer.publisher.zaqar:ZaqarPublisher ceilometer.event.publisher = test = ceilometer.publisher.test:TestPublisher - direct = ceilometer.publisher.direct:DirectPublisher notifier = ceilometer.publisher.messaging:EventNotifierPublisher http = ceilometer.publisher.http:HttpPublisher https = ceilometer.publisher.http:HttpPublisher gnocchi = ceilometer.publisher.gnocchi:GnocchiPublisher - database = ceilometer.publisher.direct:DirectPublisher - file_alt = ceilometer.publisher.direct:DirectPublisher - http_alt = ceilometer.publisher.direct:DirectPublisher zaqar = ceilometer.publisher.zaqar:ZaqarPublisher ceilometer.event.trait_plugin =