1 | xhr=new XMLHttpRequest();function requestAJAX(url,parametros,callbackFunction){xhr.open("POST",url,true);xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');document.getElementById("table_ous").setAttribute("style","cursor:progress;");document.body.setAttribute("style","cursor:progress;");xhr.send(parametros);xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var respuesta=JSON.parse(xhr.responseText);document.getElementById("table_ous").setAttribute("style","cursor:pointer;");document.body.style.cursor="pointer";if(respuesta.error===undefined){callbackFunction(respuesta);}else{alert(respuesta.error);refresh_page();}}}} |
---|
2 | function insert_disponibles_before_pcs(disponibles_info){var table=document.getElementById("table_lab_"+disponibles_info.lab_id);var new_row=table.insertRow();new_row.setAttribute("style","display:block;");new_row.setAttribute("id","disponibles_before_pcs_lab_"+disponibles_info.lab_id);new_row.setAttribute("class","disponible");var new_cell=new_row.insertCell();new_cell.innerHTML=disponibles_info.disponibles+" de "+disponibles_info.total+" equipos disponibles";} |
---|
3 | function delete_disponibles(){delete_by_class('disponible');} |
---|
4 | function delete_disponible_before_images(lab_id){document.getElementById("disponibles_before_images_lab_"+lab_id).remove();} |
---|
5 | function hide_footer(){var footers=document.getElementsByClassName('footer');footers[0].style.display='none';} |
---|
6 | function show_footer(){var footers=document.getElementsByClassName('footer');footers[0].style.display='block';} |
---|
7 | function show_Labs(labs){delete_labs();labs.forEach(show_Lab);} |
---|
8 | function delete_labs(){delete_by_class('lab');} |
---|
9 | function show_Lab(lab,index){delete_disponibles();var table=document.getElementById("table_ou_"+lab.ou.id);table.setAttribute("style","background:NONE;");var new_row=table.insertRow();new_row.setAttribute("id","lab_"+lab.id);new_row.setAttribute("class","lab");new_row.setAttribute("style","display:block;");var htmlRow="<td width='16'>"+ |
---|
10 | "<img src='../static/images/aula.png' "+ |
---|
11 | "data-ou='"+lab.ou.id+"' "+ |
---|
12 | "data-lab_id='"+lab.id+"' onClick='get_remotePCs(event)'>"+ |
---|
13 | "</td>"+ |
---|
14 | "<td>"+ |
---|
15 | "<table id='table_lab_"+lab.id+"'>"+ |
---|
16 | "<tbody>"+ |
---|
17 | "<tr>"+ |
---|
18 | "<td>"+ |
---|
19 | "<span class='labs' "+ |
---|
20 | "data-ou='"+lab.ou.id+"' "+ |
---|
21 | "data-lab_id='"+lab.id+"' onClick='get_remotePCs(event)'>"+ |
---|
22 | lab.name+"</span>"+ |
---|
23 | "</td>"+ |
---|
24 | "</tr>" |
---|
25 | if(typeof(lab.status)!=='undefined'){console.log(lab);htmlRow=htmlRow+"<tr>"+ |
---|
26 | "<td>"+ |
---|
27 | "<span id='disponibles_before_images_lab_"+lab.id+"' class='disponible' "+ |
---|
28 | "data-ou='"+lab.ou.id+"' "+ |
---|
29 | "data-lab_id='"+lab.id+"' onClick='get_remotePCs(event)'> "+ |
---|
30 | lab.status.clients_disponibles+" de "+lab.status.clients_total+" equipos disponibles</span>"+ |
---|
31 | "</td>"+ |
---|
32 | "</tr>"} |
---|
33 | htmlRow=htmlRow+"</tbody>"+"</table>"+"</td>" |
---|
34 | new_row.innerHTML=htmlRow;} |
---|
35 | function reset_modal(){document.getElementById("text_consolelog").value='';document.getElementById("buttonConsole").style.display='none';reset_progress_bar();delete_pcs();delete_images();delete_disponibles();} |
---|
36 | function show_images(image,index){img=getImg_sys(image.os);var table=document.getElementById("table_lab_"+image.lab_id);var new_row=table.insertRow();new_row.setAttribute("class","image");var new_cell=new_row.insertCell();new_cell.setAttribute("style","text-align: right;");new_cell.innerHTML="<img class='status_equipo' height='30px' src='../static/images/"+img+"' "+ |
---|
37 | "data-lab_id='"+image.lab_id+"'>" |
---|
38 | new_cell=new_row.insertCell();new_cell.innerHTML="<span> "+image.os+" </span>" |
---|
39 | new_cell=new_row.insertCell();new_cell.innerHTML="<span><button type='button' class='btn btn-outline-secondary'"+ |
---|
40 | "onClick='do_assign_reserve(event)'"+ |
---|
41 | "data-ou_id='"+image.ou_id+"'"+ |
---|
42 | "data-image_id='"+image.id+"'"+ |
---|
43 | "data-lab_id='"+image.lab_id+"'"+ |
---|
44 | ">Reservar</button></span>"} |
---|
45 | function delete_images(){delete_by_class('image');} |
---|
46 | function getImg_sys(sys){var os=sys.split(" ")[0];var img;switch(os){case 'Windows':img='windows.png' |
---|
47 | break;case 'OSX':img='osx.png' |
---|
48 | break;default:img='tux.png' |
---|
49 | break;} |
---|
50 | return img;} |
---|
51 | function show_PCs(PCs){reset_style_table_lab(PCs.images_info[0].lab_id) |
---|
52 | delete_pcs();delete_images();delete_spaces();hide_footer();PCs.images_info.forEach(show_images);if(PCs.images_info[0]!==undefined){insert_space_table_lab(PCs.images_info[0].lab_id);} |
---|
53 | PCs.PCs_info.forEach(show_PC);cursor_wait('pointer');table_lab=document.getElementById('lab_'+PCs.images_info[0].lab_id);table_lab.setAttribute("style","background : white;display:block;");;} |
---|
54 | function reset_style_table_lab(table_lab_id){table_lab=document.getElementById('lab_'+table_lab_id);table_lab.setAttribute("style","background : white;display:block;cursor:pointer");} |
---|
55 | function show_PC(PC,index){var img=getImg_pc(PC.pc.status);var table=document.getElementById("table_lab_"+PC.pc.lab.id);var new_row=table.insertRow();new_row.setAttribute("id","pc_"+PC.pc.id);new_row.setAttribute("style","display:block;");new_row.setAttribute("class","pc");var new_cell=new_row.insertCell();new_cell.innerHTML="<img class='status_equipo' src='../static/images/"+img+"' "+ |
---|
56 | "data-id='"+PC.pc.id+ |
---|
57 | "'>" |
---|
58 | new_cell=new_row.insertCell();new_cell.innerHTML="<table id='table_PCs' class='nivel2 table_PCs'>"+ |
---|
59 | "<tr id='PC_"+PC.pc.id+"'>"+ |
---|
60 | "<td>"+ |
---|
61 | "<span data-id='"+PC.pc.id+ |
---|
62 | "'> "+ |
---|
63 | PC.pc.name+"</span>"+ |
---|
64 | "</td>"+ |
---|
65 | "</tr>"+ |
---|
66 | "<tr>"+ |
---|
67 | "<table id='table_partitions_"+PC.pc.id+"' class='nivel3 partitions_table'>"+ |
---|
68 | "</tr>"+ |
---|
69 | "</table>"} |
---|
70 | function delete_pcs(){delete_by_class('pc');} |
---|
71 | function insert_space_table_lab(lab_id){var table=document.getElementById("table_lab_"+lab_id);var new_row=table.insertRow();new_row.setAttribute("class","space");var new_cell=new_row.insertCell();new_cell.innerHTML="<span> </span>"} |
---|
72 | function delete_spaces(){delete_by_class('space');} |
---|
73 | function getImg_pc(status){var img;if((typeof(status.status)==="undefined")){img='odernador_OFF.png'}else{switch(status.status){case 'off':img="odernador_OFF.png" |
---|
74 | break;case 'WIN':case 'windows':if(('loggedin'in status)&&(status.loggedin==true)){img='odernador_WINS.png'}else{img='odernador_WIN.png'} |
---|
75 | break;case 'LNX':case 'linux':if(('loggedin'in status)&&(status.loggedin==true)){img='odernador_LINS.png'}else{img='odernador_LIN.png'} |
---|
76 | break;case 'OSX':img="odernador_OSX.png" |
---|
77 | break;case 'oglive':img="odernador_OPG.png" |
---|
78 | break;case 'busy':img="odernador_BSY.png" |
---|
79 | break;default:img="odernador_OSX.png";}} |
---|
80 | return img;} |
---|
81 | function hide_progress_bar(animator){var progress_bar_container=document.getElementById("progress_bar_container");progress_bar_container.style.display='none';clearInterval(animator);document.getElementById("progress_bar").setAttribute("value","0");document.getElementById("progress_value").innerHTML="0%";} |
---|
82 | function show__progress_bar(){var progress_bar=document.getElementById("progress_bar_container");progress_bar.style.display='block';var data_time=parseInt(document.getElementById('progress_bar').getAttribute('data-time'));var time=data_time*10 |
---|
83 | var progressbar=$('#progress_bar'),max=progressbar.attr('max'),time=time,value=progressbar.val();var loading=function(){value+=1;addValue=progressbar.val(value);$('.progress_value').html(value+'%');if(value==max){clearInterval(animate);}};var animate=setInterval(function(){loading();},time);return animate;} |
---|
84 | function stop_progress_bar(){clearInterval(animator);document.getElementById("progress_bar").setAttribute("value","100");} |
---|
85 | function reset_progress_bar(){clearInterval(animator);document.getElementById("progress_bar").setAttribute("value","0");document.getElementById("progress_value").innerHTML="0%";} |
---|
86 | class TrReserves{constructor(reserve,table){this.table=table;this.tr=' <tr class="active_reserves_tr"></tr>';this.reserve=reserve;} |
---|
87 | td1_html(){let html='<img id="img_connect_reserve_'+this.reserve['id']+'" '+ |
---|
88 | 'class="status_equipo active_reserve_status" data-status="'+this.reserve['status']+'" '+ |
---|
89 | 'data-loggedin="'+this.reserve['loggedin']+'" '+ |
---|
90 | 'src="../static/images/odernador_WIN.png"></img>';return html} |
---|
91 | td2_html(){let html='<span>'+this.reserve['pc_name']+'</span>';return html} |
---|
92 | td3_html(){let html='<span><img class="image_user" src="../static/images/user.png"></span>';return html} |
---|
93 | td4_html(){let html='<span>'+this.reserve['user_id']+'</span>';return html} |
---|
94 | td5_html(){let html='<span><button id="btn_connect_reserve_'+this.reserve['id']+'" '+ |
---|
95 | 'type="button" class="btn btn-secondary btn-client-connect" '+ |
---|
96 | 'onclick="connect_remotePC(event)" '+ |
---|
97 | 'data-reserve_id="'+this.reserve['id']+'" '+ |
---|
98 | 'data-sound="on" '+ |
---|
99 | 'data-pc_id="'+this.reserve['pc_id']+'" '+ |
---|
100 | 'data-lab_id="'+this.reserve['lab_id']+'" '+ |
---|
101 | 'data-ou_id="'+this.reserve['ou_id']+'" '+ |
---|
102 | 'data-pc_name="'+this.reserve['pc_name']+'" '+ |
---|
103 | 'data-port="'+this.reserve['port']+'" '+ |
---|
104 | 'data-protocol="'+this.reserve['protocol']+'" '+ |
---|
105 | 'data-ip="'+this.reserve['ip']+'">Conectar</button></span>'+ |
---|
106 | '<span><button type="button" class="btn btn-primary" '+ |
---|
107 | 'onclick="unreserve(event)" '+ |
---|
108 | 'data-reserve_id="'+this.reserve['id']+'" '+ |
---|
109 | 'data-pc_id="'+this.reserve['pc_id']+'" '+ |
---|
110 | 'data-lab_id="'+this.reserve['lab_id']+'" '+ |
---|
111 | 'data-ou_id="'+this.reserve['ou_id']+'">Cancelar</button></span>' |
---|
112 | return html} |
---|
113 | insert_tr(){let tbody=this.table.getElementsByTagName('tbody')[0] |
---|
114 | let row=tbody.insertRow();row.setAttribute("class","active_reserves_tr");let td1=row.insertCell();let td2=row.insertCell();let td3=row.insertCell();let td4=row.insertCell();let td5=row.insertCell();td1.innerHTML=this.td1_html();td2.innerHTML=this.td2_html();td3.innerHTML=this.td3_html();td4.innerHTML=this.td4_html();td5.innerHTML=this.td5_html();}} |
---|
115 | class ReservesObserver{constructor(url_reserves,url_status,table){this.AWAIT_TIME_MS=10000;this.url=url_reserves;this.table=table;this.statusObserver=new StatusObserver(url_status);this.reserves=null;this.xhr=new XMLHttpRequest();this.interval=null;} |
---|
116 | clear_table_reserves(){delete_by_class('active_reserves_tr');} |
---|
117 | populate_table_reserves(){if(this.reserves!==null){for(i=0;i<this.reserves.length;i++){let reserve=new TrReserves(this.reserves[i],this.table);reserve.insert_tr()}}} |
---|
118 | set_status_clients(){this.statusObserver.set_clients(document.getElementsByClassName('btn-client-connect')) |
---|
119 | this.statusObserver.check_status_clients();} |
---|
120 | set_reserves(){this.xhr.open("POST",this.url,true);this.xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');this.xhr.send();this.xhr.onreadystatechange=()=>{this.xhr.onreadystatechange=()=>{if(this.xhr.readyState==4&&this.xhr.status==200){this.reserves=JSON.parse(this.xhr.responseText);this.clear_table_reserves();this.populate_table_reserves();this.set_status_clients();}}}} |
---|
121 | run(){this.set_reserves() |
---|
122 | this.interval=setInterval(this.set_reserves.bind(this),this.AWAIT_TIME_MS);} |
---|
123 | stop(){clearInterval(this.interval);}} |
---|
124 | class StatusObserver{constructor(url){this.AWAIT_TIME_MS=10000;this.url=url |
---|
125 | this.clients_to_connect_html=null;this.data_clients={} |
---|
126 | this.xhr=new XMLHttpRequest();this.interval=null;} |
---|
127 | set_clients(clients){this.clients_to_connect_html=clients;} |
---|
128 | set_status_img_client(reserve_id,respuesta){document.getElementById("img_connect_reserve_"+ |
---|
129 | reserve_id).setAttribute('src',"../static/images/"+getImg_pc(respuesta[reserve_id]));} |
---|
130 | set_status_img_clients(respuesta){for(i=0;i<this.clients_to_connect_html.length;i++){let reserve_id=this.clients_to_connect_html[i]['id'].split('_')[3] |
---|
131 | this.set_status_img_client(reserve_id,respuesta);}} |
---|
132 | do_request(){this.xhr.open("POST",this.url,true);this.xhr.setRequestHeader("Content-Type","application/json;charset=UTF-8");this.xhr.send(JSON.stringify(this.data_clients));this.xhr.onreadystatechange=()=>{this.xhr.onreadystatechange=()=>{if(this.xhr.readyState==4&&this.xhr.status==200){var respuesta=JSON.parse(this.xhr.responseText);this.set_status_img_clients(respuesta);}}}} |
---|
133 | check_status_clients(){for(i=0;i<this.clients_to_connect_html.length;i++){this.data_clients[this.clients_to_connect_html[i].getAttribute('data-ip')]=this.clients_to_connect_html[i].getAttribute('data-reserve_id');} |
---|
134 | this.do_request();}} |
---|
135 | function delete_by_class(class_name){var class_items=document.getElementsByClassName(class_name);for(i=class_items.length-1;i>-1;i--){class_items[i].remove();}} |
---|
136 | function hide_by_class(class_name){var class_items=document.getElementsByClassName(class_name);for(i=0;i<class_items.length-1;i++){class_items[i].style.display='none';}} |
---|