fix command ceilometer event-list -q error
There is a error happened in Kilo when using mongodb as the backend of ceilometer. When running ceilometer event-list -q with more than two parameters, and KeyError raised. Closes-Bug: #1488716 Change-Id: I850785fe3450eec51298e2d78ba719de4cb65c88
This commit is contained in:
parent
eb53841789
commit
850ce95a2d
|
@ -73,18 +73,18 @@ def make_events_query_from_filter(event_filter):
|
|||
|
||||
:param event_filter: storage.EventFilter object.
|
||||
"""
|
||||
q = {}
|
||||
query = {}
|
||||
q_list = []
|
||||
ts_range = make_timestamp_range(event_filter.start_timestamp,
|
||||
event_filter.end_timestamp)
|
||||
if ts_range:
|
||||
q['timestamp'] = ts_range
|
||||
q_list.append({'timestamp': ts_range})
|
||||
if event_filter.event_type:
|
||||
q['event_type'] = event_filter.event_type
|
||||
q_list.append({'event_type': event_filter.event_type})
|
||||
if event_filter.message_id:
|
||||
q['_id'] = event_filter.message_id
|
||||
q_list.append({'_id': event_filter.message_id})
|
||||
|
||||
if event_filter.traits_filter:
|
||||
q.setdefault('traits')
|
||||
for trait_filter in event_filter.traits_filter:
|
||||
op = trait_filter.pop('op', 'eq')
|
||||
dict_query = {}
|
||||
|
@ -101,14 +101,10 @@ def make_events_query_from_filter(event_filter):
|
|||
v if op == 'eq'
|
||||
else {OP_SIGN[op]: v})
|
||||
dict_query = {'$elemMatch': dict_query}
|
||||
if q['traits'] is None:
|
||||
q['traits'] = dict_query
|
||||
elif q.get('$and') is None:
|
||||
q.setdefault('$and', [{'traits': q.pop('traits')},
|
||||
{'traits': dict_query}])
|
||||
else:
|
||||
q['$and'].append({'traits': dict_query})
|
||||
return q
|
||||
q_list.append({'traits': dict_query})
|
||||
if q_list:
|
||||
query = {'$and': q_list}
|
||||
return query
|
||||
|
||||
|
||||
def make_query_from_filter(sample_filter, require_meter=True):
|
||||
|
|
|
@ -3522,7 +3522,8 @@ class GetEventTest(EventTestBase):
|
|||
|
||||
def test_get_event_multiple_trait_filter(self):
|
||||
trait_filters = [{'key': 'trait_B', 'integer': 1},
|
||||
{'key': 'trait_A', 'string': 'my_Foo_text'}]
|
||||
{'key': 'trait_A', 'string': 'my_Foo_text'},
|
||||
{'key': 'trait_C', 'float': 0.123456}]
|
||||
event_filter = storage.EventFilter(self.start, self.end,
|
||||
traits_filter=trait_filters)
|
||||
events = [event for event in self.event_conn.get_events(event_filter)]
|
||||
|
|
Loading…
Reference in New Issue