Filter on when field for events in StackyAPI

This commit is contained in:
Andrew Melton 2013-08-05 17:14:03 -04:00
parent f5a1cf5098
commit d9558279c1
2 changed files with 152 additions and 8 deletions

View File

@ -69,6 +69,16 @@ def model_search(request, model, filters,
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'):
return _model_factory(service).values('event').distinct()
@ -168,13 +178,16 @@ def do_uuid(request, service='nova'):
return error_response(400, 'Bad Request', msg)
model = _model_factory(service)
result = []
param = {}
if service == 'nova' or service == 'generic':
param = {'instance': uuid}
if service == 'glance':
param = {'uuid': uuid}
filters = {}
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')
for event in related:
when = dt.dt_from_decimal(event.when)
@ -266,6 +279,7 @@ def do_request(request):
model = models.RawData.objects
filters = {'request_id': request_id}
_add_when_filters(request, filters)
events = model_search(request, model, filters, order_by='when')
results = [["#", "?", "When", "Deployment", "Event", "Host",
"State", "State'", "Task'"]]
@ -567,11 +581,12 @@ def search(request, service):
field = request.GET.get('field')
value = request.GET.get('value')
model = _model_factory(service)
filter_para = {field: value}
filters = {field: value}
_add_when_filters(request, filters)
results = []
try:
events = model_search(request, model, filter_para)
events = model_search(request, model, filters)
for event in events:
when = dt.dt_from_decimal(event.when)
routing_key_status = routing_key_type(event.routing_key)

View File

@ -303,6 +303,41 @@ class StackyServerTestCase(unittest.TestCase):
self.assertEqual(json_resp[1], body)
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):
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
"Status"], [1, " ",
@ -334,6 +369,41 @@ class StackyServerTestCase(unittest.TestCase):
self.assertEqual(json_resp[1], body)
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):
fake_request = self.mox.CreateMockAnything()
fake_request.GET = {'uuid': "obviouslybaduuid"}
@ -557,6 +627,42 @@ class StackyServerTestCase(unittest.TestCase):
self.assertEqual(json_resp[1][8], None)
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):
fake_request = self.mox.CreateMockAnything()
fake_request.GET = {'request_id': "obviouslybaduuid"}
@ -1177,6 +1283,29 @@ class StackyServerTestCase(unittest.TestCase):
self._assert_on_search_nova(json_resp, raw)
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):
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
"State", "State'", "Task'"], [1, " ",