-----------------------------------------------------------------------------*/
require_once 'YATTA/Proceso.php';
+require_once 'YATTA/ProcesoWeb.php';
require_once 'YATTA/Servidor.php';
/**
*/
class YATTA_Controlador {
+ /**
+ * Obtiene el nombre del servidor al cual asignar un nuevo proceso.
+ *
+ * @param DB $db Conexion a la base de datos.
+ *
+ * @return mixed
+ * @access private
+ */
+ function _obtenerServidor($db) {
+ $res = $db->query('SELECT s.id, s.escala * s.procesos AS ponderacion
+ FROM yatta.servidores AS s
+ ORDER BY ponderacion ASC, s.escala DESC');
+ // Si hay error lo devuelve.
+ if (DB::isError($res)) {
+ return $res;
+ }
+ $res = $res->fetchRow(DB_FETCHMODE_ASSOC);
+ return $res['id'];
+ }
+
/**
* Agrega un proceso a la base de datos
* Los datos obligatorios a pasar son: script, id_sistema, descripcion,
//XXX Dentro de los datos puede estar el tiempo estimado de ejecucion
//del proceso. Esta informacion podria ser utilizada en futuras
//versiones para asignar servidores.
- if (!is_array($datos)) {
+
+ //Si no es un array
+ if (is_object($datos) && is_a ($datos, 'YATTA_ProcesoDB')) {
$datos = $datos->obtenerDatos();
}
+ elseif (!is_array($datos)) {
+ return new PEAR_Error ("Error con los datos pasados. El segundo".
+ " parametro debe ser un array asociativo o una instancia".
+ " del objeto YATTA_Proceso.");
+ }
$res = $this->_obtenerServidor($db);
+
if (DB::isError($res)) {
return $res;
}
return $res;
}
$SERVER =& new YATTA_Servidor;
- $res = $SERVER->agregarProceso($db, $datos['server']);
- return $res;
+ return $SERVER->agregarProceso($db, $datos['server']);
}
- /**
- * Obtiene el nombre del servidor al cual asignar un nuevo proceso.
- *
- * @param DB $db Conexion a la base de datos.
- *
- * @return mixed
- * @access private
- */
- function _obtenerServidor($db) {
- $res = $db->query('SELECT s.id, s.escala * s.procesos AS ponderacion
- FROM yatta.servidores AS s
- ORDER BY ponderacion DESC, s.escala DESC');
- // Si hay error lo devuelve.
- if (DB::isError($res)) {
- return $res;
- }
- $res = $res->fetchRow(DB_FETCHMODE_ASSOC);
- return $res['id'];
- }
-
/**
* Obtiene los procesos de un usuario.
*
* @access public
*/
function obtenerProcesosUsuario($db, $owner, $id = null) {
- $proceso =& new YATTA_Proceso;
+ $proceso =& new YATTA_ProcesoDB;
$proceso->owner = $owner;
if (@$id) {
$proceso->id = $id;
* @access public
*/
function obtenerProcesoUsuario($db, $owner, $id) {
- $proceso =& new YATTA_Proceso;
+ $proceso =& new YATTA_ProcesoDB;
$proceso->owner = $owner;
$proceso->id = $id;
$res = $proceso->buscar($db, MECON_DBO_AND, ' id ASC');
- $proceso->cargar($res);
+ $res = $proceso->cargar($res);
return $proceso;
}
-
}
?>
\ No newline at end of file
--- /dev/null
+<?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
+-------------------------------------------------------------------------------
+ Ministerio de Economía
+ YATTA!
+-------------------------------------------------------------------------------
+This file is part of YATTA!.
+
+YATTA! is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option)
+any later version.
+
+YATTA! is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License; if not,
+write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+Boston, MA 02111-1307 USA
+-------------------------------------------------------------------------------
+Creado: lun dic 1 16:59:29 ART 2003
+Autor: Martin Marrese <mmarre@mecon.gov.ar>
+-------------------------------------------------------------------------------
+$Id$
+-----------------------------------------------------------------------------*/
+
+require_once 'MECON/DBO.php';
+require_once 'PEAR.php';
+require_once 'Date.php';
+
+/**
+ * Clase para el manejo de los procesos.
+ *
+ * @access public
+ */
+class YATTA_ProcesoWeb extends MECON_DBO {
+
+ /**
+ * Identificador del proceso.
+ *
+ * @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
+ * @access public
+ */
+ var $script = null;
+
+ /**
+ * 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.
+ *
+ * @var string $nombre_sistema
+ * @access public
+ */
+ var $nombre_sistema = null;
+
+ /**
+ * 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
+ *
+ * @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.
+ *
+ * @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;
+ }
+
+ return $db->query('
+ UPDATE yatta.servidores
+ SET procesos = procesos + 1
+ WHERE id = '. $this->server);
+*/
+ }
+
+ /**
+ * 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,
+ );
+ }
+}
+?>
\ No newline at end of file