Removes metric and alarm operations from NS instance actions
[osm/LW-UI.git] / instancehandler / template / instance_list.html
1 {% 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">
15 <link rel="stylesheet" href="/static/bower_components/select2/dist/css/select2.min.css">
16 <link rel="stylesheet" href="/static/css/lwuitable.css">
17 <link rel="stylesheet" href="/static/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
18 {% 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 }}
29 <li><a href="{% url 'instances:list' type=type %}">{{ type|upper }} Instances</a></li>
30 {% 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
39 {% if type == 'ns' %}
40 {% include 'instance_list_ns.html' %}
41 {% elif type == 'vnf' %}
42 {% include 'instance_list_vnf.html' %}
43 {% elif type == 'pdu' %}
44 {% include 'instance_list_pdu.html' %}
45 {% elif type == 'nsi' %}
46 {% include 'instance_list_nsi.html' %}
47 {% endif %}
48
49 </div>
50
51 </div>
52 {% include 'modal/instance_create.html' %}
53 {% include 'modal/instance_create_pdu.html' %}
54 {% include 'modal/instance_create_nsi.html' %}
55 {% include 'modal/instance_show.html' %}
56 {% include 'modal/instance_new_action.html' %}
57 {% include 'modal/instance_new_alarm.html' %}
58 {% include 'modal/instance_export_metric.html' %}
59 {% endblock %}
60
61 {% block resource_block %}
62 {{ block.super }}
63 <!-- Utility JS -->
64 <script src="/static/bower_components/select2/dist/js/select2.js"></script>
65 <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>
79 <script src="/static/src/instancehandler/instance_create.js"></script>
80 <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>
84 var table;
85 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 },{
141 "width": "20%",
142 "render": function (data, type, row) {
143 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">' +
174 ' <i class="fa fa-list"></i> History of operations</a></li>' +
175 ' <li class="divider"></li>' +
176 ' <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>' +
180 '</div>';
181 return template;
182 },
183 "targets": 5,
184 "orderable": false
185 },
186
187 ],
188 'vnf': [
189 {
190 "render": function (data, type, row) {
191 return row["_id"];
192 },
193 "targets": 0
194 },
195 {
196 "render": function (data, type, row) {
197 return '<a href="javascript:openDescriptorView(\'vnfd\', \'' + row["vnfd-id"]+'\')"> ' + row["vnfd-ref"] +' </a>';
198 },
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) {
221 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>' +
227 ' </div>';
228 },
229 "targets": 5,
230 "orderable": false
231 },
232 ],
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 },
278 "targets": 5,
279 "orderable": false
280 }
281 ],
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
380 ]
381 };
382 $(document).ready(function () {
383 table = $('#instances_table').DataTable({
384 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);
408
409
410 });
411
412 </script>
413
414 {% endblock %}
415
416 {% block footer %}
417 {% include "footer.html" %}
418 {% endblock %}