X-Git-Url: https://git.llucax.com/mecon/yatta.git/blobdiff_plain/be82111e27a9d9b492bdde542a283624c752b3fc..b6a6a2a30f3d83d558a55fcf809b6098a4b73566:/lib/YATTA/Proceso.php diff --git a/lib/YATTA/Proceso.php b/lib/YATTA/Proceso.php index 2838fd3..75e97f6 100644 --- a/lib/YATTA/Proceso.php +++ b/lib/YATTA/Proceso.php @@ -24,484 +24,57 @@ Autor: Martin Marrese $Id$ -----------------------------------------------------------------------------*/ -require_once 'MECON/DBO.php'; -require_once 'PEAR.php'; -require_once 'Date.php'; +//Defino las constantes de estado +define ('YATTA_ESTADO_EN_COLA', 0); +define ('YATTA_ESTADO_PROCESANDO', 1); +define ('YATTA_ESTADO_FINALIZADO', 2); +define ('YATTA_ESTADO_ERROR', 3); +define ('YATTA_ESTADO_ABORTADO', 4); +define ('YATTA_ESTADO_ABORTAR', 5); + +//Debe haber una funcion que devuelva una instancia del objeto. De esta manera +//no hay que utilizar un nombre en particular. +//La funcion debe llamarse create_process. Sin parametros. /** * Clase para el manejo de los procesos. * * @access public */ -class YATTA_Proceso extends MECON_DBO { +class YATTA_Proceso { /** - * Identificador del proceso. + * Indica si hay que notificar o no al owner del resultado del script. * - * @var int $id - * @access public - */ - var $id = null; - - /** - * Fecha cuando se agrego el proceso. - * Formato = DD/MM/YYYY - * Puede ser un objeto Date. - * - * @var string $fecha - * @access public - */ - var $fecha = null; - - /** - * Proceso a ejecutar. - * - * @var string $script + * @var int $notificar * @access public */ - var $script = null; + var $notificar = 0; /** - * Identificador del sistema en el cual se lanzo el proceso. - * - * @var int $id_sistema - * @access public - */ - var $id_sistema = null; - - /** - * Nombre del sistema en el cual se lanzo el proceso. + * Contiene el texto del error. * - * @var string $nombre_sistema + * @var string $error * @access public */ - var $nombre_sistema = null; + var $error = 'Desconocido'; /** - * Descripcion del proceso. - * - * @var string $descripcion - * @access public - */ - var $descripcion = null; - - /** - * PID del proceso en el servidor de proceso. - * - * @var int $pid - * @access public - */ - var $pid = null; - - /** - * Servidor en donde se ejecuto/a/ara el proceso. - * - * @var int $server - * @access public - */ - var $server = null; - - /** - * Estado del proceso. - * 0 = En Espera - * 1 = Procesando - * 2 = Finalizado - * 3 = Error - * 4 = Abortado - * - * @var int $status - * @access public - */ - var $status = null; - - /** - * Identificador del usuario responsable por el proceso. - * - * @var string $owner - * @access public - */ - var $owner = null; - - /** - * Destinos para el resultado. - * array ('mmarre@mecon', 'gmeray@mecon') - * - * @var array $destinos - * @access public - */ - var $destinos = null; - - /** - * Prioridad el proceso. - * - * @var int $prioridad - * @access public - */ - var $prioridad = null; - - /** - * Fecha de ejecucion fijada. - * - * @var string $scheduling - * @access public - */ - var $scheduling = null; - - /** - * Indica si se debe notificar o no al owner sobre el resultado. - * - * @var int $notificar - * @access public - */ - var $notificar = null; - - /** - * Nombre del archivo resultado - * - * @var string $resultado - * @access public - */ - var $resultado = null; - - /** - * Nombre del archivo en el tacho + * Indica el nombre del archivo en el filesystem. * * @var string $archivo * @access public */ var $archivo = null; - - /** - * Nota explicativa sobre el error producido o el motivo por el cual se - * aborto el proceso. - * - * @var string $nota - * @access public - */ - var $nota = null; - - /** - * Descripcion del estado. - * - * @var string $icono - * @access public - */ - var $icono = null; - + /** - * Carga el objeto con los datos que se pasan por parametro. - * - * @param DB $db DB o DB_Result a usar para la carga. + * Funcion que realiza la ejecucion del script. * - * @return mixed - * @access public - */ - function cargar($db = null) - { - // Si es un resultado, obtengo los elemento. - if (is_a($db, 'db_result')) { - $this->predefinirAtributos(); - $res = $db->fetchRow(DB_FETCHMODE_ASSOC); - // Si hay error lo devuelve. - if (DB::isError($res)) { - return $res; - } - elseif (!$res) { - return false; - } - $this->id = $res['id']; - $this->fecha = $res['fecha']; - $this->script = $res['script']; - $this->id_sistema = $res['id_sistema']; - $this->nombre_sistema = $res['nombre_sistema']; - $this->descripcion = $res['descripcion']; - $this->pid = $res['pid']; - $this->server = $res['server']; - $this->status = $res['status']; - $this->owner = $res['owner']; - $this->destinos = split(',', $res['destinos']); - $this->prioridad = $res['prioridad']; - $this->scheduling = $res['scheduling']; - $this->notificar = $res['notificar']; - $this->resultado = $res['resultado']; - $this->archivo = $res['archivo']; - $this->nota = $res['nota']; - $this->icono = $res['icono']; - return true; - } - return false; - } - - /** - * Borra el objeto de una base de datos. - * - * @param DB $db Base de datos de donde borrar el objeto. - * - * @return mixed - * @access public - */ - function borrar($db = null) - { - trigger_error('Not implemented!', E_USER_WARNING); - } - - /** - * Busca los datos en la base. - * - * @param DB $db Conexion a la base de datos. - * @param string $operador Indica como deben concatenarse las condiciones de busqueda - * @param string $orden Indica de que manera deben ordenarse los resultados de la busqueda - * - * @return mixed - * @access public - */ - function buscar($db = null, $operador = MECON_DBO_OR, $orden = null) - { - // Armo el WHERE. - if (is_null($this->owner)) { - return new PEAR_Error ('Debe definirse el Owner del proceso.'); - } - $where = array(); - if (!is_null($this->id)) { - $where[] = 'p.id = '.$this->id; - } - if (!is_null($this->fecha)) { - if (is_object($this->fecha) ) { - $fecha = $this->fecha->format("%Y-%m-%d"); - } - else { - list ($dia, $mes, $anio) = split ('[/.-]', $this->fecha); - $fecha = $anio.'-'.$mes.'-'.$dia; - } - $where[] = 'p.fecha = '. $db->quote("$fecha"); - } - if (!is_null($this->script)) { - $where[] = 'p.script LIKE '. $db->quote("%$this->script%"); - } - if (!is_null($this->id_sistema)) { - $where[] = 'p.id_sistema = '. $this->id_sistema; - } - if (!is_null($this->nombre_sistema)) { - $where[] = 's.nombre_sistema LIKE '. $db->quote("%$this->nombre_sistema%"); - } - if (!is_null($this->descripcion)) { - $where[] = 'p.descripcion LIKE '. $db->quote("%$this->descripcion%"); - } - if (!is_null($this->pid)) { - $where[] = 'p.pid = '.$this->pid; - } - if (!is_null($this->server)) { - $where[] = 'p.server = '.$this->server; - } - if (!is_null($this->status)) { - $where[] = 'p.status = '.$this->status; - } - if (!is_null($this->destinos)) { - if (is_array($this->destinos)) { - foreach ($this->destinos as $destino) { - $where[] = 'p.destinos LIKE '. $db->quote("%$destino"); - } - } - else { - $where[] = 'p.destinos LIKE '. $db->quote("%$this->destinos%"); - } - } - if (!is_null($this->prioridad)) { - $where[] = 'p.prioridad = '.$this->prioridad; - } - if (!is_null($this->scheduling)) { - $where[] = 'p.scheduling LIKE '. $db->quote("%$this->scheduling%"); - } - if (!is_null($this->notificar)) { - $where[] = 'p.notificar ='. $this->notificar; - } - if (!is_null($this->resultado)) { - $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%"); - } - if (!is_null($this->nota)) { - $where[] = 'p.nota LIKE '. $db->quote("%$this->nota%"); - } - if ($where) { - $where = 'WHERE p.owner = '. $db->quote("$this->owner"). - 'AND p.id_sistema = s.id_sistema AND ('. join ("$operador - ", $where).')'; - } - else { - $where = 'WHERE p.owner = '. $db->quote("$this->owner"). - 'AND p.id_sistema = s.id_sistema'; - } - // Armo el ORDER BY. - if (is_string($orden)) - { - $orden = array($orden); - } - if ($orden) - { - $orden = 'ORDER BY '.join(',',$orden); - } - else { - $orden = ''; - } - - return $db->query("SELECT p.id AS id, - DATE_FORMAT(p.fecha, '%d-%m-%Y') AS fecha, - p.script AS - script, p.id_sistema AS id_sistema, s.nombre_sistema AS - nombre_sistema, p.descripcion AS descripcion, p.pid AS pid, - p.server AS server, p.status AS status, p.owner AS owner, - p.destinos AS destinos, p.prioridad AS prioridad, p.scheduling - AS scheduling, p.notificar AS notificar, p.resultado AS - resultado, p.nota AS nota, p.archivo AS archivo, ". - "IF (p.status = 0, 'El proceso esta en cola. Aun no se ejecuto.". - "', ". - "IF(p.status = 1, 'El proceso se esta ejecutando en este momento.". - "',". - "IF(p.status = 2, 'El proceso ha finalizado. ". - "',". - "IF(p.status = 3, 'Se produjo un error durante la ejecucion". - " del proceso.". - "',". - "'El proceso fue detenido por alguna persona (el responsable o". - " el administrador).". - "'". - ")". - ")". - ")". - ") AS icono - FROM yatta.procesos AS p, samurai.sistema AS s - $where - $orden"); - } - - /** - * Guarda los datos en la base. - * - * @param DB $db Conexion a la base de datos. - * @param bool $nuevo Indica si se trata de un nuevo registro en la base. - * - * @return mixed - * @access public - */ - function guardar($db = null, $nuevo = true) - { - - //@TODO PASAR ESTO A UNA CLASE SERVIDOR - //Busco el servidor - $res = $db->query('SELECT id, escala * procesos AS ponderacion - FROM yatta.servidores - ORDER BY ponderacion, escala'); - $res = $res->fetchRow(DB_FETCHMODE_ASSOC); - // Si hay error lo devuelve. - if (DB::isError($res)) { - return $res; - } - $this->server = $res['id']; - //Asigno la fecha - if (@is_null($this->fecha)) { - $this->fecha = date ('Y-m-d'); - } - - if ($nuevo) { - $datos = array ( - 'fecha' => $this->fecha, - 'script' => $this->script, - 'id_sistema' => $this->id_sistema, - 'descripcion' => $this->descripcion, - 'pid' => $this->pid, - 'server' => $this->server, - 'status' => $this->status, - 'owner' => $this->owner, - 'destinos' => $this->destinos, - 'prioridad' => $this->prioridad, - 'scheduling' => $this->scheduling, - 'notificar' => $this->notificar, - 'resultado' => $this->resultado, - 'archivo' => $this->archivo, - 'nota' => $this->nota - ); - - $res = $db->autoExecute('yatta.procesos', $datos, - DB_AUTOQUERY_INSERT); - } - else { - $datos = array ( - 'fecha' => $this->fecha, - 'script' => $this->script, - 'id_sistema' => $this->id_sistema, - 'descripcion' => $this->descripcion, - 'pid' => $this->pid, - 'server' => $this->server, - 'status' => $this->status, - 'owner' => $this->owner, - 'destinos' => $this->destinos, - 'prioridad' => $this->prioridad, - 'scheduling' => $this->scheduling, - 'notificar' => $this->notificar, - 'resultado' => $this->resultado, - 'archivo' => $this->archivo, - 'nota' => $this->nota - ); - - $res = $db->autoExecute('yatta.procesos', $datos, - DB_AUTOQUERY_UPDATE, 'id = '.$this->id); - - } - - if (DB::isError($res)) { - return $res; - } - - $res = $db->query(' - UPDATE yatta.servidores - SET procesos = procesos + 1 - WHERE id = '. $this->server); - return $res; - } - - /** - * Hace un reset de los atributos. - * * @return void * @access public */ - function predefinirAtributos() { - $this->id = null; - $this->fecha = null; - $this->script = null; - $this->id_sistema = null; - $this->nombre_sistema = null; - $this->descripcion = null; - $this->pid = null; - $this->server = null; - $this->status = null; - $this->owner = null; - $this->destinos = null; - $this->prioridad = null; - $this->scheduling = null; - $this->notificar = null; - $this->resultado = null; - $this->archivo = null; - $this->nota = null; - $this->icono = null; - } - - /** - * Devuelve un array asociativo con los valores del proceso. - * - * @return array - * @access public - */ - function obtenerDatos() { - return array ( - 'script' => $this->script, - 'id_sistema' => $this->id_sistema, - 'descripcion' => $this->descripcion, - 'owner' => $this->owner, - 'destinos' => $this->destinos, - 'prioridad' => $this->prioridad, - 'scheduling' => $this->scheduling, - 'notificar' => $this->notificar, - ); + function run() { + $this->error = 'No se implemento el metodo RUN.'; } } ?> \ No newline at end of file