d437eab460954a4a21f59a751cece2778decc7e3
[nemo.git] / nemo-ui / src / main / resources / nemo / js / virNetwork.js
1 nodes_vir = new vis.DataSet();
2 edges_vir = new vis.DataSet();
3
4 var VirtualDatas='';
5
6  function getVirtualInfos(){
7          var virData=null;
8                 jQuery.ajax({
9                         url: "/restconf/config/generic-virtual-network:virtual-networks/", 
10                         type:"GET",
11                         dataType:"json",
12                         async: false,
13                         success: function(data){
14                                 if(data != null)
15                                 {
16                                         virData = data;
17                                         VirtualDatas=data;
18                                         console.log(VirtualDatas);
19                                 }
20                                 else
21                                         alert("No Virtual Data");
22                         },
23                         error:function(data){
24                         alert("Get Virtual Data Error!");
25                         }
26                 });
27          return virData;
28  }
29   getVirtualInfos();
30  function getVirtualDatas(){
31         var Datas=getVirtualInfos();
32         if(!Datas){
33         Datas=virtualJson;
34         }
35         VirtualDatas=Datas;
36         // console.log(VirtualDatas);
37         //return virtualDatas;
38  }
39
40 function getVirtualInfoById(user_id,Data){
41         if(!Data) Data=VirtualDatas;
42         if(!Data) return;
43         if(typeof(Data)=='string'){
44     var user_json = JSON.parse(Data);
45     }
46     else
47     {
48     var user_json = Data;
49     }
50
51     var user_info = user_json['virtual-networks']['virtual-network'];
52         for(var item in user_info){
53                 if(user_id==user_info[item]['user-id']){
54                         return user_info[item];
55                 }
56         }
57 }
58
59 var virtual_nodes=[];//virtual_node_id----->[vid_node_id,virtual_node_name]
60 function create_virtual_topo(topo_data,intentinfo,mappinginfo)
61 {
62         nodes_vir.clear();
63         edges_vir.clear();
64
65     console.log(topo_data);
66         var vitrual_network=topo_data;
67         if(vitrual_network!=null)
68         {       
69                 var vitrual_nodes_js=vitrual_network["virtual-nodes"]["virtual-node"];
70                 for(var i in vitrual_nodes_js)
71                 {
72                         virtual_nodes[vitrual_nodes_js[i]["node-id"]]=[(+i+1),vitrual_nodes_js[i]["node-type"]+(+i+1)];         
73                         nodes_vir.add({
74             id: +i+1,
75             label: vitrual_nodes_js[i]["node-type"]+(+i+1),
76             group: vitrual_nodes_js[i]["node-type"],
77             radius:20
78         });
79
80                 }
81        console.log(virtual_nodes);
82        var vitrual_links=vitrual_network["virtual-links"]["virtual-link"];
83        for(var j in vitrual_links){
84            edges_vir.add({
85             id: +j+1,
86             from: virtual_nodes[vitrual_links[j]["src-node-id"]][0],
87             to: virtual_nodes[vitrual_links[j]["dest-node-id"]][0],
88             length:150,
89             width:2,
90             color:{color:'ff4e00',highlight:'ff4e00',hover:'ff4e00'}
91         });
92        }
93         }
94
95 drawOthers(null,intentinfo,mappinginfo);
96 console.log(virtual_nodes);
97         var data= {
98                 nodes: nodes_vir,
99                 edges: edges_vir
100         };
101         var options = {
102                 /* physics: {
103                 repulsion: {
104                         centralGravity: 0,
105                         springLength: 200,//弹簧长度
106                         springConstant: 0,//弹簧常数
107                         nodeDistance: 0,
108                         damping: 0 //阻尼,减幅,衰减
109                 }}, */
110                 smoothCurves: false,
111                 stabilize: true,
112                 nodes: {
113           // default for all nodes
114                         fontSize:15,
115                         shape: 'dot',            
116                         radius:23,
117                         fixed:true
118                 },
119                 groups:{
120                         vswitch:{                               
121                                 color: {
122                                         border: 'black',
123                                         background: '#B0E2FF',                          
124                                 }
125             },                          
126                         vrouter:{
127                                 color: {
128                                         border: 'black',
129                                         background: '#7FFF00',
130                                 }       
131                         },
132                         fw:{
133                                 //shape:'box',
134                                 color: {
135                                         border: 'black',
136                                         background: '#EEEE00',
137                                 }       
138                         },
139                         lb:{
140                                 //shape:'box',
141                                 color: {
142                                         border: 'black',
143                                         background: '#C63300',
144                                 }       
145                         },
146                         cache:{
147                                 //shape:'box',
148                                 color: {
149                                         border: 'black',
150                                         background: '#FF00FF',
151                                 }       
152                         }
153                 }
154                 
155         };
156
157     console.log(nodes_vir.get().length);
158         var container = document.getElementById('vir_graph');
159         var graph = new vis.Graph(container, data, options);
160 }
161
162 function drawOthers(virtualData,intentData,mappingData){
163         console.log();
164         var user_nodes=intentData['objects']['node'];
165         var intentNodes=[];//intent_node_id(physical host or node id)------>[intent_node_type,intent_node_name]
166                 for (var i in user_nodes) {
167                         intentNodes[user_nodes[i]['node-id']]=[user_nodes[i]['node-type'],user_nodes[i]['node-name']];
168                 };
169         var mapping_nodes=mappingData['intent-vn-mapping-result'];
170         var mappingNodes=[];//intent-id(physical host or node id)------>virtual_node_id
171                 for (var i in mapping_nodes) {
172                         if(mapping_nodes[i]['intent-type']=='node')
173                         {
174                                 if(mapping_nodes[i]['virtual-resource'][0]['parent-virtual-resource-entity-id'])
175                                 mappingNodes[mapping_nodes[i]['intent-id']]=mapping_nodes[i]['virtual-resource'][0]['parent-virtual-resource-entity-id'];
176                         }
177                 };
178         console.log(intentNodes);
179         console.log(mappingNodes);
180         var nodelen= nodes_vir.get().length;
181         for(var item in intentNodes){
182                 virtual_nodes[item]=[parseInt(nodelen+1),'external-node'];
183                 if(intentNodes[item][0]=='host'){
184                         nodes_vir.add({
185             id: ++nodelen,
186             label: ''+intentNodes[item][1],
187             image: "src/app/nemo/images/host.png",
188             shape: 'image',
189                         fontSize: 15
190         });
191                 }
192                 else if(intentNodes[item][0]=='fw'){
193                         nodes_vir.add({
194             id: ++nodelen,
195             label: ''+intentNodes[item][1],
196             group: 'fw',
197             image: "src/app/nemo/images/fw.png",
198             shape: 'image',
199                         fontSize: 15
200         });
201                 }
202                 else if(intentNodes[item][0]=='lb'){
203                         nodes_vir.add({
204             id: ++nodelen,
205             label: ''+intentNodes[item][1],
206             group: 'lb',
207             image: "src/app/nemo/images/lb.png",
208             shape: 'image',
209                         fontSize: 15
210         });
211                 }
212                 else if(intentNodes[item][0]=='cache'){
213                         nodes_vir.add({
214             id: ++nodelen,
215             label: ''+intentNodes[item][1],
216             group: 'cache',
217             image: "src/app/nemo/images/cache.png",
218             shape: 'image',
219                         fontSize: 15
220         });
221                 }
222                 else if(intentNodes[item][0]=='ext-group'){
223                         nodes_vir.add({
224             id: ++nodelen,
225             label: ''+intentNodes[item][1],
226             image: "src/app/nemo/images/ext-group.png",
227             shape: 'image',
228                         fontSize: 15
229         });
230                 }
231                 else
232                         {
233                                 delete virtual_nodes[item];
234                         }
235         }
236         console.log(virtual_nodes);
237         for(var item in mappingNodes){
238                 // console.log(virtual_nodes[item]);
239                 if(!virtual_nodes[item]) continue;
240                 var edgeslen=edges_vir.get().length;
241                  edges_vir.add({
242             id: ++edgeslen,
243             from: virtual_nodes[item][0],
244             to: virtual_nodes[mappingNodes[item]][0],
245             length:150
246         });
247         }
248 }
249
250 var creataVirtualTables={
251 createVirtualNodeTable:function (id,Data){
252         // if(!Data) Data=VirtualDatas;
253         if(!Data) return;
254         var virtualnodes=[];
255         // virtualnodes=virtual_nodes;
256         virtualnodes=[];
257         var virtualNodes=Data['virtual-nodes']['virtual-node'];
258         console.log(virtualnodes);
259         for(var item in virtualNodes){
260                 //virtualnodes[virtualNodes[item]['node-id']]=[virtual_nodes[virtualNodes[item]['node-id']]]
261                 var virTableInfo={};
262                 virTableInfo.virtual_node_id=virtualNodes[item]['node-id'];
263                 virTableInfo.virtual_node_name=virtual_nodes[virtualNodes[item]['node-id']][1];
264                 virTableInfo.internal_port_number='';
265                 virTableInfo.external_port_number='';
266                 var virtualPort=virtualNodes[item]['virtual-port'];
267                 if(!virtualPort){virtualnodes.push(virTableInfo);continue;}
268                 var interPort=exterPort=0;
269                 for(var i in virtualPort){
270                         if(virtualPort[i]['port-type']=='internal') interPort++;
271                         if(virtualPort[i]['port-type']=='external') exterPort++;
272                 }
273                 virTableInfo.internal_port_number=interPort;
274                 virTableInfo.external_port_number=exterPort;
275                 virtualnodes.push(virTableInfo);
276
277         }
278                 console.log(virtualnodes);
279         // var Mynode=Data['virtual-network']['virtual-nodes']['virtual-node'];
280         // for(var i in Mynode){
281         //      if(true)
282         //      virtualnodes[Mynode[i]['node-id']]=Mynode[i]['node-type'];
283         // }
284         // console.log(virtualnodes);
285         jQuery("#"+id).find('tr:gt(1)').empty();
286         for(var item in virtualnodes){          
287                 // if(virtualnodes[item][1]!='external-node'){}
288
289             var $tr='<tr><td>'+virtualnodes[item].virtual_node_id+'</td><td>'+virtualnodes[item].virtual_node_name+'</td>'
290                 $tr+='<td>'+'virtual '+virtualnodes[item].virtual_node_name.substring(1,virtualnodes[item].virtual_node_name.length-1)+'</td>'
291                 $tr+='<td>'+virtualnodes[item].internal_port_number+'</td><td>'+virtualnodes[item].external_port_number+'</td>'
292                 $tr+='</tr>'
293                 jQuery("#"+id).append($tr);
294         }
295 },
296
297 createVirtualLinkTable:function (id,Data){
298         // if(!Data) Data=VirtualDatas;
299         if(!Data) return;
300         var virtuallinks=[];//virtual_link_id---->[src-node-id,dest-node-id,metric,bandwidth,delay]
301
302         var mylink=Data['virtual-links']['virtual-link'];
303         for(var i in mylink){
304                 if(!mylink[i]['metric'])
305                 virtuallinks[mylink[i]['link-id']]=[mylink[i]['src-node-id'],mylink[i]['dest-node-id'],'',mylink[i]['bandwidth'],mylink[i]['delay']];
306             else
307                 virtuallinks[mylink[i]['link-id']]=[mylink[i]['src-node-id'],mylink[i]['dest-node-id'],mylink[i]['metric'],mylink[i]['bandwidth'],mylink[i]['delay']];
308
309         }
310         console.log(virtuallinks);
311         jQuery("#"+id).find('tr:gt(1)').empty();
312         for(var item in virtuallinks){
313                 var $tr='<tr><td>'+item+'</td><td>'+virtual_nodes[virtuallinks[item][0]][1]+'-'+virtual_nodes[virtuallinks[item][1]][1]+'</td>'
314                  $tr+='<td>'+virtual_nodes[virtuallinks[item][0]][1]+'<td>'+virtual_nodes[virtuallinks[item][1]][1]+'</td>';
315                  $tr+='<td>'+virtuallinks[item][3]+'kbps'+'</td><td>'+virtuallinks[item][4]+'ms'+'</td>';
316                  $tr+='</tr>'
317                 jQuery("#"+id).append($tr);
318         }
319 }
320 }
321
322
323