]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/restful/api/request.py
import ceph 14.2.5
[ceph.git] / ceph / src / pybind / mgr / restful / api / request.py
1 from pecan import expose, request, response
2 from pecan.rest import RestController
3
4 from restful import context
5 from restful.decorators import auth, lock, paginate
6
7
8 class RequestId(RestController):
9 def __init__(self, request_id):
10 self.request_id = request_id
11
12
13 @expose(template='json')
14 @auth
15 def get(self, **kwargs):
16 """
17 Show the information for the request id
18 """
19 request = [x for x in context.instance.requests
20 if x.id == self.request_id]
21 if len(request) != 1:
22 response.status = 500
23 return {'message': 'Unknown request id "{}"'.format(self.request_id)}
24 return request[0]
25
26
27 @expose(template='json')
28 @auth
29 @lock
30 def delete(self, **kwargs):
31 """
32 Remove the request id from the database
33 """
34 for index in range(len(context.instance.requests)):
35 if context.instance.requests[index].id == self.request_id:
36 return context.instance.requests.pop(index)
37
38 # Failed to find the job to cancel
39 response.status = 500
40 return {'message': 'No such request id'}
41
42
43
44 class Request(RestController):
45 @expose(template='json')
46 @paginate
47 @auth
48 def get(self, **kwargs):
49 """
50 List all the available requests
51 """
52 return context.instance.requests
53
54
55 @expose(template='json')
56 @auth
57 @lock
58 def delete(self, **kwargs):
59 """
60 Remove all the finished requests
61 """
62 num_requests = len(context.instance.requests)
63
64 context.instance.requests = [x for x in context.instance.requests
65 if not x.is_finished()]
66 remaining = len(context.instance.requests)
67 # Return the job statistics
68 return {
69 'cleaned': num_requests - remaining,
70 'remaining': remaining,
71 }
72
73
74 @expose(template='json')
75 @auth
76 def post(self, **kwargs):
77 """
78 Pass through method to create any request
79 """
80 if isinstance(request.json, list):
81 if all(isinstance(element, list) for element in request.json):
82 return context.instance.submit_request(request.json, **kwargs)
83
84 # The request.json has wrong format
85 response.status = 500
86 return {'message': 'The request format should be [[{c1},{c2}]]'}
87
88 return context.instance.submit_request([[request.json]], **kwargs)
89
90
91 @expose()
92 def _lookup(self, request_id, *remainder):
93 return RequestId(request_id), remainder