def get_tasks(request):
"""
Returns the list of tasks
:Example: curl -X GET http://localhost:8082/foglamp/task
:Example: curl -X GET http://localhost:8082/foglamp/task?name=xxx
:Example: curl -X GET http://localhost:8082/foglamp/task?state=xxx
:Example: curl -X GET http://localhost:8082/foglamp/task?name=xxx&state=xxx
"""
try:
limit = request.query.get('limit') if 'limit' in request.query else '100'
if limit:
if not re.match("(^[0-9]*$)", limit):
raise web.HTTPBadRequest(reason='This limit {} not permitted.'.format(limit))
elif int(limit) > 100:
limit = 100
else:
limit = int(limit)
state = request.query.get('state') if 'state' in request.query else None
if state:
if state.upper() not in [t.name for t in list(Task.State)]:
raise web.HTTPBadRequest(reason='This state value {} not permitted.'.format(state))
else:
z = dict()
for i in list(Task.State):
z.update({i.name: i.value})
state = z[state.upper()]
name = request.query.get('name') if 'name' in request.query else None
where_clause = None
if name and state:
where_clause = (["process_name", "=", name], ["state", "=", state])
elif name:
where_clause = ["process_name", "=", name]
elif state:
where_clause = ["state", "=", state]
tasks = await server.Server.scheduler.get_tasks(where=where_clause, limit=limit)
if len(tasks) == 0:
raise TaskNotFoundError("No Tasks")
new_tasks = []
for task in tasks:
new_tasks.append(
{'id': str(task.task_id),
'process_name': task.process_name,
'state': Task.State(int(task.state)).name,
'start_time': str(task.start_time),
'end_time': str(task.end_time),
'exit_code': task.exit_code,
'reason': task.reason
}
)
return web.json_response({'tasks': new_tasks})
except (ValueError, TaskNotFoundError) as ex:
raise web.HTTPNotFound(reason=str(ex))
评论列表
文章目录