diff options
author | ramon <ramongomez@us.es> | 2017-02-06 13:40:18 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2017-02-06 13:40:18 +0000 |
commit | 9a39c75c31620c1494b40d27784b2e47bf2a11ec (patch) | |
tree | d7dfd5973be687153cc909c0fb2d3089e6dc5a86 /admin/WebConsole/rest | |
parent | 1108dfa5159c65064b6b0e8f3838efe2bdae14a1 (diff) |
#708: Corregir algunas erratas en r5169 y aƱadir comprobaciĆ³n de cliente ya reservado en ruta {{{.../reserve}}}
git-svn-id: https://opengnsys.es/svn/branches/version1.1@5172 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'admin/WebConsole/rest')
-rw-r--r-- | admin/WebConsole/rest/opengnsys-api.yml | 4 | ||||
-rw-r--r-- | admin/WebConsole/rest/remotepc.php | 140 |
2 files changed, 76 insertions, 68 deletions
diff --git a/admin/WebConsole/rest/opengnsys-api.yml b/admin/WebConsole/rest/opengnsys-api.yml index 0cd6c697..e847f242 100644 --- a/admin/WebConsole/rest/opengnsys-api.yml +++ b/admin/WebConsole/rest/opengnsys-api.yml @@ -801,7 +801,7 @@ paths: - client - remotepc /ous/{ouid}/labs/{labid}/clients/{clientid}/unreserve: - get: + delete: description: Unreserve a client, clear its session data and send a poweroff operation. parameters: - name: ouid @@ -1062,7 +1062,7 @@ paths: - server - image /ous/{ouid}/images/{imageid}/reserve: - get: + post: description: | Reserve a random client with an installed image and send a boot/reboot operation. If `labid` is specified, then choose a `client` defined in this lab. diff --git a/admin/WebConsole/rest/remotepc.php b/admin/WebConsole/rest/remotepc.php index e109bbe2..c6a2f9e0 100644 --- a/admin/WebConsole/rest/remotepc.php +++ b/admin/WebConsole/rest/remotepc.php @@ -16,9 +16,11 @@ /** * @brief Reserve a random client with an installed image and send a boot/reboot operation depending on its status. If "lab" parameter is specified, then choose a client defined in this lab. * @note Route: /ous/:ouid/labs/:labid/clients/:clntid/events, Method: POST + * @param integer ouid OU identificator + * @param integer imageid image identificator * @param integer labid lab. identificator (optional) */ -$app->get('/ous/:ouid/images/:imageid/reserve', 'validateApiKey', +$app->post('/ous/:ouid/images/:imageid/reserve', 'validateApiKey', function($ouid, $imageid) use ($app) { global $cmd; global $AMBITO_ORDENADORES; @@ -45,12 +47,10 @@ SELECT entornos.ipserveradm, entornos.portserveradm, RIGHT JOIN usuarios USING(idusuario) RIGHT JOIN ordenadores_particiones USING(idordenador) RIGHT JOIN imagenes USING(idimagen) - RIGHT JOIN remotepc ON remotepc.id=ordenadores.idordenador + LETT JOIN remotepc ON remotepc.id=ordenadores.idordenador WHERE administradores_centros.idadministradorcentro = '$userid' - AND idcentro = '$ouid' - AND aulas.idaula LIKE '$labid' AND aulas.inremotepc=1 - AND imagenes.idimagen = '$imageid' AND imagenes.inremotepc=1 - AND remotepc.reserved = 0 + AND aulas.idcentro = '$ouid' AND aulas.idaula LIKE '$labid' AND aulas.inremotepc = 1 + AND imagenes.idimagen = '$imageid' AND imagenes.inremotepc = 1 ORDER BY RAND() LIMIT 1; EOD; $rs=new Recordset; @@ -59,53 +59,55 @@ EOD; // Check if client exists. $rs->Primero(); if (checkParameter($rs->campos["idordenador"])) { - // Read query data. - $serverip = $rs->campos["ipserveradm"]; - $serverport = $rs->campos["portserveradm"]; - $clientid = $rs->campos["idordenador"]; - $clientip = $rs->campos["ip"]; - $clientmac = $rs->campos["mac"]; - $agentkey = $rs->campos["agentkey"]; - $reserved = $rs->campos["reserved"]; - $disk = $rs->campos["numdisk"]; - $part = $rs->campos["numpar"]; - $labid = $rs->campos["idaula"]; - $ouid = $rs->campos["idcentro"]; - // Check client's status. - $url = "https://$clientip:8000/opengnsys/status"; - $result = multiRequest(Array($url)); - if (empty($result[0])) { - // Client is off, send a boot operation to ogAdmServer. - $reqframe = "nfn=Arrancar\r". - "ido=".implode(',', $clientid)."\r". - "iph=".implode(';', $clientip)."\r". - "mac=".implode(';', $clientmac)."\r". - "mar=1\r"; - sendCommand($serverip, $serverport, $reqframe, $values); - // ... (check response) - // ... - } else { - // Client is on,, send a reboot command to its OGAgent. - $url = "https://$clientip:8000/opengnsys/reboot"; + // Check if client is not reserved. + if ($reserved !== 1) { + $reserved = $rs->campos["reserved"]; + // Read query data. + $serverip = $rs->campos["ipserveradm"]; + $serverport = $rs->campos["portserveradm"]; + $clientid = $rs->campos["idordenador"]; + $clientip = $rs->campos["ip"]; + $clientmac = $rs->campos["mac"]; + $agentkey = $rs->campos["agentkey"]; + $disk = $rs->campos["numdisk"]; + $part = $rs->campos["numpar"]; + $labid = $rs->campos["idaula"]; + $ouid = $rs->campos["idcentro"]; + // Check client's status. + $url = "https://$clientip:8000/opengnsys/status"; $result = multiRequest(Array($url)); + if (empty($result[0])) { + // Client is off, send a boot operation to ogAdmServer. + $reqframe = "nfn=Arrancar\r". + "ido=".implode(',', $clientid)."\r". + "iph=".implode(';', $clientip)."\r". + "mac=".implode(';', $clientmac)."\r". + "mar=1\r"; + sendCommand($serverip, $serverport, $reqframe, $values); + // ... (check response) + // ... + } else { + // Client is on,, send a reboot command to its OGAgent. + $url = "https://$clientip:8000/opengnsys/reboot"; + $result = multiRequest(Array($url)); + // ... (check response) + // ... + } + // Send init session operation to ogAdmServer. + $reqframe = "nfn=IniciarSesion\r". + "ido=".$clientid[$i]."\r". + "iph=".$clientip[$i]."\r". + "dsk=".$clientdisk[$i]."\r". + "par=".$clientpart[$i]."\r"; + sendCommand($serverip, $serverport, $reqframe, $values); // ... (check response) // ... - } - // Send init session operation to ogAdmServer. - $reqframe = "nfn=IniciarSesion\r". - "ido=".$clientid[$i]."\r". - "iph=".$clientip[$i]."\r". - "dsk=".$clientdisk[$i]."\r". - "par=".$clientpart[$i]."\r"; - sendCommand($serverip, $serverport, $reqframe, $values); - // ... (check response) - // ... - // Transaction: mark choosed client as reserved and - // register a init session operation into ogAdmServer's actions queue. - $cmd->texto = <<<EOD + // Transaction: mark choosed client as reserved and + // register a init session operation into ogAdmServer's actions queue. + $cmd->texto = <<<EOD START TRANSACTION; INSERT INTO remotepc - SET id=$clntid, reserved=1, urllogin=NULL, urllogout=NULL + SET id='$clntid', reserved=1, urllogin=NULL, urllogout=NULL ON DUPLICATE UPDATE id=VALUES(id), reserved=VALUES(reserved), urllogin=VALUES(urllogin), urllogout=VALUES(urllogout) @@ -126,17 +128,23 @@ INSERT INTO acciones restrambito='$clientip', idcentro=$ouid; COMMIT; -EOD - $cmd->Ejecutar(); - // ... (check commit) - // ... - // Compose JSON response. - $response['id'] = $clientid; - $response['ip'] = $clientip; - $response['mac'] = $clientmac; - $response['lab']['id'] = $labid; - $response['ou']['id'] = $ouid; - jsonResponse(200, $response); +EOD; + $cmd->Ejecutar(); + // ... (check commit) + // ... + // Compose JSON response. + $response['id'] = $clientid; + $response['ip'] = $clientip; + $response['mac'] = $clientmac; + $response['lab']['id'] = $labid; + $response['ou']['id'] = $ouid; + jsonResponse(200, $response); + } else { + // Error message. + $response["message"] = "Client is already reserved"; + jsonResponse(400, $response); + $app->stop(); + } } else { // Error message. $response["message"] = "No available clients"; @@ -196,21 +204,21 @@ EOD; $rs->Primero(); if (checkParameter($rs->campos["idordenador"])) { // Check if client is reserved. - if ($rs->campos["reserved"] == 0) { - // Reserve client updating DB. + if ($rs->campos["reserved"] === 1) { + // Updating DB if client is reserved. $cmd->texto = <<<EOD INSERT INTO remotepc - SET id=$clntid, reserved=1, urllogin=$urlLogin, urllogout=$urlLogout + SET id='$clntid', reserved=1, urllogin='$urlLogin', urllogout='$urlLogout' ON DUPLICATE UPDATE id=VALUES(id), reserved=VALUES(reserved), urllogin=VALUES(urllogin), urllogout=VALUES(urllogout) -EOD +EOD; $cmd->Ejecutar(); - // Confirm reservation. + // Confirm operation. jsonResponse(200, ""); } else { // Error message. - $response["message"] = "Client is already reserved"; + $response["message"] = "Client is not reserved"; jsonResponse(400, $response); $app->stop(); } @@ -231,7 +239,7 @@ $app->post('/ous/:ouid/labs/:labid/clients/:clntid/session', 'validateApiKey', ); -$app->get('/ous/:ouid/labs/:labid/clients/:clntid/unreserve', 'validateApiKey', +$app->delete('/ous/:ouid/labs/:labid/clients/:clntid/unreserve', 'validateApiKey', function($ouid, $imageid) { global $cmd; global $userid; |