diff --git a/src/ralph_scrooge/plugins/collect/_openstack_base.py b/src/ralph_scrooge/plugins/collect/_openstack_base.py index 9214fafb..e7a2b4ce 100644 --- a/src/ralph_scrooge/plugins/collect/_openstack_base.py +++ b/src/ralph_scrooge/plugins/collect/_openstack_base.py @@ -130,7 +130,7 @@ def _get_dates_from_to(self, date): ) return date_from, date_to - def get_usages(self, date, connection_string): + def get_usages(self, date, connection_string, query_config=None): """ Return usages from OpenStack for given date. @@ -140,12 +140,17 @@ def get_usages(self, date, connection_string): :return: list of usages :rtype: list """ + query_config = query_config or {} date_from, date_to = self._get_dates_from_to(date) engine = create_engine(connection_string) connection = engine.connect() + default_db = connection_string.split('/')[-1] params = dict( from_ts=self._format_date(date_from), to_ts=self._format_date(date_to), + instances_db=query_config.get('instances_db', default_db), + flavors_db=query_config.get('flavors_db', default_db), + flavors_table=query_config.get('flavors_table', 'instance_types') ) query = self.query.format(**params) return connection.execute(query) @@ -202,8 +207,9 @@ def run_plugin(self, sites, today, **kwargs): new = total = 0 for site in sites: logger.info( - "Processing {} {}".format( + "Processing {} {}.{}".format( self.plugin_name, + site.get('USAGE_PREFIX', ''), site['WAREHOUSE'], ) ) @@ -215,7 +221,9 @@ def run_plugin(self, sites, today, **kwargs): )) # default warehouse from fixtures warehouse = Warehouse.objects.get(pk=1) - usages = self.get_usages(today, site['CONNECTION']) + usages = self.get_usages( + today, site['CONNECTION'], site.get('QUERY_CONFIG', {}) + ) site_new, site_total = self.save_usages( usages, today, diff --git a/src/ralph_scrooge/plugins/collect/openstack_nova_instance.py b/src/ralph_scrooge/plugins/collect/openstack_nova_instance.py index 6d9fc13c..8dd262df 100644 --- a/src/ralph_scrooge/plugins/collect/openstack_nova_instance.py +++ b/src/ralph_scrooge/plugins/collect/openstack_nova_instance.py @@ -31,13 +31,14 @@ class NovaInstancePlugin(OpenStackBasePlugin): ), '{to_ts}') as DATETIME), CAST(GREATEST(instances.created_at, '{from_ts}') as DATETIME) )) / (60.0 * 60)) as work_time, - instance_types.name AS metric_name - FROM instances - LEFT JOIN instance_types ON instances.instance_type_id=instance_types.id + {flavors_table}.name AS metric_name + FROM {instances_db}.instances + LEFT JOIN {flavors_db}.{flavors_table} + ON instances.instance_type_id={flavors_table}.id WHERE instances.created_at <= '{to_ts}' and (instances.deleted_at IS NULL OR instances.deleted_at >= '{from_ts}') - GROUP BY instances.project_id, instance_type_id; + GROUP BY instances.project_id, instances.instance_type_id; """ def _format_date(self, d): diff --git a/src/ralph_scrooge/tests/plugins/collect/test_openstack_base.py b/src/ralph_scrooge/tests/plugins/collect/test_openstack_base.py index 77c666c2..b02db369 100644 --- a/src/ralph_scrooge/tests/plugins/collect/test_openstack_base.py +++ b/src/ralph_scrooge/tests/plugins/collect/test_openstack_base.py @@ -215,6 +215,7 @@ def test_run_plugin( get_usages_mock.assert_any_call( self.today, CEILOMETER_SETTINGS[0]['CONNECTION'], + {} ) self.assertEquals(get_usages_mock.call_count, 2) save_usages_mock.assert_any_call(