source: admin/WebConsole/gestores/gestor_ejecutaracciones.php @ 0a735488

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since 0a735488 was 0a73ecf7, checked in by ramon <ramongomez@…>, 12 years ago

Versión 1.0.5, #565 @567: Integrar código del ticket:567 para corregir ejecución duplicada de comandos, incluyendo código del ogAdmServer con soporte para el ticket:565 (imágenes incrementales).

git-svn-id: https://opengnsys.es/svn/branches/version1.0@3407 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 11.5 KB
Line 
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("../clases/SockHidra.php");
16include_once("../includes/CreaComando.php");
17include_once("../includes/constantes.php");
18include_once("../includes/comunes.php");
19include_once("../includes/RecopilaIpesMacs.php");
20//________________________________________________________________________________________________________
21
22$opcion=0; // Inicializa parametros
23
24$idprocedimiento=0;
25$idtarea=0;
26$ambito=0;
27$idambito=0;
28$swc=0; // switch de cliente, esta pagina la llama el cliente a través del browser
29
30if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
31if (isset($_POST["idprocedimiento"]))   $idprocedimiento=$_POST["idprocedimiento"];
32if (isset($_POST["descriprocedimiento"]))       $descriprocedimiento=$_POST["descriprocedimiento"];
33if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
34if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
35if (isset($_POST["idtarea"]))   $idtarea=$_POST["idtarea"];
36if (isset($_POST["descritarea"]))       $descritarea=$_POST["descritarea"];
37
38if (isset($_GET["opcion"])) $opcion=$_GET["opcion"];
39if (isset($_GET["idprocedimiento"])) $idprocedimiento=$_GET["idprocedimiento"];
40if (isset($_GET["descriprocedimiento"]))$descriprocedimiento=$_GET["descriprocedimiento"];
41if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
42if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
43if (isset($_GET["idtarea"])) $idtarea=$_GET["idtarea"];
44if (isset($_GET["descritarea"])) $descritarea=$_GET["descritarea"];
45
46if (isset($_GET["swc"])) $swc=$_GET["swc"]; // Switch que indica que la página la solicita un cliente a través del browser
47
48$cmd=CreaComando($cadenaconexion); // Crea objeto comando
49$resul=false;
50if ($cmd){
51        $shidra=new SockHidra($servidorhidra,$hidraport);
52        $cadenaid="";
53        $cadenaip="";
54        $cadenamac="";
55        $sesion=0;
56        $vez=0;
57        if(opcion!=$EJECUCION_TAREA)
58                RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
59        if(opcion!=$EJECUCION_AUTOEXEC){
60                //Creación parametros para inserción en tabla acciones
61                $sesion=time();
62                $cmd->CreaParametro("@tipoaccion",$opcion,1);
63                $cmd->CreaParametro("@idtipoaccion",0,1);
64                $cmd->CreaParametro("@descriaccion","",0);
65                $cmd->CreaParametro("@idordenador",0,1);
66                $cmd->CreaParametro("@ip","",0);
67                $cmd->CreaParametro("@sesion",$sesion,1);
68                $cmd->CreaParametro("@idcomando",0,1);
69                $cmd->CreaParametro("@parametros","",0);
70                $cmd->CreaParametro("@fechahorareg","",0);
71                $cmd->CreaParametro("@fechahorafin","",0);
72                $cmd->CreaParametro("@estado",$ACCION_INICIADA,1);
73                $cmd->CreaParametro("@resultado",$ACCION_SINRESULTADO,1);
74                $cmd->CreaParametro("@descrinotificacion","",0);       
75                $cmd->CreaParametro("@idprocedimiento",0,1);   
76                $cmd->CreaParametro("@idtarea",0,1);
77                $cmd->CreaParametro("@idcentro",$idcentro,1);   
78                $cmd->CreaParametro("@ambito",0,1);
79                $cmd->CreaParametro("@idambito",0,1);
80                $cmd->CreaParametro("@restrambito","",0);               
81        }
82        switch($opcion){
83                case $EJECUCION_AUTOEXEC:
84                        $resul=actualizaAutoexec($idprocedimiento);
85                        $literal="resultado_gestion_procedimiento";
86                        break;
87                case $EJECUCION_PROCEDIMIENTO:
88                        $cmd->ParamSetValor("@idtipoaccion",$idprocedimiento);
89                        $cmd->ParamSetValor("@descriaccion",$descriprocedimiento);
90                        $resul=ejecucionProcedimiento($idprocedimiento,$ambito,$idambito);
91                        $literal="resultado_gestion_procedimiento";
92                        break;
93                case $EJECUCION_TAREA:
94                        $cmd->ParamSetValor("@idtipoaccion",$idtarea);
95                        $cmd->ParamSetValor("@descriaccion",$descritarea);             
96                        $cmd->ParamSetValor("@idtarea",$idtarea);       
97                        $resul=ejecucionTarea($idtarea);
98                        $literal="resultado_ejecutar_tareas";
99                        break;                                 
100        }
101        $cmd->Conexion->Cerrar();
102}
103if ($resul){
104        if(empty($swc)){
105                echo $literal."(1,'".$cmd->DescripUltimoError()."');".chr(13);
106        }
107        else{
108                echo '<SCRIPT language="javascript">'.chr(13);
109                echo 'alert("El item se ha ejecutado correctamente");'.chr(13);
110                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
111                echo 'history.back();';
112                echo '</SCRIPT>';
113        }
114}
115else{
116        if(empty($swc)){
117                echo $literal."(0,'".$cmd->DescripUltimoError()."')";
118        }
119        else{
120                echo '<SCRIPT language="javascript">'.chr(13);
121                echo 'alert("***ATENCIÓN:El item NO se ha podido ejecutar");'.chr(13);
122                echo 'var wurl="../varios/menucliente.php?iph='.trim($_SESSION["ogCliente"]).'";';
123                echo 'location.href=wurl;';
124                echo '</SCRIPT>';
125        }
126}
127//********************************************************************************************************
128//
129// Incorpora un procedimiento como autoexec
130//________________________________________________________________________________________________________
131function actualizaAutoexec($idprocedimiento)
132{
133        global $cadenaid;
134        global $cmd;
135
136        $cmd->texto="UPDATE ordenadores SET idproautoexec=".$idprocedimiento." WHERE idordenador IN (".$cadenaid.")";
137        $resul=$cmd->Ejecutar();
138        return(resul);
139}
140//________________________________________recorreProcedimientos________________________________________________________________
141//
142// Ejecuta un procedimiento: lo registra en acciones y lo envía por la red
143//________________________________________________________________________________________________________
144function ejecucionProcedimiento($idprocedimiento,$ambito,$idambito)
145{
146        return(recorreProcedimientos($idprocedimiento,$ambito,$idambito));                                               
147}
148//________________________________________________________________________________________________________
149//
150// Ejecuta una tarea: la registra en acciones y la envía por la red
151//________________________________________________________________________________________________________
152function ejecucionTarea($idtarea)
153{
154        return(recorreTareas($idtarea));                                                 
155}
156//________________________________________________________________________________________________________
157function recorreProcedimientos($idprocedimiento,$ambito,$idambito)
158{               
159        global $cmd;   
160                         
161        $cmd->texto="SELECT idcomando,procedimientoid,parametros
162                                                         FROM procedimientos_acciones
163                                                         WHERE idprocedimiento=".$idprocedimiento."
164                                                         ORDER BY orden";       
165        //echo $cmd->texto;                                                                     
166        $rs=new Recordset;
167        $rs->Comando=&$cmd;
168        if (!$rs->Abrir()) return(false); // Error al abrir recordset
169        while (!$rs->EOF){
170                $procedimientoid=$rs->campos["procedimientoid"];
171                if($procedimientoid>0){ // Procedimiento recursivo
172                        if(!recorreProcedimientos($procedimientoid,$ambito,$idambito)){
173                                return(false);
174                        }
175                }
176                else{
177                        $parametros=$rs->campos["parametros"];
178                        $idcomando=$rs->campos["idcomando"];
179                        if(!insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito))
180                                return(false); 
181                }
182                $rs->Siguiente();
183        }
184        return(true);
185}
186//________________________________________________________________________________________________________
187function recorreTareas($idtarea)
188{               
189        global $cadenaid;
190        global $cadenaip;
191        global $cadenamac;     
192        global $cmd;   
193                         
194        $cmd->texto="SELECT tareas_acciones.orden,tareas_acciones.idprocedimiento,tareas_acciones.tareaid,
195                                                tareas.ambito,tareas.idambito,tareas.restrambito
196                                 FROM tareas
197                                 INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea
198                                 WHERE tareas_acciones.idtarea=".$idtarea."
199                                 ORDER BY tareas_acciones.orden";       
200        //echo $cmd->texto;                                                                     
201        $rs=new Recordset;
202        $rs->Comando=&$cmd;
203        if (!$rs->Abrir()) return(false); // Error al abrir recordset
204        while (!$rs->EOF){
205                $tareaid=$rs->campos["tareaid"];
206                if($tareaid>0){ // Tarea recursiva
207                        if(!recorreTareas($tareaid)){
208                                return(false);
209                        }
210                }
211                else{
212                        $ambito=$rs->campos["ambito"];
213                        $idambito=$rs->campos["idambito"];
214                        if($ambito==0 && $idambito==0){ // Ámbito restringido
215                                $idambito=$rs->campos["restrambito"];
216                        }
217                        RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito           
218                        $idprocedimiento=$rs->campos["idprocedimiento"];
219                        if(!recorreProcedimientos($idprocedimiento,$ambito,$idambito))
220                                return(false); 
221                }
222                $rs->Siguiente();
223        }
224        return(true);
225}
226//________________________________________________________________________________________________________
227//
228//      Registra un procedimiento para un ambito concreto
229//________________________________________________________________________________________________________
230function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambito)
231{
232        global $cadenaid;
233        global $cadenaip;
234        global $cmd;   
235        global $sesion;
236        global $vez;
237       
238        if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
239                $cmd->ParamSetValor("@restrambito",$idambito);
240                $idambito=0;
241        }       
242       
243        $cmd->ParamSetValor("@idcomando",$idcomando);
244        $cmd->ParamSetValor("@idprocedimiento",$idprocedimiento);
245        $cmd->ParamSetValor("@parametros",$parametros);
246        $cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s"));
247        $cmd->ParamSetValor("@ambito",$ambito);
248        $cmd->ParamSetValor("@idambito",$idambito);
249                       
250        if(strlen($cadenaip)==0) return(true); 
251       
252        $auxID=split(",",$cadenaid);
253        $auxIP=split(";",$cadenaip);
254
255        for ($i=0;$i<sizeof($auxID);$i++){
256                $cmd->ParamSetValor("@idordenador",$auxID[$i]);
257                $cmd->ParamSetValor("@ip",$auxIP[$i]);
258                $cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idprocedimiento,idtarea,idcentro)
259                                        VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idprocedimiento,@idtarea,@idcentro)";
260                $resul=$cmd->Ejecutar();
261                //echo $cmd->texto;
262                if(!$resul) return(false);
263               
264                /* Sólo envía por la red el primer comando, el resto, si hubiera,
265                lo encontrará el cliente a través de los comandos pendientes */
266                if(empty($vez)){
267                        if(!enviaComando($parametros,$sesion)) return(false);
268                        $vez++;
269                }
270        }
271        return(true);
272}
273//________________________________________________________________________________________________________
274//
275//      Envia un procedimiento a un grupo de ordenadores a través de la red
276//________________________________________________________________________________________________________
277function enviaComando($parametros,$sesion)
278{       
279        global $cadenaid;
280        global $cadenaip;
281        global $cadenamac;     
282        global $servidorhidra;         
283        global $hidraport;             
284        global $LONCABECERA;           
285        global $shidra;
286       
287        // Envio al servidor
288
289        $aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13);
290        $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
291       
292        if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
293                $parametros.=$aplicacion;
294                $parametros.=$acciones;
295                $shidra->envia_comando($parametros);
296                $trama=$shidra->recibe_respuesta();
297                $shidra->desconectar();
298        }
299        return(true);
300}
301?>
302
Note: See TracBrowser for help on using the repository browser.