From b16491e9f4e8749b8044d9a4fef6f2afd2221c3c Mon Sep 17 00:00:00 2001 From: aviau Date: Mon, 20 Apr 2015 11:36:10 -0400 Subject: [PATCH] LiveQuery: 'fields' is now optional Change-Id: I68db54460f356b07af0691057e7f7c7f14ce0576 --- surveil/api/datamodel/status/live_query.py | 2 +- .../api/handlers/status/liveQuery_filter.py | 12 +++++--- .../handlers/live/test_liveQuery_filter.py | 29 +++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/surveil/api/datamodel/status/live_query.py b/surveil/api/datamodel/status/live_query.py index a7bad19..befdc8d 100644 --- a/surveil/api/datamodel/status/live_query.py +++ b/surveil/api/datamodel/status/live_query.py @@ -26,7 +26,7 @@ class LiveQuery(types.Base): filters = wsme.wsattr(wtypes.text, mandatory=True) "The filter expression encoded in json." - fields = wsme.wsattr(wtypes.text, mandatory=True) + fields = wsme.wsattr(wtypes.text, mandatory=False) "List of fields to include in the response." @classmethod diff --git a/surveil/api/handlers/status/liveQuery_filter.py b/surveil/api/handlers/status/liveQuery_filter.py index 29477f1..ef79df7 100644 --- a/surveil/api/handlers/status/liveQuery_filter.py +++ b/surveil/api/handlers/status/liveQuery_filter.py @@ -14,6 +14,8 @@ import json +import wsme + def filter_dict_list_with_live_query(item_list, live_query): filters = json.loads(live_query.filters) @@ -42,11 +44,13 @@ def filter_dict_list_with_live_query(item_list, live_query): break if matches: - fields = json.loads(live_query.fields) matching_item = {} - for field in fields: - matching_item[field] = item[field] - + if live_query.fields != wsme.Unset: + fields = json.loads(live_query.fields) + for field in fields: + matching_item[field] = item[field] + else: + matching_item = item matching_items.append(matching_item) return matching_items diff --git a/surveil/tests/api/handlers/live/test_liveQuery_filter.py b/surveil/tests/api/handlers/live/test_liveQuery_filter.py index 5f35290..e6a214b 100644 --- a/surveil/tests/api/handlers/live/test_liveQuery_filter.py +++ b/surveil/tests/api/handlers/live/test_liveQuery_filter.py @@ -84,3 +84,32 @@ class LiveQueryFilterTest(base.BaseTestCase): expected = [{"host_name": "localhost"}] self.assertItemsEqual(result, expected) + + def test_query_builder_filter_all_fields(self): + query = live_query.LiveQuery( + filters=json.dumps({ + "is": { + "state": [0], + "description": ["localhost"] + }, + "isnot": { + "state": [1] + } + }) + ) + + result = query_filter.filter_dict_list_with_live_query( + self.items, + query + ) + + expected = [ + {'description': 'localhost', + 'last_state_change': 1429400991, + 'plugin_output': 'OK - localhost: rta 0.047ms, lost 0%', + 'last_check': 1429400990, + 'state': 0, + 'host_name': 'localhost'} + ] + + self.assertItemsEqual(result, expected)