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