diff --git a/ceilometer/storage/impl_mongodb.py b/ceilometer/storage/impl_mongodb.py index db3dd581d..98af16e92 100644 --- a/ceilometer/storage/impl_mongodb.py +++ b/ceilometer/storage/impl_mongodb.py @@ -330,7 +330,10 @@ class Connection(pymongo_base.Connection): res.duration_start = values[i].duration_start; if ( values[i].duration_end > res.duration_end ) res.duration_end = values[i].duration_end; - } + if ( values[i].period_start < res.period_start ) + res.period_start = values[i].period_start; + if ( values[i].period_end > res.period_end ) + res.period_end = values[i].period_end; } return res; } """) @@ -339,8 +342,7 @@ class Connection(pymongo_base.Connection): function (key, value) { %(aggregate_val)s value.duration = (value.duration_end - value.duration_start) / 1000; - value.period = NumberInt((value.period_end - value.period_start) - / 1000); + value.period = NumberInt(%(period)d); return value; }""") @@ -894,7 +896,8 @@ class Connection(pymongo_base.Connection): ) reduce_stats = self.REDUCE_STATS % reduce_params - finalize_params = dict(aggregate_val=sub('finalize', aggregate)) + finalize_params = dict(aggregate_val=sub('finalize', aggregate), + period=(period if period else 0)) finalize_stats = self.FINALIZE_STATS % finalize_params results = self.db.meter.map_reduce( diff --git a/ceilometer/tests/storage/test_storage_scenarios.py b/ceilometer/tests/storage/test_storage_scenarios.py index 77ad85619..1aec91cc1 100644 --- a/ceilometer/tests/storage/test_storage_scenarios.py +++ b/ceilometer/tests/storage/test_storage_scenarios.py @@ -1182,6 +1182,10 @@ class StatisticsTest(DBTestBase, self.assertEqual(10, results.max) self.assertEqual(27, results.sum) self.assertEqual(9, results.avg) + self.assertEqual(datetime.datetime(2012, 9, 25, 10, 30), + results.period_start) + self.assertEqual(datetime.datetime(2012, 9, 25, 12, 32), + results.period_end) def test_by_user(self): f = storage.SampleFilter(