source: admin/WebConsole/gestores/gestor_ejecutaracciones.php @ 5d05b06

Last change on this file since 5d05b06 was 15a9c87, checked in by OpenGnSys Support Team <soporte-og@…>, 5 years ago

#942 add immediate commands on the queue (web)

Users can launch immediate commands on the queue to keep an history and
to watch the status and the properties.

This commit adapt this functionality to new functions and behaviour
of the ogAdmServer.

  • Property mode set to 100644
File size: 9.3 KB
RevLine 
[c870c84]1<?php
2// *************************************************************************************************************************************************
3// Aplicación WEB: ogAdmWebCon
4// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
5// Fecha Creación: Año 2009-2010
6// Fecha Última modificación: Mayo-2005
7// Nombre del fichero: gestor_procedimientos.php
8// Descripción :
9//              Gestiona la ejecución de procedimientos
10// *************************************************************************************************************************************************
11include_once("../includes/ctrlacc.php");
12include_once("../clases/AdoPhp.php");
13include_once("../clases/XmlPhp.php");
14include_once("../clases/ArbolVistaXML.php");
15include_once("../includes/CreaComando.php");
16include_once("../includes/constantes.php");
17include_once("../includes/comunes.php");
18include_once("../includes/RecopilaIpesMacs.php");
[1d380e5]19include_once("../includes/restfunctions.php");
[c870c84]20//________________________________________________________________________________________________________
21
[00f0fe2]22define('OG_CMD_ID_WAKEUP', 1);
23
[c870c84]24$opcion=0; // Inicializa parametros
25
26$idprocedimiento=0;
27$idtarea=0;
28$ambito=0;
29$idambito=0;
30$swc=0; // switch de cliente, esta pagina la llama el cliente a través del browser
31
32if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
33if (isset($_POST["idprocedimiento"]))   $idprocedimiento=$_POST["idprocedimiento"];
34if (isset($_POST["descriprocedimiento"]))       $descriprocedimiento=$_POST["descriprocedimiento"];
35if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
36if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
37if (isset($_POST["idtarea"]))   $idtarea=$_POST["idtarea"];
38if (isset($_POST["descritarea"]))       $descritarea=$_POST["descritarea"];
39
40if (isset($_GET["opcion"])) $opcion=$_GET["opcion"];
41if (isset($_GET["idprocedimiento"])) $idprocedimiento=$_GET["idprocedimiento"];
42if (isset($_GET["descriprocedimiento"]))$descriprocedimiento=$_GET["descriprocedimiento"];
43if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
44if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
45if (isset($_GET["idtarea"])) $idtarea=$_GET["idtarea"];
46if (isset($_GET["descritarea"])) $descritarea=$_GET["descritarea"];
47
48if (isset($_GET["swc"])) $swc=$_GET["swc"]; // Switch que indica que la página la solicita un cliente a través del browser
49
50$cmd=CreaComando($cadenaconexion); // Crea objeto comando
51$resul=false;
52if ($cmd){
53        $cadenaid="";
54        $cadenaip="";
55        $cadenamac="";
56        $sesion=0;
57        $vez=0;
58        if(opcion!=$EJECUCION_TAREA)
59                RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
60        if(opcion!=$EJECUCION_AUTOEXEC){
61                //Creación parametros para inserción en tabla acciones
[d1de0b2]62                $sesion=0;
[c870c84]63                $cmd->CreaParametro("@tipoaccion",$opcion,1);
64                $cmd->CreaParametro("@idtipoaccion",0,1);
65                $cmd->CreaParametro("@descriaccion","",0);
66                $cmd->CreaParametro("@idordenador",0,1);
67                $cmd->CreaParametro("@ip","",0);
68                $cmd->CreaParametro("@sesion",$sesion,1);
69                $cmd->CreaParametro("@idcomando",0,1);
70                $cmd->CreaParametro("@parametros","",0);
71                $cmd->CreaParametro("@fechahorareg","",0);
72                $cmd->CreaParametro("@fechahorafin","",0);
73                $cmd->CreaParametro("@estado",$ACCION_INICIADA,1);
74                $cmd->CreaParametro("@resultado",$ACCION_SINRESULTADO,1);
75                $cmd->CreaParametro("@descrinotificacion","",0);
76                $cmd->CreaParametro("@idprocedimiento",0,1);
77                $cmd->CreaParametro("@idtarea",0,1);
78                $cmd->CreaParametro("@idcentro",$idcentro,1);
79                $cmd->CreaParametro("@ambito",0,1);
80                $cmd->CreaParametro("@idambito",0,1);
81                $cmd->CreaParametro("@restrambito","",0);
82        }
83        switch($opcion){
84                case $EJECUCION_AUTOEXEC:
85                        $resul=actualizaAutoexec($idprocedimiento);
86                        $literal="resultado_gestion_procedimiento";
87                        break;
88                case $EJECUCION_PROCEDIMIENTO:
89                        $cmd->ParamSetValor("@idtipoaccion",$idprocedimiento);
90                        $cmd->ParamSetValor("@descriaccion",$descriprocedimiento);
91                        $resul=ejecucionProcedimiento($idprocedimiento,$ambito,$idambito);
92                        $literal="resultado_gestion_procedimiento";
93                        break;
94                case $EJECUCION_TAREA:
95                        $cmd->ParamSetValor("@idtipoaccion",$idtarea);
96                        $cmd->ParamSetValor("@descriaccion",$descritarea);
97                        $cmd->ParamSetValor("@idtarea",$idtarea);
[5a9ed93]98                        $resul=run_task($idtarea);
[c870c84]99                        $literal="resultado_ejecutar_tareas";
100                        break;
101        }
102        $cmd->Conexion->Cerrar();
103}
104if ($resul){
105        if(empty($swc)){
106                echo $literal."(1,'".$cmd->DescripUltimoError()."');".chr(13);
107        }
108        else{
109                echo '<SCRIPT language="javascript">'.chr(13);
110                echo 'alert("El item se ha ejecutado correctamente");'.chr(13);
111                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
112                echo 'history.back();';
113                echo '</SCRIPT>';
114        }
115}
116else{
117        if(empty($swc)){
118                echo $literal."(0,'".$cmd->DescripUltimoError()."')";
119        }
120        else{
121                echo '<SCRIPT language="javascript">'.chr(13);
122                echo 'alert("***ATENCIÓN:El item NO se ha podido ejecutar");'.chr(13);
123                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
124                echo 'location.href=wurl;';
125                echo '</SCRIPT>';
126        }
127}
128//********************************************************************************************************
129//
130// Incorpora un procedimiento como autoexec
131//________________________________________________________________________________________________________
132function actualizaAutoexec($idprocedimiento)
133{
134        global $cadenaid;
135        global $cmd;
136
137        $cmd->texto="UPDATE ordenadores SET idproautoexec=".$idprocedimiento." WHERE idordenador IN (".$cadenaid.")";
138        $resul=$cmd->Ejecutar();
139        return(resul);
140}
141//________________________________________recorreProcedimientos________________________________________________________________
142//
143// Ejecuta un procedimiento: lo registra en acciones y lo envía por la red
144//________________________________________________________________________________________________________
145function ejecucionProcedimiento($idprocedimiento,$ambito,$idambito)
146{
147        return(recorreProcedimientos($idprocedimiento,$ambito,$idambito));                                               
148}
149//________________________________________________________________________________________________________
150function recorreProcedimientos($idprocedimiento,$ambito,$idambito)
151{               
[00f0fe2]152        global $cadenamac;
153        global $cadenaip;
[c870c84]154        global $sesion;
[00f0fe2]155        global $cmd;
156
157        $wol_params;
[c870c84]158
159        $cmd->texto="SELECT   idcomando,procedimientoid,parametros
160                         FROM procedimientos_acciones
161                        WHERE idprocedimiento=".$idprocedimiento."
162                        ORDER BY orden";       
163
164        $rs=new Recordset;
165        $rs->Comando=&$cmd;
166        if (!$rs->Abrir()) return(false); // Error al abrir recordset
167        while (!$rs->EOF){
168                $procedimientoid=$rs->campos["procedimientoid"];
169                if($procedimientoid>0){ // Procedimiento recursivo
170                        if(!recorreProcedimientos($procedimientoid,$ambito,$idambito)){
171                                return(false);
172                        }
173                }
174                else{
175                        $parametros=$rs->campos["parametros"];
176                        $idcomando=$rs->campos["idcomando"];
177                        // Ticket 681: bucle infinito en procedimiento compuesto (J.M. Alonso).
178                        do{
179                                $nwsesion=time();       
180                        }while($sesion==$nwsesion);
181                        $sesion=$nwsesion;
182                        $cmd->ParamSetValor("@sesion",$sesion);
183                        // Fin ticket 681.
[00f0fe2]184                        if ($idcomando == OG_CMD_ID_WAKEUP)
185                                $wol_params = $parametros;
[c870c84]186                        if(!insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito))
187                                return(false); 
188                }
189                $rs->Siguiente();
190        }
[00f0fe2]191
192        if (isset($wol_params)) {
193                $atributos = substr(trim($wol_params), -1);
194                include("../comandos/gestores/wakeonlan_repo.php");
195        }
196
[c870c84]197        return(true);
198}
199//________________________________________________________________________________________________________
200//
201//      Registra un procedimiento para un ambito concreto
202//________________________________________________________________________________________________________
203function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito)
204{
[d1de0b2]205        global $EJECUCION_PROCEDIMIENTO;
[c870c84]206        global $cadenaid;
207        global $cadenaip;
208        global $cmd;   
209        global $sesion;
210        global $vez;
211
212        if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
213                $cmd->ParamSetValor("@restrambito",$idambito);
214                $idambito=0;
215        }       
216       
217        $cmd->ParamSetValor("@idcomando",$idcomando);
218        $cmd->ParamSetValor("@idprocedimiento",$idprocedimiento);
219        $cmd->ParamSetValor("@parametros",$parametros);
220        $cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s"));
221        $cmd->ParamSetValor("@ambito",$ambito);
222        $cmd->ParamSetValor("@idambito",$idambito);
223
224        if(strlen($cadenaip)==0) return(true); 
225
226        $auxID=explode(",",$cadenaid);
227        $auxIP=explode(";",$cadenaip);
228
229        for ($i=0;$i<sizeof($auxID);$i++){
230                $cmd->ParamSetValor("@idordenador",$auxID[$i]);
231                $cmd->ParamSetValor("@ip",$auxIP[$i]);
232                $cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idprocedimiento,idtarea,idcentro)
233                                        VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idprocedimiento,@idtarea,@idcentro)";
234                $resul=$cmd->Ejecutar();
235                //echo $cmd->texto;
236                if(!$resul) return(false);
[d1de0b2]237                if ($i == 0) {
238                        $sesion = $cmd->Autonumerico();
239                        $cmd->ParamSetValor("@sesion",$sesion);
[c870c84]240                }
241        }
[d1de0b2]242        $cmd->texto = "UPDATE acciones SET sesion=@sesion ".
243                      "WHERE idaccion = @sesion";
244        $resul=$cmd->Ejecutar();
245        if (resul) {
246                $when = now_params();
247                $resul = create_schedule(strval($sesion), $EJECUCION_PROCEDIMIENTO, "",
248                                         $when['map_year'], $when['map_month'],
249                                         0, 0, $when['map_day'],
250                                         $when['map_hour'], $when['map_am_pm'],
251                                         $when['map_minute']);
252        }
[c870c84]253        return(true);
254}
255
Note: See TracBrowser for help on using the repository browser.