diff --git a/ceilometer/agent.py b/ceilometer/agent.py new file mode 100644 index 0000000000..c5a15fdf71 --- /dev/null +++ b/ceilometer/agent.py @@ -0,0 +1,151 @@ +# +# Copyright 2013 Intel Corp. +# Copyright 2014 Red Hat, Inc +# +# 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. +import hashlib +import os +import pkg_resources + +from oslo_log import log +from oslo_utils import fnmatch +import six +import yaml + +LOG = log.getLogger(__name__) + + +class ConfigException(Exception): + def __init__(self, cfg_type, message, cfg): + self.cfg_type = cfg_type + self.msg = message + self.cfg = cfg + + def __str__(self): + return '%s %s: %s' % (self.cfg_type, self.cfg, self.msg) + + +class SourceException(Exception): + def __init__(self, message, cfg): + self.msg = message + self.cfg = cfg + + def __str__(self): + return 'Source definition invalid: %s (%s)' % (self.msg, self.cfg) + + +class ConfigManagerBase(object): + """Base class for managing configuration file refresh""" + + def __init__(self, conf): + self.conf = conf + self.cfg_loc = None + + def load_config(self, cfg_file, fallback_cfg_prefix='pipeline/data/'): + """Load a configuration file and set its refresh values.""" + if os.path.exists(cfg_file): + self.cfg_loc = cfg_file + else: + self.cfg_loc = self.conf.find_file(cfg_file) + if not self.cfg_loc and fallback_cfg_prefix is not None: + LOG.debug("No pipeline definitions configuration file found! " + "Using default config.") + self.cfg_loc = pkg_resources.resource_filename( + __name__, fallback_cfg_prefix + cfg_file) + with open(self.cfg_loc) as fap: + data = fap.read() + conf = yaml.safe_load(data) + self.cfg_mtime = self.get_cfg_mtime() + self.cfg_hash = self.get_cfg_hash() + LOG.info("Config file: %s", conf) + return conf + + def get_cfg_mtime(self): + """Return modification time of cfg file""" + return os.path.getmtime(self.cfg_loc) if self.cfg_loc else None + + def get_cfg_hash(self): + """Return hash of configuration file""" + if not self.cfg_loc: + return None + + with open(self.cfg_loc) as fap: + data = fap.read() + if six.PY3: + data = data.encode('utf-8') + + file_hash = hashlib.md5(data).hexdigest() + return file_hash + + def cfg_changed(self): + """Returns hash of changed cfg else False.""" + mtime = self.get_cfg_mtime() + if mtime > self.cfg_mtime: + LOG.info('Configuration file has been updated.') + self.cfg_mtime = mtime + _hash = self.get_cfg_hash() + if _hash != self.cfg_hash: + LOG.info("Detected change in configuration.") + return _hash + return False + + +class Source(object): + """Represents a generic source""" + + def __init__(self, cfg): + self.cfg = cfg + try: + self.name = cfg['name'] + except KeyError as err: + raise SourceException( + "Required field %s not specified" % err.args[0], cfg) + + def __str__(self): + return self.name + + def check_source_filtering(self, data, d_type): + """Source data rules checking + + - At least one meaningful datapoint exist + - Included type and excluded type can't co-exist on the same pipeline + - Included type meter and wildcard can't co-exist at same pipeline + """ + if not data: + raise SourceException('No %s specified' % d_type, self.cfg) + + if ([x for x in data if x[0] not in '!*'] and + [x for x in data if x[0] == '!']): + raise SourceException( + 'Both included and excluded %s specified' % d_type, + self.cfg) + + if '*' in data and [x for x in data if x[0] not in '!*']: + raise SourceException( + 'Included %s specified with wildcard' % d_type, + self.cfg) + + @staticmethod + def is_supported(dataset, data_name): + # Support wildcard like storage.* and !disk.* + # Start with negation, we consider that the order is deny, allow + if any(fnmatch.fnmatch(data_name, datapoint[1:]) + for datapoint in dataset if datapoint[0] == '!'): + return False + + if any(fnmatch.fnmatch(data_name, datapoint) + for datapoint in dataset if datapoint[0] != '!'): + return True + + # if we only have negation, we suppose the default is allow + return all(datapoint.startswith('!') for datapoint in dataset) diff --git a/ceilometer/cmd/polling.py b/ceilometer/cmd/polling.py index f5dadb48cd..243206dd2b 100644 --- a/ceilometer/cmd/polling.py +++ b/ceilometer/cmd/polling.py @@ -19,7 +19,7 @@ from cotyledon import oslo_config_glue from oslo_config import cfg from oslo_log import log -from ceilometer.agent import manager +from ceilometer.polling import manager from ceilometer import service LOG = log.getLogger(__name__) diff --git a/ceilometer/compute/discovery.py b/ceilometer/compute/discovery.py index 3210b1e0c4..15d85fd3a1 100644 --- a/ceilometer/compute/discovery.py +++ b/ceilometer/compute/discovery.py @@ -30,9 +30,9 @@ try: except ImportError: libvirt = None -from ceilometer.agent import plugin_base from ceilometer.compute.virt.libvirt import utils as libvirt_utils from ceilometer import nova_client +from ceilometer.polling import plugin_base OPTS = [ cfg.StrOpt('instance_discovery_method', diff --git a/ceilometer/compute/pollsters/__init__.py b/ceilometer/compute/pollsters/__init__.py index 64fa0f8e95..e03c571caf 100644 --- a/ceilometer/compute/pollsters/__init__.py +++ b/ceilometer/compute/pollsters/__init__.py @@ -19,9 +19,9 @@ from oslo_log import log from oslo_utils import timeutils import ceilometer -from ceilometer.agent import plugin_base from ceilometer.compute.pollsters import util from ceilometer.compute.virt import inspector as virt_inspector +from ceilometer.polling import plugin_base from ceilometer import sample LOG = log.getLogger(__name__) diff --git a/ceilometer/hardware/discovery.py b/ceilometer/hardware/discovery.py index cc67a3980c..c427c47925 100644 --- a/ceilometer/hardware/discovery.py +++ b/ceilometer/hardware/discovery.py @@ -16,9 +16,8 @@ from oslo_config import cfg from oslo_log import log from oslo_utils import timeutils -from ceilometer.agent import plugin_base from ceilometer import nova_client - +from ceilometer.polling import plugin_base LOG = log.getLogger(__name__) diff --git a/ceilometer/hardware/pollsters/generic.py b/ceilometer/hardware/pollsters/generic.py index 905a612618..6f59d1c654 100644 --- a/ceilometer/hardware/pollsters/generic.py +++ b/ceilometer/hardware/pollsters/generic.py @@ -21,11 +21,11 @@ from oslo_log import log from oslo_utils import netutils import six -from ceilometer.agent import plugin_base from ceilometer import declarative from ceilometer.hardware import inspector as insloader from ceilometer.hardware.pollsters import util from ceilometer.i18n import _ +from ceilometer.polling import plugin_base from ceilometer import sample OPTS = [ diff --git a/ceilometer/image/discovery.py b/ceilometer/image/discovery.py index 5dcf4757cb..a8d0a3020d 100644 --- a/ceilometer/image/discovery.py +++ b/ceilometer/image/discovery.py @@ -14,8 +14,8 @@ import glanceclient from oslo_config import cfg -from ceilometer.agent import plugin_base from ceilometer import keystone_client +from ceilometer.polling import plugin_base SERVICE_OPTS = [ cfg.StrOpt('glance', diff --git a/ceilometer/image/glance.py b/ceilometer/image/glance.py index f36e789118..8b58c6b356 100644 --- a/ceilometer/image/glance.py +++ b/ceilometer/image/glance.py @@ -17,7 +17,7 @@ from __future__ import absolute_import -from ceilometer.agent import plugin_base +from ceilometer.polling import plugin_base from ceilometer import sample diff --git a/ceilometer/ipmi/pollsters/node.py b/ceilometer/ipmi/pollsters/node.py index 639858268c..088bc783b9 100644 --- a/ceilometer/ipmi/pollsters/node.py +++ b/ceilometer/ipmi/pollsters/node.py @@ -17,10 +17,10 @@ import abc from oslo_log import log import six -from ceilometer.agent import plugin_base from ceilometer.i18n import _ from ceilometer.ipmi.platform import exception as nmexcept from ceilometer.ipmi.platform import intel_node_manager as node_manager +from ceilometer.polling import plugin_base from ceilometer import sample LOG = log.getLogger(__name__) diff --git a/ceilometer/ipmi/pollsters/sensor.py b/ceilometer/ipmi/pollsters/sensor.py index 107d160fbb..bac8c69fc0 100644 --- a/ceilometer/ipmi/pollsters/sensor.py +++ b/ceilometer/ipmi/pollsters/sensor.py @@ -14,11 +14,11 @@ from oslo_log import log -from ceilometer.agent import plugin_base from ceilometer.i18n import _ from ceilometer.ipmi.notifications import ironic as parser from ceilometer.ipmi.platform import exception as ipmiexcept from ceilometer.ipmi.platform import ipmi_sensor +from ceilometer.polling import plugin_base from ceilometer import sample LOG = log.getLogger(__name__) diff --git a/ceilometer/network/services/base.py b/ceilometer/network/services/base.py index 1b50addd9a..060e871740 100644 --- a/ceilometer/network/services/base.py +++ b/ceilometer/network/services/base.py @@ -13,7 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. -from ceilometer.agent import plugin_base +from ceilometer.polling import plugin_base # status map for converting metric status to volume int diff --git a/ceilometer/network/services/discovery.py b/ceilometer/network/services/discovery.py index 5f59c68763..82ebc7ae85 100644 --- a/ceilometer/network/services/discovery.py +++ b/ceilometer/network/services/discovery.py @@ -13,8 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. -from ceilometer.agent import plugin_base from ceilometer import neutron_client +from ceilometer.polling import plugin_base class _BaseServicesDiscovery(plugin_base.DiscoveryBase): diff --git a/ceilometer/network/statistics/__init__.py b/ceilometer/network/statistics/__init__.py index ef44238ef9..488c6ed5e4 100644 --- a/ceilometer/network/statistics/__init__.py +++ b/ceilometer/network/statistics/__init__.py @@ -20,7 +20,7 @@ import six from six.moves.urllib import parse as urlparse from stevedore import driver as _driver -from ceilometer.agent import plugin_base +from ceilometer.polling import plugin_base from ceilometer import sample diff --git a/ceilometer/objectstore/rgw.py b/ceilometer/objectstore/rgw.py index 1e106fe572..970aae31bb 100644 --- a/ceilometer/objectstore/rgw.py +++ b/ceilometer/objectstore/rgw.py @@ -20,8 +20,8 @@ from oslo_config import cfg from oslo_log import log import six.moves.urllib.parse as urlparse -from ceilometer.agent import plugin_base from ceilometer import keystone_client +from ceilometer.polling import plugin_base from ceilometer import sample LOG = log.getLogger(__name__) diff --git a/ceilometer/objectstore/swift.py b/ceilometer/objectstore/swift.py index 43c4619af5..9f5ce6b394 100644 --- a/ceilometer/objectstore/swift.py +++ b/ceilometer/objectstore/swift.py @@ -24,8 +24,8 @@ import six.moves.urllib.parse as urlparse from swiftclient import client as swift from swiftclient.exceptions import ClientException -from ceilometer.agent import plugin_base from ceilometer import keystone_client +from ceilometer.polling import plugin_base from ceilometer import sample diff --git a/ceilometer/opts.py b/ceilometer/opts.py index de14ada96a..03fc78632e 100644 --- a/ceilometer/opts.py +++ b/ceilometer/opts.py @@ -17,7 +17,6 @@ import socket from keystoneauth1 import loading from oslo_config import cfg -import ceilometer.agent.manager import ceilometer.compute.discovery import ceilometer.compute.virt.inspector import ceilometer.compute.virt.libvirt.utils @@ -38,6 +37,7 @@ import ceilometer.nova_client import ceilometer.objectstore.rgw import ceilometer.objectstore.swift import ceilometer.pipeline +import ceilometer.polling.manager import ceilometer.publisher.messaging import ceilometer.publisher.utils import ceilometer.sample @@ -70,7 +70,7 @@ def list_opts(): # This have been removed due to a recursive import issue return [ ('DEFAULT', - itertools.chain(ceilometer.agent.manager.OPTS, + itertools.chain(ceilometer.polling.manager.OPTS, ceilometer.compute.virt.inspector.OPTS, ceilometer.compute.virt.libvirt.utils.OPTS, ceilometer.objectstore.swift.OPTS, @@ -126,7 +126,7 @@ def list_opts(): ('notification', itertools.chain(ceilometer.notification.OPTS, ceilometer.notification.EXCHANGES_OPTS)), - ('polling', ceilometer.agent.manager.POLLING_OPTS), + ('polling', ceilometer.polling.manager.POLLING_OPTS), ('publisher', ceilometer.publisher.utils.OPTS), ('publisher_notifier', ceilometer.publisher.messaging.NOTIFIER_OPTS), ('rgw_admin_credentials', ceilometer.objectstore.rgw.CREDENTIAL_OPTS), diff --git a/ceilometer/pipeline/__init__.py b/ceilometer/pipeline/__init__.py index e39d920b94..f8e3c63f77 100644 --- a/ceilometer/pipeline/__init__.py +++ b/ceilometer/pipeline/__init__.py @@ -15,21 +15,17 @@ # under the License. import abc -import hashlib from itertools import chain from operator import methodcaller -import os -import pkg_resources from oslo_config import cfg from oslo_log import log import oslo_messaging -from oslo_utils import fnmatch from oslo_utils import timeutils import six from stevedore import extension -import yaml +from ceilometer import agent from ceilometer.event import models from ceilometer import publisher from ceilometer.publisher import utils as publisher_utils @@ -50,22 +46,12 @@ OPTS = [ LOG = log.getLogger(__name__) -class ConfigException(Exception): - def __init__(self, cfg_type, message, cfg): - self.cfg_type = cfg_type - self.msg = message - self.cfg = cfg - - def __str__(self): - return '%s %s: %s' % (self.cfg_type, self.cfg, self.msg) - - -class PollingException(ConfigException): +class PollingException(agent.ConfigException): def __init__(self, message, cfg): super(PollingException, self).__init__('Polling', message, cfg) -class PipelineException(ConfigException): +class PipelineException(agent.ConfigException): def __init__(self, message, cfg): super(PipelineException, self).__init__('Pipeline', message, cfg) @@ -219,62 +205,14 @@ class PublishContext(object): p.flush() -class Source(object): - """Represents a generic source""" - - def __init__(self, cfg): - self.cfg = cfg - try: - self.name = cfg['name'] - except KeyError as err: - raise PipelineException( - "Required field %s not specified" % err.args[0], cfg) - - def __str__(self): - return self.name - - def check_source_filtering(self, data, d_type): - """Source data rules checking - - - At least one meaningful datapoint exist - - Included type and excluded type can't co-exist on the same pipeline - - Included type meter and wildcard can't co-exist at same pipeline - """ - if not data: - raise PipelineException('No %s specified' % d_type, self.cfg) - - if ([x for x in data if x[0] not in '!*'] and - [x for x in data if x[0] == '!']): - raise PipelineException( - 'Both included and excluded %s specified' % d_type, - cfg) - - if '*' in data and [x for x in data if x[0] not in '!*']: - raise PipelineException( - 'Included %s specified with wildcard' % d_type, - self.cfg) - - @staticmethod - def is_supported(dataset, data_name): - # Support wildcard like storage.* and !disk.* - # Start with negation, we consider that the order is deny, allow - if any(fnmatch.fnmatch(data_name, datapoint[1:]) - for datapoint in dataset if datapoint[0] == '!'): - return False - - if any(fnmatch.fnmatch(data_name, datapoint) - for datapoint in dataset if datapoint[0] != '!'): - return True - - # if we only have negation, we suppose the default is allow - return all(datapoint.startswith('!') for datapoint in dataset) - - -class PipelineSource(Source): +class PipelineSource(agent.Source): """Represents a source of samples or events.""" def __init__(self, cfg): - super(PipelineSource, self).__init__(cfg) + try: + super(PipelineSource, self).__init__(cfg) + except agent.SourceException as err: + raise PipelineException(err.msg, cfg) try: self.sinks = cfg['sinks'] except KeyError as err: @@ -303,7 +241,10 @@ class EventSource(PipelineSource): def __init__(self, cfg): super(EventSource, self).__init__(cfg) self.events = cfg.get('events') - self.check_source_filtering(self.events, 'events') + try: + self.check_source_filtering(self.events, 'events') + except agent.SourceException as err: + raise PipelineException(err.msg, cfg) def support_event(self, event_name): return self.is_supported(self.events, event_name) @@ -323,13 +264,16 @@ class SampleSource(PipelineSource): self.meters = cfg['meters'] except KeyError: raise PipelineException("Missing meters value", cfg) - self.check_source_filtering(self.meters, 'meters') + try: + self.check_source_filtering(self.meters, 'meters') + except agent.SourceException as err: + raise PipelineException(err.msg, cfg) def support_meter(self, meter_name): return self.is_supported(self.meters, meter_name) -class PollingSource(Source): +class PollingSource(agent.Source): """Represents a source of pollsters In effect it is a set of pollsters emitting @@ -339,7 +283,10 @@ class PollingSource(Source): """ def __init__(self, cfg): - super(PollingSource, self).__init__(cfg) + try: + super(PollingSource, self).__init__(cfg) + except agent.SourceException as err: + raise PipelineException(err.msg, cfg) try: self.meters = cfg['meters'] except KeyError: @@ -360,7 +307,10 @@ class PollingSource(Source): self.discovery = cfg.get('discovery') or [] if not isinstance(self.discovery, list): raise PipelineException("Discovery should be a list", cfg) - self.check_source_filtering(self.meters, 'meters') + try: + self.check_source_filtering(self.meters, 'meters') + except agent.SourceException as err: + raise PipelineException(err.msg, cfg) def get_interval(self): return self.interval @@ -644,62 +594,6 @@ EVENT_TYPE = {'name': 'event', 'sink': EventSink} -class ConfigManagerBase(object): - """Base class for managing configuration file refresh""" - - def __init__(self, conf): - self.conf = conf - self.cfg_loc = None - - def load_config(self, cfg_file, fallback_cfg_prefix='data/'): - """Load a configuration file and set its refresh values.""" - if os.path.exists(cfg_file): - self.cfg_loc = cfg_file - else: - self.cfg_loc = self.conf.find_file(cfg_file) - if not self.cfg_loc and fallback_cfg_prefix is not None: - LOG.debug("No pipeline definitions configuration file found! " - "Using default config.") - self.cfg_loc = pkg_resources.resource_filename( - __name__, fallback_cfg_prefix + cfg_file) - with open(self.cfg_loc) as fap: - data = fap.read() - conf = yaml.safe_load(data) - self.cfg_mtime = self.get_cfg_mtime() - self.cfg_hash = self.get_cfg_hash() - LOG.info("Config file: %s", conf) - return conf - - def get_cfg_mtime(self): - """Return modification time of cfg file""" - return os.path.getmtime(self.cfg_loc) if self.cfg_loc else None - - def get_cfg_hash(self): - """Return hash of configuration file""" - if not self.cfg_loc: - return None - - with open(self.cfg_loc) as fap: - data = fap.read() - if six.PY3: - data = data.encode('utf-8') - - file_hash = hashlib.md5(data).hexdigest() - return file_hash - - def cfg_changed(self): - """Returns hash of changed cfg else False.""" - mtime = self.get_cfg_mtime() - if mtime > self.cfg_mtime: - LOG.info('Configuration file has been updated.') - self.cfg_mtime = mtime - _hash = self.get_cfg_hash() - if _hash != self.cfg_hash: - LOG.info("Detected change in configuration.") - return _hash - return False - - class PublisherManager(object): def __init__(self, conf, purpose): self._loaded_publishers = {} @@ -715,7 +609,7 @@ class PublisherManager(object): return self._loaded_publishers[url] -class PipelineManager(ConfigManagerBase): +class PipelineManager(agent.ConfigManagerBase): """Pipeline Manager Pipeline manager sets up pipelines according to config file @@ -831,7 +725,7 @@ class PipelineManager(ConfigManagerBase): return PublishContext(self.pipelines) -class PollingManager(ConfigManagerBase): +class PollingManager(agent.ConfigManagerBase): """Polling Manager Polling manager sets up polling according to config file. diff --git a/ceilometer/agent/__init__.py b/ceilometer/polling/__init__.py similarity index 100% rename from ceilometer/agent/__init__.py rename to ceilometer/polling/__init__.py diff --git a/ceilometer/agent/discovery/__init__.py b/ceilometer/polling/discovery/__init__.py similarity index 100% rename from ceilometer/agent/discovery/__init__.py rename to ceilometer/polling/discovery/__init__.py diff --git a/ceilometer/agent/discovery/endpoint.py b/ceilometer/polling/discovery/endpoint.py similarity index 96% rename from ceilometer/agent/discovery/endpoint.py rename to ceilometer/polling/discovery/endpoint.py index 705e3d9301..cae1d4046b 100644 --- a/ceilometer/agent/discovery/endpoint.py +++ b/ceilometer/polling/discovery/endpoint.py @@ -14,8 +14,8 @@ from oslo_log import log -from ceilometer.agent import plugin_base as plugin from ceilometer import keystone_client +from ceilometer.polling import plugin_base as plugin LOG = log.getLogger(__name__) diff --git a/ceilometer/agent/discovery/localnode.py b/ceilometer/polling/discovery/localnode.py similarity index 94% rename from ceilometer/agent/discovery/localnode.py rename to ceilometer/polling/discovery/localnode.py index 1de479f371..ec7a4c3f15 100644 --- a/ceilometer/agent/discovery/localnode.py +++ b/ceilometer/polling/discovery/localnode.py @@ -12,7 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -from ceilometer.agent import plugin_base +from ceilometer.polling import plugin_base class LocalNodeDiscovery(plugin_base.DiscoveryBase): diff --git a/ceilometer/agent/discovery/tenant.py b/ceilometer/polling/discovery/tenant.py similarity index 96% rename from ceilometer/agent/discovery/tenant.py rename to ceilometer/polling/discovery/tenant.py index c7615f64d5..fbbb0acf75 100644 --- a/ceilometer/agent/discovery/tenant.py +++ b/ceilometer/polling/discovery/tenant.py @@ -14,7 +14,7 @@ from oslo_log import log -from ceilometer.agent import plugin_base as plugin +from ceilometer.polling import plugin_base as plugin LOG = log.getLogger(__name__) diff --git a/ceilometer/agent/manager.py b/ceilometer/polling/manager.py similarity index 99% rename from ceilometer/agent/manager.py rename to ceilometer/polling/manager.py index 9019eee6b4..6a981e03f4 100644 --- a/ceilometer/agent/manager.py +++ b/ceilometer/polling/manager.py @@ -33,10 +33,10 @@ from six.moves.urllib import parse as urlparse from stevedore import extension from tooz import coordination -from ceilometer.agent import plugin_base from ceilometer import keystone_client from ceilometer import messaging from ceilometer import pipeline +from ceilometer.polling import plugin_base from ceilometer.publisher import utils as publisher_utils from ceilometer import utils diff --git a/ceilometer/agent/plugin_base.py b/ceilometer/polling/plugin_base.py similarity index 100% rename from ceilometer/agent/plugin_base.py rename to ceilometer/polling/plugin_base.py diff --git a/ceilometer/tests/unit/compute/pollsters/test_cpu.py b/ceilometer/tests/unit/compute/pollsters/test_cpu.py index d40e288686..3fcb64e31a 100644 --- a/ceilometer/tests/unit/compute/pollsters/test_cpu.py +++ b/ceilometer/tests/unit/compute/pollsters/test_cpu.py @@ -18,9 +18,9 @@ import time import mock -from ceilometer.agent import manager from ceilometer.compute.pollsters import instance_stats from ceilometer.compute.virt import inspector as virt_inspector +from ceilometer.polling import manager from ceilometer.tests.unit.compute.pollsters import base diff --git a/ceilometer/tests/unit/compute/pollsters/test_diskio.py b/ceilometer/tests/unit/compute/pollsters/test_diskio.py index 6883bf42f5..f59a3865d5 100644 --- a/ceilometer/tests/unit/compute/pollsters/test_diskio.py +++ b/ceilometer/tests/unit/compute/pollsters/test_diskio.py @@ -16,9 +16,9 @@ # under the License. import mock -from ceilometer.agent import manager from ceilometer.compute.pollsters import disk from ceilometer.compute.virt import inspector as virt_inspector +from ceilometer.polling import manager from ceilometer.tests.unit.compute.pollsters import base diff --git a/ceilometer/tests/unit/compute/pollsters/test_location_metadata.py b/ceilometer/tests/unit/compute/pollsters/test_location_metadata.py index 36e3045a88..369a96ea05 100644 --- a/ceilometer/tests/unit/compute/pollsters/test_location_metadata.py +++ b/ceilometer/tests/unit/compute/pollsters/test_location_metadata.py @@ -20,8 +20,8 @@ import mock from oslotest import base import six -from ceilometer.agent import manager from ceilometer.compute.pollsters import util +from ceilometer.polling import manager from ceilometer import service diff --git a/ceilometer/tests/unit/compute/pollsters/test_memory.py b/ceilometer/tests/unit/compute/pollsters/test_memory.py index 6ce8fc4575..5f6a6a417e 100644 --- a/ceilometer/tests/unit/compute/pollsters/test_memory.py +++ b/ceilometer/tests/unit/compute/pollsters/test_memory.py @@ -15,10 +15,10 @@ import mock -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.compute.pollsters import instance_stats from ceilometer.compute.virt import inspector as virt_inspector +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer.tests.unit.compute.pollsters import base diff --git a/ceilometer/tests/unit/compute/pollsters/test_net.py b/ceilometer/tests/unit/compute/pollsters/test_net.py index 437042f581..1e42310c02 100644 --- a/ceilometer/tests/unit/compute/pollsters/test_net.py +++ b/ceilometer/tests/unit/compute/pollsters/test_net.py @@ -16,9 +16,9 @@ import mock -from ceilometer.agent import manager from ceilometer.compute.pollsters import net from ceilometer.compute.virt import inspector as virt_inspector +from ceilometer.polling import manager from ceilometer.tests.unit.compute.pollsters import base diff --git a/ceilometer/tests/unit/compute/pollsters/test_perf.py b/ceilometer/tests/unit/compute/pollsters/test_perf.py index 4be7a416bb..b8f13c4075 100644 --- a/ceilometer/tests/unit/compute/pollsters/test_perf.py +++ b/ceilometer/tests/unit/compute/pollsters/test_perf.py @@ -14,10 +14,10 @@ import mock -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.compute.pollsters import instance_stats from ceilometer.compute.virt import inspector as virt_inspector +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer.tests.unit.compute.pollsters import base diff --git a/ceilometer/tests/unit/image/test_glance.py b/ceilometer/tests/unit/image/test_glance.py index e63940ba2e..27677a36a8 100644 --- a/ceilometer/tests/unit/image/test_glance.py +++ b/ceilometer/tests/unit/image/test_glance.py @@ -15,8 +15,8 @@ import mock -from ceilometer.agent import manager from ceilometer.image import glance +from ceilometer.polling import manager from ceilometer import service import ceilometer.tests.base as base diff --git a/ceilometer/tests/unit/ipmi/pollsters/base.py b/ceilometer/tests/unit/ipmi/pollsters/base.py index 8141b95f53..f07889d16f 100644 --- a/ceilometer/tests/unit/ipmi/pollsters/base.py +++ b/ceilometer/tests/unit/ipmi/pollsters/base.py @@ -18,7 +18,7 @@ import fixtures import mock import six -from ceilometer.agent import manager +from ceilometer.polling import manager from ceilometer import service from ceilometer.tests import base diff --git a/ceilometer/tests/unit/network/services/test_fwaas.py b/ceilometer/tests/unit/network/services/test_fwaas.py index 7cb9d9631a..e548e23ddb 100644 --- a/ceilometer/tests/unit/network/services/test_fwaas.py +++ b/ceilometer/tests/unit/network/services/test_fwaas.py @@ -17,10 +17,10 @@ import fixtures import mock from oslotest import base -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.network.services import discovery from ceilometer.network.services import fwaas +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer import service diff --git a/ceilometer/tests/unit/network/services/test_lbaas.py b/ceilometer/tests/unit/network/services/test_lbaas.py index 67a74e7190..3cfc42e11b 100644 --- a/ceilometer/tests/unit/network/services/test_lbaas.py +++ b/ceilometer/tests/unit/network/services/test_lbaas.py @@ -17,10 +17,10 @@ import fixtures import mock from oslotest import base -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.network.services import discovery from ceilometer.network.services import lbaas +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer import service diff --git a/ceilometer/tests/unit/network/services/test_lbaas_v2.py b/ceilometer/tests/unit/network/services/test_lbaas_v2.py index 844868a8e3..ad0c0b1163 100644 --- a/ceilometer/tests/unit/network/services/test_lbaas_v2.py +++ b/ceilometer/tests/unit/network/services/test_lbaas_v2.py @@ -16,10 +16,10 @@ import fixtures import mock from oslotest import base -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.network.services import discovery from ceilometer.network.services import lbaas +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer import service diff --git a/ceilometer/tests/unit/network/services/test_vpnaas.py b/ceilometer/tests/unit/network/services/test_vpnaas.py index 314bd4a047..38e14dbf8c 100644 --- a/ceilometer/tests/unit/network/services/test_vpnaas.py +++ b/ceilometer/tests/unit/network/services/test_vpnaas.py @@ -17,10 +17,10 @@ import fixtures import mock from oslotest import base -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.network.services import discovery from ceilometer.network.services import vpnaas +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer import service diff --git a/ceilometer/tests/unit/network/test_floating_ip.py b/ceilometer/tests/unit/network/test_floating_ip.py index 1098ccc0b4..f6b208dc67 100644 --- a/ceilometer/tests/unit/network/test_floating_ip.py +++ b/ceilometer/tests/unit/network/test_floating_ip.py @@ -18,10 +18,10 @@ import fixtures import mock from oslotest import base -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.network import floatingip from ceilometer.network.services import discovery +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer import service diff --git a/ceilometer/tests/unit/objectstore/test_rgw.py b/ceilometer/tests/unit/objectstore/test_rgw.py index 35bf525f7d..b03c89046b 100644 --- a/ceilometer/tests/unit/objectstore/test_rgw.py +++ b/ceilometer/tests/unit/objectstore/test_rgw.py @@ -20,9 +20,9 @@ import mock from oslotest import base import testscenarios.testcase -from ceilometer.agent import manager from ceilometer.objectstore import rgw from ceilometer.objectstore import rgw_client +from ceilometer.polling import manager from ceilometer import service bucket_list1 = [rgw_client.RGWAdminClient.Bucket('somefoo1', 10, 7)] diff --git a/ceilometer/tests/unit/objectstore/test_swift.py b/ceilometer/tests/unit/objectstore/test_swift.py index 1b1bfa652a..c55405f291 100644 --- a/ceilometer/tests/unit/objectstore/test_swift.py +++ b/ceilometer/tests/unit/objectstore/test_swift.py @@ -21,8 +21,8 @@ from oslotest import base from swiftclient import client as swift_client import testscenarios.testcase -from ceilometer.agent import manager from ceilometer.objectstore import swift +from ceilometer.polling import manager from ceilometer import service HEAD_ACCOUNTS = [('tenant-000', {'x-account-object-count': 12, diff --git a/ceilometer/tests/unit/agent/__init__.py b/ceilometer/tests/unit/polling/__init__.py similarity index 100% rename from ceilometer/tests/unit/agent/__init__.py rename to ceilometer/tests/unit/polling/__init__.py diff --git a/ceilometer/tests/unit/agent/agentbase.py b/ceilometer/tests/unit/polling/agentbase.py similarity index 99% rename from ceilometer/tests/unit/agent/agentbase.py rename to ceilometer/tests/unit/polling/agentbase.py index 8ec484821c..927e3306c7 100644 --- a/ceilometer/tests/unit/agent/agentbase.py +++ b/ceilometer/tests/unit/polling/agentbase.py @@ -24,8 +24,8 @@ import mock import six from stevedore import extension -from ceilometer.agent import plugin_base from ceilometer import pipeline +from ceilometer.polling import plugin_base from ceilometer import sample from ceilometer import service from ceilometer.tests import base @@ -589,7 +589,7 @@ class BaseAgentManagerTestCase(base.BaseTestCase): mock.call('static_4'), ], any_order=True) - @mock.patch('ceilometer.agent.manager.LOG') + @mock.patch('ceilometer.polling.manager.LOG') def test_polling_and_notify_with_resources(self, LOG): self.setup_polling() polling_task = list(self.mgr.setup_polling_tasks().values())[0] @@ -598,7 +598,7 @@ class BaseAgentManagerTestCase(base.BaseTestCase): 'Polling pollster %(poll)s in the context of %(src)s', {'poll': 'test', 'src': 'test_polling'}) - @mock.patch('ceilometer.agent.manager.LOG') + @mock.patch('ceilometer.polling.manager.LOG') def test_skip_polling_and_notify_with_no_resources(self, LOG): self.polling_cfg['sources'][0]['resources'] = [] self.setup_polling() @@ -609,7 +609,7 @@ class BaseAgentManagerTestCase(base.BaseTestCase): 'Skip pollster %(name)s, no %(p_context)sresources found this ' 'cycle', {'name': pollster.name, 'p_context': ''}) - @mock.patch('ceilometer.agent.manager.LOG') + @mock.patch('ceilometer.polling.manager.LOG') def test_skip_polling_polled_resources(self, LOG): self.polling_cfg['sources'].append({ 'name': 'test_polling_1', diff --git a/ceilometer/tests/unit/agent/test_discovery.py b/ceilometer/tests/unit/polling/test_discovery.py similarity index 98% rename from ceilometer/tests/unit/agent/test_discovery.py rename to ceilometer/tests/unit/polling/test_discovery.py index 1130a20971..940e89bc2e 100644 --- a/ceilometer/tests/unit/agent/test_discovery.py +++ b/ceilometer/tests/unit/polling/test_discovery.py @@ -18,10 +18,10 @@ import mock from oslotest import base -from ceilometer.agent.discovery import endpoint -from ceilometer.agent.discovery import localnode -from ceilometer.agent.discovery import tenant as project from ceilometer.hardware import discovery as hardware +from ceilometer.polling.discovery import endpoint +from ceilometer.polling.discovery import localnode +from ceilometer.polling.discovery import tenant as project from ceilometer import service diff --git a/ceilometer/tests/unit/agent/test_manager.py b/ceilometer/tests/unit/polling/test_manager.py similarity index 98% rename from ceilometer/tests/unit/agent/test_manager.py rename to ceilometer/tests/unit/polling/test_manager.py index 6605ebd066..fc4b8b10b4 100644 --- a/ceilometer/tests/unit/agent/test_manager.py +++ b/ceilometer/tests/unit/polling/test_manager.py @@ -21,13 +21,13 @@ from oslotest import base import six from stevedore import extension -from ceilometer.agent import manager -from ceilometer.agent import plugin_base from ceilometer.compute import discovery as nova_discover from ceilometer.hardware import discovery from ceilometer import pipeline +from ceilometer.polling import manager +from ceilometer.polling import plugin_base from ceilometer import service -from ceilometer.tests.unit.agent import agentbase +from ceilometer.tests.unit.polling import agentbase def fakedelayed(delay, target, *args, **kwargs): @@ -70,7 +70,7 @@ class TestManager(base.BaseTestCase): mock.Mock(side_effect=plugin_base.ExtensionLoadError)) @mock.patch('ceilometer.ipmi.pollsters.sensor.SensorPollster.__init__', mock.Mock(return_value=None)) - @mock.patch('ceilometer.agent.manager.LOG') + @mock.patch('ceilometer.polling.manager.LOG') def test_load_failed_plugins(self, LOG): # Here we additionally check that namespaces will be converted to the # list if param was not set as a list. @@ -274,7 +274,7 @@ class TestRunTasks(agentbase.BaseAgentManagerTestCase): self.assertFalse(self.PollsterKeystone.samples) self.assertFalse(self.notified_samples) - @mock.patch('ceilometer.agent.manager.LOG') + @mock.patch('ceilometer.polling.manager.LOG') @mock.patch('ceilometer.nova_client.LOG') def test_hardware_discover_fail_minimize_logs(self, novalog, baselog): class PollsterHardware(agentbase.TestPollster): @@ -319,7 +319,7 @@ class TestRunTasks(agentbase.BaseAgentManagerTestCase): self.assertEqual(1, novalog.exception.call_count) self.assertFalse(baselog.exception.called) - @mock.patch('ceilometer.agent.manager.LOG') + @mock.patch('ceilometer.polling.manager.LOG') def test_polling_exception(self, LOG): source_name = 'test_pollingexception' res_list = ['test://'] @@ -352,7 +352,7 @@ class TestRunTasks(agentbase.BaseAgentManagerTestCase): dict(name=pollster.name, res_list=str(res_list), source=source_name)) - @mock.patch('ceilometer.agent.manager.LOG') + @mock.patch('ceilometer.polling.manager.LOG') def test_polling_novalike_exception(self, LOG): source_name = 'test_pollingexception' self.polling_cfg = { diff --git a/ceilometer/tests/unit/volume/test_cinder.py b/ceilometer/tests/unit/volume/test_cinder.py index 6f2710325f..ccc0ef3aef 100644 --- a/ceilometer/tests/unit/volume/test_cinder.py +++ b/ceilometer/tests/unit/volume/test_cinder.py @@ -13,7 +13,7 @@ import mock -from ceilometer.agent import manager +from ceilometer.polling import manager from ceilometer import service import ceilometer.tests.base as base from ceilometer.volume import cinder diff --git a/ceilometer/volume/cinder.py b/ceilometer/volume/cinder.py index 5020377964..ae13c194e7 100644 --- a/ceilometer/volume/cinder.py +++ b/ceilometer/volume/cinder.py @@ -15,7 +15,7 @@ from __future__ import absolute_import -from ceilometer.agent import plugin_base +from ceilometer.polling import plugin_base from ceilometer import sample diff --git a/ceilometer/volume/discovery.py b/ceilometer/volume/discovery.py index 9dfc12ad12..65c84348b2 100644 --- a/ceilometer/volume/discovery.py +++ b/ceilometer/volume/discovery.py @@ -14,8 +14,8 @@ from cinderclient import client as cinder_client from oslo_config import cfg -from ceilometer.agent import plugin_base from ceilometer import keystone_client +from ceilometer.polling import plugin_base SERVICE_OPTS = [ cfg.StrOpt('cinder', deprecated_name='cinderv2', diff --git a/setup.cfg b/setup.cfg index e036da6aee..5589ba7e94 100644 --- a/setup.cfg +++ b/setup.cfg @@ -52,8 +52,8 @@ ceilometer.discover.compute = local_instances = ceilometer.compute.discovery:InstanceDiscovery ceilometer.discover.central = - endpoint = ceilometer.agent.discovery.endpoint:EndpointDiscovery - tenant = ceilometer.agent.discovery.tenant:TenantDiscovery + endpoint = ceilometer.polling.discovery.endpoint:EndpointDiscovery + tenant = ceilometer.polling.discovery.tenant:TenantDiscovery lb_pools = ceilometer.network.services.discovery:LBPoolsDiscovery lb_vips = ceilometer.network.services.discovery:LBVipsDiscovery lb_members = ceilometer.network.services.discovery:LBMembersDiscovery @@ -72,7 +72,7 @@ ceilometer.discover.central = volume_backups = ceilometer.volume.discovery:VolumeBackupsDiscovery ceilometer.discover.ipmi = - local_node = ceilometer.agent.discovery.localnode:LocalNodeDiscovery + local_node = ceilometer.polling.discovery.localnode:LocalNodeDiscovery ceilometer.poll.compute = disk.read.requests = ceilometer.compute.pollsters.disk:ReadRequestsPollster