Revision 85a634e6 snf-cyclades-app/synnefo/api/servers.py
b/snf-cyclades-app/synnefo/api/servers.py | ||
---|---|---|
66 | 66 |
(r'^/(\d+)/meta(?:.json|.xml)?$', 'metadata_demux'), |
67 | 67 |
(r'^/(\d+)/meta/(.+?)(?:.json|.xml)?$', 'metadata_item_demux'), |
68 | 68 |
(r'^/(\d+)/stats(?:.json|.xml)?$', 'server_stats'), |
69 |
(r'^/(\d+)/diagnostics(?:.json)?$', 'get_server_diagnostics'), |
|
69 | 70 |
) |
70 | 71 |
|
71 | 72 |
|
... | ... | |
139 | 140 |
attachments = [nic_to_dict(nic) for nic in vm.nics.all()] |
140 | 141 |
if attachments: |
141 | 142 |
d['attachments'] = {'values': attachments} |
143 |
|
|
144 |
# include the latest vm diagnostic, if set |
|
145 |
diagnostic = vm.get_last_diagnostic() |
|
146 |
if diagnostic: |
|
147 |
d['diagnostics'] = diagnostics_to_dict([diagnostic]) |
|
148 |
|
|
142 | 149 |
return d |
143 | 150 |
|
144 | 151 |
|
152 |
def diagnostics_to_dict(diagnostics): |
|
153 |
""" |
|
154 |
Extract api data from diagnostics QuerySet. |
|
155 |
""" |
|
156 |
entries = list() |
|
157 |
|
|
158 |
for diagnostic in diagnostics: |
|
159 |
# format source date if set |
|
160 |
formatted_source_date = None |
|
161 |
if diagnostic.source_date: |
|
162 |
formatted_source_date = util.isoformat(diagnostic.source_date) |
|
163 |
|
|
164 |
entry = { |
|
165 |
'source': diagnostic.source, |
|
166 |
'created': util.isoformat(diagnostic.created), |
|
167 |
'message': diagnostic.message, |
|
168 |
'details': diagnostic.details, |
|
169 |
'level': diagnostic.level, |
|
170 |
} |
|
171 |
|
|
172 |
if formatted_source_date: |
|
173 |
entry['source_date'] = formatted_source_date |
|
174 |
|
|
175 |
entries.append(entry) |
|
176 |
|
|
177 |
return entries |
|
178 |
|
|
179 |
|
|
145 | 180 |
def render_server(request, server, status=200): |
146 | 181 |
if request.serialization == 'xml': |
147 | 182 |
data = render_to_string('server.xml', { |
... | ... | |
152 | 187 |
return HttpResponse(data, status=status) |
153 | 188 |
|
154 | 189 |
|
190 |
def render_diagnostics(request, diagnostics_dict, status=200): |
|
191 |
""" |
|
192 |
Render diagnostics dictionary to json response. |
|
193 |
""" |
|
194 |
return HttpResponse(json.dumps(diagnostics_dict), status=status) |
|
195 |
|
|
196 |
|
|
197 |
@util.api_method('GET') |
|
198 |
def get_server_diagnostics(request, server_id): |
|
199 |
""" |
|
200 |
Virtual machine diagnostics api view. |
|
201 |
""" |
|
202 |
log.debug('server_diagnostics %s', server_id) |
|
203 |
vm = util.get_vm(server_id, request.user_uniq) |
|
204 |
diagnostics = diagnostics_to_dict(vm.diagnostics.all()) |
|
205 |
return render_diagnostics(request, diagnostics) |
|
206 |
|
|
207 |
|
|
155 | 208 |
@util.api_method('GET') |
156 | 209 |
def list_servers(request, detail=False): |
157 | 210 |
# Normal Response Codes: 200, 203 |
... | ... | |
165 | 218 |
user_vms = VirtualMachine.objects.filter(userid=request.user_uniq) |
166 | 219 |
|
167 | 220 |
since = util.isoparse(request.GET.get('changes-since')) |
221 |
|
|
168 | 222 |
if since: |
169 | 223 |
user_vms = user_vms.filter(updated__gte=since) |
170 | 224 |
if not user_vms: |
Also available in: Unified diff