diff --git a/ceilometer/agent.py b/ceilometer/agent.py index bc215fb83..cc1588b20 100644 --- a/ceilometer/agent.py +++ b/ceilometer/agent.py @@ -93,5 +93,6 @@ class AgentManager(object): self.interval_task, task=task) - def interval_task(self, task): + @staticmethod + def interval_task(task): task.poll_and_publish() diff --git a/ceilometer/collector/service.py b/ceilometer/collector/service.py index ddbbe8659..900c49a1b 100644 --- a/ceilometer/collector/service.py +++ b/ceilometer/collector/service.py @@ -54,18 +54,12 @@ cfg.CONF.register_opts(OPTS, group="collector") LOG = log.getLogger(__name__) -def get_storage_connection(conf): - storage.register_opts(conf) - storage_engine = storage.get_engine(conf) - return storage_engine.get_connection(conf) - - class UDPCollectorService(os_service.Service): """UDP listener for the collector service.""" def __init__(self): super(UDPCollectorService, self).__init__() - self.storage_conn = get_storage_connection(cfg.CONF) + self.storage_conn = storage.get_connection(cfg.CONF) def start(self): """Bind the UDP socket and handle incoming data.""" @@ -113,7 +107,7 @@ class CollectorService(rpc_service.Service): def __init__(self, host, topic, manager=None): super(CollectorService, self).__init__(host, topic, manager) - self.storage_conn = get_storage_connection(cfg.CONF) + self.storage_conn = storage.get_connection(cfg.CONF) def start(self): super(CollectorService, self).start() diff --git a/ceilometer/plugin.py b/ceilometer/plugin.py index c0021c840..8e0267019 100644 --- a/ceilometer/plugin.py +++ b/ceilometer/plugin.py @@ -35,7 +35,8 @@ class PluginBase(object): """Base class for all plugins. """ - def is_enabled(self): + @staticmethod + def is_enabled(): """Return boolean indicating whether this plugin should be enabled and used by the caller. """ @@ -47,9 +48,6 @@ class NotificationBase(PluginBase): __metaclass__ = abc.ABCMeta - def is_enabled(self): - return True - @abc.abstractmethod def get_event_types(self): """Return a sequence of strings defining the event types to be diff --git a/ceilometer/service.py b/ceilometer/service.py index 85e268a32..65d67fa0d 100644 --- a/ceilometer/service.py +++ b/ceilometer/service.py @@ -69,12 +69,6 @@ CLI_OPTIONS = [ cfg.CONF.register_cli_opts(CLI_OPTIONS, group="service_credentials") -def _sanitize_cmd_line(argv): - """Remove non-nova CLI options from argv.""" - cli_opt_names = ['--%s' % o.name for o in CLI_OPTIONS] - return [a for a in argv if a in cli_opt_names] - - def prepare_service(argv=None): eventlet.monkey_patch() gettextutils.install('ceilometer') diff --git a/ceilometer/storage/impl_hbase.py b/ceilometer/storage/impl_hbase.py index d59b0c04a..1a76c68af 100644 --- a/ceilometer/storage/impl_hbase.py +++ b/ceilometer/storage/impl_hbase.py @@ -621,7 +621,8 @@ class MTable(object): for k in sorted(rows): yield k, rows[k] - def SingleColumnValueFilter(self, args, rows): + @staticmethod + def SingleColumnValueFilter(args, rows): """This method is called from scan() when 'SingleColumnValueFilter' is found in the 'filter' argument """ @@ -659,7 +660,6 @@ class MConnection(object): def open(self): LOG.debug("Opening in-memory HBase connection") - return def create_table(self, n, families={}): if n in self.tables: diff --git a/ceilometer/storage/impl_log.py b/ceilometer/storage/impl_log.py index bd88617f4..418b0f6af 100644 --- a/ceilometer/storage/impl_log.py +++ b/ceilometer/storage/impl_log.py @@ -43,7 +43,7 @@ class Connection(base.Connection): """ def __init__(self, conf): - return + pass def upgrade(self, version=None): pass diff --git a/ceilometer/storage/impl_mongodb.py b/ceilometer/storage/impl_mongodb.py index 38f040dea..8b965a5b3 100644 --- a/ceilometer/storage/impl_mongodb.py +++ b/ceilometer/storage/impl_mongodb.py @@ -248,7 +248,8 @@ class Connection(base.Connection): ('source', pymongo.ASCENDING), ], name='meter_idx') - def upgrade(self, version=None): + @staticmethod + def upgrade(version=None): pass def clear(self): @@ -260,7 +261,8 @@ class Connection(base.Connection): else: self.conn.drop_database(self.db) - def _parse_connection_url(self, url): + @staticmethod + def _parse_connection_url(url): opts = {} result = urlparse.urlparse(url) opts['dbtype'] = result.scheme @@ -556,14 +558,16 @@ class Connection(base.Connection): """ self.db.alarm.remove({'alarm_id': alarm_id}) - def record_events(self, events): + @staticmethod + def record_events(events): """Write the events. :param events: a list of model.Event objects. """ raise NotImplementedError('Events not implemented.') - def get_events(self, event_filter): + @staticmethod + def get_events(event_filter): """Return an iterable of model.Event objects. :param event_filter: EventFilter instance diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py index 91c1e04c3..8087cce63 100644 --- a/ceilometer/storage/impl_sqlalchemy.py +++ b/ceilometer/storage/impl_sqlalchemy.py @@ -154,7 +154,8 @@ class Connection(base.Connection): for table in reversed(Base.metadata.sorted_tables): engine.execute(table.delete()) - def record_metering_data(self, data): + @staticmethod + def record_metering_data(data): """Write the data to the backend storage system. :param data: a dictionary such as returned by @@ -212,7 +213,8 @@ class Connection(base.Connection): meter.message_id = data['message_id'] session.flush() - def get_users(self, source=None): + @staticmethod + def get_users(source=None): """Return an iterable of user id strings. :param source: Optional source filter. @@ -223,7 +225,8 @@ class Connection(base.Connection): query = query.filter(User.sources.any(id=source)) return (x[0] for x in query.all()) - def get_projects(self, source=None): + @staticmethod + def get_projects(source=None): """Return an iterable of project id strings. :param source: Optional source filter. @@ -234,7 +237,8 @@ class Connection(base.Connection): query = query.filter(Project.sources.any(id=source)) return (x[0] for x in query.all()) - def get_resources(self, user=None, project=None, source=None, + @staticmethod + def get_resources(user=None, project=None, source=None, start_timestamp=None, end_timestamp=None, metaquery={}, resource=None): """Return an iterable of api_models.Resource instances @@ -281,7 +285,8 @@ class Connection(base.Connection): ], ) - def get_meters(self, user=None, project=None, resource=None, source=None, + @staticmethod + def get_meters(user=None, project=None, resource=None, source=None, metaquery={}): """Return an iterable of api_models.Meter instances @@ -322,7 +327,8 @@ class Connection(base.Connection): user_id=resource.user_id, ) - def get_samples(self, sample_filter, limit=None): + @staticmethod + def get_samples(sample_filter, limit=None): """Return an iterable of api_models.Samples. :param sample_filter: Filter. @@ -361,7 +367,8 @@ class Connection(base.Connection): message_signature=s.message_signature, ) - def _make_volume_query(self, sample_filter, counter_volume_func): + @staticmethod + def _make_volume_query(sample_filter, counter_volume_func): """Returns complex Meter counter_volume query for max and sum.""" session = sqlalchemy_session.get_session() subq = session.query(Meter.id) @@ -371,7 +378,8 @@ class Connection(base.Connection): mainq = mainq.join(Meter).group_by(Resource.id) return mainq.filter(Meter.id.in_(subq)) - def _make_stats_query(self, sample_filter): + @staticmethod + def _make_stats_query(sample_filter): session = sqlalchemy_session.get_session() query = session.query( func.min(Meter.timestamp).label('tsmin'), @@ -440,7 +448,8 @@ class Connection(base.Connection): period_end=period_end, ) - def _row_to_alarm_model(self, row): + @staticmethod + def _row_to_alarm_model(row): return api_models.Alarm(alarm_id=row.id, enabled=row.enabled, name=row.name, @@ -462,7 +471,8 @@ class Connection(base.Connection): row.insufficient_data_actions, matching_metadata=row.matching_metadata) - def _alarm_model_to_row(self, alarm, row=None): + @staticmethod + def _alarm_model_to_row(alarm, row=None): if row is None: row = Alarm(id=str(uuid.uuid1())) row.update(alarm.as_dict()) @@ -511,7 +521,8 @@ class Connection(base.Connection): session.flush() return self._row_to_alarm_model(alarm_row) - def delete_alarm(self, alarm_id): + @staticmethod + def delete_alarm(alarm_id): """Delete a alarm :param alarm_id: ID of the alarm to delete @@ -521,7 +532,8 @@ class Connection(base.Connection): session.query(Alarm).filter(Alarm.id == alarm_id).delete() session.flush() - def _get_unique(self, session, key): + @staticmethod + def _get_unique(session, key): return session.query(UniqueName).filter(UniqueName.key == key).first() def _get_or_create_unique_name(self, key, session=None): diff --git a/ceilometer/tests/db.py b/ceilometer/tests/db.py index 2e62ab7ee..c8d819174 100644 --- a/ceilometer/tests/db.py +++ b/ceilometer/tests/db.py @@ -26,17 +26,7 @@ from ceilometer import storage from ceilometer.tests import base as test_base -class BaseException(Exception): - """A base exception for avoiding false positives.""" - - class TestBase(test_base.TestCase): - - # Default tests use mongodb://__test__ (MIM) - # TODO(jd) remove it, so we're sure we run test on the backend we want, - # not this default one by mistake - database_connection = 'mongodb://__test__' - def setUp(self): super(TestBase, self).setUp() cfg.CONF.set_override('connection', self.database_connection, diff --git a/ceilometer/utils.py b/ceilometer/utils.py index c50017844..bf87c1441 100644 --- a/ceilometer/utils.py +++ b/ceilometer/utils.py @@ -23,31 +23,10 @@ import calendar import datetime import decimal -import os from ceilometer.openstack.common import timeutils -def read_cached_file(filename, cache_info, reload_func=None): - """Read from a file if it has been modified. - - :param cache_info: dictionary to hold opaque cache. - :param reload_func: optional function to be called with data when - file is reloaded due to a modification. - - :returns: data from file - - """ - mtime = os.path.getmtime(filename) - if not cache_info or mtime != cache_info.get('mtime'): - with open(filename) as fap: - cache_info['data'] = fap.read() - cache_info['mtime'] = mtime - if reload_func: - reload_func(cache_info['data']) - return cache_info['data'] - - def recursive_keypairs(d): """Generator that produces sequence of keypairs for nested dictionaries. """ diff --git a/tests/api/v2/base.py b/tests/api/v2/base.py index 0eaeca4bd..7ea43eaa0 100644 --- a/tests/api/v2/base.py +++ b/tests/api/v2/base.py @@ -21,4 +21,6 @@ from ceilometer.tests import api class FunctionalTest(api.FunctionalTest): + database_connection = 'mongodb://__test__' + PATH_PREFIX = '/v2' diff --git a/tests/central/test_manager.py b/tests/central/test_manager.py index 7143a1b39..e0c314473 100644 --- a/tests/central/test_manager.py +++ b/tests/central/test_manager.py @@ -30,7 +30,6 @@ from tests import agentbase def test_load_plugins(): mgr = manager.AgentManager() assert list(mgr.pollster_manager), 'Failed to load any plugins' - return class TestRunTasks(agentbase.BaseAgentManagerTestCase): diff --git a/tests/compute/test_manager.py b/tests/compute/test_manager.py index 314a149b7..ca2e2f54a 100644 --- a/tests/compute/test_manager.py +++ b/tests/compute/test_manager.py @@ -29,7 +29,6 @@ from tests import agentbase def test_load_plugins(): mgr = manager.AgentManager() assert list(mgr.pollster_manager), 'Failed to load any plugins' - return class TestRunTasks(agentbase.BaseAgentManagerTestCase): diff --git a/tests/test_tools_notificationclient.py b/tests/test_tools_notificationclient.py index 4eda0a7d4..a164698a7 100644 --- a/tests/test_tools_notificationclient.py +++ b/tests/test_tools_notificationclient.py @@ -26,7 +26,6 @@ def test_send_messages(): mox.Replay(conn) notificationclient.send_messages(conn, 'notifications.info', input) mox.Verify(conn) - return def test_record_messages(): @@ -37,4 +36,3 @@ def test_record_messages(): mox.Replay(conn) notificationclient.record_messages(conn, 'notifications.info', StringIO()) mox.Verify(conn) - return