blob: bee51165a63a2ac6a838a5a1a6e8038c41e179bf [file] [log] [blame]
lombardoffb37bca2018-05-03 16:20:04 +02001{% extends "base.html" %}
2{% load get %}
3{% load staticfiles %}
4
5
6
7{% block head_block %}
8 {{ block.super }}
9 <!-- Codemirror core CSS -->
lombardofre5a130a2019-07-15 09:17:59 +020010 <link rel="stylesheet" href="/static/node_modules/codemirror/lib/codemirror.css">
11 <link rel="stylesheet" href="/static/node_modules/codemirror/addon/fold/foldgutter.css" />
12 <link rel="stylesheet" href="/static/node_modules/codemirror/theme/neat.css">
13 <link rel="stylesheet" href="/static/node_modules/codemirror/addon/dialog/dialog.css">
14 <link rel="stylesheet" href="/static/node_modules/codemirror/addon/display/fullscreen.css">
15 <link rel="stylesheet" href="/static/node_modules/select2/dist/css/select2.min.css">
lombardof647aa2e2018-05-26 17:11:13 +020016 <link rel="stylesheet" href="/static/css/lwuitable.css">
lombardofre5a130a2019-07-15 09:17:59 +020017 <link rel="stylesheet" href="/static/node_modules/datatables.net-bs/css/dataTables.bootstrap.min.css">
lombardoffb37bca2018-05-03 16:20:04 +020018{% endblock %}
19{% block title_header_big %}
20 {{ block.super }}
21{% endblock %}
22{% block left_sidebar %}
23 {% include 'osm/osm_project_left_sidebar.html' %}
24{% endblock %}
25
26
27{% block breadcrumb_body %}
28 {{ block.super }}
lombardofr2ad37de2018-07-18 09:47:28 +020029 <li><a href="{% url 'instances:list' type=type %}">{{ type|upper }} Instances</a></li>
lombardoffb37bca2018-05-03 16:20:04 +020030{% endblock %}
31
32{% block content_body %}
33 {{ block.super }}
34 {% include 'modal/instance_create.html' %}
35 {% csrf_token %}
36 <div class="row">
37 <div class="col-md-12">
38
lombardof647aa2e2018-05-26 17:11:13 +020039 {% if type == 'ns' %}
40 {% include 'instance_list_ns.html' %}
41 {% elif type == 'vnf' %}
42 {% include 'instance_list_vnf.html' %}
lombardofrb58d5d82019-01-04 15:25:45 +010043 {% elif type == 'pdu' %}
44 {% include 'instance_list_pdu.html' %}
lombardofrcf3a1f02019-01-21 15:43:52 +010045 {% elif type == 'nsi' %}
46 {% include 'instance_list_nsi.html' %}
lombardof647aa2e2018-05-26 17:11:13 +020047 {% endif %}
lombardofdd73c0c2018-05-09 10:46:49 +020048
lombardoffb37bca2018-05-03 16:20:04 +020049 </div>
50
51 </div>
lombardofdd73c0c2018-05-09 10:46:49 +020052 {% include 'modal/instance_create.html' %}
lombardofrb58d5d82019-01-04 15:25:45 +010053 {% include 'modal/instance_create_pdu.html' %}
lombardofrcf3a1f02019-01-21 15:43:52 +010054 {% include 'modal/instance_create_nsi.html' %}
lombardofdd73c0c2018-05-09 10:46:49 +020055 {% include 'modal/instance_show.html' %}
56 {% include 'modal/instance_new_action.html' %}
lombardoffb37bca2018-05-03 16:20:04 +020057{% endblock %}
58
59{% block resource_block %}
60 {{ block.super }}
61 <!-- Utility JS -->
lombardofre5a130a2019-07-15 09:17:59 +020062 <script src="/static/node_modules/select2/dist/js/select2.js"></script>
63 <script src="/static/node_modules/codemirror/lib/codemirror.js"></script>
64 <script src="/static/node_modules/codemirror/addon/fold/foldcode.js"></script>
65 <script src="/static/node_modules/codemirror/addon/fold/foldgutter.js"></script>
66 <script src="/static/node_modules/codemirror/addon/fold/brace-fold.js"></script>
67 <script src="/static/node_modules/codemirror/mode/javascript/javascript.js"></script>
68 <script src="/static/node_modules/codemirror/addon/search/searchcursor.js"></script>
69 <script src="/static/node_modules/codemirror/addon/search/search.js"></script>
70 <script src="/static/node_modules/codemirror/addon/dialog/dialog.js"></script>
71 <script src="/static/node_modules/codemirror/addon/display/autorefresh.js"></script>
72 <script src="/static/node_modules/codemirror/addon/edit/matchbrackets.js"></script>
73 <script src="/static/node_modules/codemirror/addon/edit/closebrackets.js"></script>
74 <script src="/static/node_modules/codemirror/addon/display/fullscreen.js"></script>
75 <script src="/static/node_modules/codemirror/keymap/sublime.js"></script>
lombardoffb37bca2018-05-03 16:20:04 +020076 <script src="/static/src/instancehandler/instance_list.js"></script>
lombardofdd73c0c2018-05-09 10:46:49 +020077 <script src="/static/src/instancehandler/instance_create.js"></script>
lombardofre5a130a2019-07-15 09:17:59 +020078 <script src="/static/node_modules/datatables.net/js/jquery.dataTables.min.js"></script>
79 <script src="/static/node_modules/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
lombardofr45e33ee2018-07-18 19:22:37 +020080
81 <script>
lombardofrb58d5d82019-01-04 15:25:45 +010082 var table;
lombardofr4908f382018-09-10 11:36:06 +020083 var instance_type = '{{ type }}';
84 var row_builder = {
85 'ns': [
86 {
87 "render": function (data, type, row) {
88 return row["short-name"];
89 },
90 "targets": 0
91 },
92 {
93 "render": function (data, type, row) {
94 return row["_id"];
95 },
96 "targets": 1
97 },
98 {
99 "render": function (data, type, row) {
100 return row["nsd-name-ref"];
101 },
102 "targets": 2
103 },
104 {
105 // "width": "5%",
106 "render": function (data, type, row) {
107 if(row["operational-status"] === 'failed')
108 return '<span class="label label-danger">'+ row["operational-status"] +'</span>';
109 if(row["operational-status"] === 'init')
110 return '<span class="label label-warning">'+ row["operational-status"] +'</span>';
111 if(row["operational-status"] === 'running')
112 return '<span class="label label-success">'+ row["operational-status"] +'</span>';
113 return ''+row["operational-status"]+'';
114 },
115 "targets": 3
116 },
117 {
118 // "width": "5%",
119 "render": function (data, type, row) {
120 if(row["config-status"] === 'failed')
121 return '<span class="label label-danger">'+ row["config-status"] +'</span>';
122 if(row["config-status"] === 'init')
123 return '<span class="label label-warning">'+ row["config-status"] +'</span>';
124 if(row["config-status"] === 'running')
125 return '<span class="label label-success">'+ row["config-status"] +'</span>';
126 if(row["config-status"] === 'configured')
127 return '<span class="label label-success">'+ row["config-status"] +'</span>';
128 return ''+row["operational-status"]+'';
129 },
130 "targets": 4
131 },
132 {
133 // "className": "ellipsis",
134 "render": function (data, type, row) {
135 return row["detailed-status"];
136 },
137 "targets": 5
138 },{
lombardofre6eb7432018-10-28 19:43:46 +0100139 "width": "20%",
lombardofr4908f382018-09-10 11:36:06 +0200140 "render": function (data, type, row) {
lombardofre6eb7432018-10-28 19:43:46 +0100141 var template = '<div class="btn-group">' +
142 ' <button type="button" class="btn btn-default"' +
143 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
144 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
145 ' <i class="fa fa-info"></i>';
146 if (row["operational-status"] === "running") {
147 template += ' <button type="button" class="btn btn-default"' +
148 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
149 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
150 ' <i class="fa fa-sitemap"></i>' +
151 ' </button>';
152 }else{
153 template += ' <button type="button" disabled class="btn btn-default"' +
154 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
155 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
156 ' <i class="fa fa-sitemap"></i>' +
157 ' </button>';
158 }
159 template += ' <button type="button" class="btn btn-default"' +
160 ' onclick="javascript:deleteNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\')"' +
161 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
162 ' class="far fa-trash-alt"></i></button>' +
163 ' <button type="button" class="btn btn-default dropdown-toggle"' +
164 ' data-toggle="dropdown" aria-expanded="false">Actions' +
165 ' <span class="fa fa-caret-down"></span></button>' +
166 ' <ul class="dropdown-menu">' +
167 ' <li><a href="#"' +
168 ' onclick="javascript:performAction(\''+ row["short-name"] +'\', \''+row["_id"]+'\')">' +
169 ' <i class="fa fa-magic"></i> Exec NS Primitive</a></li>' +
170 ' <li>' +
171 ' <a href="/instances/ns/' +row["_id"] +'/operation">' +
lombardofrc43f2852018-11-16 09:44:36 +0100172 ' <i class="fa fa-list"></i> History of operations</a></li>' +
lombardofre6eb7432018-10-28 19:43:46 +0100173 ' <li class="divider"></li>' +
lombardofre6eb7432018-10-28 19:43:46 +0100174 ' <li>' +
175 ' <a href="javascript:deleteNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\', true)">' +
176 ' <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>' +
177 ' </ul>' +
lombardofr4908f382018-09-10 11:36:06 +0200178 '</div>';
lombardofre6eb7432018-10-28 19:43:46 +0100179 return template;
lombardofr4908f382018-09-10 11:36:06 +0200180 },
lombardofr99a3d352019-01-06 19:41:34 +0100181 "targets": 5,
182 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200183 },
184
185 ],
lombardofrb58d5d82019-01-04 15:25:45 +0100186 'vnf': [
187 {
lombardofr4908f382018-09-10 11:36:06 +0200188 "render": function (data, type, row) {
189 return row["_id"];
190 },
191 "targets": 0
192 },
193 {
194 "render": function (data, type, row) {
lombardofrf6851722018-11-20 16:23:13 +0100195 return '<a href="javascript:openDescriptorView(\'vnfd\', \'' + row["vnfd-id"]+'\')"> ' + row["vnfd-ref"] +' </a>';
lombardofr4908f382018-09-10 11:36:06 +0200196 },
197 "targets": 1
198 },
199 {
200 "render": function (data, type, row) {
201 return row["member-vnf-index-ref"];
202 },
203 "targets": 2
204 },
205 {
206 "render": function (data, type, row) {
207 return row["nsr-id-ref"];
208 },
209 "targets": 3
210 },
211 {
212 "render": function (data, type, row) {
213 return moment.unix(row['created-time']).format('YYYY-MM-DD hh:mm:ss a');
214 },
215 "targets": 4
216 },
217 {
218 "render": function (data, type, row) {
lombardofre6eb7432018-10-28 19:43:46 +0100219 return '<div class="btn-group">' +
220 ' <button type="button" class="btn btn-default"' +
221 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
222 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
223 ' <i class="fa fa-info"></i>' +
224 ' </button>' +
lombardofr4908f382018-09-10 11:36:06 +0200225 ' </div>';
226 },
lombardofr99a3d352019-01-06 19:41:34 +0100227 "targets": 5,
228 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200229 },
lombardofrb58d5d82019-01-04 15:25:45 +0100230 ],
231 'pdu': [
232 {
233 "render": function (data, type, row) {
234 return row["_id"];
235 },
236 "targets": 0
237 },
238 {
239 "render": function (data, type, row) {
240 return row["name"];
241 },
242 "targets": 1
243 },
244 {
245 "render": function (data, type, row) {
246 return row["type"];
247 },
248 "targets": 2
249 },
250 {
251 "render": function (data, type, row) {
252 return row['_admin']['usageState'];
253 },
254 "targets": 3
255 },
256 {
257 "render": function (data, type, row) {
258 return moment.unix(row['_admin']['created']).format('YYYY-MM-DD hh:mm:ss a');
259 },
260 "targets": 4
261 },
262 {
263 "render": function (data, type, row) {
264 return '<div class="btn-group">' +
265 ' <button type="button" class="btn btn-default"' +
266 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
267 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
268 ' <i class="fa fa-info"></i>' +
269 ' </button>' +
270 '<button type="button" class="btn btn-default"' +
271 ' onclick="javascript:deletePDU(\''+ row["name"] +'\', \''+row["_id"]+'\')"' +
272 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
273 ' class="far fa-trash-alt"></i></button>'+
274 ' </div>';
275 },
lombardofr99a3d352019-01-06 19:41:34 +0100276 "targets": 5,
277 "orderable": false
lombardofrb58d5d82019-01-04 15:25:45 +0100278 }
lombardofrcf3a1f02019-01-21 15:43:52 +0100279 ],
280 'nsi': [
281 {
282 "render": function (data, type, row) {
283 return row["name"];
284 },
285 "targets": 0
286 },
287 {
288 "render": function (data, type, row) {
289 return row["_id"];
290 },
291 "targets": 1
292 },
293 {
294 "render": function (data, type, row) {
295 return row["nst-ref"];
296 },
297 "targets": 2
298 },
299 {
300 // "width": "5%",
301 "render": function (data, type, row) {
302 if(row["operational-status"] === 'failed')
303 return '<span class="label label-danger">'+ row["operational-status"] +'</span>';
304 if(row["operational-status"] === 'init')
305 return '<span class="label label-warning">'+ row["operational-status"] +'</span>';
306 if(row["operational-status"] === 'running')
307 return '<span class="label label-success">'+ row["operational-status"] +'</span>';
308 return ''+row["operational-status"]+'';
309 },
310 "targets": 3
311 },
312 {
313 // "width": "5%",
314 "render": function (data, type, row) {
315 if(row["config-status"] === 'failed')
316 return '<span class="label label-danger">'+ row["config-status"] +'</span>';
317 if(row["config-status"] === 'init')
318 return '<span class="label label-warning">'+ row["config-status"] +'</span>';
319 if(row["config-status"] === 'running')
320 return '<span class="label label-success">'+ row["config-status"] +'</span>';
321 if(row["config-status"] === 'configured')
322 return '<span class="label label-success">'+ row["config-status"] +'</span>';
323 return ''+row["operational-status"]+'';
324 },
325 "targets": 4
326 },
327 {
328 // "className": "ellipsis",
329 "render": function (data, type, row) {
330 return row["detailed-status"];
331 },
332 "targets": 5
333 },{
334 "width": "20%",
335 "render": function (data, type, row) {
336 var template = '<div class="btn-group">' +
337 ' <button type="button" class="btn btn-default"' +
338 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
339 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
340 ' <i class="fa fa-info"></i>';
341 /* if (row["operational-status"] === "running") {
342 template += ' <button type="button" class="btn btn-default"' +
343 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
344 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
345 ' <i class="fa fa-sitemap"></i>' +
346 ' </button>';
347 }else{
348 template += ' <button type="button" disabled class="btn btn-default"' +
349 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
350 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
351 ' <i class="fa fa-sitemap"></i>' +
352 ' </button>';
353 } */
354 template += ' <button type="button" class="btn btn-default"' +
355 ' onclick="javascript:deleteNsi(\''+ row["name"] +'\', \''+row["_id"]+'\')"' +
356 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
357 ' class="far fa-trash-alt"></i></button>' +
358 ' <button type="button" class="btn btn-default dropdown-toggle"' +
359 ' data-toggle="dropdown" aria-expanded="false">Actions' +
360 ' <span class="fa fa-caret-down"></span></button>' +
361 ' <ul class="dropdown-menu">' +
362 ' <li>' +
363 ' <a href="/instances/nsi/' +row["_id"] +'/operation">' +
364 ' <i class="fa fa-list"></i> History of operations</a></li>' +
365 ' <li class="divider"></li>' +
366
367 ' <li>' +
368 ' <a href="javascript:deleteNsi(\''+ row["name"] +'\', \''+row["_id"]+'\', true)">' +
369 ' <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>' +
370 ' </ul>' +
371 '</div>';
372 return template;
373 },
374 "targets": 5,
375 "orderable": false
376 },
377
lombardofr4908f382018-09-10 11:36:06 +0200378 ]
379 };
380 $(document).ready(function () {
lombardofrb58d5d82019-01-04 15:25:45 +0100381 table = $('#instances_table').DataTable({
lombardofr4908f382018-09-10 11:36:06 +0200382 responsive: true,
383 "ajax": {
384 "url": "/instances/" + instance_type + "/list/",
385 "dataSrc": function (json) {
386 return json.instances;
387 },
388 statusCode: {
389 401: function(){
390 console.log("no auth");
391 moveToLogin(window.location.pathname);
392 }
393 },
394 "error": function(hxr, error, thrown){
395 console.log(error);
396 }
397
398 },
399 "columns": row_builder[instance_type]
400 });
401
402
403 setInterval(function () {
404 table.ajax.reload();
405 }, 10000);
lombardofrb58d5d82019-01-04 15:25:45 +0100406
407
lombardofr4908f382018-09-10 11:36:06 +0200408 });
409
lombardofr45e33ee2018-07-18 19:22:37 +0200410 </script>
lombardoffb37bca2018-05-03 16:20:04 +0200411
412{% endblock %}
413
414{% block footer %}
415 {% include "footer.html" %}
416{% endblock %}