blob: 067dcb54c11eca8499dd6635d033c6029cedd7fa [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' %}
lombardof647aa2e2018-05-26 17:11:13 +020045 {% endif %}
lombardofdd73c0c2018-05-09 10:46:49 +020046
lombardoffb37bca2018-05-03 16:20:04 +020047 </div>
48
49 </div>
lombardofdd73c0c2018-05-09 10:46:49 +020050 {% include 'modal/instance_create.html' %}
lombardofrb58d5d82019-01-04 15:25:45 +010051 {% include 'modal/instance_create_pdu.html' %}
lombardofdd73c0c2018-05-09 10:46:49 +020052 {% include 'modal/instance_show.html' %}
53 {% include 'modal/instance_new_action.html' %}
lombardofr99624b52018-06-18 15:54:24 +020054 {% include 'modal/instance_new_alarm.html' %}
55 {% include 'modal/instance_export_metric.html' %}
lombardoffb37bca2018-05-03 16:20:04 +020056{% endblock %}
57
58{% block resource_block %}
59 {{ block.super }}
60 <!-- Utility JS -->
lombardofdd73c0c2018-05-09 10:46:49 +020061 <script src="/static/bower_components/select2/dist/js/select2.js"></script>
lombardoffb37bca2018-05-03 16:20:04 +020062 <script src="/static/bower_components/codemirror/lib/codemirror.js"></script>
63 <script src="/static/bower_components/codemirror/addon/fold/foldcode.js"></script>
64 <script src="/static/bower_components/codemirror/addon/fold/foldgutter.js"></script>
65 <script src="/static/bower_components/codemirror/addon/fold/brace-fold.js"></script>
66 <script src="/static/bower_components/codemirror/mode/javascript/javascript.js"></script>
67 <script src="/static/bower_components/codemirror/addon/search/searchcursor.js"></script>
68 <script src="/static/bower_components/codemirror/addon/search/search.js"></script>
69 <script src="/static/bower_components/codemirror/addon/dialog/dialog.js"></script>
70 <script src="/static/bower_components/codemirror/addon/display/autorefresh.js"></script>
71 <script src="/static/bower_components/codemirror/addon/edit/matchbrackets.js"></script>
72 <script src="/static/bower_components/codemirror/addon/edit/closebrackets.js"></script>
73 <script src="/static/bower_components/codemirror/addon/display/fullscreen.js"></script>
74 <script src="/static/bower_components/codemirror/keymap/sublime.js"></script>
75 <script src="/static/src/instancehandler/instance_list.js"></script>
lombardofdd73c0c2018-05-09 10:46:49 +020076 <script src="/static/src/instancehandler/instance_create.js"></script>
lombardofr45e33ee2018-07-18 19:22:37 +020077 <script src="/static/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
78 <script src="/static/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
79
80 <script>
lombardofrb58d5d82019-01-04 15:25:45 +010081 var table;
lombardofr4908f382018-09-10 11:36:06 +020082 var instance_type = '{{ type }}';
83 var row_builder = {
84 'ns': [
85 {
86 "render": function (data, type, row) {
87 return row["short-name"];
88 },
89 "targets": 0
90 },
91 {
92 "render": function (data, type, row) {
93 return row["_id"];
94 },
95 "targets": 1
96 },
97 {
98 "render": function (data, type, row) {
99 return row["nsd-name-ref"];
100 },
101 "targets": 2
102 },
103 {
104 // "width": "5%",
105 "render": function (data, type, row) {
106 if(row["operational-status"] === 'failed')
107 return '<span class="label label-danger">'+ row["operational-status"] +'</span>';
108 if(row["operational-status"] === 'init')
109 return '<span class="label label-warning">'+ row["operational-status"] +'</span>';
110 if(row["operational-status"] === 'running')
111 return '<span class="label label-success">'+ row["operational-status"] +'</span>';
112 return ''+row["operational-status"]+'';
113 },
114 "targets": 3
115 },
116 {
117 // "width": "5%",
118 "render": function (data, type, row) {
119 if(row["config-status"] === 'failed')
120 return '<span class="label label-danger">'+ row["config-status"] +'</span>';
121 if(row["config-status"] === 'init')
122 return '<span class="label label-warning">'+ row["config-status"] +'</span>';
123 if(row["config-status"] === 'running')
124 return '<span class="label label-success">'+ row["config-status"] +'</span>';
125 if(row["config-status"] === 'configured')
126 return '<span class="label label-success">'+ row["config-status"] +'</span>';
127 return ''+row["operational-status"]+'';
128 },
129 "targets": 4
130 },
131 {
132 // "className": "ellipsis",
133 "render": function (data, type, row) {
134 return row["detailed-status"];
135 },
136 "targets": 5
137 },{
lombardofre6eb7432018-10-28 19:43:46 +0100138 "width": "20%",
lombardofr4908f382018-09-10 11:36:06 +0200139 "render": function (data, type, row) {
lombardofre6eb7432018-10-28 19:43:46 +0100140 var template = '<div class="btn-group">' +
141 ' <button type="button" class="btn btn-default"' +
142 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
143 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
144 ' <i class="fa fa-info"></i>';
145 if (row["operational-status"] === "running") {
146 template += ' <button type="button" class="btn btn-default"' +
147 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
148 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
149 ' <i class="fa fa-sitemap"></i>' +
150 ' </button>';
151 }else{
152 template += ' <button type="button" disabled class="btn btn-default"' +
153 ' onclick="javascript:showTopology(\'' + instance_type + '\', \'' + row["_id"] + '\')"' +
154 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Graph">' +
155 ' <i class="fa fa-sitemap"></i>' +
156 ' </button>';
157 }
158 template += ' <button type="button" class="btn btn-default"' +
159 ' onclick="javascript:deleteNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\')"' +
160 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
161 ' class="far fa-trash-alt"></i></button>' +
162 ' <button type="button" class="btn btn-default dropdown-toggle"' +
163 ' data-toggle="dropdown" aria-expanded="false">Actions' +
164 ' <span class="fa fa-caret-down"></span></button>' +
165 ' <ul class="dropdown-menu">' +
166 ' <li><a href="#"' +
167 ' onclick="javascript:performAction(\''+ row["short-name"] +'\', \''+row["_id"]+'\')">' +
168 ' <i class="fa fa-magic"></i> Exec NS Primitive</a></li>' +
169 ' <li>' +
170 ' <a href="/instances/ns/' +row["_id"] +'/operation">' +
lombardofrc43f2852018-11-16 09:44:36 +0100171 ' <i class="fa fa-list"></i> History of operations</a></li>' +
lombardofre6eb7432018-10-28 19:43:46 +0100172 ' <li class="divider"></li>' +
173 ' <li><a href="#"' +
174 ' onclick="javascript:newAlarmNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\')">' +
175 ' <i class="far fa-bell"></i> New Alarm</a></li>' +
176 ' <li><a href="#"' +
177 ' onclick="javascript:exportMetricNs(\''+ row["short-name"] +'\', \''+row["_id"]+ '\')">' +
178 ' <i class="far fa-chart-bar"></i> Export metric</a></li>' +
179 ' <li class="divider"></li>' +
180 ' <li>' +
181 ' <a href="javascript:deleteNs(\''+ row["short-name"] +'\', \''+row["_id"]+'\', true)">' +
182 ' <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>' +
183 ' </ul>' +
lombardofr4908f382018-09-10 11:36:06 +0200184 '</div>';
lombardofre6eb7432018-10-28 19:43:46 +0100185 return template;
lombardofr4908f382018-09-10 11:36:06 +0200186 },
lombardofr99a3d352019-01-06 19:41:34 +0100187 "targets": 5,
188 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200189 },
190
191 ],
lombardofrb58d5d82019-01-04 15:25:45 +0100192 'vnf': [
193 {
lombardofr4908f382018-09-10 11:36:06 +0200194 "render": function (data, type, row) {
195 return row["_id"];
196 },
197 "targets": 0
198 },
199 {
200 "render": function (data, type, row) {
lombardofrf6851722018-11-20 16:23:13 +0100201 return '<a href="javascript:openDescriptorView(\'vnfd\', \'' + row["vnfd-id"]+'\')"> ' + row["vnfd-ref"] +' </a>';
lombardofr4908f382018-09-10 11:36:06 +0200202 },
203 "targets": 1
204 },
205 {
206 "render": function (data, type, row) {
207 return row["member-vnf-index-ref"];
208 },
209 "targets": 2
210 },
211 {
212 "render": function (data, type, row) {
213 return row["nsr-id-ref"];
214 },
215 "targets": 3
216 },
217 {
218 "render": function (data, type, row) {
219 return moment.unix(row['created-time']).format('YYYY-MM-DD hh:mm:ss a');
220 },
221 "targets": 4
222 },
223 {
224 "render": function (data, type, row) {
lombardofre6eb7432018-10-28 19:43:46 +0100225 return '<div class="btn-group">' +
226 ' <button type="button" class="btn btn-default"' +
227 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
228 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
229 ' <i class="fa fa-info"></i>' +
230 ' </button>' +
lombardofr4908f382018-09-10 11:36:06 +0200231 ' </div>';
232 },
lombardofr99a3d352019-01-06 19:41:34 +0100233 "targets": 5,
234 "orderable": false
lombardofr4908f382018-09-10 11:36:06 +0200235 },
lombardofrb58d5d82019-01-04 15:25:45 +0100236 ],
237 'pdu': [
238 {
239 "render": function (data, type, row) {
240 return row["_id"];
241 },
242 "targets": 0
243 },
244 {
245 "render": function (data, type, row) {
246 return row["name"];
247 },
248 "targets": 1
249 },
250 {
251 "render": function (data, type, row) {
252 return row["type"];
253 },
254 "targets": 2
255 },
256 {
257 "render": function (data, type, row) {
258 return row['_admin']['usageState'];
259 },
260 "targets": 3
261 },
262 {
263 "render": function (data, type, row) {
264 return moment.unix(row['_admin']['created']).format('YYYY-MM-DD hh:mm:ss a');
265 },
266 "targets": 4
267 },
268 {
269 "render": function (data, type, row) {
270 return '<div class="btn-group">' +
271 ' <button type="button" class="btn btn-default"' +
272 ' onclick="javascript:showInstanceDetails(\''+instance_type+'\', \''+row["_id"]+'\')"' +
273 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">' +
274 ' <i class="fa fa-info"></i>' +
275 ' </button>' +
276 '<button type="button" class="btn btn-default"' +
277 ' onclick="javascript:deletePDU(\''+ row["name"] +'\', \''+row["_id"]+'\')"' +
278 ' data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
279 ' class="far fa-trash-alt"></i></button>'+
280 ' </div>';
281 },
lombardofr99a3d352019-01-06 19:41:34 +0100282 "targets": 5,
283 "orderable": false
lombardofrb58d5d82019-01-04 15:25:45 +0100284 }
lombardofr4908f382018-09-10 11:36:06 +0200285 ]
286 };
287 $(document).ready(function () {
lombardofrb58d5d82019-01-04 15:25:45 +0100288 table = $('#instances_table').DataTable({
lombardofr4908f382018-09-10 11:36:06 +0200289 responsive: true,
290 "ajax": {
291 "url": "/instances/" + instance_type + "/list/",
292 "dataSrc": function (json) {
293 return json.instances;
294 },
295 statusCode: {
296 401: function(){
297 console.log("no auth");
298 moveToLogin(window.location.pathname);
299 }
300 },
301 "error": function(hxr, error, thrown){
302 console.log(error);
303 }
304
305 },
306 "columns": row_builder[instance_type]
307 });
308
309
310 setInterval(function () {
311 table.ajax.reload();
312 }, 10000);
lombardofrb58d5d82019-01-04 15:25:45 +0100313
314
lombardofr4908f382018-09-10 11:36:06 +0200315 });
316
lombardofr45e33ee2018-07-18 19:22:37 +0200317 </script>
lombardoffb37bca2018-05-03 16:20:04 +0200318
319{% endblock %}
320
321{% block footer %}
322 {% include "footer.html" %}
323{% endblock %}