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 alert("Get Physical Data Error!");
50 function getPhysicalData(){
51 physicalData=getPhysicalDatas();
52 console.log(physicalData)
53 if(!physicalData) physicalData=physicalJson;
54 if(!physicalData) return;
58 function createPhysicalTopo(Data){
61 if(!Data) Data=physicalData;
63 var physicalHost=Data['physical-network']['physical-hosts'];
64 var physicalNode=Data['physical-network']['physical-nodes']['physical-node'];
65 var physicalLink=Data['physical-network']['physical-links'];
66 var myHost=[];//host_id----->[vis_node_id,connected node_id,host_name]
67 var myHostPort=[];//host_id----->host_port_id
68 var myNode=[];//node_id----->[vis_node_id,node_type]
69 var externalNode=[];//external_port_id----->[vis_node_id,node_id]
72 physicalHost=physicalHost['physical-host'];
73 for(var i in physicalHost){
74 myHost[physicalHost[i]['host-id']]=[+i+1,physicalHost[i]['node-id'],physicalHost[i]['host-name']];
75 myHostPort[physicalHost[i]['host-id']]=physicalHost[i]['port-id'];
78 label: physicalHost[i]["host-name"],
79 image: "src/app/nemo/images/host.png",
87 var nodeslen=nodes_phy.get().length;
88 for(var i in physicalNode){
89 myNode[physicalNode[i]['node-id']]=[nodeslen+1,physicalNode[i]['node-type'],''];
92 label: physicalNode[i]["node-type"]+physicalNode[i]["node-id"].split(":")[1],
93 group: physicalNode[i]["node-type"],
95 var physicalPort=physicalNode[i]['physical-port'];
97 for(var item in physicalPort){
98 if(physicalPort[item]['port-type']=='external')
101 for(var hostPort in myHostPort){
102 if(physicalPort[item]['port-id']==myHostPort[hostPort])
106 externalNode[physicalPort[item]['port-id']]=[physicalNode[i]['node-id']];
113 console.log(externalNode);
115 var externalnodecount=0;
116 for(var x in externalNode){externalnodecount++;}
117 if(externalnodecount>0){
118 var nodeslen=nodes_phy.get().length;
119 for(var i in externalNode){
120 externalNode[i]=[nodeslen+1,externalNode[i][0]];
123 label: 'ext-network',
124 image: "src/app/nemo/images/ext-group.png",
128 console.log(externalNode);
129 var edgeslen=edges_phy.get().length;
130 for(var i in externalNode){
133 from:externalNode[i][0],
134 to:myNode[externalNode[i][1]][0],
141 physicalLink=physicalLink['physical-link'];
142 var edgeslen=edges_phy.get().length;
143 for(var i in physicalLink){
147 from:myNode[physicalLink[i]['src-node-id']][0],
148 to:myNode[physicalLink[i]['dest-node-id']][0],
156 for(var x in physicalHost){hostcount++;}
158 var edgeslen=edges_phy.get().length;
159 console.log(edgeslen);
160 for(var i in myHost){
165 to:myNode[myHost[i][1]][0],
181 springLength: 200,//弹簧长度
182 springConstant: 0,//弹簧常数
184 damping: 0 //阻尼,减幅,衰减
189 // default for all nodes
203 background: '#B0E2FF',
210 background: '#7FFF00',
217 console.log(jQuery('#phy_graph').width());
218 jQuery('#phy_graph').width(800).height(500);
219 console.log(jQuery('#phy_graph').width());
220 var container = document.getElementById('phy_graph');
221 if(!container) return;
222 var graph = new vis.Graph(container, data, options_phy);
225 function analy_topo(topo_data)
233 if(topo_data["physical-network"]["physical-nodes"]!=null)
235 for(var i in topo_data["physical-network"]["physical-nodes"]["physical-node"])
237 var node_data_temp = [];
239 var json_temp = topo_data["physical-network"]["physical-nodes"]["physical-node"][i];
240 /* for(var key in json_temp)
242 data_temp = json_temp[key];
244 node_data_temp["node-id"] = json_temp["node-id"];
245 node_data_temp["node-type"] = json_temp["node-type"];
246 phy_nodes[node_count_phy] = node_data_temp;
251 if(topo_data["physical-network"]["physical-hosts"]!=null)
253 for(var i in topo_data["physical-network"]["physical-hosts"]["physical-host"])
255 //var host_name_temp = 'host' + i;
256 var host_data_temp = [];
258 var json_temp = topo_data["physical-network"]["physical-hosts"]["physical-host"][i];
259 /* for(var key in json_temp)
261 data_temp = json_temp[key];
263 host_data_temp["node-id"] = json_temp["node-id"];
264 host_data_temp["host-name"] = json_temp["host-name"];
265 host_data_temp["host-id"] = json_temp["host-id"];
266 phy_hosts[host_count] = host_data_temp;
268 host_id[json_temp["host-name"]] = json_temp["host-id"];
269 host_name[json_temp["host-id"]] = json_temp["host-name"];
270 phy_host_ip[json_temp["ip-addresses"]["ip-address"][0]] = json_temp["host-name"];
271 phy_host_mac[json_temp["mac-address"]] = json_temp["host-name"];
274 if(topo_data["physical-network"]["physical-links"]!=null)
276 for(var i in topo_data["physical-network"]["physical-links"]["physical-link"])
278 var link_data_temp = [];
280 var json_temp = topo_data["physical-network"]["physical-links"]["physical-link"][i];
281 /* for(var key in json_temp)
283 data_temp = json_temp[key];
285 link_data_temp["link-id"] = json_temp["link-id"];
286 link_data_temp["src-node-id"] = json_temp["src-node-id"];
287 link_data_temp["dest-node-id"] = json_temp["dest-node-id"];
288 phy_links[link_count] = link_data_temp;
294 function create_physical_topo()
301 console.log(phy_nodes);
302 for(var i in phy_nodes)
306 label: phy_nodes[i]["node-type"]+phy_nodes[i]["node-id"].split(":")[1],
307 group: phy_nodes[i]["node-type"],
309 node_map_id[phy_nodes[i]["node-id"]] = Node_phy_Id;
311 for(var i in phy_hosts)
315 label: phy_hosts[i]["host-name"],
316 image: "src/app/nemo/images/host.png",
321 for(var node_id_cursor in phy_nodes)
323 if(phy_nodes[node_id_cursor]["node-id"].indexOf(phy_hosts[i]["node-id"]) > -1)
325 to_full_id = phy_nodes[node_id_cursor]["node-id"];
332 to:node_map_id[to_full_id],
335 node_map_id[phy_nodes[i]["host-id"]] = Node_phy_Id;
337 for(var i in phy_links)
340 for(var node_id_cursor in phy_nodes)
342 if(phy_nodes[node_id_cursor]["node-id"].indexOf(phy_links[i]["src-node-id"]) > -1)
344 from_full_id = phy_nodes[node_id_cursor]["node-id"];
349 for(var node_id_cursor in phy_nodes)
351 if(phy_nodes[node_id_cursor]["node-id"].indexOf(phy_links[i]["dest-node-id"]) > -1)
353 to_full_id = phy_nodes[node_id_cursor]["node-id"];
359 from:node_map_id[from_full_id],
360 to:node_map_id[to_full_id],
374 springLength: 200,//弹簧长度
375 springConstant: 0,//弹簧常数
377 damping: 0 //阻尼,减幅,衰减
382 // default for all nodes
396 background: '#B0E2FF',
403 background: '#7FFF00',
410 console.log(jQuery('#phy_graph').width());
411 jQuery('#phy_graph').width(800).height(500);
412 console.log(jQuery('#phy_graph').width());
413 var container = document.getElementById('phy_graph');
414 if(!container) return;
415 var graph = new vis.Graph(container, data, options_phy)
418 var creataPhysicalTables={
419 createPhyicalNodeTable:function (id,Data){
420 if(!Data) Data=physicalData;
422 var physicalnodes=[];//physical_node_id---->[physical_node_type,[internal physical port number,external physical port number]]
423 var Mynode=Data['physical-network']['physical-nodes']['physical-node'];
424 for(var i in Mynode){
425 physicalnodes[Mynode[i]['node-id']]=[Mynode[i]['node-type']];
426 var physicalPorts=Mynode[i]['physical-port'];
427 if(!physicalPorts) {physicalnodes[Mynode[i]['node-id']].push(['','']);continue;}
428 var interPort=exterPort=0;
429 for(var port in physicalPorts){
430 if(physicalPorts[port]['port-type']=='internal') interPort++;
431 if(physicalPorts[port]['port-type']=='external') exterPort++;
433 physicalnodes[Mynode[i]['node-id']].push([interPort,exterPort]);
435 console.log(physicalnodes);
436 jQuery("#"+id).find('tr').remove();
437 for(var item in physicalnodes){
438 var $tr='<tr><td>'+item+'</td><td>'+physicalnodes[item][0]+'</td>'
439 $tr+='<td>'+physicalnodes[item][1][0]+'</td><td>'+physicalnodes[item][1][1]+'</td>'
441 jQuery("#"+id).append($tr);
443 var node_count = jQuery("#"+id).find('tr').length;
444 console.log("node_count:",node_count);
445 if(!node_count) return;
447 jQuery("div.tableBodyContainer:first").height(node_count*22+5);
450 jQuery("div.tableBodyContainer:first").height(200);
453 createPhyicalLinkTable:function (id,Data){
454 if(!Data) Data=physicalData;
456 var physaicallinks=[];
457 var mylink=Data['physical-network']['physical-links']['physical-link'];
458 for(var i in mylink){
459 if(!mylink[i]['metric'])
460 physaicallinks[mylink[i]['link-id']]=[mylink[i]['src-node-id'],mylink[i]['dest-node-id'],'',mylink[i]['bandwidth'],mylink[i]['delay']];
462 physaicallinks[mylink[i]['link-id']]=[mylink[i]['src-node-id'],mylink[i]['dest-node-id'],mylink[i]['metric'],mylink[i]['bandwidth'],mylink[i]['delay']];
465 console.log(physaicallinks);
466 jQuery("#"+id).find('tr').remove();
467 for(var item in physaicallinks){
468 var $tr='<tr><td>'+item+'</td><td>'+physaicallinks[item][0]+'</td>'
469 $tr+='<td>'+physaicallinks[item][1]+'</td><td>'+physaicallinks[item][2]+'</td>';
470 $tr+='<td>'+physaicallinks[item][3]+'kbps'+'</td><td>'+physaicallinks[item][4]+'ms'+'</td>';
472 jQuery("#"+id).append($tr);