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
|
||||
|
||||
|
||||
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)
|
||||
|
@ -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, " ",
|
||||
|
Loading…
x
Reference in New Issue
Block a user