diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py index 725b4f14ed..886bc8e78c 100644 --- a/ceilometer/storage/impl_sqlalchemy.py +++ b/ceilometer/storage/impl_sqlalchemy.py @@ -700,7 +700,8 @@ class Connection(base.Connection): group_attributes = [getattr(models.Sample, g) for g in groupby] select.extend(group_attributes) - query = session.query(*select) + query = session.query(*select).filter( + models.Meter.id == models.Sample.meter_id) if groupby: query = query.group_by(*group_attributes) diff --git a/ceilometer/tests/storage/test_storage_scenarios.py b/ceilometer/tests/storage/test_storage_scenarios.py index 8f4c24cdc5..0c7ec10347 100644 --- a/ceilometer/tests/storage/test_storage_scenarios.py +++ b/ceilometer/tests/storage/test_storage_scenarios.py @@ -1153,6 +1153,39 @@ class StatisticsTest(DBTestBase, secret='not-so-secret', ) self.conn.record_metering_data(msg) + for i in range(3): + c = sample.Sample( + 'memory', + 'gauge', + 'MB', + 8 + i, + 'user-5', + 'project2', + 'resource-6', + timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), + resource_metadata={}, + source='test', + ) + msg = utils.meter_message_from_counter( + c, + secret='not-so-secret', + ) + self.conn.record_metering_data(msg) + + def test_by_meter(self): + f = storage.SampleFilter( + meter='memory' + ) + results = list(self.conn.get_meter_statistics(f))[0] + self.assertEqual(results.duration, + (datetime.datetime(2012, 9, 25, 12, 32) + - datetime.datetime(2012, 9, 25, 10, 30)).seconds) + self.assertEqual(results.count, 3) + self.assertEqual(results.unit, 'MB') + self.assertEqual(results.min, 8) + self.assertEqual(results.max, 10) + self.assertEqual(results.sum, 27) + self.assertEqual(results.avg, 9) def test_by_user(self): f = storage.SampleFilter(