1 //var phy_hosts; move to nemo_main.js
2 //var phy_hosts; move to nemo_main.js
4 var phy_links,phy_nodes;
5 var host_count,node_count_phy,link_count;
8 nodes_phy = new vis.DataSet();
9 edges_phy = new vis.DataSet();
13 var phy_host_mac = [];
16 var physicalData=null;
17 jQuery(document).ready(function ($) {
19 if(!physicalData) return;
20 //analy_topo(physicalData);
21 //create_physical_topo();
24 function getPhysicalDatas(){
27 url: "/restconf/operational/generic-physical-network:physical-network/",
31 success: function(data){
37 //analy_topo(physicalData);
38 //create_physical_topo();
41 alert("No Physical Data");
44 console.log("Get Physical Data Error!");
45 // alert("Get Physical Data Error!");
51 function getPhysicalData(){
52 physicalData=getPhysicalDatas();
53 console.log(physicalData)
54 if(!physicalData) physicalData=physicalJson;
55 if(!physicalData) return;
59 function createPhysicalTopo(Data){
62 if(!Data) Data=physicalData;
64 var physicalHost=Data['physical-network']['physical-hosts'];
65 var physicalNode=Data['physical-network']['physical-nodes']['physical-node'];
66 var physicalLink=Data['physical-network']['physical-links'];
67 var myHost=[];//host_id----->[vis_node_id,connected node_id,host_name]
68 var myHostPort=[];//host_id----->host_port_id
69 var myNode=[];//node_id----->[vis_node_id,node_type]
70 var externalNode=[];//external_port_id----->[vis_node_id,node_id]
73 physicalHost=physicalHost['physical-host'];
74 for(var i in physicalHost){
75 myHost[physicalHost[i]['host-id']]=[+i+1,physicalHost[i]['node-id'],physicalHost[i]['host-name']];
76 myHostPort[physicalHost[i]['host-id']]=physicalHost[i]['port-id'];
79 label: physicalHost[i]["host-name"],
80 image: "src/app/nemo/images/host.png",
88 var nodeslen=nodes_phy.get().length;
89 for(var i in physicalNode){
90 myNode[physicalNode[i]['node-id']]=[nodeslen+1,physicalNode[i]['node-type'],''];
93 label: physicalNode[i]["node-type"]+physicalNode[i]["node-id"].split(":")[1],
94 group: physicalNode[i]["node-type"],
96 var physicalPort=physicalNode[i]['physical-port'];
98 for(var item in physicalPort){
99 if(physicalPort[item]['port-type']=='external')
102 for(var hostPort in myHostPort){
103 if(physicalPort[item]['port-id']==myHostPort[hostPort])
107 externalNode[physicalPort[item]['port-id']]=[physicalNode[i]['node-id']];
114 console.log(externalNode);
116 var externalnodecount=0;
117 for(var x in externalNode){externalnodecount++;}
118 if(externalnodecount>0){
119 var nodeslen=nodes_phy.get().length;
120 for(var i in externalNode){
121 externalNode[i]=[nodeslen+1,externalNode[i][0]];
124 label: 'ext-network',
125 image: "src/app/nemo/images/ext-group.png",
129 console.log(externalNode);
130 var edgeslen=edges_phy.get().length;
131 for(var i in externalNode){
134 from:externalNode[i][0],
135 to:myNode[externalNode[i][1]][0],
142 physicalLink=physicalLink['physical-link'];
143 var edgeslen=edges_phy.get().length;
144 for(var i in physicalLink){
148 from:myNode[physicalLink[i]['src-node-id']][0],
149 to:myNode[physicalLink[i]['dest-node-id']][0],
157 for(var x in physicalHost){hostcount++;}
159 var edgeslen=edges_phy.get().length;
160 console.log(edgeslen);
161 for(var i in myHost){
166 to:myNode[myHost[i][1]][0],
182 springLength: 200,//弹簧长度
183 springConstant: 0,//弹簧常数
185 damping: 0 //阻尼,减幅,衰减
190 // default for all nodes
204 background: '#B0E2FF',
211 background: '#7FFF00',
218 console.log(jQuery('#phy_graph').width());
219 jQuery('#phy_graph').width(800).height(500);
220 console.log(jQuery('#phy_graph').width());
221 var container = document.getElementById('phy_graph');
222 if(!container) return;
223 var graph = new vis.Graph(container, data, options_phy);
226 function analy_topo(topo_data)
234 if(topo_data["physical-network"]["physical-nodes"]!=null)
236 for(var i in topo_data["physical-network"]["physical-nodes"]["physical-node"])
238 var node_data_temp = [];
240 var json_temp = topo_data["physical-network"]["physical-nodes"]["physical-node"][i];
241 /* for(var key in json_temp)
243 data_temp = json_temp[key];
245 node_data_temp["node-id"] = json_temp["node-id"];
246 node_data_temp["node-type"] = json_temp["node-type"];
247 phy_nodes[node_count_phy] = node_data_temp;
252 if(topo_data["physical-network"]["physical-hosts"]!=null)
254 for(var i in topo_data["physical-network"]["physical-hosts"]["physical-host"])
256 //var host_name_temp = 'host' + i;
257 var host_data_temp = [];
259 var json_temp = topo_data["physical-network"]["physical-hosts"]["physical-host"][i];
260 /* for(var key in json_temp)
262 data_temp = json_temp[key];
264 host_data_temp["node-id"] = json_temp["node-id"];
265 host_data_temp["host-name"] = json_temp["host-name"];
266 host_data_temp["host-id"] = json_temp["host-id"];
267 phy_hosts[host_count] = host_data_temp;
269 host_id[json_temp["host-name"]] = json_temp["host-id"];
270 host_name[json_temp["host-id"]] = json_temp["host-name"];
271 phy_host_ip[json_temp["ip-addresses"]["ip-address"][0]] = json_temp["host-name"];
272 phy_host_mac[json_temp["mac-address"]] = json_temp["host-name"];
275 if(topo_data["physical-network"]["physical-links"]!=null)
277 for(var i in topo_data["physical-network"]["physical-links"]["physical-link"])
279 var link_data_temp = [];
281 var json_temp = topo_data["physical-network"]["physical-links"]["physical-link"][i];
282 /* for(var key in json_temp)
284 data_temp = json_temp[key];
286 link_data_temp["link-id"] = json_temp["link-id"];
287 link_data_temp["src-node-id"] = json_temp["src-node-id"];
288 link_data_temp["dest-node-id"] = json_temp["dest-node-id"];
289 phy_links[link_count] = link_data_temp;
295 function create_physical_topo()
302 console.log(phy_nodes);
303 for(var i in phy_nodes)
307 label: phy_nodes[i]["node-type"]+phy_nodes[i]["node-id"].split(":")[1],
308 group: phy_nodes[i]["node-type"],
310 node_map_id[phy_nodes[i]["node-id"]] = Node_phy_Id;
312 for(var i in phy_hosts)
316 label: phy_hosts[i]["host-name"],
317 image: "src/app/nemo/images/host.png",
322 for(var node_id_cursor in phy_nodes)
324 if(phy_nodes[node_id_cursor]["node-id"].indexOf(phy_hosts[i]["node-id"]) > -1)
326 to_full_id = phy_nodes[node_id_cursor]["node-id"];
333 to:node_map_id[to_full_id],
336 node_map_id[phy_nodes[i]["host-id"]] = Node_phy_Id;
338 for(var i in phy_links)
341 for(var node_id_cursor in phy_nodes)
343 if(phy_nodes[node_id_cursor]["node-id"].indexOf(phy_links[i]["src-node-id"]) > -1)
345 from_full_id = phy_nodes[node_id_cursor]["node-id"];
350 for(var node_id_cursor in phy_nodes)
352 if(phy_nodes[node_id_cursor]["node-id"].indexOf(phy_links[i]["dest-node-id"]) > -1)
354 to_full_id = phy_nodes[node_id_cursor]["node-id"];
360 from:node_map_id[from_full_id],
361 to:node_map_id[to_full_id],
375 springLength: 200,//弹簧长度
376 springConstant: 0,//弹簧常数
378 damping: 0 //阻尼,减幅,衰减
383 // default for all nodes
397 background: '#B0E2FF',
404 background: '#7FFF00',
411 console.log(jQuery('#phy_graph').width());
412 jQuery('#phy_graph').width(800).height(500);
413 console.log(jQuery('#phy_graph').width());
414 var container = document.getElementById('phy_graph');
415 if(!container) return;
416 var graph = new vis.Graph(container, data, options_phy)
419 var creataPhysicalTables={
420 createPhyicalNodeTable:function (id,Data){
421 if(!Data) Data=physicalData;
423 var physicalnodes=[];//physical_node_id---->[physical_node_type,[internal physical port number,external physical port number]]
424 var Mynode=Data['physical-network']['physical-nodes']['physical-node'];
425 for(var i in Mynode){
426 physicalnodes[Mynode[i]['node-id']]=[Mynode[i]['node-type']];
427 var physicalPorts=Mynode[i]['physical-port'];
428 if(!physicalPorts) {physicalnodes[Mynode[i]['node-id']].push(['','']);continue;}
429 var interPort=exterPort=0;
430 for(var port in physicalPorts){
431 if(physicalPorts[port]['port-type']=='internal') interPort++;
432 if(physicalPorts[port]['port-type']=='external') exterPort++;
434 physicalnodes[Mynode[i]['node-id']].push([interPort,exterPort]);
436 console.log(physicalnodes);
437 jQuery("#"+id).find('tr').remove();
438 for(var item in physicalnodes){
439 var $tr='<tr><td>'+item+'</td><td>'+physicalnodes[item][0]+'</td>'
440 $tr+='<td>'+physicalnodes[item][1][0]+'</td><td>'+physicalnodes[item][1][1]+'</td>'
442 jQuery("#"+id).append($tr);
444 var node_count = jQuery("#"+id).find('tr').length;
445 console.log("node_count:",node_count);
446 if(!node_count) return;
448 jQuery("div.tableBodyContainer:first").height(node_count*22+5);
451 jQuery("div.tableBodyContainer:first").height(200);
454 createPhyicalLinkTable:function (id,Data){
455 if(!Data) Data=physicalData;
457 var physaicallinks=[];
458 var mylink=Data['physical-network']['physical-links']['physical-link'];
459 for(var i in mylink){
460 if(!mylink[i]['metric'])
461 physaicallinks[mylink[i]['link-id']]=[mylink[i]['src-node-id'],mylink[i]['dest-node-id'],'',mylink[i]['bandwidth'],mylink[i]['delay']];
463 physaicallinks[mylink[i]['link-id']]=[mylink[i]['src-node-id'],mylink[i]['dest-node-id'],mylink[i]['metric'],mylink[i]['bandwidth'],mylink[i]['delay']];
466 console.log(physaicallinks);
467 jQuery("#"+id).find('tr').remove();
468 for(var item in physaicallinks){
469 var $tr='<tr><td>'+item+'</td><td>'+physaicallinks[item][0]+'</td>'
470 $tr+='<td>'+physaicallinks[item][1]+'</td><td>'+physaicallinks[item][2]+'</td>';
471 $tr+='<td>'+physaicallinks[item][3]+'kbps'+'</td><td>'+physaicallinks[item][4]+'ms'+'</td>';
473 jQuery("#"+id).append($tr);