From 15d01c2ff27df7566097d42d8709b8b1732ef74e Mon Sep 17 00:00:00 2001 From: Lena Novokshonova Date: Thu, 27 Nov 2014 15:34:06 +0400 Subject: [PATCH] [MongoDB] Add groupby ability on resource_metadata It would be useful to have groupby functionality to derive meters by their resource_metadata. This commit adds groupby by resource_metadata.instance_type for mongodb. Change-Id: I26e7fb4fa2835d283cb6c83e0aec2dba4ac9bf00 Partially-Closes-Bug: 1331508 --- ceilometer/api/controllers/v2.py | 7 +- ceilometer/storage/impl_mongodb.py | 15 +- .../tests/storage/test_storage_scenarios.py | 387 ++++++++++++++++-- 3 files changed, 375 insertions(+), 34 deletions(-) diff --git a/ceilometer/api/controllers/v2.py b/ceilometer/api/controllers/v2.py index 2a2fdd9694..740788a5df 100644 --- a/ceilometer/api/controllers/v2.py +++ b/ceilometer/api/controllers/v2.py @@ -564,9 +564,10 @@ def _validate_groupby_fields(groupby_fields): If all fields are valid, returns fields with duplicates removed. """ - # NOTE(terriyu): Currently, metadata fields are not supported in our - # group by statistics implementation - valid_fields = set(['user_id', 'resource_id', 'project_id', 'source']) + # NOTE(terriyu): Currently, metadata fields are supported in our + # group by statistics implementation only for mongodb + valid_fields = set(['user_id', 'resource_id', 'project_id', 'source', + 'resource_metadata.instance_type']) invalid_fields = set(groupby_fields) - valid_fields if invalid_fields: diff --git a/ceilometer/storage/impl_mongodb.py b/ceilometer/storage/impl_mongodb.py index 278e52e8ec..06930ce83f 100644 --- a/ceilometer/storage/impl_mongodb.py +++ b/ceilometer/storage/impl_mongodb.py @@ -241,10 +241,17 @@ class Connection(pymongo_base.Connection): var groupby_fields = %(groupby_fields)s; var groupby = {}; var groupby_key = {}; - for ( var i=0; i