X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fpybind%2Fmgr%2Frestful%2Fapi%2Frequest.py;fp=src%2Fceph%2Fsrc%2Fpybind%2Fmgr%2Frestful%2Fapi%2Frequest.py;h=b22b80bff8a45104cd2a32feb25f6f9f2d58246c;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/pybind/mgr/restful/api/request.py b/src/ceph/src/pybind/mgr/restful/api/request.py new file mode 100644 index 0000000..b22b80b --- /dev/null +++ b/src/ceph/src/pybind/mgr/restful/api/request.py @@ -0,0 +1,92 @@ +from pecan import expose, request, response +from pecan.rest import RestController + +from restful import module +from restful.decorators import auth, lock, paginate + + +class RequestId(RestController): + def __init__(self, request_id): + self.request_id = request_id + + + @expose(template='json') + @auth + def get(self, **kwargs): + """ + Show the information for the request id + """ + request = filter( + lambda x: x.id == self.request_id, + module.instance.requests + ) + + if len(request) != 1: + response.status = 500 + return {'message': 'Unknown request id "%s"' % str(self.request_id)} + + request = request[0] + return request + + + @expose(template='json') + @auth + @lock + def delete(self, **kwargs): + """ + Remove the request id from the database + """ + for index in range(len(module.instance.requests)): + if module.instance.requests[index].id == self.request_id: + return module.instance.requests.pop(index) + + # Failed to find the job to cancel + response.status = 500 + return {'message': 'No such request id'} + + + +class Request(RestController): + @expose(template='json') + @paginate + @auth + def get(self, **kwargs): + """ + List all the available requests + """ + return module.instance.requests + + + @expose(template='json') + @auth + @lock + def delete(self, **kwargs): + """ + Remove all the finished requests + """ + num_requests = len(module.instance.requests) + + module.instance.requests = filter( + lambda x: not x.is_finished(), + module.instance.requests + ) + + # Return the job statistics + return { + 'cleaned': num_requests - len(module.instance.requests), + 'remaining': len(module.instance.requests), + } + + + @expose(template='json') + @auth + def post(self, **kwargs): + """ + Pass through method to create any request + """ + return module.instance.submit_request([[request.json]], **kwargs) + + + @expose() + def _lookup(self, request_id, *remainder): + return RequestId(request_id), remainder