blob: 42b6fdac4016943193f3aff43155f911c0df3bb1 [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 -->
10 <link rel="stylesheet" href="/static/bower_components/codemirror/lib/codemirror.css">
11 <link rel="stylesheet" href="/static/bower_components/codemirror/addon/fold/foldgutter.css" />
12 <link rel="stylesheet" href="/static/bower_components/codemirror/theme/neat.css">
13 <link rel="stylesheet" href="/static/bower_components/codemirror/addon/dialog/dialog.css">
14 <link rel="stylesheet" href="/static/bower_components/codemirror/addon/display/fullscreen.css">
lombardofdd73c0c2018-05-09 10:46:49 +020015 <link rel="stylesheet" href="/static/bower_components/select2/dist/css/select2.min.css">
lombardof647aa2e2018-05-26 17:11:13 +020016 <link rel="stylesheet" href="/static/css/lwuitable.css">
lombardofr45e33ee2018-07-18 19:22:37 +020017 <link rel="stylesheet" href="/static/bower_components/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' %}
lombardofr99624b52018-06-18 15:54:24 +020057 {% include 'modal/instance_new_alarm.html' %}
58 {% include 'modal/instance_export_metric.html' %}
lombardoffb37bca2018-05-03 16:20:04 +020059{% endblock %}
60
61{% block resource_block %}
62 {{ block.super }}
63 <!-- Utility JS -->
lombardofdd73c0c2018-05-09 10:46:49 +020064 <script src="/static/bower_components/select2/dist/js/select2.js"></script>
lombardoffb37bca2018-05-03 16:20:04 +020065 <script src="/static/bower_components/codemirror/lib/codemirror.js"></script>
66 <script src="/static/bower_components/codemirror/addon/fold/foldcode.js"></script>
67 <script src="/static/bower_components/codemirror/addon/fold/foldgutter.js"></script>
68 <script src="/static/bower_components/codemirror/addon/fold/brace-fold.js"></script>
69 <script src="/static/bower_components/codemirror/mode/javascript/javascript.js"></script>
70 <script src="/static/bower_components/codemirror/addon/search/searchcursor.js"></script>
71 <script src="/static/bower_components/codemirror/addon/search/search.js"></script>
72 <script src="/static/bower_components/codemirror/addon/dialog/dialog.js"></script>
73 <script src="/static/bower_components/codemirror/addon/display/autorefresh.js"></script>
74 <script src="/static/bower_components/codemirror/addon/edit/matchbrackets.js"></script>
75 <script src="/static/bower_components/codemirror/addon/edit/closebrackets.js"></script>
76 <script src="/static/bower_components/codemirror/addon/display/fullscreen.js"></script>
77 <script src="/static/bower_components/codemirror/keymap/sublime.js"></script>
78 <script src="/static/src/instancehandler/instance_list.js"></script>
lombardofdd73c0c2018-05-09 10:46:49 +020079 <script src="/static/src/instancehandler/instance_create.js"></script>
lombardofr45e33ee2018-07-18 19:22:37 +020080 <script src="/static/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
81 <script src="/static/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
82
83 <script>
lombardofrb58d5d82019-01-04 15:25:45 +010084 var table;
lombardofr4908f382018-09-10 11:36:06 +020085 var instance_type = '{{ type }}';
86 var row_builder = {
87 'ns': [
88 {
89 "render": function (data, type, row) {
90 return row["short-name"];
91 },
92 "targets": 0
93 },
94 {
95 "render": function (data, type, row) {
96 return row["_id"];
97 },
98 "targets": 1
99 },
100 {
101 "render": function (data, type, row) {
102 return row["nsd-name-ref"];
103 },
104 "targets": 2
105 },
106 {
107 // "width": "5%",
108 "render": function (data, type, row) {
109 if(row["operational-status"] === 'failed')
110 return '<span class="label label-danger">'+ row["operational-status"] +'</span>';
111 if(row["operational-status"] === 'init')
112 return '<span class="label label-warning">'+ row["operational-status"] +'</span>';
113 if(row["operational-status"] === 'running')
114 return '<span class="label label-success">'+ row["operational-status"] +'</span>';
115 return ''+row["operational-status"]+'';
116 },
117 "targets": 3
118 },
119 {
120 // "width": "5%",
121 "render": function (data, type, row) {
122 if(row["config-status"] === 'failed')
123 return '<span class="label label-danger">'+ row["config-status"] +'</span>';
124 if(row["config-status"] === 'init')
125 return '<span class="label label-warning">'+ row["config-status"] +'</span>';
126 if(row["config-status"] === 'running')
127 return '<span class="label label-success">'+ row["config-status"] +'</span>';
128 if(row["config-status"] === 'configured')
129 return '<span class="label label-success">'+ row["config-status"] +'</span>';
130 return ''+row["operational-status"]+'';
131 },
132 "targets": 4
133 },
134 {
135 // "className": "ellipsis",
136 "render": function (data, type, row) {
137 return row["detailed-status"];
138 },
139 "targets": 5
140 },{
lombardofre6eb7432018-10-28 19:43:46 +0100141 "width": "20%",
lombardofr4908f382018-09-10 11:36:06 +0200142 "render": function (data, type, row) {
lombardofre6eb7432018-10-28 19:43:46 +0100143 var template = '<div class="btn-group">' +
144 ' <button type="button" class="btn btn-default"' +
145 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
146 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
147 ' <i class="fa fa-info"></i>';
148 if (row["operational-status"] === "running") {
149 template += ' <button type="button" class="btn btn-default"' +
150 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
151 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
152 ' <i class="fa fa-sitemap"></i>' +
153 ' </button>';
154 }else{
155 template += ' <button type="button" disabled class="btn btn-default"' +
156 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
157 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
158 ' <i class="fa fa-sitemap"></i>' +
159 ' </button>';
160 }
161 template += ' <button type="button" class="btn btn-default"' +
162 ' onclick="javascript:deleteNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\')"' +
163 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
164 ' class="far fa-trash-alt"></i></button>' +
165 ' <button type="button" class="btn btn-default dropdown-toggle"' +
166 ' data-toggle="dropdown" aria-expanded="false">Actions' +
167 ' <span class="fa fa-caret-down"></span></button>' +
168 ' <ul class="dropdown-menu">' +
169 ' <li><a href="#"' +
170 ' onclick="javascript:performAction(\''+ row["short-name"] +'\', \''+row["_id"]+'\')">' +
171 ' <i class="fa fa-magic"></i> Exec NS Primitive</a></li>' +
172 ' <li>' +
173 ' <a href="/instances/ns/' +row["_id"] +'/operation">' +
lombardofrc43f2852018-11-16 09:44:36 +0100174 ' <i class="fa fa-list"></i> History of operations</a></li>' +
lombardofre6eb7432018-10-28 19:43:46 +0100175 ' <li class="divider"></li>' +
lombardofre6eb7432018-10-28 19:43:46 +0100176 ' <li>' +
177 ' <a href="javascript:deleteNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\', true)">' +
178 ' <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>' +
179 ' </ul>' +
lombardofr4908f382018-09-10 11:36:06 +0200180 '</div>';
lombardofre6eb7432018-10-28 19:43:46 +0100181 return template;
lombardofr4908f382018-09-10 11:36:06 +0200182 },
lombardofr99a3d352019-01-06 19:41:34 +0100183 "targets": 5,
184 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200185 },
186
187 ],
lombardofrb58d5d82019-01-04 15:25:45 +0100188 'vnf': [
189 {
lombardofr4908f382018-09-10 11:36:06 +0200190 "render": function (data, type, row) {
191 return row["_id"];
192 },
193 "targets": 0
194 },
195 {
196 "render": function (data, type, row) {
lombardofrf6851722018-11-20 16:23:13 +0100197 return '<a href="javascript:openDescriptorView(\'vnfd\', \'' + row["vnfd-id"]+'\')"> ' + row["vnfd-ref"] +' </a>';
lombardofr4908f382018-09-10 11:36:06 +0200198 },
199 "targets": 1
200 },
201 {
202 "render": function (data, type, row) {
203 return row["member-vnf-index-ref"];
204 },
205 "targets": 2
206 },
207 {
208 "render": function (data, type, row) {
209 return row["nsr-id-ref"];
210 },
211 "targets": 3
212 },
213 {
214 "render": function (data, type, row) {
215 return moment.unix(row['created-time']).format('YYYY-MM-DD hh:mm:ss a');
216 },
217 "targets": 4
218 },
219 {
220 "render": function (data, type, row) {
lombardofre6eb7432018-10-28 19:43:46 +0100221 return '<div class="btn-group">' +
222 ' <button type="button" class="btn btn-default"' +
223 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
224 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
225 ' <i class="fa fa-info"></i>' +
226 ' </button>' +
lombardofr4908f382018-09-10 11:36:06 +0200227 ' </div>';
228 },
lombardofr99a3d352019-01-06 19:41:34 +0100229 "targets": 5,
230 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200231 },
lombardofrb58d5d82019-01-04 15:25:45 +0100232 ],
233 'pdu': [
234 {
235 "render": function (data, type, row) {
236 return row["_id"];
237 },
238 "targets": 0
239 },
240 {
241 "render": function (data, type, row) {
242 return row["name"];
243 },
244 "targets": 1
245 },
246 {
247 "render": function (data, type, row) {
248 return row["type"];
249 },
250 "targets": 2
251 },
252 {
253 "render": function (data, type, row) {
254 return row['_admin']['usageState'];
255 },
256 "targets": 3
257 },
258 {
259 "render": function (data, type, row) {
260 return moment.unix(row['_admin']['created']).format('YYYY-MM-DD hh:mm:ss a');
261 },
262 "targets": 4
263 },
264 {
265 "render": function (data, type, row) {
266 return '<div class="btn-group">' +
267 ' <button type="button" class="btn btn-default"' +
268 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
269 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
270 ' <i class="fa fa-info"></i>' +
271 ' </button>' +
272 '<button type="button" class="btn btn-default"' +
273 ' onclick="javascript:deletePDU(\''+ row["name"] +'\', \''+row["_id"]+'\')"' +
274 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
275 ' class="far fa-trash-alt"></i></button>'+
276 ' </div>';
277 },
lombardofr99a3d352019-01-06 19:41:34 +0100278 "targets": 5,
279 "orderable": false
lombardofrb58d5d82019-01-04 15:25:45 +0100280 }
lombardofrcf3a1f02019-01-21 15:43:52 +0100281 ],
282 'nsi': [
283 {
284 "render": function (data, type, row) {
285 return row["name"];
286 },
287 "targets": 0
288 },
289 {
290 "render": function (data, type, row) {
291 return row["_id"];
292 },
293 "targets": 1
294 },
295 {
296 "render": function (data, type, row) {
297 return row["nst-ref"];
298 },
299 "targets": 2
300 },
301 {
302 // "width": "5%",
303 "render": function (data, type, row) {
304 if(row["operational-status"] === 'failed')
305 return '<span class="label label-danger">'+ row["operational-status"] +'</span>';
306 if(row["operational-status"] === 'init')
307 return '<span class="label label-warning">'+ row["operational-status"] +'</span>';
308 if(row["operational-status"] === 'running')
309 return '<span class="label label-success">'+ row["operational-status"] +'</span>';
310 return ''+row["operational-status"]+'';
311 },
312 "targets": 3
313 },
314 {
315 // "width": "5%",
316 "render": function (data, type, row) {
317 if(row["config-status"] === 'failed')
318 return '<span class="label label-danger">'+ row["config-status"] +'</span>';
319 if(row["config-status"] === 'init')
320 return '<span class="label label-warning">'+ row["config-status"] +'</span>';
321 if(row["config-status"] === 'running')
322 return '<span class="label label-success">'+ row["config-status"] +'</span>';
323 if(row["config-status"] === 'configured')
324 return '<span class="label label-success">'+ row["config-status"] +'</span>';
325 return ''+row["operational-status"]+'';
326 },
327 "targets": 4
328 },
329 {
330 // "className": "ellipsis",
331 "render": function (data, type, row) {
332 return row["detailed-status"];
333 },
334 "targets": 5
335 },{
336 "width": "20%",
337 "render": function (data, type, row) {
338 var template = '<div class="btn-group">' +
339 ' <button type="button" class="btn btn-default"' +
340 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
341 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
342 ' <i class="fa fa-info"></i>';
343 /* if (row["operational-status"] === "running") {
344 template += ' <button type="button" class="btn btn-default"' +
345 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
346 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
347 ' <i class="fa fa-sitemap"></i>' +
348 ' </button>';
349 }else{
350 template += ' <button type="button" disabled class="btn btn-default"' +
351 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
352 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
353 ' <i class="fa fa-sitemap"></i>' +
354 ' </button>';
355 } */
356 template += ' <button type="button" class="btn btn-default"' +
357 ' onclick="javascript:deleteNsi(\''+ row["name"] +'\', \''+row["_id"]+'\')"' +
358 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
359 ' class="far fa-trash-alt"></i></button>' +
360 ' <button type="button" class="btn btn-default dropdown-toggle"' +
361 ' data-toggle="dropdown" aria-expanded="false">Actions' +
362 ' <span class="fa fa-caret-down"></span></button>' +
363 ' <ul class="dropdown-menu">' +
364 ' <li>' +
365 ' <a href="/instances/nsi/' +row["_id"] +'/operation">' +
366 ' <i class="fa fa-list"></i> History of operations</a></li>' +
367 ' <li class="divider"></li>' +
368
369 ' <li>' +
370 ' <a href="javascript:deleteNsi(\''+ row["name"] +'\', \''+row["_id"]+'\', true)">' +
371 ' <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>' +
372 ' </ul>' +
373 '</div>';
374 return template;
375 },
376 "targets": 5,
377 "orderable": false
378 },
379
lombardofr4908f382018-09-10 11:36:06 +0200380 ]
381 };
382 $(document).ready(function () {
lombardofrb58d5d82019-01-04 15:25:45 +0100383 table = $('#instances_table').DataTable({
lombardofr4908f382018-09-10 11:36:06 +0200384 responsive: true,
385 "ajax": {
386 "url": "/instances/" + instance_type + "/list/",
387 "dataSrc": function (json) {
388 return json.instances;
389 },
390 statusCode: {
391 401: function(){
392 console.log("no auth");
393 moveToLogin(window.location.pathname);
394 }
395 },
396 "error": function(hxr, error, thrown){
397 console.log(error);
398 }
399
400 },
401 "columns": row_builder[instance_type]
402 });
403
404
405 setInterval(function () {
406 table.ajax.reload();
407 }, 10000);
lombardofrb58d5d82019-01-04 15:25:45 +0100408
409
lombardofr4908f382018-09-10 11:36:06 +0200410 });
411
lombardofr45e33ee2018-07-18 19:22:37 +0200412 </script>
lombardoffb37bca2018-05-03 16:20:04 +0200413
414{% endblock %}
415
416{% block footer %}
417 {% include "footer.html" %}
418{% endblock %}