Filter on when field for events in StackyAPI
This commit is contained in:
parent
f5a1cf5098
commit
d9558279c1
@ -69,6 +69,16 @@ def model_search(request, model, filters,
|
|||||||
return query
|
return query
|
||||||
|
|
||||||
|
|
||||||
|
def _add_when_filters(request, filters):
|
||||||
|
when_max = request.GET.get('when_max')
|
||||||
|
if when_max:
|
||||||
|
filters['when__lte'] = decimal.Decimal(when_max)
|
||||||
|
|
||||||
|
when_min = request.GET.get('when_min')
|
||||||
|
if when_min:
|
||||||
|
filters['when__gte'] = decimal.Decimal(when_min)
|
||||||
|
|
||||||
|
|
||||||
def get_event_names(service='nova'):
|
def get_event_names(service='nova'):
|
||||||
return _model_factory(service).values('event').distinct()
|
return _model_factory(service).values('event').distinct()
|
||||||
|
|
||||||
@ -168,13 +178,16 @@ def do_uuid(request, service='nova'):
|
|||||||
return error_response(400, 'Bad Request', msg)
|
return error_response(400, 'Bad Request', msg)
|
||||||
model = _model_factory(service)
|
model = _model_factory(service)
|
||||||
result = []
|
result = []
|
||||||
param = {}
|
filters = {}
|
||||||
if service == 'nova' or service == 'generic':
|
|
||||||
param = {'instance': uuid}
|
|
||||||
if service == 'glance':
|
|
||||||
param = {'uuid': uuid}
|
|
||||||
|
|
||||||
related = model_search(request, model, param,
|
if service == 'nova' or service == 'generic':
|
||||||
|
filters = {'instance': uuid}
|
||||||
|
if service == 'glance':
|
||||||
|
filters = {'uuid': uuid}
|
||||||
|
|
||||||
|
_add_when_filters(request, filters)
|
||||||
|
|
||||||
|
related = model_search(request, model, filters,
|
||||||
related=True, order_by='when')
|
related=True, order_by='when')
|
||||||
for event in related:
|
for event in related:
|
||||||
when = dt.dt_from_decimal(event.when)
|
when = dt.dt_from_decimal(event.when)
|
||||||
@ -266,6 +279,7 @@ def do_request(request):
|
|||||||
|
|
||||||
model = models.RawData.objects
|
model = models.RawData.objects
|
||||||
filters = {'request_id': request_id}
|
filters = {'request_id': request_id}
|
||||||
|
_add_when_filters(request, filters)
|
||||||
events = model_search(request, model, filters, order_by='when')
|
events = model_search(request, model, filters, order_by='when')
|
||||||
results = [["#", "?", "When", "Deployment", "Event", "Host",
|
results = [["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
"State", "State'", "Task'"]]
|
"State", "State'", "Task'"]]
|
||||||
@ -567,11 +581,12 @@ def search(request, service):
|
|||||||
field = request.GET.get('field')
|
field = request.GET.get('field')
|
||||||
value = request.GET.get('value')
|
value = request.GET.get('value')
|
||||||
model = _model_factory(service)
|
model = _model_factory(service)
|
||||||
filter_para = {field: value}
|
filters = {field: value}
|
||||||
|
_add_when_filters(request, filters)
|
||||||
results = []
|
results = []
|
||||||
try:
|
try:
|
||||||
|
|
||||||
events = model_search(request, model, filter_para)
|
events = model_search(request, model, filters)
|
||||||
for event in events:
|
for event in events:
|
||||||
when = dt.dt_from_decimal(event.when)
|
when = dt.dt_from_decimal(event.when)
|
||||||
routing_key_status = routing_key_type(event.routing_key)
|
routing_key_status = routing_key_type(event.routing_key)
|
||||||
|
@ -303,6 +303,41 @@ class StackyServerTestCase(unittest.TestCase):
|
|||||||
self.assertEqual(json_resp[1], body)
|
self.assertEqual(json_resp[1], body)
|
||||||
self.mox.VerifyAll()
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
|
def test_do_uuid_when_filters(self):
|
||||||
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
|
"State", "State'", "Task'"], [1, " ",
|
||||||
|
"2013-07-17 10:16:10.717219", "deployment",
|
||||||
|
"test.start", "example.com", "active", None, None]]
|
||||||
|
fake_request = self.mox.CreateMockAnything()
|
||||||
|
fake_request.GET = {'uuid': INSTANCE_ID_1,
|
||||||
|
'when_min': '1.1',
|
||||||
|
'when_max': '2.1'}
|
||||||
|
result = self.mox.CreateMockAnything()
|
||||||
|
models.RawData.objects.select_related().AndReturn(result)
|
||||||
|
result.filter(instance=INSTANCE_ID_1,
|
||||||
|
when__gte=decimal.Decimal('1.1'),
|
||||||
|
when__lte=decimal.Decimal('2.1')).AndReturn(result)
|
||||||
|
result.order_by('when').AndReturn(result)
|
||||||
|
raw = self._create_raw()
|
||||||
|
result[None:50].AndReturn(result)
|
||||||
|
result.__iter__().AndReturn([raw].__iter__())
|
||||||
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
resp = stacky_server.do_uuid(fake_request)
|
||||||
|
|
||||||
|
self.assertEqual(resp.status_code, 200)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
self.assertEqual(len(json_resp), 2)
|
||||||
|
header = ["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
|
"State", "State'", "Task'"]
|
||||||
|
self.assertEqual(json_resp[0], header)
|
||||||
|
datetime = dt.dt_from_decimal(raw.when)
|
||||||
|
body = [1, " ", str(datetime), "deployment", "test.start",
|
||||||
|
"example.com", "active", None, None]
|
||||||
|
self.assertEqual(json_resp[1], body)
|
||||||
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
def test_do_uuid_for_glance(self):
|
def test_do_uuid_for_glance(self):
|
||||||
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
"Status"], [1, " ",
|
"Status"], [1, " ",
|
||||||
@ -334,6 +369,41 @@ class StackyServerTestCase(unittest.TestCase):
|
|||||||
self.assertEqual(json_resp[1], body)
|
self.assertEqual(json_resp[1], body)
|
||||||
self.mox.VerifyAll()
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
|
def test_do_uuid_for_glance_when_filters(self):
|
||||||
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
|
"Status"], [1, " ",
|
||||||
|
"2013-07-17 10:16:10.717219", "deployment",
|
||||||
|
"test.start", "example.com", "state"]]
|
||||||
|
fake_request = self.mox.CreateMockAnything()
|
||||||
|
fake_request.GET = {'uuid': INSTANCE_ID_1,
|
||||||
|
'when_min': '1.1',
|
||||||
|
'when_max': '2.1'}
|
||||||
|
result = self.mox.CreateMockAnything()
|
||||||
|
models.GlanceRawData.objects.select_related().AndReturn(result)
|
||||||
|
result.filter(uuid=INSTANCE_ID_1,
|
||||||
|
when__gte=decimal.Decimal('1.1'),
|
||||||
|
when__lte=decimal.Decimal('2.1')).AndReturn(result)
|
||||||
|
result.order_by('when').AndReturn(result)
|
||||||
|
raw = self._create_raw()
|
||||||
|
result[None:50].AndReturn(result)
|
||||||
|
result.__iter__().AndReturn([raw].__iter__())
|
||||||
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
resp = stacky_server.do_uuid(fake_request,'glance')
|
||||||
|
|
||||||
|
self.assertEqual(resp.status_code, 200)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
self.assertEqual(len(json_resp), 2)
|
||||||
|
header = ["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
|
"Status"]
|
||||||
|
self.assertEqual(json_resp[0], header)
|
||||||
|
datetime = dt.dt_from_decimal(raw.when)
|
||||||
|
body = [1, " ", str(datetime), "deployment", "test.start",
|
||||||
|
"example.com", "state"]
|
||||||
|
self.assertEqual(json_resp[1], body)
|
||||||
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
def test_do_uuid_bad_uuid(self):
|
def test_do_uuid_bad_uuid(self):
|
||||||
fake_request = self.mox.CreateMockAnything()
|
fake_request = self.mox.CreateMockAnything()
|
||||||
fake_request.GET = {'uuid': "obviouslybaduuid"}
|
fake_request.GET = {'uuid': "obviouslybaduuid"}
|
||||||
@ -557,6 +627,42 @@ class StackyServerTestCase(unittest.TestCase):
|
|||||||
self.assertEqual(json_resp[1][8], None)
|
self.assertEqual(json_resp[1][8], None)
|
||||||
self.mox.VerifyAll()
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
|
def test_do_request_when_filters(self):
|
||||||
|
fake_request = self.mox.CreateMockAnything()
|
||||||
|
fake_request.GET = {'request_id': REQUEST_ID_1,
|
||||||
|
'when_min': '1.1',
|
||||||
|
'when_max': '2.1'}
|
||||||
|
raw = self._create_raw()
|
||||||
|
results = self.mox.CreateMockAnything()
|
||||||
|
when_min = decimal.Decimal('1.1')
|
||||||
|
when_max = decimal.Decimal('2.1')
|
||||||
|
models.RawData.objects.filter(request_id=REQUEST_ID_1,
|
||||||
|
when__gte=when_min,
|
||||||
|
when__lte=when_max).AndReturn(results)
|
||||||
|
results.order_by('when').AndReturn(results)
|
||||||
|
results[None:50].AndReturn(results)
|
||||||
|
results.__iter__().AndReturn([raw].__iter__())
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
resp = stacky_server.do_request(fake_request)
|
||||||
|
|
||||||
|
self.assertEqual(resp.status_code, 200)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
self.assertEqual(len(json_resp), 2)
|
||||||
|
self.assertEqual(json_resp[0], ["#", "?", "When", "Deployment",
|
||||||
|
"Event", "Host", "State", "State'",
|
||||||
|
"Task'"])
|
||||||
|
self.assertEqual(json_resp[1][0], 1)
|
||||||
|
self.assertEqual(json_resp[1][1], u' ')
|
||||||
|
self.assertEqual(json_resp[1][2], str(dt.dt_from_decimal(raw.when)))
|
||||||
|
self.assertEqual(json_resp[1][3], u'deployment')
|
||||||
|
self.assertEqual(json_resp[1][4], u'test.start')
|
||||||
|
self.assertEqual(json_resp[1][5], u'example.com')
|
||||||
|
self.assertEqual(json_resp[1][6], u'active')
|
||||||
|
self.assertEqual(json_resp[1][7], None)
|
||||||
|
self.assertEqual(json_resp[1][8], None)
|
||||||
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
def test_do_request_bad_request_id(self):
|
def test_do_request_bad_request_id(self):
|
||||||
fake_request = self.mox.CreateMockAnything()
|
fake_request = self.mox.CreateMockAnything()
|
||||||
fake_request.GET = {'request_id': "obviouslybaduuid"}
|
fake_request.GET = {'request_id': "obviouslybaduuid"}
|
||||||
@ -1177,6 +1283,29 @@ class StackyServerTestCase(unittest.TestCase):
|
|||||||
self._assert_on_search_nova(json_resp, raw)
|
self._assert_on_search_nova(json_resp, raw)
|
||||||
self.mox.VerifyAll()
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
|
def test_search_by_field_for_nova_when_filters(self):
|
||||||
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
|
"State", "State'", "Task'"], [1, " ",
|
||||||
|
"2013-07-17 10:16:10.717219", "deployment",
|
||||||
|
"test.start", "example.com", "active", None, None]]
|
||||||
|
fake_request = self.mox.CreateMockAnything()
|
||||||
|
fake_request.GET = {'field': 'tenant', 'value': 'tenant',
|
||||||
|
'when_min': '1.1',
|
||||||
|
'when_max': '2.1'}
|
||||||
|
raw = self._create_raw()
|
||||||
|
models.RawData.objects.filter(tenant='tenant',
|
||||||
|
when__gte=decimal.Decimal('1.1'),
|
||||||
|
when__lte=decimal.Decimal('2.1')).AndReturn([raw])
|
||||||
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
resp = stacky_server.search(fake_request, 'nova')
|
||||||
|
|
||||||
|
self.assertEqual(resp.status_code, 200)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
self._assert_on_search_nova(json_resp, raw)
|
||||||
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
def test_search_by_field_for_nova_with_limit(self):
|
def test_search_by_field_for_nova_with_limit(self):
|
||||||
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
||||||
"State", "State'", "Task'"], [1, " ",
|
"State", "State'", "Task'"], [1, " ",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user