Clean up direct publisher
Direct publisher was applied to allow developers to configure a publisher and provide the correlated dispatcher interface. Dispatchers are being removed. Besides, the direct publisher deprected last release and should be removed. Change-Id: Ie257aa9485e14566b1918621f88b057b4339341f
This commit is contained in:
parent
22138b5988
commit
ffc87c0b4c
@ -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])
|
@ -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)
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
upgrade:
|
||||
- |
|
||||
Remove direct publisher and use the explicit publisher instead.
|
@ -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 =
|
||||
|
Loading…
Reference in New Issue
Block a user