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
|
notifier = ceilometer.publisher.messaging:SampleNotifierPublisher
|
||||||
udp = ceilometer.publisher.udp:UDPPublisher
|
udp = ceilometer.publisher.udp:UDPPublisher
|
||||||
file = ceilometer.publisher.file:FilePublisher
|
file = ceilometer.publisher.file:FilePublisher
|
||||||
direct = ceilometer.publisher.direct:DirectPublisher
|
|
||||||
http = ceilometer.publisher.http:HttpPublisher
|
http = ceilometer.publisher.http:HttpPublisher
|
||||||
https = ceilometer.publisher.http:HttpPublisher
|
https = ceilometer.publisher.http:HttpPublisher
|
||||||
gnocchi = ceilometer.publisher.gnocchi:GnocchiPublisher
|
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
|
zaqar = ceilometer.publisher.zaqar:ZaqarPublisher
|
||||||
|
|
||||||
ceilometer.event.publisher =
|
ceilometer.event.publisher =
|
||||||
test = ceilometer.publisher.test:TestPublisher
|
test = ceilometer.publisher.test:TestPublisher
|
||||||
direct = ceilometer.publisher.direct:DirectPublisher
|
|
||||||
notifier = ceilometer.publisher.messaging:EventNotifierPublisher
|
notifier = ceilometer.publisher.messaging:EventNotifierPublisher
|
||||||
http = ceilometer.publisher.http:HttpPublisher
|
http = ceilometer.publisher.http:HttpPublisher
|
||||||
https = ceilometer.publisher.http:HttpPublisher
|
https = ceilometer.publisher.http:HttpPublisher
|
||||||
gnocchi = ceilometer.publisher.gnocchi:GnocchiPublisher
|
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
|
zaqar = ceilometer.publisher.zaqar:ZaqarPublisher
|
||||||
|
|
||||||
ceilometer.event.trait_plugin =
|
ceilometer.event.trait_plugin =
|
||||||
|
Loading…
Reference in New Issue
Block a user