def test_get_connection_no_such_engine(self): conf = mock.Mock() conf.database.connection = 'no-such-engine://localhost' try: storage.get_connection(conf) except RuntimeError as err: self.assertIn('no-such-engine', unicode(err))
def setUp(self): super(SQLiteManager, self).setUp() self.url = self._url self.connection = storage.get_connection( self._conf, self._url, 'ceilometer.metering.storage') self.event_connection = storage.get_connection( self._conf, self._url, 'ceilometer.event.storage')
def setUp(self): super(HBaseManager, self).setUp() self.connection = storage.get_connection( self.url, 'ceilometer.metering.storage') self.event_connection = storage.get_connection( self.url, 'ceilometer.event.storage') # Unique prefix for each test to keep data is distinguished because # all test data is stored in one table data_prefix = str(uuid.uuid4().hex) def table(conn, name): return mocks.MockHBaseTable(name, conn, data_prefix) # Mock only real HBase connection, MConnection "table" method # stays origin. mock.patch('happybase.Connection.table', new=table).start() # We shouldn't delete data and tables after each test, # because it last for too long. # All tests tables will be deleted in setup-test-env.sh mock.patch("happybase.Connection.disable_table", new=mock.MagicMock()).start() mock.patch("happybase.Connection.delete_table", new=mock.MagicMock()).start() mock.patch("happybase.Connection.create_table", new=mock.MagicMock()).start()
def upgrade(): conf = cfg.ConfigOpts() conf.register_cli_opts([ cfg.BoolOpt('skip-metering-database', help='Skip metering database upgrade.', default=False), cfg.BoolOpt('skip-gnocchi-resource-types', help='Skip gnocchi resource-types upgrade.', default=False), ]) service.prepare_service(conf=conf) if conf.skip_metering_database: LOG.info("Skipping metering database upgrade") else: url = (getattr(conf.database, 'metering_connection') or conf.database.connection) if url: LOG.debug("Upgrading metering database") storage.get_connection(conf, url).upgrade() else: LOG.info("Skipping metering database upgrade, " "legacy database backend not configured.") if conf.skip_gnocchi_resource_types: LOG.info("Skipping Gnocchi resource types upgrade") else: LOG.debug("Upgrading Gnocchi resource types") from ceilometer import gnocchi_client gnocchi_client.upgrade_resource_types(conf)
def test_get_connection_no_such_engine(self): try: storage.get_connection(self.CONF, 'no-such-engine://localhost', 'ceilometer.metering.storage') except RuntimeError as err: self.assertIn('no-such-engine', six.text_type(err))
def setUp(self): super(HBaseManager, self).setUp() self.connection = storage.get_connection( self.url, 'ceilometer.metering.storage') self.alarm_connection = storage.get_connection( self.url, 'ceilometer.alarm.storage') # Unique prefix for each test to keep data is distinguished because # all test data is stored in one table data_prefix = str(uuid.uuid4().hex) def table(conn, name): return mocks.MockHBaseTable(name, conn, data_prefix) # Mock only real HBase connection, MConnection "table" method # stays origin. mock.patch('happybase.Connection.table', new=table).start() # We shouldn't delete data and tables after each test, # because it last for too long. # All tests tables will be deleted in setup-test-env.sh mock.patch("happybase.Connection.disable_table", new=mock.MagicMock()).start() mock.patch("happybase.Connection.delete_table", new=mock.MagicMock()).start() mock.patch("happybase.Connection.create_table", new=mock.MagicMock()).start()
def setUp(self): super(SQLManager, self).setUp() self.connection = storage.get_connection( self.url, 'ceilometer.metering.storage') self.alarm_connection = storage.get_connection( self.url, 'ceilometer.alarm.storage') self.event_connection = storage.get_connection( self.url, 'ceilometer.event.storage')
def setUp(self): super(MySQLDbManager, self).setUp() self.connection = storage.get_connection( self.url, 'ceilometer.metering.storage') self.alarm_connection = storage.get_connection( self.url, 'ceilometer.alarm.storage') self.event_connection = storage.get_connection( self.url, 'ceilometer.event.storage')
def setUp(self): super(ElasticSearchManager, self).setUp() self.connection = storage.get_connection(self._conf, "sqlite://", "ceilometer.metering.storage") self.event_connection = storage.get_connection(self._conf, self.url, "ceilometer.event.storage") # prefix each test with unique index name self.event_connection.index_name = "events_%s" % uuid.uuid4().hex # force index on write so data is queryable right away self.event_connection._refresh_on_write = True
def setUp(self): super(MongoDbManager, self).setUp() with warnings.catch_warnings(): warnings.filterwarnings(action="ignore", message=".*you must provide a username and password.*") try: self.connection = storage.get_connection(self._conf, self.url, "ceilometer.metering.storage") self.event_connection = storage.get_connection(self._conf, self.url, "ceilometer.event.storage") except storage.StorageBadVersion as e: raise testcase.TestSkipped(six.text_type(e))
def setUp(self): super(ElasticSearchManager, self).setUp() self.connection = storage.get_connection( 'sqlite://', 'ceilometer.metering.storage') self.event_connection = storage.get_connection( self.url, 'ceilometer.event.storage') # prefix each test with unique index name self.event_connection.index_name = 'events_%s' % uuid.uuid4().hex # force index on write so data is queryable right away self.event_connection._refresh_on_write = True
def setUp(self): super(MongoDbManager, self).setUp() with warnings.catch_warnings(): warnings.filterwarnings( action='ignore', message='.*you must provide a username and password.*') try: self.connection = storage.get_connection( self.url, 'ceilometer.metering.storage') self.alarm_connection = storage.get_connection( self.url, 'ceilometer.alarm.storage') except storage.StorageBadVersion as e: raise testcase.TestSkipped(six.text_type(e))
def setUp(self): super(MongoDbManager, self).setUp() with warnings.catch_warnings(): warnings.filterwarnings( action='ignore', message='.*you must provide a username and password.*') try: self.connection = storage.get_connection( self.url, 'ceilometer.metering.storage') self.event_connection = storage.get_connection( self.url, 'ceilometer.event.storage') except storage.StorageBadVersion as e: raise testcase.TestSkipped(six.text_type(e))
def main(argv): cfg.CONF([], project='ceilometer') if os.getenv("CEILOMETER_TEST_STORAGE_URL", "").startswith("hbase://"): url = ("%s?table_prefix=%s" % (os.getenv("CEILOMETER_TEST_STORAGE_URL"), os.getenv("CEILOMETER_TEST_HBASE_TABLE_PREFIX", "test"))) conn = storage.get_connection(url, 'ceilometer.metering.storage') event_conn = storage.get_connection(url, 'ceilometer.event.storage') for arg in argv: if arg == "--upgrade": conn.upgrade() event_conn.upgrade() if arg == "--clear": conn.clear() event_conn.clear()
def setUp(self): super(TestBase, self).setUp() cfg.CONF.set_override('connection', self.database_connection, group='database') self.conn = storage.get_connection(cfg.CONF) self.conn.upgrade() self.conn.clear()
def setup_app(pecan_config=None, extra_hooks=None): # FIXME: Replace DBHook with a hooks.TransactionHook app_hooks = [hooks.ConfigHook(), hooks.DBHook( storage.get_connection(cfg.CONF), ), hooks.PipelineHook(), hooks.TranslationHook()] if extra_hooks: app_hooks.extend(extra_hooks) if not pecan_config: pecan_config = get_pecan_config() pecan.configuration.set_config(dict(pecan_config), overwrite=True) app = pecan.make_app( pecan_config.app.root, static_root=pecan_config.app.static_root, template_path=pecan_config.app.template_path, debug=CONF.debug, force_canonical=getattr(pecan_config.app, 'force_canonical', True), hooks=app_hooks, wrap_app=middleware.ParsableErrorMiddleware, guess_content_type_from_ext=False ) if getattr(pecan_config.app, 'enable_acl', True): return acl.install(app, cfg.CONF) return app
def setUp(self): super(FunctionalTest, self).setUp() cfg.CONF.database_connection = 'test://localhost/%s' % self.DBNAME self.conn = storage.get_connection(cfg.CONF) self.conn.drop_database(self.DBNAME) self.app = self._make_app()
def setUp(self): super(TestBase, self).setUp() cfg.CONF.set_override('connection', str(self.database_connection), group='database') self.conn = storage.get_connection(cfg.CONF) self.conn.upgrade()
def setUp(self): super(TestBase, self).setUp() self.useFixture(self.db_manager) self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override('connection', self.db_manager.connection, group='database') with warnings.catch_warnings(): warnings.filterwarnings( action='ignore', message='.*you must provide a username and password.*') try: self.conn = storage.get_connection(self.CONF) except storage.StorageBadVersion as e: self.skipTest(six.text_type(e)) self.conn.upgrade() self.useFixture( oslo_mock.Patch('ceilometer.storage.get_connection', return_value=self.conn)) self.CONF([], project='ceilometer') # Set a default location for the pipeline config file so the # tests work even if ceilometer is not installed globally on # the system. self.CONF.set_override('pipeline_cfg_file', self.path_get('etc/ceilometer/pipeline.yaml'))
def setup_app(pecan_config=None, extra_hooks=None): # FIXME: Replace DBHook with a hooks.TransactionHook app_hooks = [ hooks.ConfigHook(), hooks.DBHook(storage.get_connection(cfg.CONF), ), hooks.PipelineHook(), hooks.TranslationHook() ] if extra_hooks: app_hooks.extend(extra_hooks) if not pecan_config: pecan_config = get_pecan_config() pecan.configuration.set_config(dict(pecan_config), overwrite=True) app = pecan.make_app(pecan_config.app.root, static_root=pecan_config.app.static_root, template_path=pecan_config.app.template_path, debug=CONF.debug, force_canonical=getattr(pecan_config.app, 'force_canonical', True), hooks=app_hooks, wrap_app=middleware.ParsableErrorMiddleware, guess_content_type_from_ext=False) if getattr(pecan_config.app, 'enable_acl', True): return acl.install(app, cfg.CONF) return app
def setUp(self): super(TestBase, self).setUp() self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override('connection', str(self.database_connection), group='database') with warnings.catch_warnings(): warnings.filterwarnings( action='ignore', message='.*you must provide a username and password.*') try: self.conn = storage.get_connection(self.CONF) except storage.StorageBadVersion as e: self.skipTest(str(e)) self.conn.upgrade() self.CONF([], project='ceilometer') # Set a default location for the pipeline config file so the # tests work even if ceilometer is not installed globally on # the system. self.CONF.set_override( 'pipeline_cfg_file', self.path_get('etc/ceilometer/pipeline.yaml') )
def upgrade(): conf = cfg.ConfigOpts() conf.register_cli_opts([ cfg.BoolOpt('skip-metering-database', help='Skip metering database upgrade.', default=False), cfg.BoolOpt('skip-gnocchi-resource-types', help='Skip gnocchi resource-types upgrade.', default=False), cfg.IntOpt('retry', min=0, help='Number of times to retry on failure. ' 'Default is to retry forever.'), ]) service.prepare_service(conf=conf) if conf.skip_metering_database: LOG.info("Skipping metering database upgrade") else: url = (getattr(conf.database, 'metering_connection') or conf.database.connection) if url: LOG.debug("Upgrading metering database") storage.get_connection(conf, url).upgrade() else: LOG.info("Skipping metering database upgrade, " "legacy database backend not configured.") if conf.skip_gnocchi_resource_types: LOG.info("Skipping Gnocchi resource types upgrade") else: LOG.debug("Upgrading Gnocchi resource types") from ceilometer import gnocchi_client from gnocchiclient import exceptions if conf.retry is None: stop = tenacity.stop_never else: stop = tenacity.stop_after_attempt(conf.retry) tenacity.Retrying(stop=stop, retry=tenacity.retry_if_exception_type(( exceptions.ConnectionFailure, exceptions.UnknownConnectionError, exceptions.ConnectionTimeout, exceptions.SSLError, )))(gnocchi_client.upgrade_resource_types, conf)
def setUp(self): super(TestBase, self).setUp() cfg.CONF.set_override('connection', str(self.database_connection), group='database') try: self.conn = storage.get_connection(cfg.CONF) except storage.StorageBadVersion as e: self.skipTest(str(e)) self.conn.upgrade()
def storage_expirer(): service.prepare_service() if cfg.CONF.database.time_to_live > 0: LOG.debug(_("Clearing expired metering data")) storage_conn = storage.get_connection(cfg.CONF) storage_conn.clear_expired_metering_data( cfg.CONF.database.time_to_live) else: LOG.info(_("Nothing to clean, database time to live is disabled"))
def main(argv): extra_args = cfg.CONF( sys.argv[1:], # NOTE(dhellmann): Read the configuration file(s) for the #ceilometer collector by default. default_config_files=['/etc/ceilometer/ceilometer.conf'], ) db = storage.get_connection(cfg.CONF) command = extra_args[0] if extra_args else 'help' COMMANDS[command](db, extra_args[1:])
def setUp(self): super(FunctionalTest, self).setUp() cfg.CONF.database_connection = 'test://localhost/%s' % self.DBNAME self.conn = storage.get_connection(cfg.CONF) # Don't want to use drop_database() because we # may end up running out of spidermonkey instances. # http://davisp.lighthouseapp.com/projects/26898/tickets/22 self.conn.conn[self.DBNAME].clear() self.app = self._make_app()
def setUp(self): cfg.CONF.database_connection = 'test://localhost/%s' % self.DBNAME self.conn = storage.get_connection(cfg.CONF) # Don't want to use drop_database() because we # may end up running out of spidermonkey instances. # http://davisp.lighthouseapp.com/projects/26898/tickets/22 self.conn.conn[self.DBNAME].clear() # Determine where we are so we can set up paths in the config root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', ) ) self.config = { 'app': { 'root': 'ceilometer.api.controllers.root.RootController', 'modules': ['ceilometer.api'], 'static_root': '%s/public' % root_dir, 'template_path': '%s/ceilometer/api/templates' % root_dir, }, 'logging': { 'loggers': { 'root': {'level': 'INFO', 'handlers': ['console']}, 'wsme': {'level': 'INFO', 'handlers': ['console']}, 'ceilometer': {'level': 'DEBUG', 'handlers': ['console'], }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple' } }, 'formatters': { 'simple': { 'format': ('%(asctime)s %(levelname)-5.5s [%(name)s]' '[%(threadName)s] %(message)s') } }, }, } self.mox = mox.Mox() self.stubs = stubout.StubOutForTesting() self.app = self._make_app()
def setUp(self): super(StackLightManager, self).setUp() self.resource_url = os.getenv("CEILOMETER_TEST_RESOURCE_URL", "es://127.0.0.1:9200") self.CONF = self.useFixture(fixture_config.Config()).conf self.CONF([], project='ceilometer', validate_default_values=True) self.CONF.import_opt("resource_connection", "ceilometer.storage.impl_stacklight", group="database") self.CONF.set_override("resource_connection", self.resource_url, group="database") self.connection = storage.get_connection( self.url, 'ceilometer.metering.storage') self.connection.resource_index = "ceilometer_%s" % uuid.uuid4().hex self.connection._refresh_on_write = True self.event_connection = storage.get_connection( "sqlite://", 'ceilometer.event.storage') # prefix each test with unique index name self.event_connection.RES = 'events_%s' % uuid.uuid4().hex # force index on write so data is queryable right away self.event_connection._refresh_on_write = True
def setUp(self): super(TestBase, self).setUp() cfg.CONF.set_override('connection', str(self.database_connection), group='database') with warnings.catch_warnings(): warnings.filterwarnings( action='ignore', message='.*you must provide a username and password.*') try: self.conn = storage.get_connection(cfg.CONF) except storage.StorageBadVersion as e: self.skipTest(str(e)) self.conn.upgrade()
def setUp(self): super(TestApi, self).setUp() self.PATH_PREFIX = '/v2' self.CONF = self.useFixture(fixture_config.Config()).conf self.CONF([], project='ceilometer', validate_default_values=True) self.setup_messaging(self.CONF) opts.set_defaults(self.CONF) self.CONF.set_override("auth_version", "v2.0", group=OPT_GROUP_NAME) self.CONF.set_override("policy_file", self.path_get('etc/ceilometer/policy.json'), group='oslo_policy') self.CONF.import_opt('pipeline_cfg_file', 'ceilometer.pipeline') self.CONF.set_override( 'pipeline_cfg_file', self.path_get('etc/ceilometer/pipeline.yaml') ) self.CONF.import_opt('monasca_mappings', 'ceilometer.publisher.monasca_data_filter', group='monasca') self.CONF.set_override( 'monasca_mappings', self.path_get('etc/ceilometer/monasca_field_definitions.yaml'), group='monasca' ) with mock.patch("ceilometer.monasca_client.Client") as mock_client,\ mock.patch('ceilometer.storage.get_connection') as \ get_storage_conn, \ mock.patch('ceilometer.publisher.get_publisher') as get_pub: get_storage_conn.side_effect = ( self.get_connection_with_mock_driver_manager) get_pub.side_effect = self.get_publisher_with_mock_driver_manager self.mock_mon_client = mock_client self.conn = storage.get_connection('monasca://127.0.0.1:8080', 'ceilometer.metering.storage') self.useFixture(mockpatch.Patch( 'ceilometer.storage.get_connection', return_value=self.conn)) self.app = self._make_app()
def setUp(self): super(TestApi, self).setUp() self.PATH_PREFIX = '/v2' self.CONF = self.useFixture(fixture_config.Config()).conf self.CONF([], project='ceilometer', validate_default_values=True) self.setup_messaging(self.CONF) opts.set_defaults(self.CONF) self.CONF.set_override("auth_version", "v2.0", group=OPT_GROUP_NAME) self.CONF.set_override("policy_file", self.path_get('etc/ceilometer/policy.json'), group='oslo_policy') self.CONF.import_opt('pipeline_cfg_file', 'ceilometer.pipeline') self.CONF.set_override( 'pipeline_cfg_file', self.path_get('etc/ceilometer/monasca_pipeline.yaml')) self.CONF.import_opt('monasca_mappings', 'ceilometer.publisher.monasca_data_filter', group='monasca') self.CONF.set_override( 'monasca_mappings', self.path_get('etc/ceilometer/monasca_field_definitions.yaml'), group='monasca') with mock.patch("ceilometer.monasca_client.Client") as mock_client,\ mock.patch('ceilometer.storage.get_connection') as \ get_storage_conn, \ mock.patch('ceilometer.publisher.get_publisher') as get_pub: get_storage_conn.side_effect = ( self.get_connection_with_mock_driver_manager) get_pub.side_effect = self.get_publisher_with_mock_driver_manager self.mock_mon_client = mock_client self.conn = storage.get_connection('monasca://127.0.0.1:8080', 'ceilometer.metering.storage') self.useFixture( fixtures.MockPatch('ceilometer.storage.get_connection', return_value=self.conn)) self.app = self._make_app()
def setUp(self): super(HBaseManager, self).setUp() self.connection = storage.get_connection(self.url)
def setUp(self): super(SQLiteManager, self).setUp() self.connection = storage.get_connection(self.url)
def test_get_connection(self): engine = storage.get_connection(self.CONF, 'log://localhost') self.assertIsInstance(engine, impl_log.Connection)
def test_get_connection(self): engine = storage.get_connection('log://localhost', 'ceilometer.metering.storage') self.assertIsInstance(engine, impl_log.Connection)
def __init__(self, host, topic, manager=None): super(CollectorService, self).__init__(host, topic, manager) self.storage_conn = storage.get_connection(cfg.CONF)
def storage_dbsync(): service.prepare_service() storage.get_connection(cfg.CONF).upgrade()
def __init__(self, conf): super(DatabaseDispatcher, self).__init__(conf) self.storage_conn = storage.get_connection(conf)
def attach_storage(): flask.request.storage_conn = \ storage.get_connection(conf)
def setUp(self): super(TestBase, self).setUp() cfg.CONF.database_connection = self.database_connection self.conn = storage.get_connection(cfg.CONF) self.conn.upgrade() self.conn.clear()
def setUp(self): super(SQLManager, self).setUp() self.connection = storage.get_connection(self._conf, self.url)
def test_get_connection(self): conf = mock.Mock() conf.database.connection = 'log://localhost' engine = storage.get_connection(conf) self.assertIsInstance(engine, impl_log.Connection)
def __init__(self): super(UDPCollectorService, self).__init__() self.storage_conn = storage.get_connection(cfg.CONF)
import os from ceilometer.openstack.common import log from ceilometer import storage from ceilometer.storage import models from oslo.config import cfg LOG = log.getLogger(__name__) log.setup('Ceilometer Load Test') # LOAD_TEST_CONN = "mysql://*****:*****@127.0.0.1/ceilometer?charset=utf8" connection_string = os.environ['LOAD_TEST_CONN'] cfg.CONF.set_override("connection", connection_string, group='database') conn = storage.get_connection(cfg.CONF) event_models = [] base = 0 now = datetime.datetime(2013, 12, 31, 5, 0) for event_name in ['Foo', 'Bar', 'Zoo']: trait_models = \ [models.Trait(name, dtype, value) for name, dtype, value in [ ('trait_A', models.Trait.TEXT_TYPE, "my_%s_text" % event_name), ('trait_B', models.Trait.INT_TYPE, base + 1), ('trait_C', models.Trait.FLOAT_TYPE, float(base) + 0.123456), ('trait_D', models.Trait.DATETIME_TYPE, now)]]
def main(): cfg.CONF([], project='ceilometer') parser = argparse.ArgumentParser( description='generate metering data', ) parser.add_argument( '--interval', default=10, type=int, help='the period between events, in minutes', ) parser.add_argument( '--start', default=31, help='the number of days in the past to start timestamps', ) parser.add_argument( '--end', default=2, help='the number of days into the future to continue timestamps', ) parser.add_argument( '--type', choices=('gauge', 'cumulative'), default='gauge', help='counter type', ) parser.add_argument( '--unit', default=None, help='counter unit', ) parser.add_argument( '--project', help='project id of owner', ) parser.add_argument( '--user', help='user id of owner', ) parser.add_argument( 'resource', help='the resource id for the meter data', ) parser.add_argument( 'counter', help='the counter name for the meter data', ) parser.add_argument( 'volume', help='the amount to attach to the meter', type=int, default=1, ) args = parser.parse_args() # Set up logging to use the console console = logging.StreamHandler(sys.stderr) console.setLevel(logging.DEBUG) formatter = logging.Formatter('%(message)s') console.setFormatter(formatter) root_logger = logging.getLogger('') root_logger.addHandler(console) root_logger.setLevel(logging.DEBUG) # Connect to the metering database conn = storage.get_connection(cfg.CONF) # Find the user and/or project for a real resource if not (args.user or args.project): for r in conn.get_resources(): if r['resource_id'] == args.resource: args.user = r['user_id'] args.project = r['project_id'] break # Compute start and end timestamps for the # new data. timestamp = timeutils.parse_isotime(args.start) end = timeutils.parse_isotime(args.end) increment = datetime.timedelta(minutes=args.interval) # Generate events n = 0 while timestamp <= end: c = sample.Sample(name=args.counter, type=args.type, unit=args.unit, volume=args.volume, user_id=args.user, project_id=args.project, resource_id=args.resource, timestamp=timestamp, resource_metadata={}, source='artificial', ) data = utils.meter_message_from_counter( c, cfg.CONF.publisher.metering_secret) conn.record_metering_data(data) n += 1 timestamp = timestamp + increment print('Added %d new events' % n) return 0
def setUp(self): super(SQLManager, self).setUp() self.connection = storage.get_connection(self._conf, self.url, "ceilometer.metering.storage") self.event_connection = storage.get_connection(self._conf, self.url, "ceilometer.event.storage")
def main(): cfg.CONF([], project='ceilometer') parser = argparse.ArgumentParser(description='generate metering data', ) parser.add_argument( '--interval', default=10, type=int, help='the period between events, in minutes', ) parser.add_argument( '--start', default=31, help='the number of days in the past to start timestamps', ) parser.add_argument( '--end', default=2, help='the number of days into the future to continue timestamps', ) parser.add_argument( '--type', choices=('gauge', 'cumulative'), default='gauge', help='counter type', ) parser.add_argument( '--unit', default=None, help='counter unit', ) parser.add_argument( '--project', help='project id of owner', ) parser.add_argument( '--user', help='user id of owner', ) parser.add_argument( 'resource', help='the resource id for the meter data', ) parser.add_argument( 'counter', help='the counter name for the meter data', ) parser.add_argument( 'volume', help='the amount to attach to the meter', type=int, default=1, ) args = parser.parse_args() # Set up logging to use the console console = logging.StreamHandler(sys.stderr) console.setLevel(logging.DEBUG) formatter = logging.Formatter('%(message)s') console.setFormatter(formatter) root_logger = logging.getLogger('') root_logger.addHandler(console) root_logger.setLevel(logging.DEBUG) # Connect to the metering database conn = storage.get_connection(cfg.CONF) # Find the user and/or project for a real resource if not (args.user or args.project): for r in conn.get_resources(): if r['resource_id'] == args.resource: args.user = r['user_id'] args.project = r['project_id'] break # Compute start and end timestamps for the # new data. timestamp = timeutils.parse_isotime(args.start) end = timeutils.parse_isotime(args.end) increment = datetime.timedelta(minutes=args.interval) # Generate events n = 0 while timestamp <= end: c = sample.Sample( name=args.counter, type=args.type, unit=args.unit, volume=args.volume, user_id=args.user, project_id=args.project, resource_id=args.resource, timestamp=timestamp, resource_metadata={}, source='artificial', ) data = rpc.meter_message_from_counter( c, cfg.CONF.publisher_rpc.metering_secret) conn.record_metering_data(data) n += 1 timestamp = timestamp + increment print 'Added %d new events' % n return 0
def test_get_connection_no_such_engine(self): try: storage.get_connection('no-such-engine://localhost', 'ceilometer.metering.storage') except RuntimeError as err: self.assertIn('no-such-engine', six.text_type(err))