#915 adapt web console to use new REST API in OgAdmServer
Use new REST API in ogAdmServer. This allows us to start removing the old SockHidra code.remotes/github/pjlink
parent
b9d5756a29
commit
560455a8c9
|
@ -23,6 +23,7 @@ include_once("../includes/capturaacciones.php");
|
|||
|
||||
define("IDCOMANDWAKEUP", 1);
|
||||
define("IDCOMANDSENDMESSAGE", 16);
|
||||
define('IDCOMMANDSESSION', 9);
|
||||
|
||||
// Recoge parametros de seguimiento
|
||||
$sw_ejya="";
|
||||
|
@ -122,6 +123,8 @@ $cmd->CreaParametro("@ordtarea",0,1);
|
|||
if($funcion == "nfn=Arrancar".chr(13))
|
||||
include("wakeonlan_repo.php");
|
||||
/**/
|
||||
if ($idcomando == 9)
|
||||
session($cadenaip, $atributos);
|
||||
|
||||
if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
|
||||
$cmd->ParamSetValor("@restrambito",$idambito);
|
||||
|
@ -177,7 +180,8 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
|
|||
$ValorParametros=extrae_parametros($parametros,chr(13),'=');
|
||||
$script=@urldecode($ValorParametros["scp"]);
|
||||
if($sw_ejya=='on'){
|
||||
if ($idcomando != IDCOMANDSENDMESSAGE && $idcomando != IDCOMANDWAKEUP) {
|
||||
if ($idcomando != IDCOMANDSENDMESSAGE && $idcomando != IDCOMANDWAKEUP &&
|
||||
$idcomando != IDCOMMANDSESSION) {
|
||||
// Envío al servidor
|
||||
$shidra=new SockHidra($servidorhidra,$hidraport);
|
||||
if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
|
||||
|
|
|
@ -9,9 +9,17 @@ include_once("../../includes/restfunctions.php");
|
|||
$cadenaip
|
||||
$cadenamac
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
//Multicast or Unicast
|
||||
preg_match_all('!\d{1}!', $atributos, $matches);
|
||||
|
||||
// Capturamos todas las ids
|
||||
$macs = explode(";",$cadenamac);
|
||||
$ips = explode(';',$cadenaip);
|
||||
|
||||
wol($matches[0][0], $macs, $ips);
|
||||
|
||||
// Recorremos las ids y vemos cual es la ip del repositorio
|
||||
$repos = array();
|
||||
$reposAndMacs = array();
|
||||
|
@ -44,9 +52,6 @@ foreach($macs as $mac){
|
|||
$rs->Cerrar();
|
||||
}
|
||||
|
||||
//Multicast or Unicast
|
||||
$typeWol = preg_match_all('!\d{1}!', $atributos, $matches);
|
||||
|
||||
// En este punto tenemos un array con todos los repos y cada uno de ellos con una lista de todas las macs que deben arrancar
|
||||
// Recorremos cada uno de ellos
|
||||
foreach($reposAndMacs as $repo => $macs){
|
||||
|
|
|
@ -1,5 +1,140 @@
|
|||
<?php
|
||||
|
||||
|
||||
define('OG_REST_URL', 'http://127.0.0.1:8888/');
|
||||
|
||||
define('GET', 1);
|
||||
define('POST', 2);
|
||||
define('CUSTOM', 3);
|
||||
|
||||
define('OG_REST_CMD_CLIENTS', 'clients');
|
||||
define('OG_REST_CMD_WOL', 'wol');
|
||||
define('OG_REST_CMD_SESSION', 'session');
|
||||
define('OG_REST_CMD_RUN', 'shell/run');
|
||||
define('OG_REST_CMD_OUTPUT', 'shell/output');
|
||||
|
||||
define('OG_REST_PARAM_CLIENTS', 'clients');
|
||||
define('OG_REST_PARAM_ADDR', 'addr');
|
||||
define('OG_REST_PARAM_MAC', 'mac');
|
||||
define('OG_REST_PARAM_DISK', 'disk');
|
||||
define('OG_REST_PARAM_PART', 'partition');
|
||||
define('OG_REST_PARAM_RUN', 'run');
|
||||
define('OG_REST_PARAM_TYPE', 'type');
|
||||
|
||||
function common_request($command, $type, $data = null, $custom = 'GET') {
|
||||
|
||||
$json = json_encode($data);
|
||||
|
||||
$service_url = OG_REST_URL.$command;
|
||||
|
||||
$curl = curl_init($service_url);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
switch ($type) {
|
||||
default:
|
||||
case GET:
|
||||
break;
|
||||
case POST:
|
||||
curl_setopt($curl, CURLOPT_POST, true);
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
|
||||
}
|
||||
|
||||
$curl_response = curl_exec($curl);
|
||||
$info = curl_getinfo($curl);
|
||||
|
||||
if ($curl_response === false || $info['http_code'] != 200) {
|
||||
syslog(LOG_ERR, 'error occured during curl exec. Additioanl info: ' . var_export($info));
|
||||
return null;
|
||||
}
|
||||
|
||||
curl_close($curl);
|
||||
|
||||
syslog(LOG_INFO, 'response '.$command.' ok!');
|
||||
|
||||
return json_decode($curl_response, true);
|
||||
}
|
||||
|
||||
|
||||
function shell($case, $string_ips, $command) {
|
||||
|
||||
$ips = explode(';',$string_ips);
|
||||
|
||||
switch ($case) {
|
||||
case 1:
|
||||
$data = array(OG_REST_PARAM_CLIENTS => $ips,
|
||||
OG_REST_PARAM_RUN => $command);
|
||||
$command = OG_REST_CMD_RUN;
|
||||
break;
|
||||
default:
|
||||
case 2:
|
||||
$data = array(OG_REST_PARAM_CLIENTS => $ips);
|
||||
$command = OG_REST_CMD_OUTPUT;
|
||||
}
|
||||
|
||||
$result = common_request($command, POST,
|
||||
$data)[OG_REST_PARAM_CLIENTS][0]['output'];
|
||||
|
||||
return (is_null($result) ? '1' : $result);
|
||||
}
|
||||
|
||||
function clients($case, $ips) {
|
||||
|
||||
switch ($case) {
|
||||
case 1:
|
||||
$type = POST;
|
||||
$data = array(OG_REST_PARAM_CLIENTS => $ips);
|
||||
break;
|
||||
case 2:
|
||||
$type = GET;
|
||||
break;
|
||||
}
|
||||
|
||||
$result = common_request(OG_REST_CMD_CLIENTS, $type, $data);
|
||||
|
||||
foreach ($result[OG_REST_PARAM_CLIENTS] as $client) {
|
||||
$trama_notificacion = $trama_notificacion.implode('/', $client).';';
|
||||
}
|
||||
|
||||
return $trama_notificacion;
|
||||
}
|
||||
|
||||
function wol($type_wol, $macs, $ips) {
|
||||
|
||||
switch ($type_wol) {
|
||||
default:
|
||||
case 1:
|
||||
$wol = 'broadcast';
|
||||
break;
|
||||
case 2:
|
||||
$wol = 'unicast';
|
||||
}
|
||||
|
||||
$clients = array();
|
||||
|
||||
for($i=0; $i<count($macs); $i++) {
|
||||
$clients[] = array(OG_REST_PARAM_ADDR => $ips[$i],
|
||||
OG_REST_PARAM_MAC => $macs[$i]);
|
||||
}
|
||||
|
||||
$data = array(OG_REST_PARAM_TYPE => $wol,
|
||||
OG_REST_PARAM_CLIENTS => $clients);
|
||||
|
||||
common_request(OG_REST_CMD_WOL, POST, $data);
|
||||
}
|
||||
|
||||
function session($string_ips, $params) {
|
||||
|
||||
preg_match_all('!\d{1}!', $params, $matches);
|
||||
|
||||
$ips = explode(';',$string_ips);
|
||||
$disk = $matches[0][0];
|
||||
$part = $matches[0][1];
|
||||
|
||||
$data = array(OG_REST_PARAM_CLIENTS => $ips,
|
||||
OG_REST_PARAM_DISK => $disk, OG_REST_PARAM_PART => $part);
|
||||
|
||||
common_request(OG_REST_CMD_SESSION, POST, $data);
|
||||
}
|
||||
|
||||
/*
|
||||
* @function multiRequest.
|
||||
* @param URLs array (may include header and POST data), cURL options array.
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
include_once("../includes/comunes.php");
|
||||
include_once("../includes/CreaComando.php");
|
||||
include_once("../includes/RecopilaIpesMacs.php");
|
||||
include_once('../includes/restfunctions.php');
|
||||
//________________________________________________________________________________________________________
|
||||
$ambito=0;
|
||||
$idambito=0;
|
||||
|
@ -29,18 +30,6 @@
|
|||
if (!$cmd)
|
||||
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
|
||||
//________________________________________________________________________________________________________
|
||||
switch($sw){
|
||||
case 1: // Envío del código de scrip
|
||||
$funcion="nfn=ConsolaRemota".chr(13);
|
||||
$atributos="scp=".rawurlencode($comando).chr(13);
|
||||
break;
|
||||
case 2: // Recupera el archivo de eco
|
||||
$funcion="nfn=EcoConsola".chr(13); // Nombre de la función que procesa la petición
|
||||
$atributos=chr(13);
|
||||
}
|
||||
$aplicacion=""; // Ámbito de aplicación (cadena de ipes separadas por ";" y de identificadores de ordenadores por ","
|
||||
$acciones=""; // Cadena de identificadores de acciones separadas por ";" para seguimiento
|
||||
//________________________________________________________________________________________________________
|
||||
// Ámbito de aplicación de la petición
|
||||
//________________________________________________________________________________________________________
|
||||
$cadenaid="";
|
||||
|
@ -48,34 +37,12 @@
|
|||
$cadenamac="";
|
||||
|
||||
RecopilaIpesMacs($cmd,$ambito,$idambito); // Ámbito de aplicación
|
||||
$aplicacion="ido=".$cadenaid.chr(13)."iph=".$cadenaip.chr(13);
|
||||
//________________________________________________________________________________________________________
|
||||
// Envio al servidor de la petición
|
||||
//________________________________________________________________________________________________________
|
||||
$resul=false;
|
||||
$trama="";
|
||||
$shidra=new SockHidra($servidorhidra,$hidraport);
|
||||
if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
|
||||
$parametros=$funcion.$aplicacion.$atributos.$acciones;
|
||||
$resul=$shidra->envia_peticion($parametros);
|
||||
if($resul)
|
||||
$trama=$shidra->recibe_respuesta();
|
||||
$shidra->desconectar();
|
||||
}
|
||||
if($resul){
|
||||
$hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM));
|
||||
$parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm);
|
||||
$ValorParametros=extrae_parametros($parametros,chr(13),'=');
|
||||
switch($sw){
|
||||
case 1: // Envío del código de scrip
|
||||
$trama_notificacion=$ValorParametros["res"];
|
||||
echo $trama_notificacion; // Devuelve respuesta
|
||||
break;
|
||||
case 2: // Recupera el archivo de eco
|
||||
$trama_notificacion=$ValorParametros["res"];
|
||||
echo $trama_notificacion; // Devuelve respuesta
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$trama_notificacion = shell($sw, $cadenaip, $comando);
|
||||
|
||||
echo $trama_notificacion;
|
||||
|
||||
|
||||
|
|
|
@ -46,36 +46,14 @@
|
|||
$cadenamac="";
|
||||
RecopilaIpesMacs($cmd,$ambito,$idambito); // Ámbito de aplicación
|
||||
|
||||
$aplicacion="ido=".$cadenaid.chr(13)."iph=".$cadenaip.chr(13);
|
||||
// Envio al servidor de la petición
|
||||
//________________________________________________________________________________________________________
|
||||
$resul=false;
|
||||
$trama="";
|
||||
$trama_notificacion="";
|
||||
$shidra=new SockHidra($servidorhidra,$hidraport);
|
||||
if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
|
||||
$parametros="nfn=".$funcion.chr(13);
|
||||
$parametros.=$aplicacion;
|
||||
$parametros.=$atributos;
|
||||
$parametros.=$acciones;
|
||||
$resul=$shidra->envia_peticion($parametros);
|
||||
if($resul)
|
||||
$trama=$shidra->recibe_respuesta();
|
||||
$shidra->desconectar();
|
||||
}
|
||||
if($resul){
|
||||
$hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM));
|
||||
$parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm);
|
||||
$ValorParametros=extrae_parametros($parametros,chr(13),'=');
|
||||
if (isset ($ValorParametros["tso"])) {
|
||||
$trama_notificacion=$ValorParametros["tso"];
|
||||
}
|
||||
}
|
||||
$ips = explode (';', $cadenaip);
|
||||
|
||||
$trama_notificacion = clients($sw, $ips);
|
||||
|
||||
// Send REST requests to new OGAgent clients.
|
||||
$urls = array();
|
||||
// Compose array of REST URLs.
|
||||
foreach (explode (';', $cadenaip) as $ip) {
|
||||
foreach ($ips as $ip) {
|
||||
$urls[$ip] = "https://$ip:8000/opengnsys/status";
|
||||
}
|
||||
// Launch concurrent requests.
|
||||
|
|
Loading…
Reference in New Issue