3 function getIntentInfos(){
\r
6 url: "/restconf/config/nemo-intent:users/",
\r
10 success: function(data) {
\r
15 error: function(data) {
\r
17 console.log('Get IntentInfo Error!');
\r
18 // alert('Get IntentInfo Error!');
\r
25 function getIntentDatas(){
\r
26 var Datas=getIntentInfos();
\r
31 //return virtualDatas;
\r
35 // getIntentDatas();
\r
36 function getIntentInfoById(user_id,Data){
\r
38 if(!Data) Data=IntentInfos;
\r
40 if(typeof(Data)=='string'){
\r
41 var user_json = JSON.parse(Data);
\r
45 var user_json = Data;
\r
48 console.log(user_json);
\r
49 var user_info = user_json['users']['user'];
\r
50 for(var item in user_info){
\r
51 if(user_id==user_info[item]['user-id']){
\r
52 return user_info[item];
\r
57 function getIntentInfoByName(user_name,Data){
\r
59 if(typeof(Data)=='string'){
\r
60 var user_json = JSON.parse(Data);
\r
64 var user_json = Data;
\r
66 // console.log(user_json);
\r
67 var user_info = user_json['users']['user'];
\r
68 for(var item in user_info){
\r
69 if(user_name==user_info[item]['user-name']){
\r
70 return user_info[item];
\r
77 function lead_policy(src_group, dest_group, flow_count_temp, color, id, chain_name, src_name, dest_name) {
\r
78 var cir_r = parseInt(jQuery("#" + src_group + " circle:eq(0)").attr("r"));
\r
81 src_cx = parseInt(jQuery("#" + src_group + " circle:eq(0)").attr("cx"));
\r
82 src_cy = parseInt(jQuery("#" + src_group + " circle:eq(0)").attr("cy"));
\r
83 dest_cx = parseInt(jQuery("#" + dest_group + " circle:eq(0)").attr("cx"));
\r
84 dest_cy = parseInt(jQuery("#" + dest_group + " circle:eq(0)").attr("cy"));
\r
85 console.log(src_cx + " " + src_cy + " " + dest_cx + " " + dest_cy);
\r
88 var tri_h = dest_cx - src_cx;
\r
89 var tri_l = src_cy - dest_cy;
\r
90 var tri_s = Math.sqrt(tri_l * tri_l + tri_h * tri_h);
\r
91 var deg = Math.asin(tri_l / tri_s);
\r
92 console.log(tri_h + " " + tri_l + " " + tri_s);
\r
98 var offset = ((20 + (15 * parseInt(flow_count_temp))) / 180) * Math.PI;
\r
99 console.log("temp: " + flow_count_temp + " offset: " + offset);
\r
101 //calculate path possition
\r
102 var path_src_x, path_src_y, path_dest_x, path_dest_y, mid_x, mid_y, b_x, b_y;
\r
104 mid_x = src_cx + tri_h / 2;
\r
105 mid_y = src_cy - tri_l / 2;
\r
106 path_src_x = src_cx + cir_r * (Math.cos(offset + deg));
\r
107 path_src_y = src_cy - cir_r * (Math.sin(offset + deg));
\r
108 path_dest_x = dest_cx - (cir_r + 14) * (Math.cos(offset - deg));
\r
109 path_dest_y = dest_cy - (cir_r + 14) * (Math.sin(offset - deg));
\r
111 b_x = mid_x - (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.sin(deg));;
\r
112 b_y = mid_y - (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.cos(deg));
\r
114 b_x = mid_x + (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.sin(deg));
\r
115 b_y = mid_y - (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.cos(deg));
\r
119 mid_x = src_cx + tri_h / 2;
\r
120 mid_y = src_cy - tri_l / 2;
\r
121 path_src_x = src_cx - cir_r * (Math.cos(offset - deg));
\r
122 path_src_y = src_cy + cir_r * (Math.sin(offset - deg));
\r
123 path_dest_x = dest_cx + (cir_r + 14) * (Math.cos(-offset - deg));
\r
124 path_dest_y = dest_cy - (cir_r + 14) * (Math.sin(-offset - deg));
\r
126 b_x = mid_x - (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.sin(deg));
\r
127 b_y = mid_y + (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.cos(deg));
\r
129 b_x = mid_x + (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.sin(deg));
\r
130 b_y = mid_y + (80 + 30 * parseInt(flow_count_temp)) * Math.abs(Math.cos(deg));
\r
135 var path_title = document.createElementNS('http://www.w3.org/2000/svg', 'path');
\r
140 var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
\r
141 var path_main = jQuery(path).attr({
\r
143 node_start: src_name,
\r
144 node_end: dest_name,
\r
152 count: flow_count_temp,
\r
154 d: 'M' + path_src_x + " " + path_src_y + ' Q' + b_x + ' ' + b_y + ' ' + path_dest_x + ' ' + path_dest_y,
\r
158 'stroke-dasharray': "6,6",
\r
159 'marker-end': "url(#idArrow2)",
\r
160 'marker-mid': "url(#idtext2)"
\r
162 jQuery('#service_svg2').prepend(path_main);
\r
166 function get_path_color() {
\r
168 var num1 = Math.floor(Math.random() * 256);
\r
171 return num1.toString();
\r
175 function flow_get_end_name(src_ip, dest_ip) {
\r
176 // console.log(src_ip);
\r
177 // console.log(dest_ip);
\r
178 var host_name = ['', ''];
\r
179 if (typeof(phy_host_ip[src_ip]) != "undefined")
\r
180 host_name[0] = phy_host_ip[src_ip];
\r
182 for (var find_ip_cursor = 0; find_ip_cursor < jQuery("#service_svg2 g").length; find_ip_cursor++) {
\r
183 if (jQuery("#service_svg2 g:eq(" + find_ip_cursor + ")").attr("ip-prefix") == src_ip) {
\r
184 host_name[0] = jQuery("#service_svg2 g:eq(" + find_ip_cursor + ")").attr("id");
\r
189 if (typeof(phy_host_ip[dest_ip]) != "undefined")
\r
190 host_name[1] = phy_host_ip[dest_ip];
\r
192 for (var find_ip_cursor = 0; find_ip_cursor < jQuery("#service_svg2 g").length; find_ip_cursor++) {
\r
193 if (jQuery("#service_svg2 g:eq(" + find_ip_cursor + ")").attr("ip-prefix") == dest_ip) {
\r
194 host_name[1] = jQuery("#service_svg2 g:eq(" + find_ip_cursor + ")").attr("id");
\r
199 console.log(host_name[0] + " " + host_name[1]);
\r
205 function flow_get_group(src_ip, dest_ip) {
\r
206 var src_host_name = flow_get_end_name(src_ip, dest_ip)[0];
\r
207 var dest_host_name = flow_get_end_name(src_ip, dest_ip)[1];
\r
208 console.log(src_host_name);
\r
209 console.log(dest_host_name);
\r
210 var group_node = ['', ''];
\r
211 for (var i = 0; i < jQuery("#service_svg2 g").length; i++) {
\r
212 host_list = jQuery("#service_svg2 g:eq(" + i + ")").attr("sub").split(",");
\r
213 console.log(host_list);
\r
214 if (host_list[0] == '') {
\r
217 for (var j = 0; j < host_list.length; j++) {
\r
218 if (host_list[j] == src_host_name) {
\r
219 group_node[0] = jQuery("#service_svg2 g:eq(" + i + ")").attr("id");
\r
221 if (host_list[j] == dest_host_name) {
\r
222 group_node[1] = jQuery("#service_svg2 g:eq(" + i + ")").attr("id");
\r
225 if (group_node[0] != '' && group_node[1] != '')
\r
228 console.log("node: " + group_node[0] + " " + group_node[1]);
\r
232 function draw_flow_data(src_ip, dest_ip, flow_name) {
\r
233 var src_group = flow_get_group(src_ip, dest_ip)[0];
\r
234 var dest_group = flow_get_group(src_ip, dest_ip)[1];
\r
235 console.log(src_group);
\r
236 console.log(dest_group);
\r
238 var flow_count_temp = 0;
\r
241 for (var find_count = 0; find_count < jQuery("#service_svg2 path").length; find_count++) {
\r
242 if (jQuery("#service_svg2 path:eq(" + find_count + ")").attr("type") != "flow")
\r
244 if (jQuery("#service_svg2 path:eq(" + find_count + ")").attr("node_start") == src_group && jQuery("#service_svg2 path:eq(" + find_count + ")").attr("node_end") == dest_group) {
\r
245 if (flow_count_temp == jQuery("#service_svg2 path:eq(" + find_count + ")").attr("count")) {
\r
260 var cir_r = parseInt(jQuery("[id='" + src_group + "'] circle:eq(0)").attr("r"));
\r
264 src_cx = parseInt(jQuery("[id='" + src_group + "'] circle:eq(0)").attr("cx"));
\r
265 src_cy = parseInt(jQuery("[id='" + src_group + "'] circle:eq(0)").attr("cy"));
\r
266 dest_cx = parseInt(jQuery("[id='" + dest_group + "'] circle:eq(0)").attr("cx"));
\r
267 dest_cy = parseInt(jQuery("[id='" + dest_group + "'] circle:eq(0)").attr("cy"));
\r
268 console.log(src_cx + " " + src_cy + " " + dest_cx + " " + dest_cy);
\r
271 var tri_h = dest_cx - src_cx;
\r
272 var tri_l = src_cy - dest_cy;
\r
273 var tri_s = Math.sqrt(tri_l * tri_l + tri_h * tri_h);
\r
274 var deg = Math.asin(tri_l / tri_s);
\r
275 console.log(tri_h + " " + tri_l + " " + tri_s);
\r
281 var offset = ((20 + (15 * flow_count_temp)) / 180) * Math.PI;
\r
282 console.log("offset: " + offset);
\r
284 //calculate path possition
\r
285 var path_src_x, path_src_y, path_dest_x, path_dest_y, mid_x, mid_y, b_x, b_y;
\r
287 mid_x = src_cx + tri_h / 2;
\r
288 mid_y = src_cy - tri_l / 2;
\r
289 path_src_x = src_cx + cir_r * (Math.cos(offset + deg));
\r
290 path_src_y = src_cy - cir_r * (Math.sin(offset + deg));
\r
291 path_dest_x = dest_cx - (cir_r + 14) * (Math.cos(offset - deg));
\r
292 path_dest_y = dest_cy - (cir_r + 14) * (Math.sin(offset - deg));
\r
294 b_x = mid_x - (80 + 30 * flow_count_temp) * Math.abs(Math.sin(deg));;
\r
295 b_y = mid_y - (80 + 30 * flow_count_temp) * Math.abs(Math.cos(deg));
\r
297 b_x = mid_x + (80 + 30 * flow_count_temp) * Math.abs(Math.sin(deg));
\r
298 b_y = mid_y - (80 + 30 * flow_count_temp) * Math.abs(Math.cos(deg));
\r
302 mid_x = src_cx + tri_h / 2;
\r
303 mid_y = src_cy - tri_l / 2;
\r
304 path_src_x = src_cx - cir_r * (Math.cos(offset - deg));
\r
305 path_src_y = src_cy + cir_r * (Math.sin(offset - deg));
\r
306 path_dest_x = dest_cx + (cir_r + 14) * (Math.cos(-offset - deg));
\r
307 path_dest_y = dest_cy - (cir_r + 14) * (Math.sin(-offset - deg));
\r
309 b_x = mid_x - (80 + 30 * flow_count_temp) * Math.abs(Math.sin(deg));
\r
310 b_y = mid_y + (80 + 30 * flow_count_temp) * Math.abs(Math.cos(deg));
\r
312 b_x = mid_x + (80 + 30 * flow_count_temp) * Math.abs(Math.sin(deg));
\r
313 b_y = mid_y + (80 + 30 * flow_count_temp) * Math.abs(Math.cos(deg));
\r
318 var path_title = document.createElementNS('http://www.w3.org/2000/svg', 'path');
\r
323 var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
\r
324 var path_main = jQuery(path).attr({
\r
326 node_start: src_group,
\r
327 node_end: dest_group,
\r
336 count: flow_count_temp,
\r
337 d: 'M' + path_src_x + " " + path_src_y + ' Q' + b_x + ' ' + b_y + ' ' + path_dest_x + ' ' + path_dest_y,
\r
338 'stroke': "rgb(" + get_path_color() + "," + get_path_color() + "," + get_path_color() + ")",
\r
341 'stroke-dasharray': "6,6",
\r
342 'marker-end': "url(#idArrow2)",
\r
343 'marker-mid': "url(#idtext2)"
\r
346 jQuery(path).attr("stroke", "rgb(" + get_path_color() + "," + get_path_color() + "," + get_path_color() + ")");
\r
347 else if (ne_flag == 1)
\r
348 jQuery(path).attr("stroke", old_color);
\r
349 jQuery('#service_svg2').prepend(path_main);
\r
354 function draw_connection_data(conn_name, node_name_1, node_name_2, bandwidth) {
\r
355 // console.log(conn_name);
\r
356 // console.log(node_name_1);
\r
357 // console.log(node_name_2);
\r
358 // console.log(bandwidth);
\r
359 if (conn_name != null && typeof(conn_name) != "undefined")
\r
360 jQuery("#" + conn_name).remove();
\r
362 var node_cx_1 = jQuery("[id='" + node_name_1 + "_group']").attr("cx");
\r
363 var node_cy_1 = jQuery("[id='" + node_name_1 + "_group']").attr("cy");
\r
364 var node_cx_2 = jQuery("[id='" + node_name_2 + "_group']").attr("cx");
\r
365 var node_cy_2 = jQuery("[id='" + node_name_2 + "_group']").attr("cy");
\r
366 // console.log(node_cx_1);
\r
367 // console.log(node_cy_1);
\r
368 // console.log(node_cx_2);
\r
369 // console.log(node_cy_2);
\r
370 //var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
\r
371 var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
\r
372 var path_main = jQuery(path).attr({
\r
374 node_start: node_name_1,
\r
375 node_end: node_name_2,
\r
376 type: "connection",
\r
377 d: 'M' + node_cx_1 + " " + node_cy_1 + ' L' + node_cx_2 + ' ' + node_cy_2,
\r
379 'stroke-width': parseInt(bandwidth),
\r
382 jQuery('#service_svg2').prepend(path_main);
\r
388 function redraw_node_possition_data() {
\r
389 node_count = jQuery("#service_svg2 g").length;
\r
390 if (node_count == 1) {
\r
393 dis_x = x - jQuery("#service_svg2 g:eq(0) circle:eq(0)").attr("cx");
\r
394 dis_y = y - jQuery("#service_svg2 g:eq(0) circle:eq(0)").attr("cy");
\r
395 jQuery("#service_svg2 g:eq(0) circle:eq(0)").attr("cx", x);
\r
396 jQuery("#service_svg2 g:eq(0) circle:eq(0)").attr("cy", y);
\r
397 for (var j = 0; j < jQuery("#service_svg2 g:eq(0) rect").length; j++) {
\r
398 var last_x = parseInt(jQuery("#service_svg2 g:eq(0) rect:eq(" + j + ")").attr("x"));
\r
399 var last_y = parseInt(jQuery("#service_svg2 g:eq(0) rect:eq(" + j + ")").attr("y"));
\r
400 jQuery("#service_svg2 g:eq(0) rect:eq(" + j + ")").attr("x", last_x + dis_x);
\r
401 jQuery("#service_svg2 g:eq(0) rect:eq(" + j + ")").attr("y", last_y + dis_y);
\r
403 for (var j = 0; j < jQuery("#service_svg2 g:eq(0) text").length; j++) {
\r
404 jQuery("#service_svg2 g:eq(0) text:eq(" + j + ")").attr("x", parseInt(jQuery("#service_svg2 g:eq(0) text:eq(" + j + ")").attr("x")) + dis_x);
\r
405 jQuery("#service_svg2 g:eq(0) text:eq(" + j + ")").attr("y", parseInt(jQuery("#service_svg2 g:eq(0) text:eq(" + j + ")").attr("y")) + dis_y);
\r
411 var res = calculatePos(node_count);
\r
413 for (var i = 0; i < node_count; i++) {
\r
415 var x = 550 + Math.cos(deg) * r;
\r
416 var y = 450 - Math.sin(deg) * r;
\r
417 dis_x = x - parseInt(jQuery("#service_svg2 g:eq(" + i + ") circle:eq(0)").attr("cx"));
\r
418 dis_y = y - parseInt(jQuery("#service_svg2 g:eq(" + i + ") circle:eq(0)").attr("cy"));
\r
419 jQuery("#service_svg2 g:eq(" + i + ") circle:eq(0)").attr("cx", x);
\r
420 jQuery("#service_svg2 g:eq(" + i + ") circle:eq(0)").attr("cy", y);
\r
421 for (var j = 0; j < jQuery("#service_svg2 g:eq(" + i + ") rect").length; j++) {
\r
422 jQuery("#service_svg2 g:eq(" + i + ") rect:eq(" + j + ")").attr("x", parseInt(jQuery("#service_svg2 g:eq(" + i + ") rect:eq(" + j + ")").attr("x")) + dis_x);
\r
423 jQuery("#service_svg2 g:eq(" + i + ") rect:eq(" + j + ")").attr("y", parseInt(jQuery("#service_svg2 g:eq(" + i + ") rect:eq(" + j + ")").attr("y")) + dis_y);
\r
425 for (var j = 0; j < jQuery("#service_svg2 g:eq(" + i + ") text").length; j++) {
\r
426 jQuery("#service_svg2 g:eq(" + i + ") text:eq(" + j + ")").attr("x", parseInt(jQuery("#service_svg2 g:eq(" + i + ") text:eq(" + j + ")").attr("x")) + dis_x);
\r
427 jQuery("#service_svg2 g:eq(" + i + ") text:eq(" + j + ")").attr("y", parseInt(jQuery("#service_svg2 g:eq(" + i + ") text:eq(" + j + ")").attr("y")) + dis_y);
\r
434 function draw_group_data(node_name, node_number, node_list, node_type, ip) {
\r
435 // alert("type:"+node_type);
\r
436 var circle_x = 550;
\r
437 var circle_y = 450;
\r
438 if (node_number == 0) {
\r
439 var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
\r
440 var circle_main = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
\r
441 var inCircle1_main = jQuery(circle_main).attr({
\r
442 id: node_name + "_group",
\r
450 var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
451 var text1_main = jQuery(text1).attr({
\r
452 id: node_name + "_title1",
\r
456 'text-anchor': 'middle',
\r
458 "stroke-width": 0.8
\r
461 jQuery(text1).text(node_name);
\r
462 var text2 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
463 var text2_main = jQuery(text2).attr({
\r
464 id: node_name + "_title2",
\r
466 y: circle_y + 0 - 100,
\r
468 'text-anchor': 'middle'
\r
470 jQuery(text2).text(node_type);
\r
471 var g_main = jQuery(g).append(inCircle1_main);
\r
472 jQuery(g).append(text1_main);
\r
473 jQuery(g).append(text2_main);
\r
474 jQuery(g).attr("id", node_name);
\r
475 jQuery(g).attr("type", node_type);
\r
476 if (node_type != "ext-group")
\r
477 jQuery(g).attr("sub", "");
\r
479 jQuery(g).attr("sub", node_name);
\r
480 jQuery(g).attr("ip-prefix", ip);
\r
481 //ext_ip[jQuery("#ext-group_ip-prefix").val().trim()] = jQuery("#node_name").val().trim();
\r
484 if (node_type.indexOf("chain") > -1)
\r
485 jQuery(g).attr("flow", 0);
\r
486 console.log(g_main);
\r
487 jQuery('#service_svg2').append(g_main);
\r
488 console.log(jQuery('#service_svg2').html())
\r
489 } else if (node_number == 1) {
\r
490 var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
\r
491 var circle_main = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
\r
492 var inCircle1_main = jQuery(circle_main).attr({
\r
493 id: node_name + "_group",
\r
501 var host1 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
502 var host1_main = jQuery(host1).attr({
\r
512 var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
513 var text1_main = jQuery(text1).attr({
\r
514 id: node_name + "_title1",
\r
518 'text-anchor': 'middle',
\r
520 "stroke-width": 0.8
\r
522 jQuery(text1).text(node_name);
\r
523 var text2 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
524 var text2_main = jQuery(text2).attr({
\r
525 id: node_name + "_title2",
\r
527 y: (circle_y - 0 - 100),
\r
529 'text-anchor': 'middle'
\r
531 jQuery(text2).text(node_type);
\r
532 var text3 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
533 var text3_main = jQuery(text3).attr({
\r
534 id: node_list[0] + '_text',
\r
538 'text-anchor': 'middle'
\r
540 jQuery(text3).text(node_list[0]);
\r
541 var g_main = jQuery(g).append(inCircle1_main);
\r
542 jQuery(g).append(host1_main);
\r
543 jQuery(g).append(text1_main);
\r
544 jQuery(g).append(text2_main);
\r
545 jQuery(g).append(text3_main);
\r
546 jQuery(g).attr("id", node_name);
\r
547 jQuery(g).attr("type", node_type);
\r
548 jQuery(g).attr("sub", node_name,node_list[0]);
\r
549 if (node_type.indexOf("chain") > -1)
\r
550 jQuery(g).attr("flow", 0);
\r
551 if(ip) jQuery(g).attr("ip-prefix", ip);
\r
552 jQuery('#service_svg2').append(g_main);
\r
553 } else if (node_number == 2) {
\r
554 var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
\r
555 var circle_main = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
\r
556 var inCircle1_main = jQuery(circle_main).attr({
\r
557 id: node_name + "_group",
\r
565 var host1 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
566 var host1_main = jQuery(host1).attr({
\r
576 var host2 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
577 var host2_main = jQuery(host2).attr({
\r
587 var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
588 var text1_main = jQuery(text1).attr({
\r
589 id: node_name + "_title1",
\r
593 'text-anchor': 'middle',
\r
595 "stroke-width": 0.8
\r
597 jQuery(text1).text(node_name);
\r
598 var text2 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
599 var text2_main = jQuery(text2).attr({
\r
600 id: node_name + "_title2",
\r
602 y: circle_y - 0 - 100,
\r
604 'text-anchor': 'middle'
\r
606 jQuery(text2).text(node_type);
\r
607 var text3 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
608 var text3_main = jQuery(text3).attr({
\r
609 id: node_list[0] + "_text",
\r
613 'text-anchor': 'middle'
\r
615 jQuery(text3).text(node_list[0]);
\r
616 var text4 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
617 var text4_main = jQuery(text4).attr({
\r
618 id: node_list[1] + "_text",
\r
622 'text-anchor': 'middle'
\r
624 jQuery(text4).text(node_list[1]);
\r
625 var g_main = jQuery(g).append(inCircle1_main);
\r
626 jQuery(g).append(host1_main);
\r
627 jQuery(g).append(host2_main);
\r
628 jQuery(g).append(text1_main);
\r
629 jQuery(g).append(text2_main);
\r
630 jQuery(g).append(text3_main);
\r
631 jQuery(g).append(text4_main);
\r
632 jQuery(g).attr("id", node_name);
\r
633 jQuery(g).attr("type", node_type);
\r
634 jQuery(g).attr("sub", node_name,node_list[0] + "," + node_list[1]);
\r
635 if (node_type.indexOf("chain") > -1)
\r
636 jQuery(g).attr("flow", 0);
\r
637 if(ip) jQuery(g).attr("ip-prefix", ip);
\r
638 jQuery('#service_svg2').append(g);
\r
640 } else if (node_number == 3) {
\r
641 var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
\r
642 var circle_main = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
\r
643 var inCircle1_main = jQuery(circle_main).attr({
\r
644 id: node_name + "_group",
\r
652 var host1 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
653 var host1_main = jQuery(host1).attr({
\r
663 var host2 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
664 var host2_main = jQuery(host2).attr({
\r
674 var host3 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
675 var host3_main = jQuery(host3).attr({
\r
685 var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
686 var text1_main = jQuery(text1).attr({
\r
687 id: node_name + "_title1",
\r
691 'text-anchor': 'middle',
\r
693 "stroke-width": 0.8
\r
695 jQuery(text1).text(node_name);
\r
696 var text2 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
697 var text2_main = jQuery(text2).attr({
\r
698 id: node_name + "_title2",
\r
700 y: circle_y - 0 - 100,
\r
702 'text-anchor': 'middle'
\r
704 jQuery(text2).text(node_type);
\r
705 var text3 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
706 var text3_main = jQuery(text3).attr({
\r
707 id: node_list[0] + '_text',
\r
711 'text-anchor': 'middle'
\r
713 jQuery(text3).text(node_list[0]);
\r
714 var text4 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
715 var text4_main = jQuery(text4).attr({
\r
716 id: node_list[1] + '_text',
\r
720 'text-anchor': 'middle'
\r
722 jQuery(text4).text(node_list[1]);
\r
723 var text5 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
724 var text5_main = jQuery(text5).attr({
\r
725 id: node_list[2] + '_text',
\r
729 'text-anchor': 'middle'
\r
731 jQuery(text5).text(node_list[2]);
\r
732 var g_main = jQuery(g).append(inCircle1_main);
\r
733 jQuery(g).append(host1_main);
\r
734 jQuery(g).append(host2_main);
\r
735 jQuery(g).append(host3_main);
\r
736 jQuery(g).append(text1_main);
\r
737 jQuery(g).append(text2_main);
\r
738 jQuery(g).append(text3_main);
\r
739 jQuery(g).append(text4_main);
\r
740 jQuery(g).append(text5_main);
\r
741 jQuery(g).attr("id", node_name);
\r
742 jQuery(g).attr("type", node_type);
\r
743 jQuery(g).attr("sub", node_name,node_list[0] + "," + node_list[1] + "," + node_list[2]);
\r
744 if (node_type.indexOf("chain") > -1)
\r
745 jQuery(g).attr("flow", 0);
\r
746 jQuery('#service_svg2').append(g);
\r
748 else if(node_number >=4){
\r
749 var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
\r
750 var circle_main = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
\r
751 var inCircle1_main = jQuery(circle_main).attr({
\r
752 id: node_name + "_group",
\r
760 var host1 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
761 var host1_main = jQuery(host1).attr({
\r
771 var host2 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
772 var host2_main = jQuery(host2).attr({
\r
782 var host3 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
\r
783 var host3_main = jQuery(host3).attr({
\r
793 var text1 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
794 var text1_main = jQuery(text1).attr({
\r
795 id: node_name + "_title1",
\r
799 'text-anchor': 'middle',
\r
801 "stroke-width": 0.8
\r
803 jQuery(text1).text(node_name);
\r
804 var text2 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
805 var text2_main = jQuery(text2).attr({
\r
806 id: node_name + "_title2",
\r
808 y: circle_y - 0 - 100,
\r
810 'text-anchor': 'middle'
\r
812 jQuery(text2).text(node_type);
\r
813 var text3 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
814 var text3_main = jQuery(text3).attr({
\r
815 id: node_list[0] + '_text',
\r
819 'text-anchor': 'middle'
\r
821 jQuery(text3).text(node_list[0]);
\r
822 var text4 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
823 var text4_main = jQuery(text4).attr({
\r
824 id: node_list[1] + '_text',
\r
828 'text-anchor': 'middle'
\r
830 jQuery(text4).text(node_list[1]);
\r
831 var text5 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
832 var text5_main = jQuery(text5).attr({
\r
833 id: node_list[2] + '_text',
\r
837 'text-anchor': 'middle'
\r
839 jQuery(text5).text(node_list[2]);
\r
840 var text6 = document.createElementNS('http://www.w3.org/2000/svg', 'text');
\r
841 var text6_main = jQuery(text6).attr({
\r
842 id: node_list[2] + '_text',
\r
844 y: circle_y + 43+25,
\r
846 'text-anchor': 'middle'
\r
848 jQuery(text6).text("........");
\r
849 var g_main = jQuery(g).append(inCircle1_main);
\r
850 jQuery(g).append(host1_main);
\r
851 jQuery(g).append(host2_main);
\r
852 jQuery(g).append(host3_main);
\r
853 jQuery(g).append(text1_main);
\r
854 jQuery(g).append(text2_main);
\r
855 jQuery(g).append(text3_main);
\r
856 jQuery(g).append(text4_main);
\r
857 jQuery(g).append(text5_main);
\r
858 jQuery(g).append(text6_main);
\r
859 jQuery(g).attr("id", node_name);
\r
860 jQuery(g).attr("type", node_type);
\r
861 jQuery(g).attr("sub", node_name,node_list[0] + "," + node_list[1] + "," + node_list[2]);
\r
862 if (node_type.indexOf("chain") > -1)
\r
863 jQuery(g).attr("flow", 0);
\r
864 jQuery('#service_svg2').append(g);
\r
868 function analyjson_topo(user_data) {
\r
869 //jQuery("#service_svg2").show();
\r
870 //jQuery("#service_svg").hide();
\r
871 //jQuery("#graph").hide();
\r
872 //jQuery("#service_svg").empty();
\r
873 // var username = jQuery("#getUserName").val();
\r
875 var html_init = '<defs><marker id="idArrow2" viewBox="0 0 20 20" refX="0" refY="10" markerUnits="strokeWidth" markerWidth="6" markerHeight="15" orient="auto"><path d="M 0 0 L 20 10 L0 20 z"fill="purple"stroke="black"/> </marker>\
\r
876 <marker id="idtext2" viewBox="0 0 120 50" refX="0" refY="0" markerUnits="strokeWidth" markerWidth="20" markerHeight="20" orient="auto"><text style="font-family:sans-serif; font-size:14pt;" x="20" y="20">text</text></marker></defs>';
\r
877 jQuery("#service_svg2").html(html_init);
\r
880 // url: "/restconf/config/nemo-intent:users/",
\r
883 // dataType: "json",
\r
884 // success: function(data) {
\r
885 // console.log(data);
\r
886 // topo_data = data;
\r
888 // error: function(data) {
\r
889 // console.log(data);
\r
893 //var name_data_list = topo_data["users"]["user"];
\r
895 //var user_json_data, user_data;
\r
896 // for (var i in name_data_list) {
\r
897 // if (name_data_list[i]["user-name"] == username) {
\r
898 // user_data = name_data_list[i];
\r
899 // user_json_data = name_data_list[i]["objects"];
\r
904 var user_json_data = user_data['objects'];
\r
905 if (user_json_data == null)
\r
909 var host_list = [];
\r
910 for (var host_cursor in user_json_data["node"]) {
\r
911 if (user_json_data["node"][host_cursor]["node-type"] != "host")
\r
913 host_list[user_json_data["node"][host_cursor]["node-id"]] = user_json_data["node"][host_cursor]["node-name"];
\r
919 for (var vas_cursor in user_json_data["node"]) {
\r
920 if (user_json_data["node"][vas_cursor]["node-type"] != "cache" && user_json_data["node"][vas_cursor]["node-type"] != "fw" && user_json_data["node"][vas_cursor]["node-type"] != "lb")
\r
923 vas_list[user_json_data["node"][vas_cursor]["node-id"]] = user_json_data["node"][vas_cursor]["node-name"];
\r
929 var node_list = [];
\r
932 for (var lgroup_cursor in user_json_data["node"]) {
\r
933 if (user_json_data["node"][lgroup_cursor]["node-type"] != "l2-group" && user_json_data["node"][lgroup_cursor]["node-type"] != "l3-group")
\r
937 for (var sub_cursor in user_json_data["node"][lgroup_cursor]["sub-node"]) {
\r
938 sub_list[sub_count] = host_list[user_json_data["node"][lgroup_cursor]["sub-node"][sub_cursor]["node-id"]];
\r
942 var myProperty=user_json_data["node"][lgroup_cursor]['property'];
\r
944 for(var item in myProperty){
\r
945 if(myProperty[item]['property-name']=='ip-prefix'){
\r
946 ip=myProperty[item]['property-values']['string-value'][0]['value'];
\r
950 draw_group_data(user_json_data["node"][lgroup_cursor]["node-name"], sub_list.length, sub_list, user_json_data["node"][lgroup_cursor]["node-type"], ip);
\r
951 redraw_node_possition_data();
\r
952 node_list[user_json_data["node"][lgroup_cursor]["node-id"]] = user_json_data["node"][lgroup_cursor]["node-name"];
\r
955 for (var cgroup_cursor in user_json_data["node"]) {
\r
957 if (user_json_data["node"][cgroup_cursor]["node-type"] != "chain-group")
\r
962 for (var sub_cursor in user_json_data["node"][cgroup_cursor]["sub-node"]) {
\r
963 //alert(user_json_data["node"][cgroup_cursor]["sub-node"][sub_cursor]["node-id"]);
\r
964 sub_list[sub_count] = vas_list[user_json_data["node"][cgroup_cursor]["sub-node"][sub_cursor]["node-id"]];
\r
968 draw_group_data(user_json_data["node"][cgroup_cursor]["node-name"], sub_list.length, sub_list, user_json_data["node"][cgroup_cursor]["node-type"], "");
\r
969 redraw_node_possition_data();
\r
970 node_list[user_json_data["node"][cgroup_cursor]["node-id"]] = user_json_data["node"][cgroup_cursor]["node-name"];
\r
973 for (var egroup_cursor in user_json_data["node"]) {
\r
974 if (user_json_data["node"][egroup_cursor]["node-type"] != "ext-group")
\r
978 for (var ip_cursor in user_json_data["node"][egroup_cursor]["property"]) {
\r
979 if (user_json_data["node"][egroup_cursor]["property"][ip_cursor]["property-name"] == "ip-prefix") {
\r
980 ip = user_json_data["node"][egroup_cursor]["property"][ip_cursor]["property-values"]["string-value"][0]["value"];
\r
983 draw_group_data(user_json_data["node"][egroup_cursor]["node-name"], 0, '', user_json_data["node"][egroup_cursor]["node-type"], ip);
\r
984 redraw_node_possition_data();
\r
985 node_list[user_json_data["node"][egroup_cursor]["node-id"]] = user_json_data["node"][egroup_cursor]["node-name"];
\r
987 // console.log(node_list);
\r
989 for (var conn_cursor in user_json_data["connection"]) {
\r
990 var start_name = node_list[user_json_data["connection"][conn_cursor]["end-node"][0]["node-id"]];
\r
991 var end_name = node_list[user_json_data["connection"][conn_cursor]["end-node"][1]["node-id"]];
\r
993 if (user_json_data["connection"][conn_cursor]["property"] != null)
\r
994 bandwidth = user_json_data["connection"][conn_cursor]["property"][0]["property-values"]["int-value"][0]["value"];
\r
997 draw_connection_data(user_json_data["connection"][conn_cursor]["connection-name"], start_name, end_name, bandwidth / 100);
\r
1001 if (user_json_data["flow"] != null) {
\r
1002 var flow_list = [];
\r
1003 for (var flow_cursor in user_json_data["flow"]) {
\r
1004 var src_ip, dst_ip;
\r
1005 for (var match_cursor in user_json_data["flow"][flow_cursor]["match-item"]) {
\r
1006 if (user_json_data["flow"][flow_cursor]["match-item"][match_cursor]["match-item-name"] == "dst-ip") {
\r
1007 dst_ip = user_json_data["flow"][flow_cursor]["match-item"][match_cursor]["match-item-value"]["string-value"];
\r
1009 if (user_json_data["flow"][flow_cursor]["match-item"][match_cursor]["match-item-name"] == "src-ip") {
\r
1010 src_ip = user_json_data["flow"][flow_cursor]["match-item"][match_cursor]["match-item-value"]["string-value"];
\r
1013 draw_flow_data(src_ip, dst_ip, user_json_data["flow"][flow_cursor]["flow-name"]);
\r
1014 flow_list[user_json_data["flow"][flow_cursor]["flow-id"]] = user_json_data["flow"][flow_cursor]["flow-name"]
\r
1019 if (user_data["operations"] != null) {
\r
1020 for (var operation_cursor in user_data["operations"]["operation"]) {
\r
1021 var myTarget=user_data["operations"]["operation"][operation_cursor]["action"][0]['action-name'];
\r
1022 if(myTarget!='go-through') continue;
\r
1023 var flow_name = flow_list[user_data["operations"]["operation"][operation_cursor]["target-object"]];
\r
1024 var chain_name = node_list[user_data["operations"]["operation"][operation_cursor]["action"][0]["parameter-values"]["string-value"][0]["value"]];
\r
1025 var node_start = jQuery("[id='" + flow_name+"']").attr("node_start");
\r
1026 var node_end = jQuery("[id='" + flow_name+"']").attr("node_end");
\r
1029 for (var i = 0; i < jQuery("#service_svg2 path").length; i++) {
\r
1030 if (jQuery("#service_svg2 path:eq(" + i + ")").attr("type") == "connection") {
\r
1031 var node_name_old_1 = jQuery("#service_svg2 path:eq(" + i + ")").attr("node_start");
\r
1032 var node_name_old_2 = jQuery("#service_svg2 path:eq(" + i + ")").attr("node_end");
\r
1033 console.log("old:" + node_name_old_1 + " " + node_name_old_2);
\r
1034 if (((node_start == node_name_old_1) && (chain_name == node_name_old_2)) || ((node_start == node_name_old_2) && (chain_name == node_name_old_1))) {
\r
1039 for (var i = 0; i < jQuery("#service_svg2 path").length; i++) {
\r
1040 if (jQuery("#service_svg2 path:eq(" + i + ")").attr("type") == "connection") {
\r
1041 var node_name_old_1 = jQuery("#service_svg2 path:eq(" + i + ")").attr("node_start");
\r
1042 var node_name_old_2 = jQuery("#service_svg2 path:eq(" + i + ")").attr("node_end");
\r
1043 console.log("old:" + node_name_old_1 + " " + node_name_old_2);
\r
1044 if (((node_end == node_name_old_1) && (chain_name == node_name_old_2)) || ((node_end == node_name_old_2) && (chain_name == node_name_old_1))) {
\r
1049 if (c2_flag == 0 || c2_flag == 0) {
\r
1050 alert("No connection!");
\r
1053 lead_policy(node_start, chain_name, parseInt(jQuery("#" + flow_name).attr("count")), jQuery("#" + flow_name).attr("stroke"), flow_name + "_1", chain_name, node_start, node_end)
\r
1054 lead_policy(chain_name, node_end, parseInt(jQuery("#" + flow_name).attr("count")), jQuery("#" + flow_name).attr("stroke"), flow_name + "_2", chain_name, node_start, node_end)
\r
1055 jQuery("#" + flow_name).remove();
\r
1061 //parse nemo language
\r
1062 function parseNemoLan(userinfo) {
\r
1063 console.log(userinfo);
\r
1064 var userJsonString = JSON.stringify(userinfo);
\r
1065 var userJson = JSON.parse(userJsonString);
\r
1066 // console.log(userJson);
\r
1067 var user_data = userinfo;
\r
1068 //set host nodes connection and flow array array[id]-->name
\r
1071 var connection = [];
\r
1073 for (var i in user_data) {
\r
1074 // console.log(i);
\r
1075 if (i == 'objects') {
\r
1076 for (var j in user_data['objects']) {
\r
1077 // console.log(j);
\r
1078 if (j == 'node') {
\r
1079 for (var k in user_data[i][j]) {
\r
1080 nodes[user_data[i][j][k]["node-id"]] = user_data[i][j][k]["node-name"];
\r
1082 } else if (j == 'connection') {
\r
1083 for (var k in user_data[i][j]) {
\r
1084 connection[user_data[i][j][k]["connection-id"]] = user_data[i][j][k]["connection-name"];
\r
1086 } else if (j == 'flow') {
\r
1087 for (var k in user_data[i][j]) {
\r
1088 flow[user_data[i][j][k]["flow-id"]] = user_data[i][j][k]["flow-name"];
\r
1092 } else if (i == 'operations') {
\r
1096 console.log(nodes);
\r
1097 console.log(connection);
\r
1098 console.log(flow);
\r
1099 //parse and show nemo language(node connection flow operation)
\r
1100 for (var i in user_data["objects"]) {
\r
1101 if (i == "node") {
\r
1102 var nodeNemo = [];
\r
1103 var node = user_data["objects"]['node'];
\r
1104 for (var j in node) {
\r
1106 if(node[j]['node-type']=='host'){
\r
1107 nemo_str += "Import Node " + node[j]['node-name'] + " Type " + node[j]['node-type'];
\r
1109 nemo_str += "Create Node " + node[j]['node-name'] + " Type " + node[j]['node-type'];
\r
1111 var sub_node = node[j]['sub-node'];
\r
1112 if (sub_node && sub_node.length > 0) {
\r
1113 nemo_str += ' Contain ';
\r
1114 for (var k in sub_node) {
\r
1115 nemo_str += nodes[sub_node[k]['node-id']] + ',';
\r
1117 nemo_str = nemo_str.substring(0, nemo_str.length - 1);
\r
1119 var property = node[j]['property'];
\r
1120 if (property && property.length > 0) {
\r
1121 nemo_str += ' Property ';
\r
1122 for (var k in property) {
\r
1123 nemo_str += property[k]['property-name'] + ':"' + property[k]['property-values']['string-value'][0]['value'] + '",';
\r
1125 nemo_str = nemo_str.substring(0, nemo_str.length - 1);
\r
1127 nodeNemo.push(nemo_str);
\r
1129 for (var item in nodeNemo) {
\r
1130 // alert(jQuery("#nemo_str_show").html);
\r
1131 jQuery("#nemo_str_show").append('<p>'+nodeNemo[item]+' '+'</p>');
\r
1133 console.log(nodeNemo);
\r
1136 else if (i == "connection") {
\r
1137 var connectionNemo = [];
\r
1138 var conn = user_data["objects"]['connection'];
\r
1139 for (var j in conn) {
\r
1140 var nemo_str = "Create Connection " + conn[j]['connection-name'] + ' Type ' + conn[j]['connection-type'];
\r
1141 nemo_str += " Endnodes " + nodes[conn[j]['end-node'][0]['node-id']] + ',' + nodes[conn[j]['end-node'][1]['node-id']];
\r
1142 var property = conn[j]['property'];
\r
1143 if(property&&property.length>0){
\r
1144 nemo_str+=" Property";
\r
1145 for(var k in property){
\r
1146 nemo_str+=' '+property[k]['property-name']+':"';
\r
1147 var property_value=property[k]['property-values'];
\r
1148 console.log(property_value);
\r
1149 for(var v in property_value){//int-value or string-value
\r
1150 nemo_str+=property_value[v][0]['value'];
\r
1154 nemo_str = nemo_str.substring(0,nemo_str.length-1);
\r
1157 connectionNemo.push(nemo_str);
\r
1159 for (var item in connectionNemo) {
\r
1160 // alert(jQuery("#nemo_str_show").html);
\r
1161 jQuery("#nemo_str_show").append('<p>'+connectionNemo[item]+' '+'</p>');
\r
1163 console.log(connectionNemo);
\r
1166 else if (i = 'flow') {
\r
1167 var flowNemo = [];
\r
1168 var fl = user_data["objects"]['flow'];
\r
1169 for (var j in fl) {
\r
1170 var nemo_str = 'Create Flow ' + fl[j]['flow-name'];
\r
1171 var match = fl[j]["match-item"];
\r
1172 if (match && match.length > 0) {
\r
1173 nemo_str += " Match ";
\r
1174 for (var k in match) {
\r
1175 if(match[k]["match-item-value"]['string-value'])
\r
1176 nemo_str += match[k]['match-item-name'] + ':"' + match[k]["match-item-value"]['string-value'] + '",';
\r
1177 else if(match[k]["match-item-value"]['int-value'])
\r
1178 nemo_str += match[k]['match-item-name'] + ':' + match[k]["match-item-value"]['int-value'] + ',';
\r
1180 nemo_str = nemo_str.substring(0, nemo_str.length - 1);
\r
1182 flowNemo.push(nemo_str);
\r
1185 for (var item in flowNemo) {
\r
1186 // alert(jQuery("#nemo_str_show").html);
\r
1187 jQuery("#nemo_str_show").append('<p>'+flowNemo[item]+' '+'</p>');
\r
1189 console.log(flowNemo);
\r
1194 for (var i in user_data["operations"]) {
\r
1196 var operation = user_data["operations"]['operation'];
\r
1197 for (var j in operation) {
\r
1198 var nemo_str = 'Create Operation ' + operation[j]["operation-name"];
\r
1199 // console.log(flow[operation[j]['target-object']]);
\r
1200 nemo_str += ' Target ' + flow[operation[j]['target-object']];
\r
1201 var action = operation[j]['action'];
\r
1202 if (action && action.length > 0) {
\r
1203 nemo_str += " Action "
\r
1204 for (var k in action) {
\r
1205 if(action[k]['action-name']=='go-through')
\r
1206 nemo_str += action[k]['action-name'] + ":" + nodes[action[k]['parameter-values']["string-value"][0]['value']] + ',';
\r
1207 if(action[k]['action-name']=='deny')
\r
1208 nemo_str+= action[k]['action-name']+',';
\r
1210 nemo_str = nemo_str.substring(0, nemo_str.length - 1);
\r
1212 opNemo.push(nemo_str);
\r
1214 for (var item in opNemo) {
\r
1215 // alert(jQuery("#nemo_str_show").html);
\r
1216 jQuery("#nemo_str_show").append('<p>'+opNemo[item]+' '+'</p>');
\r
1218 console.log(opNemo);
\r