diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-12-18 15:26:33 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-12-18 15:26:34 +0000 |
commit | e8834630e5d23e92f9243907e639e3f82f9860c3 (patch) | |
tree | 32f30f5d148429e8ad1bdbd6b75271cfd50edc2c | |
parent | 817314e7266ece5020de0fa989f89f2ff4c05889 (diff) | |
parent | f1439a1fe467525ac24039048350f8c6105ad93c (diff) | |
download | ceilometer-2015.1.0b1.tar.gz |
Merge "[SQLalchemy] Add groupby ability resource_metadata"2015.1.0b1
-rw-r--r-- | ceilometer/storage/impl_sqlalchemy.py | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py index cbd66888..7a18a2e8 100644 --- a/ceilometer/storage/impl_sqlalchemy.py +++ b/ceilometer/storage/impl_sqlalchemy.py @@ -614,18 +614,33 @@ class Connection(base.Connection): session = self._engine_facade.get_session() if groupby: - group_attributes = [getattr(models.Resource, g) for g in groupby] + group_attributes = [] + for g in groupby: + if g != 'resource_metadata.instance_type': + group_attributes.append(getattr(models.Resource, g)) + else: + group_attributes.append( + getattr(models.MetaText, 'value') + .label('resource_metadata.instance_type')) + select.extend(group_attributes) - query = (session.query(*select) - .join(models.Meter, - models.Meter.id == models.Sample.meter_id) - .join( - models.Resource, - models.Resource.internal_id == models.Sample.resource_id) - .group_by(models.Meter.unit)) + query = ( + session.query(*select) + .join(models.Meter, + models.Meter.id == models.Sample.meter_id) + .join(models.Resource, + models.Resource.internal_id == models.Sample.resource_id) + .group_by(models.Meter.unit)) if groupby: + for g in groupby: + if g == 'resource_metadata.instance_type': + query = query.join( + models.MetaText, + models.Resource.internal_id == models.MetaText.id) + query = query.filter( + models.MetaText.meta_key == 'instance_type') query = query.group_by(*group_attributes) return make_query_from_filter(session, query, sample_filter) @@ -672,7 +687,8 @@ class Connection(base.Connection): """ if groupby: for group in groupby: - if group not in ['user_id', 'project_id', 'resource_id']: + if group not in ['user_id', 'project_id', 'resource_id', + 'resource_metadata.instance_type']: raise ceilometer.NotImplementedError('Unable to group by ' 'these fields') |