blob: 9fddbc085713d27323d749df14fd8c52dfa3ebb2 [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>' +
176 ' <li><a href="#"' +
177 ' onclick="javascript:newAlarmNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\')">' +
178 ' <i class="far fa-bell"></i> New Alarm</a></li>' +
179 ' <li><a href="#"' +
180 ' onclick="javascript:exportMetricNs(\''+ row["short-name"] +'\', \''+row["_id"]+ '\')">' +
181 ' <i class="far fa-chart-bar"></i> Export metric</a></li>' +
182 ' <li class="divider"></li>' +
183 ' <li>' +
184 ' <a href="javascript:deleteNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\', true)">' +
185 ' <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>' +
186 ' </ul>' +
lombardofr4908f382018-09-10 11:36:06 +0200187 '</div>';
lombardofre6eb7432018-10-28 19:43:46 +0100188 return template;
lombardofr4908f382018-09-10 11:36:06 +0200189 },
lombardofr99a3d352019-01-06 19:41:34 +0100190 "targets": 5,
191 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200192 },
193
194 ],
lombardofrb58d5d82019-01-04 15:25:45 +0100195 'vnf': [
196 {
lombardofr4908f382018-09-10 11:36:06 +0200197 "render": function (data, type, row) {
198 return row["_id"];
199 },
200 "targets": 0
201 },
202 {
203 "render": function (data, type, row) {
lombardofrf6851722018-11-20 16:23:13 +0100204 return '<a href="javascript:openDescriptorView(\'vnfd\', \'' + row["vnfd-id"]+'\')"> ' + row["vnfd-ref"] +' </a>';
lombardofr4908f382018-09-10 11:36:06 +0200205 },
206 "targets": 1
207 },
208 {
209 "render": function (data, type, row) {
210 return row["member-vnf-index-ref"];
211 },
212 "targets": 2
213 },
214 {
215 "render": function (data, type, row) {
216 return row["nsr-id-ref"];
217 },
218 "targets": 3
219 },
220 {
221 "render": function (data, type, row) {
222 return moment.unix(row['created-time']).format('YYYY-MM-DD hh:mm:ss a');
223 },
224 "targets": 4
225 },
226 {
227 "render": function (data, type, row) {
lombardofre6eb7432018-10-28 19:43:46 +0100228 return '<div class="btn-group">' +
229 ' <button type="button" class="btn btn-default"' +
230 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
231 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
232 ' <i class="fa fa-info"></i>' +
233 ' </button>' +
lombardofr4908f382018-09-10 11:36:06 +0200234 ' </div>';
235 },
lombardofr99a3d352019-01-06 19:41:34 +0100236 "targets": 5,
237 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200238 },
lombardofrb58d5d82019-01-04 15:25:45 +0100239 ],
240 'pdu': [
241 {
242 "render": function (data, type, row) {
243 return row["_id"];
244 },
245 "targets": 0
246 },
247 {
248 "render": function (data, type, row) {
249 return row["name"];
250 },
251 "targets": 1
252 },
253 {
254 "render": function (data, type, row) {
255 return row["type"];
256 },
257 "targets": 2
258 },
259 {
260 "render": function (data, type, row) {
261 return row['_admin']['usageState'];
262 },
263 "targets": 3
264 },
265 {
266 "render": function (data, type, row) {
267 return moment.unix(row['_admin']['created']).format('YYYY-MM-DD hh:mm:ss a');
268 },
269 "targets": 4
270 },
271 {
272 "render": function (data, type, row) {
273 return '<div class="btn-group">' +
274 ' <button type="button" class="btn btn-default"' +
275 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
276 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
277 ' <i class="fa fa-info"></i>' +
278 ' </button>' +
279 '<button type="button" class="btn btn-default"' +
280 ' onclick="javascript:deletePDU(\''+ row["name"] +'\', \''+row["_id"]+'\')"' +
281 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
282 ' class="far fa-trash-alt"></i></button>'+
283 ' </div>';
284 },
lombardofr99a3d352019-01-06 19:41:34 +0100285 "targets": 5,
286 "orderable": false
lombardofrb58d5d82019-01-04 15:25:45 +0100287 }
lombardofrcf3a1f02019-01-21 15:43:52 +0100288 ],
289 'nsi': [
290 {
291 "render": function (data, type, row) {
292 return row["name"];
293 },
294 "targets": 0
295 },
296 {
297 "render": function (data, type, row) {
298 return row["_id"];
299 },
300 "targets": 1
301 },
302 {
303 "render": function (data, type, row) {
304 return row["nst-ref"];
305 },
306 "targets": 2
307 },
308 {
309 // "width": "5%",
310 "render": function (data, type, row) {
311 if(row["operational-status"] === 'failed')
312 return '<span class="label label-danger">'+ row["operational-status"] +'</span>';
313 if(row["operational-status"] === 'init')
314 return '<span class="label label-warning">'+ row["operational-status"] +'</span>';
315 if(row["operational-status"] === 'running')
316 return '<span class="label label-success">'+ row["operational-status"] +'</span>';
317 return ''+row["operational-status"]+'';
318 },
319 "targets": 3
320 },
321 {
322 // "width": "5%",
323 "render": function (data, type, row) {
324 if(row["config-status"] === 'failed')
325 return '<span class="label label-danger">'+ row["config-status"] +'</span>';
326 if(row["config-status"] === 'init')
327 return '<span class="label label-warning">'+ row["config-status"] +'</span>';
328 if(row["config-status"] === 'running')
329 return '<span class="label label-success">'+ row["config-status"] +'</span>';
330 if(row["config-status"] === 'configured')
331 return '<span class="label label-success">'+ row["config-status"] +'</span>';
332 return ''+row["operational-status"]+'';
333 },
334 "targets": 4
335 },
336 {
337 // "className": "ellipsis",
338 "render": function (data, type, row) {
339 return row["detailed-status"];
340 },
341 "targets": 5
342 },{
343 "width": "20%",
344 "render": function (data, type, row) {
345 var template = '<div class="btn-group">' +
346 ' <button type="button" class="btn btn-default"' +
347 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
348 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
349 ' <i class="fa fa-info"></i>';
350 /* if (row["operational-status"] === "running") {
351 template += ' <button type="button" class="btn btn-default"' +
352 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
353 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
354 ' <i class="fa fa-sitemap"></i>' +
355 ' </button>';
356 }else{
357 template += ' <button type="button" disabled class="btn btn-default"' +
358 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
359 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
360 ' <i class="fa fa-sitemap"></i>' +
361 ' </button>';
362 } */
363 template += ' <button type="button" class="btn btn-default"' +
364 ' onclick="javascript:deleteNsi(\''+ row["name"] +'\', \''+row["_id"]+'\')"' +
365 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
366 ' class="far fa-trash-alt"></i></button>' +
367 ' <button type="button" class="btn btn-default dropdown-toggle"' +
368 ' data-toggle="dropdown" aria-expanded="false">Actions' +
369 ' <span class="fa fa-caret-down"></span></button>' +
370 ' <ul class="dropdown-menu">' +
371 ' <li>' +
372 ' <a href="/instances/nsi/' +row["_id"] +'/operation">' +
373 ' <i class="fa fa-list"></i> History of operations</a></li>' +
374 ' <li class="divider"></li>' +
375
376 ' <li>' +
377 ' <a href="javascript:deleteNsi(\''+ row["name"] +'\', \''+row["_id"]+'\', true)">' +
378 ' <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>' +
379 ' </ul>' +
380 '</div>';
381 return template;
382 },
383 "targets": 5,
384 "orderable": false
385 },
386
lombardofr4908f382018-09-10 11:36:06 +0200387 ]
388 };
389 $(document).ready(function () {
lombardofrb58d5d82019-01-04 15:25:45 +0100390 table = $('#instances_table').DataTable({
lombardofr4908f382018-09-10 11:36:06 +0200391 responsive: true,
392 "ajax": {
393 "url": "/instances/" + instance_type + "/list/",
394 "dataSrc": function (json) {
395 return json.instances;
396 },
397 statusCode: {
398 401: function(){
399 console.log("no auth");
400 moveToLogin(window.location.pathname);
401 }
402 },
403 "error": function(hxr, error, thrown){
404 console.log(error);
405 }
406
407 },
408 "columns": row_builder[instance_type]
409 });
410
411
412 setInterval(function () {
413 table.ajax.reload();
414 }, 10000);
lombardofrb58d5d82019-01-04 15:25:45 +0100415
416
lombardofr4908f382018-09-10 11:36:06 +0200417 });
418
lombardofr45e33ee2018-07-18 19:22:37 +0200419 </script>
lombardoffb37bca2018-05-03 16:20:04 +0200420
421{% endblock %}
422
423{% block footer %}
424 {% include "footer.html" %}
425{% endblock %}