Índice general 1. Introducción 1.1. Recolectar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Centralizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Funcionamiento del sistema . . . . . . . . . . . . . . . . . . . 1 2 2 3 2. Problema 2.1. Propuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 5 3. Monitor 3.1. Propuesta . . . . . . . . . . . . . . . 3.1.1. Arquitectura general . . . . . 3.1.2. Requerimientos funcionales . . 3.1.3. Requerimientos no funcionales 3.2. Desarrollo . . . . . . . . . . . . . . . 3.2.1. Arquitectura . . . . . . . . . . 3.2.2. Plataforma de desarrollo . . . 3.2.3. Desarrollo de requerimientos . 3.3. Implementación . . . . . . . . . . . . 3.3.1. Estructura de directorios . . . 3.3.2. Carga de configuración . . . . 3.3.3. Censo . . . . . . . . . . . . . 3.3.4. Configuración . . . . . . . . . 3.3.5. Datos de usuarios . . . . . . . 3.3.6. Manejo de usuarios . . . . . . 3.3.7. Mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 6 10 11 16 16 18 19 19 20 21 22 22 23 23 4. Black Box Web 24 4.1. Propuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 i 4.1.1. Arquitectura general . . . . . 4.1.2. Requerimientos funcionales . . 4.1.3. Requerimientos no funcionales 4.2. Desarrollo . . . . . . . . . . . . . . . 4.2.1. Arquitectura . . . . . . . . . . 4.2.2. Plataforma de desarrollo . . . 4.2.3. Desarrollo de requerimientos . 4.3. Implementación . . . . . . . . . . . . 4.3.1. BroadCast . . . . . . . . . . . 4.3.2. Carga de configuración . . . . 4.3.3. Listar archivos . . . . . . . . 4.3.4. Actualizar archivos . . . . . . 4.3.5. MVC . . . . . . . . . . . . . . A. Monitor: Manual de Usuario A.1. Instalación . . . . . . . . . . A.2. Uso . . . . . . . . . . . . . . A.2.1. Inicio . . . . . . . . . A.2.2. Censo . . . . . . . . A.2.3. Configuración . . . . A.2.4. Usuarios . . . . . . . A.2.5. Acerca de Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 24 25 26 27 27 28 28 29 29 29 29 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 33 33 34 34 35 36 B. Black Box Web: Manual de Usuario B.1. Compilación de BroadCast . . . . . B.1.1. Compilación . . . . . . . . . B.2. Instalación de Black Box Web . . . B.2.1. Compilación . . . . . . . . . B.3. Uso . . . . . . . . . . . . . . . . . . B.3.1. Broadcast . . . . . . . . . . B.3.2. Black Box Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 38 38 39 40 41 41 41 . . . . 47 47 48 48 49 . . . . . . . . . . . . . . . . . . . . . C. Apache ANT C.1. Instalación . . . . . . . . . . . . . . C.2. Uso . . . . . . . . . . . . . . . . . . C.2.1. Archivo de construcción . . C.2.2. Tareas principales usadas en ii . . . . . . . . . . . . . . . . . . . . . . . . este proyecto . . . . . . . . . . . . . . . . . . . . . . . . D. Patrones de Diseño D.1. MVC . . . . . . . . . D.2. Singleton . . . . . . . D.2.1. Próposito . . D.2.2. Motivación . D.2.3. Aplicabilidad D.2.4. Consecuencias D.3. Decorator . . . . . . D.3.1. Próposito . . D.3.2. Motivación . D.3.3. Aplicabilidad D.3.4. Consecuencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 51 52 52 52 53 53 54 54 54 54 55 Índice de figuras 2.1. Esquema general del Sistema . . . . . . . . . . . . . . . . . . . 3.1. 3.2. 3.3. 3.4. 3.5. Diagrama Diagrama Diagrama Diagrama Diagrama de de de de de estados . . . . . . . . . . . . . . . . . . . . . . flujo de la aplicación Monitor (primera parte). flujo de la aplicación Monitor (segunda parte). flujo de la aplicación Monitor (tercera parte). . flujo para el censo de los servidores. . . . . . . . . . . . 5 7 11 12 13 15 4.1. Mapa de sitio de la aplicación Black Box Web. . . . . . . . . . 26 A.1. A.2. A.3. A.4. A.5. Iniciar la aplicación Censo . . . . . . . Configuración . . . Usuarios . . . . . . Acerca de . . . . . Black Box . . . . . . . . . . . . . . . . . . . . . . . . Web. . . . . . . . . . . . . . . . . B.1. B.2. B.3. B.4. B.5. B.6. B.7. B.8. Broadcast . . . . . . . . . . . . Inicio . . . . . . . . . . . . . . . Listar . . . . . . . . . . . . . . Listado de archivos enviados . . Listado de archivos no enviados Actualización . . . . . . . . . . Mensaje de termino . . . . . . . Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 34 35 36 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 43 43 44 45 45 46 D.1. Esquema de MVC. . . . . . . . . . . . . . . . . . . . . . . . . 52 1 Resumen El Sistema de Control de Calidad para el Sistema de Transporte Colectivo Metro (SCT) es un desarrollo tecnológico que tiene el objetivo de dar una plataforma para obtener datos de la operación cotidiana de los trenes y proporcionar información de alto nivel acerca de estos datos. Éste trabajo muestra el desarrollo de dos aplicaciones de software que tienen la responsabilidad de aumentar la disponibilidad y fiabilidad del sistema anterior. La aplicación Monitor se encarga de estar censando, y registrando el resultado de este, las aplicaciones que concentran los datos obtenidos de los trenes y en caso de errores lleva a cabo tareas correctivas básicas. La aplicación Black Box crea una forma de acceder a los datos almacenados en la caja de negra de los trenes, a través de una computadora embarcada en estos. Capı́tulo 1 Introducción El Sistema de Transporte Colectivo Metro (STC) tiene, para sus trenes, un sistema de adquisición de datos de los diferentes subsistemas de los que se componen. Velocidad, aceleración y apertura de puertas son algunos de los parámetros de los que se obtienen datos. Sin embargo, estos datos no se encuentran accesibles de manera sencilla: se requiere que las personas encargadas de esta tarea se dirijan fı́sicamente hasta el tren del que se necesite obtener los datos de la caja negra y a través de un software (especialmente diseñado para esto) se obtienen los datos. Si se requiere obtener y concentrar estos datos de manera constante de todo el parque vehicular del STC, con un total de 355 trenes1 , se ve que resulta bastante complicado poder atender esta tarea, ya que además, la mayorı́a de los datos se pierden porque este sistema se encuentra implementado con un subsistema de memoria de bu↵er circular, que una vez que se usa toda la memoria vuelve a usar la memoria donde se encuentran los datos más antiguos. El sistema que el laboratorio TAMDI está desarrollando busca resolver este problema y ası́ generar información de alto nivel acerca de la calidad del servicio del STC. Para resolver esto se requiere automatizar el proceso de recolección de datos de las cajas negras de los trenes y concentrarlo, además de tener sistemas que proporcionen información en base a estos datos. Los componentes de este sistema se dividen de forma general en los dedicados a obtener los datos de las cajas negras y los dedicados a procesarlos (recolec1 STC. ”Parque vehicular”, consultada http://www.metro.df.gob.mx/operacion/index.html 1 el 1/Septiembre/2011. URL tarlos, almacenarlos y mostrar la información). 1.1. Recolectar Los componentes que se encargan de recolectar los datos de las cajas negras son: Host principal Es un servidor Dell PowerEdge T610 cuya responsabilidad es concentrar y hacer uso de los datos obtenidos de los trenes. Tiene un sistema operativo Linux Red Hat 5.5 y la configuración de los servidores necesarios para operar todo el sistema. Host Moxa. Computadora embarcada tipo RISC con wireless y sistema operativo Linux. La serie usada en el proyecto, W300, es ideal para diversas aplicaciones embarcadas de máquina a máquina. Su capacidad wireless le permite tener transferencia de datos transparente, computo numérico, conversión de protocolos, proceso de datos y encriptación. La responsabilidad de este componente es obtener, guardar y enviar (a través de la infraestructura de telecomunicaciones) los datos generados por las cajas negras que se encuentran presentes en los trenes. Servidor Extractor de Datos (SED). Este es un componente de software cuya responsabilidad es obtener los datos guardados en el host Moxa, comunicandose con este a través de la infraestructura de telecomunicaciones para almacenarlos en la base de datos. Este componente ha sido desarrollado desde cero. 1.2. Centralizar Los componentes que se encargan de centralizar los datos son: MySQL. Servidor Open Source de Base de Datos Relacionales que ofrece un alto rendimiento, alta confiabilidad y aplicaciones de bases de datos escalables. Este servidor será el encargado de tener centralizados los datos. Tomcat. Este servidor web (contenedor de Servlets) es usado para proporcionar información de alto nivel en base a los datos almacenados en el servidor MySQL. 2 1.3. Funcionamiento del sistema La automatización de la recolección de datos fue diseñado para operar de la siguiente manera: un programa embarcado en el host Moxa se encarga de estar recolectando los datos de la caja negra cada lapso de tiempo. Los trenes al pasar por las terminales de lı́nea tienen a su alcance access points, componentes que establecen un canal de comunicación con el SED; una vez establecida la comunicación inicia el proceso de transferencia de datos del host Moxa al SED, con esta transferencia el SED carga estos datos en MySQL para que después a través de Tomcat u otro servidor web se proporcione la información (básica y de alto nivel) al usuario. Este es un resumen general la forma en como funciona este proyecto, sin embargo hay muchos aspectos presentes que no se mencionaron como: seguridad de las telecomunicaciones, tolerancias a fallas, protocolos, hardware nuevo, etc. 3 Capı́tulo 2 Problema El sistema se encuentra constituido por muchos componentes (hardware y software), de los cuales algunos ya se conoce y se ha probado su grado de estabilidad e integración entre ellos, otros son completamente nuevos y se desconocen estás caracterı́sticas. También hay que considerar que el perfil profesional de las personas no es necesariamente de áreas afines a la computación. Estas caracterı́sticas establecen un alto riesgo de que el sistema en general no se encuentre disponible o sea no fiable para realizar su operación normal. La posibilidad de tener problemas de disponibilidad o fiabilidad en el sistema, se ve reflejado por una parte en los componentes encargados de procesar los datos, ya que pueden no estar proporcionando el servicio que deben para centralizar los datos. Por otra parte, en los host Moxa el riesgo se da cuando el tren es sacado de circulación, generalmente por fallas, y que debido a que no se encuentra dentro de la infraestructura de telecomunicaciones que permite comunicarse con los componentes que centralizan los datos. Se desea aumentar la disponibilidad y fiabilidad del sistema. Ası́ tenemos que el aumento de la disponibilidad se dará en los servidores centralizadores de datos y por la otra en la recolección de los datos del host Moxa. La disponibilidad y fiabilidad en los servidores centralizadores de los datos implica conocer si estos servidores se encuentran funcionando y que se puede puede trabajar con ellos, mientras que la disponibilidad en el host Moxa implica poder acceder a los datos contenidos en este de una manera alternativa a la infraestructura general de operación. 4 2.1. Propuesta Para resolver esta problemática se proponen desarrollar dos aplicaciones, con un enfoque centrado en el usuario (interfaz gráfica), que serán responsables de mejorar y proporcionar un mayor grado de disponibilidad del sistema. Para los componentes que centralizan y recolectan los datos se desarrolla un programa llamado Monitor, mientras que para el componente que obtiene los datos de la caja negra de los trenes se desarrolla una interfaz web llamada Black Box Web. La figura 2.1 tiene un detalle del esquema general del sistema incluyendo estas aplicaciones. Figura 2.1: Esquema general del Sistema 5 Capı́tulo 3 Monitor La aplicación Monitor se encarga de censar los servidores MySQL, SED y Tomcat; el resultado de esta tarea proporciona el estado de funcionamiento del servidor censado. Por una parte el estado del censo determinará un mensaje que será almacenado en un archivo de log y mostrado en la pantalla de la aplicación. En caso de errores durante el censo se toman las acciones correctivas necesarias, como detener el servidor o iniciarlo. Estos errores, dependiendo de la configuración de los usuarios, generan alertas (correos electrónicos) que serán enviadas a estos con la información del servidor y que condición se alcanzó para esta alerta. 3.1. 3.1.1. Propuesta Arquitectura general La aplicación Monitor va estar conviviendo con los servidores MySQL, SED y Tomcat en el host principal del sistema. Este ambiente permite que la comunicación de la aplicación Monitor y los servidores sea más rápida además de proporcionar una infraestructura para poder operar con éstos. 3.1.2. Requerimientos funcionales Esta sección detalla los requerimientos que cumple la aplicación Monitor. Las áreas en las que se dividen los requerimientos se engloban en las siguientes subsecciones. 6 Censo La tarea principal de la aplicación es estar censando el estado de los servidores. Los estados en los que se puede encontrar un servidor son los siguientes: HALT. El servidor no se encuentra operando en el host principal. La acción correctiva es iniciar el servidor. ERROR. El servidor se encuentra operando, sin embargo no se puede establecer comunicación con éste; ya sea porque hay problemas en el puerto de comunicación usado o porque tiene un bloqueo y no puede responder a las peticiones de los usuarios (indistintamente programas y personas). La acción correctiva es reiniciar el servidor (detener el proceso actual e iniciar el proceso). OK. El servidor se encuentra activo y puede responder peticiones de usuarios. No se realiza ninguna acción correctiva. Figura 3.1: Diagrama de estados Cabe señalar que la configuración de cada servidor como dirección IP, puerto de comunicación, archivos de configuración, etc. es establecida por el administrador del sistema y la aplicación Monitor sólo puede realizar las acciones correctivas configuradas anteriormente y no tiene la facultad de cambiar estas configuraciones de los servidores. 7 Al encontrar estados de HALT y ERROR en el censo de los servidores, la aplicación agrega estos estados a los usuarios que han sido registrados en esta aplicación. Estos usuarios tienen una configuración (individual) del lı́mite permitido de incidencias (HALT o ERROR) antes de que se les envı́en las alertas, que constan de correos electrónicos informando de la incidencia. El manejo de las incidencias (por usuario) se hace por ventanas de tiempo y desecha todas las incidencias que quedan fuera de esta. La aplicación Monitor debe mostrar en pantalla y almacenar en un archivo de log los estados generados por el censo. La aplicación también debe manejar un archivo por dı́a cuya polı́tica de cambio de archivo se da a través de una hora de corte, con esto el nombre del archivo tiene el siguiente formato: [AAAA1][MM1DD1]_[HH1]h[MM1]-[AAAA2][MM2][DD2]_[HH2]h[MM2].txt donde: AAAA1 cadena de 4 dı́gitos que representa el año en que inicio el censo. MM1 cadena de 2 dı́gitos que representa el mes en que inicio el censo. DD1 cadena de 2 dı́gitos que representa el dı́a en que inicio el censo. HH1 cadena de 2 dı́gitos que representa la hora en que inicio el censo. MM1 cadena de 2 dı́gitos que representan los minutos en que inicio el censo. AAAA2 cadena de 4 dı́gitos que representa el año en que finalizó el censo. MM2 cadena de 2 dı́gitos que representa el mes en que finalizó el censo. DD2 cadena de 2 dı́gitos que representa el dı́a en que finalizó el censo. HH2 cadena de 2 dı́gitos que representa la hora en que finalizó el censo. MM2 cadena de 2 dı́gitos que representan los minutos en que finalizó el censo. 8 Configuración Los parámetros permitidos que se pueden configurar son los siguientes Directorio de los logs. Establece el directorio donde se almacenan los archivos de logs. Al cambiarse este parámetro no se copiarán o moverán los archivos de log que hayan sido generados, sólo el archivo del log activo en ese momento. Retraso. Este parámetro indica el tiempo de espera una vez que se haya hecho un censo a los diferentes servidores. Hora de corte. Este parámetro establece la hora en que inicia y termina un log y se ve reflejado en el nombre de los logs generados. Usuarios Esta sección sirve para administrar la lista de usuarios (agregar, modificar y eliminar) que serán a quienes la aplicación Monitor considera, en base a su configuración, para enviar las alertas. Los datos de los usuarios que se almacenan son los siguientes: ID. Identificador de la persona empleada usado por el STC Nombre. Nombre de la persona Apellidos. Apellidos de la persona Teléfono. Teléfono de la persona Correo electrónico. Correo electrónico donde serán enviadas las notificaciones Configuración de incidencias de los Servidores. Esta información sirve para establecer el lı́mite, por usuario, que se va a permitir de incidencias (HALT o ERROR) generada por alguno de los servidores. La configuración de cada servidor y sus incidencias es exclusiva de cada usuario. Para tener más claro esto supongamos que un usuario tiene la configuración para el servidor Tomcat de 6 incidencias de tipo HALT cada 2 horas, lo anterior ı́ndica que cada vez que al censar el servidor Tomcat y se encuentre en estado HALT 6 veces dentro de una ventana de dos horas será generada una alerta. 9 Licencia Existe una sección que muestra la licencia de la aplicación, ası́ como elementos gráficos de las instituciones involucradas en la aplicación, que en este caso es la UAM y el STC. Esta sección es flexible para cambiar la licencia sin tener que volver a crear toda la aplicación. 3.1.3. Requerimientos no funcionales Se detallan sólo los requerimientos no funcionales considerados para esta aplicación. Mantenimiento Debido a que la aplicación está sujeta a agregar mejoras o cambios en un futuro por personas ajenas al equipo de desarrollo inicial, la implementación de la aplicación se hace usando patrones de diseño de software ası́ como la documentación del código debe reflejar de manera adecuada las funciones de éste. Seguridad La aplicación sólo podrá ser usada por un usuario con privilegios administrativos dentro del host. La polı́tica de asignación de privilegios administrativos del host principal no se contempla en este documento. Usabilidad La aplicación va a ser usada por personas con un conocimiento del uso de linux a nivel de usuario, debido a esto, la usabilidad de la aplicación debe ser alta. Escalabilidad Hasta el momento no se tiene un plan a futuro del escalamiento de la aplicación, sin embargo se contemplo poder agregar más servidores que pudieran censarse de forma parecida a los que actualmente censa. Debido al tiempo no se pudo diseñar una plataforma que permitiera de manera automática agregar nuevos servidores a censar, sin embargo la codificación para agregar estos nuevos elementos es relativamente sencilla. 10 3.2. Desarrollo En las figuras 3.2, 3.3 y 3.4 se encuentra el diagrama de flujo de la aplicación. Figura 3.2: Diagrama de flujo de la aplicación Monitor (parte 1). 11 Figura 3.3: Diagrama de flujo de la aplicación Monitor (parte 2). 12 Figura 3.4: Diagrama de flujo de la aplicación Monitor (parte 3). 13 Carga de configuración de la aplicación Esta tarea implica cargar la información de los archivos de configuración de la aplicación, entre los archivos cargados se encuentra el archivo que tiene los datos del directorio donde se guardan los logs, la hora de corte y el retardo de censo que es la información que el usuario de la aplicación puede modificar desde la misma aplicación. Censo de los servidores Este proceso se encarga de estar censando los servidores para determinar su estado. Agregar los estados de los servidores a los usuarios Este proceso agrega a la lista de usuarios registrados las incidencias (estados de error y halt) del censo de los servidores. Desplegar los eventos en pantalla Muestra dentro de la interfaz gráfica el resultado del censo. Guardar los eventos en el archivo Guarda en el archivo de log el resultado del censo. Enviar mensajes En caso de ser necesario se envı́an los mensajes (correos electrónicos) alertando acerca del lı́mite que fue alcanzado para generar la alerta. En la figura 3.5 se muestra el diagrama de flujo para determinar el estado de alguno de los servidores. Existe el proceso. Esta tarea verifica que el servidor se encuentre en la lista de procesos del host. El puerto se encuentra activo. Esta tarea verifica que el puerto de comunicación con el servidor se encuentra abierto y tiene el protocolo de comunicación adecuado. Petición de servicio. Esta tarea trata de que la aplicación simule ser un cliente de un servidor y establezca una petición a este. 14 Figura 3.5: Diagrama de flujo para el censo de los servidores. 15 3.2.1. Arquitectura Como ya se comentó, la aplicación Monitor se encontrará operando en el host principal donde también se encuentran los servidores que recolectan o centralizan los datos. 3.2.2. Plataforma de desarrollo A continuación se detallan las herramientas de programación para llevar a cabo el desarrollo de la aplicación Monitor. C y GTK+ Los primeros prototipos de la aplicación Monitor se desarrollaron con el lenguaje de programación C y con la caja de herramientas multiplataforma para interfaces gráficas GTK+. Sin embargo, se encontraron dificultades al momento de integrar la aplicación en el host que se detallan: La versión de GTK+ 1.2 usada en el host de desarrollo hizo que la aplicación no fuera fácilmente integrable en el host de producción cuya versión de GTK+ es 1.10 Hasta el momento se desconoce el nivel de compatibilidad de GTK+ 1.10 con nuevas versiones de este programa. Reestructurar la aplicación para que fuera usada en esta versión mostraba dos dificultades: por un lado conocer el tiempo que se requerı́a invertir para determinar si era posible el cambio de versión de GTK+ y por el otro lado llevarlo a cabo. Otro inconveniente es que no es tan sencillo tener varias versiones de GTK+ en el mismo ambiente, ya que con esta caracterı́stica se podrı́a disminuir el impacto de esta problemática. Esto motivo a buscar una alternativa para el desarrollo de la aplicación teniendo en cuenta que se puede cambiar o actualizar el software del host de producción y que debe ser sencillo llevar a cabo el mantenimiento de esta aplicación. 16 Java La alternativa seleccionada para desarrollar la aplicación es Java 6 y usando la tecnologı́a Swing para implementar los requerimientos de la interfaz gráfica. Entre otros motivos, a parte de la dificultad de usar GTK+, se seleccionó esta tecnologı́a por las siguientes razones: Independiente de plataforma Esta caracterı́stica significa que los programas escritos con Java pueden ejecutarse igualmente en cualquier tipo de hardware. Multiples versiones 1 Pueden coexistir varias versiones de la JVM (Java Virtual Machine). Esto permite que si se actualiza la versión de la JVM y se encuentra que la aplicación Monitor no es compatible con ésta, se puede configurar el host para mantener la JVM adecuada para la aplicación de manera transparente. Orientado a Objetos El paradigma orientado a objetos permite tener un mayor grado de mantenimiento en las aplicaciones. Lo que permite tener herencia, encapsulación, polimorfismo y enlace dinámico. Otras caracterı́sticas La plataforma Java presenta caracterı́sticas importantes, que no son usadas por la aplicación Monitor: es robusta y distribuida. La versión de Java presente en el host de producción es OpenJDK 6.2 Shell Scripting El censo a los servidores se hará a través de programas de Shell Scripting, por una parte los servidores se encuentran en el host de producción donde también se encuentra la aplicación Monitor y por otra permite tener una infraestructura que determine mejor el estado del servidor a censar sin tener que recurrir a hacer una petición de esta información al mismo servidor. Las pruebas que se hacen a los servidores son a través de programas que se encuentran en el host principal (herramientas Linux). 1 Ted Neward. ”Multiple Java Homes”, consultada el 21/Septiembre/2011. URL http://www.tedneward.com/files/Papers/MultipleJavaHomes/MultipleJavaHomes.pdf 17 Apache Ant Se usa Apache Ant para organizar el proyecto y poder replicar el ambiente de desarrollo sin problemas. Véase el apéndice C. 3.2.3. Desarrollo de requerimientos Ahora se describen algunas pautas básicas a tener en cuenta para la implementación de la aplicación. Censo La tarea de censar a los servidores se rige por: 1. Proceso Verificar que el servidor se encuentra en la lista de los procesos activos en el host principal, si no se encuentra la aplicación genera una incidencia de tipo HALT. 2. Puerto Verificar que el puerto de comunicación del servidor se encuentra activo y que opera el protocolo adecuado a través de éste, en caso contrario se genera una incidencia de tipo ERROR. 3. Petición Hacer una petición al servidor, como si se tratara de un cliente más. Si el servidor no responde adecuadamente se genera una incidencia de tipo ERROR. Si no se generó ninguna incidencia durante el censo del servidor, el estado de éste es OK. Configuración La configuración se almacena en un archivo de texto. Esto permite poder separar la operación de la aplicación de la configuración de la aplicación y además de que no será necesario tener operando la aplicación para hacer los cambios en la configuración. Usuarios La aplicación no tendrá un alta demanda para el manejo de usuarios registrados en ésta, por lo que no es necesario tener un motor de base de 18 datos integrado para el manejo de ésta información. El formato XML2 sirve para intercambiar información estructurada entre diferentes plataformas, por lo que es ideal si se desea después integrar un motor de base de datos para el manejo de ésta información. Éste archivo va a almacenar los datos de usuarios y la configuración de las incidencias por servidor. Alertas Las alertas son correos electrónicos. Al igual que la configuración, la estructura de los correos electrónicos es almacenada en archivos de texto plano (con la estructura de HTML) para poder modificar la vista de estos correos electrónicos sin tener que volver a recompilar la aplicación (sólo hay que reiniciar la aplicación). 3.3. Implementación A continuación se detallan técnicamente los elementos importantes permiten llevar a cabo su tarea a la aplicación Monitor. 3.3.1. Estructura de directorios La aplicación Monitor tiene la siguiente estructura de directorios en donde se encuentran organizados los archivos requeridos para que la aplicación lleve a cabo su tarea: lib En esta carpeta se encuentran las librerı́as que usa la aplicación Monitor para llevar a cabo su tarea. Las librerı́as usadas son las siguientes: Interfaz gráfica: appframework, swing-layout y swing-worker. Envı́o de alertas: dsn, imap, mailapi, smtp, pop3. Parse de XML: jaxp-api y jaxp-ri. Comunicación con MySQL: el driver de MySQL para JDBC. resources Esta carpeta contiene los archivos properties de configuración de la aplicación, a continuación se detallan la configuración almacenada en cada archivo: 2 eXtensible Markup Language (lenguaje de marcas extensible) 19 AppLog.properties: contiene el path donde se almacenan los errores que la aplicación Monitor encuentre en su operación. Messages.properties: contiene la configuración para poder enviar los correos electrónicos. MySQL.properties: contiene la información de comunicación con MySQL. Entre la información que tiene es la IP, puerto, usuario, password y tabla de operación de MySQL. SED.properties: contiene la información de comunicación con SED. Shell.properties: contiene los comandos requeridos para conocer el estado de los servidores durante el censo. Status.properties: Lista los posibles estados del censo del servidor. Tomcat.properties: contiene la información de comunicación con SED. app.properties: este archivo almacena la configuración que el usuario puede modificar como el path donde se guardan los logs del censo, la hora de corte, el retardo. También almacena el nombre del archivo xml con los usuarios, definición de colores para la interfaz de usuario, las expresiones regulares usadas para validar los datos de los usuarios y el nombre de las unidades en la hora de corte. resources/chunk almacena los archivos de tipo HTML para la generación de las alertas. resources/data almacena el archivo XML con los usuarios. resources/media almacena los archivos gráficos usados por la aplicación. resources.text almacena el archivo con la licencia que muestra la aplicación. 3.3.2. Carga de configuración La aplicación fue desarrollada para poder hacerla flexible a la hora de cambios ya sea por parte del usuario o por parte del administrador del host (cambio de IP y/o puerto de un servidor). Para eso la información almacenada en los archivos properties de la sección anterior es leı́da por la aplicación y por componentes de esta. Esta lectura se hace al iniciar la aplicación. La ventaja de esta implementación es que cambios pequeños (como la IP del 20 servidor MySQL) no requieren volver a compilar toda la aplicación, sino solamente cambiar la IP en el archivo necesario y reiniciar la aplicación. 3.3.3. Censo La aplicación Monitor tiene dos threads principales; uno es el thread de la interfaz gráfica y el otro es el que mantiene el censo de los servidores. Este último thread usa instancias de las clases de los servidores (MySQL, SED y Tomcat) y estas a su vez usan una instancia de la clase llamada Shell que se encarga de llevar a cabo las dos primeras pruebas para la verificación del estado del servidor, mientras que para la tercera prueba la clase del servidor es la encargada de hacerlo (a través de un thread): ¿Existe el proceso? La instrucción usada para conocer la existencia del proceso del servidor en el host es a través de la siguiente lı́nea de shell ps aux | grep -v grep | grep NOMBREPROCESO | awk {’print $2’} Lo que se puede ver como: lista (con un formato especial) todos los procesos que se encuentran en el host, después filtra en base a NOMBREPROCESO y (en caso de existir) al final sólo muestra el id del proceso (PID). ¿Se encuentra activo el puerto? Para conocer si el puerto se encuentra activo y tiene una operación normal a través de este se usa uno de los dos siguientes comandos: nmap IP -p PORT nmap -sU IP -p PORT Estos comandos hacen una prueba directamente sobre el puerto para obtener la información de este. El primer comando es para pruebas con TCP (servidores MySQL y Tomcat) mientras que el segundo comando es para pruebas con UDP (servidor SED). Se puede operar con el servidor Esta tarea trata de hacer una petición al servidor como si fuera un cliente. Como se comento al inicio cada clase es la encargada de hacer esta prueba: 21 • Tomcat Se hace una petición a través de HTTP, si hay respuesta el servidor se encuentra en buen funcionamiento. • MySQL Se hace una consulta SQL cuya respuesta debe tener un registro (la consulta se limita a que haya sólo un registro) con lo cual se considera que funciona correctamente. • SED Se envı́a un mensaje UDP especificando el mensaje de estado y el servidor regresa un mensaje con la respuesta de OK. Con el resultado de estas tareas se establece una instancia de la clase Status, que contiene el estado del servidor, que es usada al momento de reportar tanto en pantalla como en el archivo de log, también es registrada en la lista de usuarios. Terminado el censo se verifica si alguna lista de incidencias llego al lı́mite de alguno de los usuarios registrados. 3.3.4. Configuración Toda la configuración se encuentra dentro de alguno de los archivos properties de la aplicación. Con esto ya se puede leer o modificar (Java tiene una clase llamada Properties que hace un uso transparente de estos archivos). Cuando se cambia la configuración el thread que se encuentra haciendo el censo es eliminado y se vuelve a crear otra instancia (esta se encarga de volver a leer la configuración original). 3.3.5. Datos de usuarios El archivo XML que almacena los datos de los usuarios tiene la siguiente estructura: <?xml ?> <users> <user id="12345"> <name val="user1"/> <lastname val="user1"/> <phone val="12345678"/> <mail val="usuario@mail.com"/> <Tomcat> <error occurrence="2" frequency="1" period="m"/> <halt occurrence="3" frequency="2" period="m"/> 22 </Tomcat> <MySQL> <error occurrence="0" frequency="0" period="h"/> <halt occurrence="1" frequency="5" period="h"/> </MySQL> <SED> <error occurrence="2" frequency="1" period="m"/> <halt occurrence="4" frequency="3" period="h"/> </SED> </user> </users> Los elementos name, lastname, phone y mail no requieren de ninguna interpretación ya es transparente la información mostrada en la aplicación. Los elementos MySQL, SED y Tomcat son la configuración de los servidores. El elemento error es el que almacena los datos de lı́mite para el estado ERROR y el elemento halt alamacena el lı́mite para el estado HALT, el atributo ocurrence indica el número de incidencias máximo y el atributo frequency indica el tiempo máximo, mientras que period indica si es en minutos (m) o en horas (h). 3.3.6. Manejo de usuarios Con los datos cargados del archivo XML de usuarios se genera en memoria una lista de estos (se usa una instancia de la clase Vector de Java). Con esto se puede manejar a los usuarios de manera sencilla y las operaciones de altas, bajas y cambios son más sencillas. 3.3.7. Mensajes Los mensajes son correos electrónicos que serán enviados al usuario (al cumplirse los lı́mites configurados). Una vez que se termina de censar a los servidores, el estado de estos se envı́a a los usuarios 23 Capı́tulo 4 Black Box Web 4.1. Propuesta La aplicación Black Box Web tiene la responsabilidad de mantener la disponibilidad de los datos obtenidos de la caja negra a través de un navegador web usando la infraestructura de telecomunicaciones desarrollada para el sistema. 4.1.1. Arquitectura general La aplicación Black Box Web se encontrará en el ambiente del host Moxa, esto implica que los recursos (procesador y memoria) que debe de usar la aplicación tienen que ser mı́nimos. El servidor web presente en este host es Apache versión 2 y configurado con PHP. 4.1.2. Requerimientos funcionales A continuación se detallan los requerimientos funcionales que cumple la aplicación Black Box Web. Dirección Se debe poder determinar la dirección IP del host Moxa a través del número de carro PR del tren en el que se encuentra embarcado. Ya con esta dirección se accede a la aplicación a través de un navegador web. 24 Seguridad Para tener un mayor grado de seguridad, se pide usuario y contraseña para poder acceder a la aplicación. Listado de archivos La aplicación muestra la lista de los archivos (datos descargados de la caja negra) que se encuentran en el host Moxa. Esta lista se divide en los archivos que ya han recolectados (procesados por el servidor SED) y los que no han sido enviados. Se debe tener la posibilidad de descargar estos archivos. Actualización de los datos de la caja negra Debido a que no necesariamente se va ejecutar una actualización de los datos de la caja negra en el host Moxa, la aplicación permite ejecutar esta tarea que se reflejará, en caso de que haya datos nuevos, en el listado de archivos no enviados del host Moxa. El usuario debe de tener una forma visual de verificar cuando esta tarea ha terminado. Licencia Se tiene una sección que muestra la licencia asociada a esta aplicación, ası́ como elementos gráficos de las instituciones involucradas. 4.1.3. Requerimientos no funcionales Mantenimiento El mantenimiento será llevado a cabo por otras personas ajenas al equipo original de desarrollo, por lo que la aplicación debe de estar adecuadamente documentada y permitir que el costo del mantenimiento sea pequeño. Seguridad A esta aplicación sólo debe de entrar el personal autorizado. Debido al control general del sistema, la seguridad en la aplicación debe sólo pedir un usuario y password configurado, relegando la seguridad principal a la infraestructura y procesos de las instalaciones del STC. 25 Figura 4.1: Mapa de sitio de la aplicación Black Box Web. Usabilidad La usabilidad es importante para la aplicación. El perfil de conocimientos, de los usuarios de esta aplicación, es de técnicos con conocimientos en el uso de una computadora. Escalabilidad No se tiene contemplado escalar la aplicación a corto plazo. Sin embargo se desea que el grado de escalabilidad se encuentre en un punto intermedio. 4.2. Desarrollo A continuación se detallan los elementos del mapa de sitio (figura 4.1) de la aplicación Black Box Web. 26 Inicio muestra la página inicial, se detalla las operaciones que se pueden realizar a través de esta aplicación Listar muestra los archivos de la caja negra que se encuentran presentes en el host Moxa, estos incluyen los archivos que han sido enviados al servidor SED y los que no han sido enviados Actualizar inicia la descarga de información de la caja negra al host Moxa Acerca de Muestra información general de la aplicación. 4.2.1. Arquitectura La aplicación Black Box Web se encuentra operando en el host Moxa, donde también otras aplicaciones del sistema desarrollado se encuentran operando. 4.2.2. Plataforma de desarrollo C++ El sistema operativo Linux del host Moxa tiene instalado el interprete de PHP v5 (sobre un servidor Apache), pero se decidió desarrollar esta aplicación con C++ por las siguientes razones: Lenguaje compilado: los lenguajes de programación compilados son más rápidos que los lenguajes interpretados. Recursos: los lenguajes compilados tienen mejor uso de los recursos. Librerı́as el sistema operativo del host Moxa permite el uso de librerı́as estandar de C/C++. Ambiente: el host Moxa viene con un conjunto de herramientas para poder desarrollar con C/C++ en ambientes Linux o Windows. Apache Ant Apache Ant permite mantener organizado éste proyecto en los siguientes elementos: archivos fuentes de C++, archivos HTML, CSS, Javascript e imágenes. Véase el apéndice C. 27 4.2.3. Desarrollo de requerimientos Obtener la dirección IP del host Moxa Para poder obtener la IP del host Moxa al que se quiere acceder se desarrollan dos aplicaciones: Una aplicación es una interfaz gráfica para que a través del número PR del tren haga un broadcast a la red y obtener la IP del host Moxa correspondiente. Esta aplicación debe poder operarse en muchos tipos de Sistemas Operativos. La otra es un servidor que se encuentra en el host Moxa cuyo propósito es responder con la IP al broadcast, presente en la red, cuando el mensaje de éste tenga el número PR del host Moxa. Esta no es parte de este trabajo. Listar archivos Esta sección tendrá la responsabilidad de mapear los archivos generados por el host Moxa. A través de un archivo de configuración se puede cambiar el directorio donde se almacenan estos archivos, lo que no hace requerir recompilar toda la aplicación para este tipo de cambios. Actualizar La actualización de los datos ejecuta un programa (desarrollado desde cero) que se encarga de obtener los datos de la caja negra y generar el archivo correspondiente. Para poder mostrar cuando la tarea ha sido terminada se agrega un script que hace peticiones al host Moxa preguntando si el proceso ha terminado (cuando el programa de actualización no se encuentra en la lista de procesos del sistema operativo). 4.3. Implementación Ahora se detallan los elementos técnicos que ayudan a la aplicación Black Box Web mantener los datos disponibles a través de una página web. 28 4.3.1. BroadCast La aplicación BroadCast se desarrollo con Java para permitir poder operar en distintos tipos de Sistemas Operativos. La comunicación con el servidor del host Moxa se hace a través del protocolo UDP a través de un thread, en el mensaje del paquete se envı́a el número de PR del tren y la respuesta (en caso de existir) viene con la IP del host Moxa correspondiente. En caso de no existir la respuesta, la aplicación termina con el thread de comunicación. 4.3.2. Carga de configuración Cada programa dentro de la aplicación hace una carga básica de configuración. Los elementos de esta carga son los elementos presentes en la carpeta resources: app.properties. Tiene propiedades de configuración de la aplicación, como el directorio donde se encuentran los archivos de datos, templates de HTML, comandos para verificar el estado de la actualización. menu.properties. Una pequeña parametrización del menú de la aplicación. 4.3.3. Listar archivos Para poder mostrar y permitir la descarga de los archivos se hace una lista de enlaces sı́mbolicos, dentro del contexto de la aplicación web, de los archivos generados por el host Moxa. 4.3.4. Actualizar archivos Para actualizar los datos se ejecuta un script externo a la aplicación web. Para verificar el estado de la operación con javascript se genera un evento cı́clico que a través de AJAX1 y JSON2 se ejecuta una acción en la aplicación que verificalor. La forma de verificar el estado de la actualización es usando los comandos ps y grep (cómo en el censo de la aplicación Monitor). 1 2 Asynchronous Javascript And XML Javascript Object Notation 29 4.3.5. MVC Para llevar a cabo el desarrollo de la aplicación Black Box Web se usó de manera importante el patrón MVC (Modelo-Vista-Controlador). Esta implementación del MVC se creo desde cero dada la arquitectura del host Moxa, además de que permite escalar y mantener la aplicación de manera más sencilla. Los componentes del MVC fueron implementados de la siguiente manera: Modelo Debido a que es una aplicación pequeña, no se requirió generar formalmente este componente como una clase. Sin embargo, para esta implementación el modelo es representado por la lista de archivos de datos que el host Moxa genera. Vista Para la vista se creo una clase llamada Template, que también fue diseñada a través del uso del patrón de diseño Decorator, que usa un archivo de texto plano con marcadores de posición. Este archivo por convención para esta aplicación es un archivo html con marcadores de posición, cadenas de texto que indican donde poner el contenido. Controlador El controlador es un programa de C++ que tiene el método de entrada main y usa una instancia de Template para mostrar el resultado. Este programa es un archivo CGI 3 . 3 Common Gateway Interface 30 Apéndice A Monitor: Manual de Usuario La aplicación Monitor sirve para estar censando el funcionamiento de los servidores MySQL (base de datos), SED (servidor extractor de datos) y Tomcat (servidor web). Al estar haciendo el censo de los servidores la aplicación guarda el estado de éstos en un archivo de log y lo muestra en pantalla. Los estados posibles de los servidores son: HALT El servidor no se encuentra operando en el Sistema Operativo. ERROR El servidor se encuentra operando, pero no se encuentra funcionando adecuadamente. OK El servidor opera adecuadamente. También existen usuarios a los cuales la aplicación tendrá en cuenta para notificar cuando se encuentren los estados de HALT o ERROR. La polı́tica de notificación es configurada por cada usuario, tipo de servidor y tipo de incidencia. A.1. Instalación Para la instalación es necesario contar con los siguientes elementos en el host sobre el que se va a hacer la instalación: Sistema Operativo. Esta aplicación requiere un Sistema Operativo tipo Linux, sin embargo la compilación se puede generar en cualquier Sistema Operativo configurado con la versión de Java necesaria. 31 Usuario. El usuario, con el que se va a hacer la instalación, debe tener permisos de administrador. Java. La versión mı́nima requerida de Java es 1.5 (se puede tener el JDK de Oracle o el OpenJDK). La configuración de Java permite tener acceso a la JVM desde cualquier lugar del sistema operativo. Apache Ant. La versión mı́nima de Apache Ant es 1.7. La configuración de la instalación de Apache Ant permite tener acceso a este programa desde cualquier lugar del sistema operativo. La carpeta del código fuente de la aplicación se encuentra en la carpeta Proyecto/src/Monitor y los elementos presentes en esta carpeta son: build.properties: Archivo con definiciones de variables para el archivo de construcción build.xml. build.xml: Archivo de construcción para Apache Ant. lib: Carpeta con las librerı́as necesarias para la aplicación. nbproject: Carpeta de configuración para Nerbeans. src: Carpeta con el código fuente de la aplicación. Para llevar a cabo la instalación se requiere ejecutar, sobre la carpeta de la aplicación, la siguiente instrucción a través de la terminal: sudo ant install esta instrucción compila el código fuente, que genera las carpetas build y dist, copia los archivos necesarios a la carpeta /opt/Monitor y genera el acceso a la aplicación en el menú de Aplicaciones ! UAM ! Monitor. En la carpeta de la instalación se genera la siguiente estructura: Monitor.jar: Archivo de la aplicación. lib: Librerı́as necesarias para la aplicación. logs: Carpeta que contendrá por default los archivos de logs generados por el censo. resources: Carpeta con los archivos de configuración de la aplicación. 32 A.2. Uso A continuación se muestran las pantallas, para que sirven y las operaciones que se pueden hacer. A.2.1. Inicio Para iniciar la aplicación el enlace lanzador de esta está en el menú Aplicaciones ! UAM ! Monitor (figura A.1), una vez que se lance la aplicación se pedirá la contraseña del usuario (que debe de tener permisos de superadministrador). Si se desea iniciar la aplicación a través de la terminal, en la carpeta de la aplicación, que se encuentra en /opt/Monitor, se ejecuta la siguiente instrucción: sudo java -jar Monitor.jar Figura A.1: Iniciar la aplicación Black Box Web. 33 A.2.2. Censo En la pestaña Bitácora (figura A.2) se muestra el resultado que la aplicación obtiene al estar realizando la tarea del censo. La información mostrada en esta pestaña es la misma que se encuentra en los archivos de logs. Figura A.2: Despliegue del resultado del censo a los servidores. A.2.3. Configuración En la pestaña Configuración (figura A.3) se permite modificar los siguientes parámetros: Path Este parámetro permite establecer el directorio donde la aplicación va a generar los archivos de log. Al cambiar este directorio no se copian todos los archivos de logs que hayan sido generados. Retraso Este parámetro sirve para establecer un periodo de inactividad de la aplicación una vez realizado el censo. Esto permite que las operaciones correctivas sobre los servidores puedan llevarse adecuadamente. 34 Hora de corte Este parámetro estable cuando se termina un log y empieza otro. Sirve para los archivos que genera la aplicación. Figura A.3: Configuración de la aplicación. A.2.4. Usuarios En la pestaña Usuarios (figura A.4) se permite el manejo de los usuarios. Las operaciones posibles sobre la lista de usuarios son: alta, modificación y eliminación. Los datos que necesarios para el usuario registrado son: ID Identificador de la persona empleada usado por el STC Nombre Nombre de la persona Apellidos Apellidos de la persona Teléfono Teléfono de la persona 35 Figura A.4: Administración de usuarios. Correo electrónico Correo electrónico donde serán enviadas las notificaciones Configuración de incidencias de los Servidores Esta información sirve para establecer el lı́mite. A.2.5. Acerca de Monitor La pestaña Acerca de Monitor (figura A.5) sirve para mostrar solamente información general de la aplicación. 36 Figura A.5: Información de la licencia de la aplicación. 37 Apéndice B Black Box Web: Manual de Usuario La aplicación Black Box Web sirve para poder acceder a los datos almacenados en el host Moxa a través de un navegador web. Los datos almacenados en el host son almacenados como archivos, y la aplicación muestra estos archivos. B.1. Compilación de BroadCast Esta herramienta, para obtener la IP del host Moxa a través del número PR del tren, no se instala, sólo se compila y como fue desarrollada con Java, se puede distribuir sin ningún problema a Sistemas Operativos con Java. Para llevar a cabo la compilación, es necesario contar con los siguientes elementos: Java: Esta aplicación requiere de Java 1.5 mı́nimo para poder operar. Apache Ant: Se debe tener configurada esta herramienta (que requiere de Java) para poder compilar el proyecto. B.1.1. Compilación La carpeta donde se encuentra el código fuente de la aplicación (Proyecto/src/BlackBoxWeb/BroadCast) contiene los siguientes elementos: 38 build.properties Archivo con de?niciones de variables para el archivo de construcción build.xml. build.xml Archivo de construcción para Apache Ant. lib Carpeta con las librerı́as necesarias para la aplicación. nbproject Carpeta de con?guración para Nerbeans. src Carpeta con el código fuente. y para llevar a cabo la compilación se ejecuta desde la terminal la siguiente instrucción: ant build esto genera los siguientes elementos dentro de la carpeta de compilación: build. Carpeta con la compilación de las clases Java. dist. Carpeta con la generación del archivo JAR, que es la aplicación. La carpeta dist es la más importante que se genera, ya que dentro de esta se encuentra la aplicación y su configuración. Esta carpeta se puede copiar en cualquier lugar permitido dentro de la computadora que hará uso de esta aplicación. B.2. Instalación de Black Box Web Para poder llevar a cabo la instalación es necesario contar con los siguientes elementos: Apache Ant: Se debe tener configurada esta herramienta para compilar el proyecto. Compilador de C++: El compilador para poder generar programas para el host Moxa. Este compilador viene en el conjunto de herramientas de desarrollo para el host Moxa. Host Moxa: Se debe tener acceso al host Moxa, habitualmente SSH, para poder copiar los archivos necesarios. 39 B.2.1. Compilación Para compilar y llevar a cabo las tareas necesarias para la generación del proyecto se usa la instrucción a través de la terminal: ant build Este comando lleva a cabo la tarea de compilar y preparar los archivos (javascript y css) necesarios. Instalación en el host Moxa Una vez lista la compilación, se llevan a cabo las siguientes tareas para integrar la aplicación en el host Moxa: Se crea en el host Moxa la carpeta /home/htdocs/BlackBoxWeb Se copia el contenido de la carpeta build del proyecto a la carpeta /home/htdocs/BlackBoxWeb del host Moxa. Se modifica la propiedad del data.path del archivo /home/htdocs/BlackBoxWeb/app.properties, poniendo el path donde se encuentren los archivos generados por el host Moxa. Se modifica el archivo de configuración de Apache HTTP Server. Este archivo se encuentra en el directorio /etc/apache/conf/httpd.conf y se agregan las siguientes lı́neas <Directory "/home/htdocs/BlackBoxWeb"> Options +ExecCGI +FollowSymLinks AddHandler cgi-script .cgi AuthType Basic AuthName "Area restringida" AuthUserFile /home/htdocs/.htpassword DirectoryIndex index.html index.xhtml IndexController.cgi </Directory> En el host Moxa crear el archivo .htpassword y agregar los usuarios con el permiso para poder operar en el host Moxa. Para esto se usa el siguiente comando desde el host Moxa: 40 ./htpasswd -c /home/htdocs/.htpassword {nombre_usuario} donde {nombre usuario} es el nombre que será dado al usuario que tenga acceso a los datos del host Moxa. Reiniciar el servidor Apache. Para llevar a cabo esta tarea se ejecuta, en la terminal del host Moxa, la siguiente instrucción: ./apachectl restart B.3. Uso B.3.1. Broadcast Para poder acceder a los datos del host Moxa primero se debe de ejecutar la aplicación BroadCast para obtener la IP del host Moxa correspondiente al número de PR. Para ejecutar dicha aplicación acceder a través de la terminal hasta donde se encuentre y ejecutar la siguiente instrucción: java -jar Broadcast.jar lo que inicia la aplicación (figura B.1). B.3.2. Black Box Web Ya con la IP obtenida (por ejemplo 192.168.0.20), a través de la aplicación BroadCast, se forma la URL http://192.168.0.20/BlackBoxWeb y se dirige el navegador hacia esta. Ya con esto la aplicación pedirá un usuario y un password para poder operar con ella. Inicio Muestra la pantalla de inicio de la aplicación (figura B.2). Listado de archivos En esta sección se muestran los archivos (datos) obtenidos de la caja negra del tren (figuras B.3, B.4 y B.5). 41 Figura B.1: Aplicación de Broadcast. Figura B.2: Página inicial de la aplicación Black Box Web. 42 Figura B.3: Página donde se muestra los tipos de archivos que se pueden obtener. Figura B.4: Página donde se muestra la lista de los archivos que ya han sido enviados al SED. 43 Figura B.5: Página donde se muestra la lista de los archivos que no han sido enviados al SED. Actualización de archivos Inicia la actualización de los archivos (datos) de la caja negra (figuras B.6 y B.7). Licencia Se muestra la licencia de la aplicación (figura B.8). 44 Figura B.6: Página donde se muestra el inicio de la actualización Figura B.7: Página donde se muestra el mensaje de la finalización de la actualización. 45 Figura B.8: Página donde se muestra la licencia de la aplicación. 46 Apéndice C Apache ANT Apache Ant es una librerı́a y herramienta de lı́nea de comandos, escrita en Java, cuyo propósito general es llevar a cabo tareas repetitivas dentro del proceso de desarrollo de software. Se diferencia de otras herramientas de este tipo, por ejemplo Make, por ser multiplataforma (debido a Java) y que las tareas que va a realizar se describen a través de un archivo XML. El uso más conocido es para la construcción de aplicaciones Java, ya que proporciona muchas tareas que permiten compilar, ensamblar, probar y ejecutar las aplicaciones Java. Sin embargo, Ant también puede ser usado efectivamente en aplicaciones de C o C++, o más generalmente, Ant puede ser usado para manejar cualquier tipo de proceso de desarrollo de software que pueda ser descrito en términos de los elementos targets y tasks de Apache Ant. A continuación se detallan los componentes principales de Apache Ant que han sido usados en este trabajo. C.1. Instalación Apache Ant es una herramienta Java, por lo que es necesario tener instalado y configurado el ambiente Java. El programa Apache Ant puede ser obtenido desde el sitio web1 , ası́ como información para la instalación y configuración de esta herramienta. 1 http://ant.apache.org/ 47 C.2. Uso Apache Ant requiere de un archivo de construcción donde espera encontrar la definición de los procesos que puede llevar a cabo. C.2.1. Archivo de construcción Los archivos de construcción son escritos en XML y cada archivo contiene un sólo proyecto y al menos un target. Los target contienen task. Los task pueden tener un identificador (único) y se puede referenciar a través de este. Ahora se muestra un ejemplo básico de este tipo de archivos: <project name="MyProject" default="dist" basedir="."> <description> simple example build file </description> <!-- set global properties for this build --> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <target name="init"> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure used by compile --> <mkdir dir="${build}"/> </target> <target name="compile" depends="init" description="compile the source " > <!-- Compile the java code from ${src} into ${build} --> <javac srcdir="${src}" destdir="${build}"/> </target> <target name="dist" depends="compile" description="generate the distribution" > <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> 48 <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/> </target> <target name="clean" description="clean up" > <!-- Delete the ${build} and ${dist} directory trees --> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project> C.2.2. Tareas principales usadas en este proyecto Apache Ant tiene muchas tareas predefinidas (cómo compilar proyectos Java) y que pueden a mejorar otras tareas. Para los proyectos se configuraron las siguientes tareas: Monitor • clean Limpia la carpeta de trabajo eliminando las carpetas build y dist. • compile Compila los archivos java en la carpeta build. • jar Genera el archivo jar correspondiente. Depende de que se ejecute primero la tarea compile. • install Instala la aplicación anterior en el sistema operativo. También genera los enlaces en el menú principal. Depende de la tarea jar. Black Box Web • clean Limpia la carpeta de construcción, borrando la carpeta build. • css.concat Junta todas las hojas de estilo en una sola al momento de generar la carpeta build. Esto es para un mejor rendimiento al momento de las comunicaciones con el servidor[3]. • js.concat Junta todos los archivos javascript. 49 • cgi.compile Tarea que manda a llamar a make para compilar los archivos C++. • build Lleva a cabo todas las tareas necesarias para compilar el proyecto. 50 Apéndice D Patrones de Diseño Un patrón de diseño describe un problema que ocurre una y otra vez en nuestro entorno, ası́ como la solución a ese problema, de tal modo que que se pueda aplicar esta solución un millón de veces, sin hacer lo mismo dos veces. Aunque este concepto nació en el ambiente de la arquitectura, también es válido para el desarrollo de software. D.1. MVC El Patron Modelo-Vista-Controlador (MVC) se usa para construir interfaces de usuario. Se analiza este Patrón para esclarecer de que se tratan los Patrones de Diseño. MVC consiste en tres objetos: Modelo: es el objeto de la aplicación, comunmente representada por los datos. Vista: es el objeto que genera la representación gráfica de los datos Controlador: este objeto se encarga de como reacciona la interfaz gráfica a la entrada del usuario. Antes de MVC, los diseños de interfaces gráficas de usuario tendı́an a agrupar estos objetos en uno sólo. MVC los separa para incrementar la flexibilidad y la reutilización. 51 Figura D.1: Esquema de MVC. MVC desacopla las vistas de los modelos estableciendo entre ellos un protocolo de suscripción/notificación. Una Vista debe asegurarse de que su apariencia refleja el estado del modelo. Cada vez que cambian los datos del modelo, este se encarga de avisar a las vistas que dependen de él. Como respuesta a dicha notificación, cada vista tiene la oportunidad de actualizarse a sı́ misma. Este enfoque permite asignar varias vistas a un modelo para ofrecer diferentes presentaciones. También se pueden crear nuevas vistas de un modelo sin necesidad de volver a escribir éste. D.2. Singleton D.2.1. Próposito Garantizar que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella. D.2.2. Motivación Es importante que algunas clases tengan exactamente una instancia. Por ejemplo, aunque puede haber muchas impresoras en un sistema, sólo deberı́a 52 de haber una cola de impresión. Igualmente sólo deberı́a de haber un sistema de ficheros y un gestor de ventanas. Un sistema de contabilidad estará dedicado a servir a una única compañı́a. ¿Cómo podemos asegurar que una clase tenga una única instancia y que sea fácilmente accesible? Una variable global hace accesible a un objeto, pero no nos previene de crear múltiples instancias de objetos. Una solución mejor es hacer que sea la propia clase la responsable de su única instancia. La clase puede garantizar que no se puede crear ninguna otra instancia (interceptando las petociones para crear nuevos objetos), y puede proporcionar un moid de acceder a la instancia. D.2.3. Aplicabilidad El patrón Singleton se usa cuando deba de haber exactamente una instancia de una clase, y ésta debe ser accesible a los clientes desde un punto de acceso conocido la única instancia deberı́a ser extensible mediante herencia, y los clientes deberı́an ser capaces de usar una instancia extendida sin modificar su código. D.2.4. Consecuencias El patrón Singleton proporciona varios beneficios: 1. Acceso controlado a la única instancia. Puesto que la clase Singleton encapsula su única instancia, puede tener un control estricto sobre cómo y cuándo acceden a ella los clientes. 2. Espacio de nombres reducido. El patrón Singleton es una mejora sobre las variables globales. Evita contaminar el espacio de nombres con variables globales que almacenen las instancias. 3. Permite el refinamiento de operaciones y la representación. Se puede crear una subclase de la clase Singleton, y es fácil de configurar una aplicación con una instancia de esta clase extendida. Podemos configurar la aplicación con una instancia de la clase necesaria en tiempo de ejecución. 53 4. Permite un número variable de instancias. El patrón hace que sea más fácil cambiar de opinión y permitir más de una instancia de la clase Singleton. Además, podemos usar el mismo enfoque para controlar el numero de instancias que usa una aplicación. Sólo se necesitarı́a cambiar la operación que otorga acceso a la instancia del Singleton. D.3. Decorator D.3.1. Próposito Asigna responsabilidades adicionales a un objeto dinámicamente, proporcionando una alternativa flexible a la herencia para extender la funcionalidad. D.3.2. Motivación A veces queremos añadir responsabilidades a objetos individuales en vez de a toda una clase. Por ejemplo, un toolkit de interfaces de usuario deberı́a permitir añadir propiedades (como bordes) o comportamientos (como capacidad de desplazamiento) a cualquier componente de la interfaz de usuario. Un modo de añadir responsabilidades es a través de la herencia. Heredar un borde de otra clase pondrı́a un borde alrededor de todas las instancias de la subclase. Sin embargo, esto es inflexible, ya que la elección del borde se hace estáticamente. Un cliente no puede controlar cómo y cuándo decorar el componente con un borde. Un enfoque más flexible es encerrar el componente en otro objeto que añada el borde. Al objeto confinante se le denomina decorador. El decorador se ajusta a la interfaz del componente que decora de manera que su presencia es transparente a sus clientes. D.3.3. Aplicabilidad Use el Decorador para añadir objetos individuales de forma dinámica y transparente, es decir, sin afectar a otros objetos. para responsabilidades que pueden ser retiradas. 54 cuando la extensión mediante la herencia no es viable. A veces es posible tener un gran número de extensiones independientes, produciéndose una explosión de subclases para permitir todas las combinaciones. O puede ser que una definición de una clase esté oculta o que no esté disponible para ser heredada. D.3.4. Consecuencias El patrón Decorador tiene al menos dos ventajas y dos inconvenientes fundamentales: 1. Más flexibilidad que la herencia estática. El patrón Decorator proporciona una manera más flexible de añadir responsabilidades a los objetos que la que podı́a obtenerse a través de la herencia (múltiple) estática. Con los decoradores se pueden añadir y eliminar responsabilidades en tiempo de ejecución simplemente poniéndolas o quitándolas. Por el contrario, la herencia requiere crear una nueva clase para cada responsabilidad adicional. Esto da lugar a muchas clases diferentes e inclementa la complejidad de un sistema. Por otro lado, proporcionar diferentes clases Decorador para una determinada clase Componente permite mezclar responsabilidades. Los Decoradores también facilitan añadir una propiedad dos veces. 2. Evita clases cargadas de funciones en la parte de arriba de la jerarquı́a. El Decorador ofrece un enfoque para añadir funcionalidades que consiste en pagar sólo aquello que se necesita. En vez de tratar de permitir todas las funcionalidades inimaginables en una clase compleja y adaptable, podemos definir primero una clase simple y añadir luego funcionalidad incrementalmente con objetos Decorador. La funcionalidad puede obtenerse componiendo partes simples. Como resultado, una aplicaci?on no necesita pagar por caracterı́sticas que no usa. También resulta fácil definir nuevos tipos de Decoradores independientemente de las clases de objetos de las que heredan, incluso para extensiones que no hubieran sido previstas. Extender una clase compleja tiende a exponer detalles no relacionados con las responsabilidades que estamos añadiendo. 3. Un decorador y su componente no son idénticos. Un decorador se comporta como un revestimiento transparente. Pero desde el punto de vista 55 de la identidad de un objeto, un componente decorado no es idéntico al componente en sı́. Por tanto, no deberı́amos apoyarnos en la identidad de objetos cuando estamos usando decoradores. 4. Muchos objetos pequeños.Un diseño que usa el patron Decorador suele dar como resultado sistemas formados por muchos objetos pequeños muy parecidos. Los objetos sólo se diferencian en la forma en que están interconectados, y no en su clase o en el valor de sus variables. Aunque dichos sistemas son fáciles de adaptar por parte de quienes los comprenden bien, pueden ser difı́ciles de aprender y depurar. 56 Bibliografı́a [1] Apache Ant. Apache http://ant.apache.org/manual/index.html. ant manual. [2] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Patrones de Diseño. Addison Wesley. [3] Yahoo. Yui compressor. http://developer.yahoo.com/yui/compressor/. 57