$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
+ * @var int $notificar
* @access public
*/
- var $fecha = null;
+ var $notificar = 0;
/**
- * Proceso a ejecutar.
+ * Contiene el texto del error.
*
- * @var string $script
+ * @var string $error
* @access public
*/
- var $script = null;
+ var $error = 'Desconocido';
/**
- * 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
+ * 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.
- *
- * @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'];
- $fecha =& new Date ($res['fecha'].' 00:00:00');
- $this->fecha = $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.
+ * Funcion que realiza la ejecucion del script.
*
- * @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)
- {
- //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;
+ function run() {
+ $this->error = 'No se implemento el metodo RUN.';
}
}
?>
\ No newline at end of file