Visión general
La aplicación desarrollada permite monitorizar diversa información del sistema en el que ejecuta. Inicialmente, la aplicación estaba pensada para monitorizar recursos del sistema (memoria, información sobre procesos, CPU, etc) de forma similar a la herramienta Performance Monitor, es decir, de cada recurso habría instancias y de cada instancia ciertos parámetros, que al final serían los que se mostrarían. Más tarde se pensó en permitir que se pudiera añadir a la aplicación diferentes utilidades, cada una de una naturaleza distinta. Por este motivo se incluyeron los plugins en la aplicación, al estilo de GKRellM. Por último, se decidió que la aplicación permitiera visualizar ficheros de logs de distintas aplicaciones para ver el progreso de estos ficheros.
Por tanto, se decidió que la aplicación manejara una jerarquía de objetos compuesta por:
-
Tipo de componente: Un tipo de componente es una "agrupación" de componentes que tienen unas características similares. En la versión actual, se definen tres tipos de componentes:
-
Plugins: Los plugins son un tipo de componente que proporcionan algún tipo de funcionalidad extra a la aplicación. La funcionalidad que puede proporcionar un plugin puede ser totalmente diferente a la que proporciona otro, por eso se decidió crear este tipo de componentes.
-
Recursos: Los recursos son un tipo de componente que proporcionan información del sistema. Son los recursos tradicionales que muestra cualquier herramienta de monitorización.
-
Logs: Este tipo de componente proporciona la funcionalidad de visualizar ficheros de logs conforme éstos van creciendo (al estilo del "tail -f" de Linux).
-
Componente: Este objeto representa un componente, valga la redundancia, del objeto superior en la jerarquía (tipo de componente). Los componentes de cada tipo definidos en la versión actual son:
-
Plugins (para este tipo, un componente representa a un plugin):
-
Procesos del sistema: Este plugin permite visualizar todos los procesos del sistema, con alguna información sobre ellos. Además permite enviar señales a los procesos.
-
Información del sistema: Este plugin muestra información general del sistema, como puede ser el tipo de procesador, el sistema operativo, la cantidad de memoria, etc.
-
Túnel TCP: Este plugin permite realizar túneles TCP y monitorizar todo el tráfico que pasa a través del túnel, desde el origen al destino.
-
Recursos (para este tipo, un componente representa a un recurso que se puede monitorizar):
-
CPU: Este recurso muestra información sobre el uso de la CPU.
-
Memoria: Este recurso visualiza estadísticas del uso de la memoria.
-
Red: Este recurso muestra estadísticas del uso de la red.
-
Procesos: Este recurso muestra estadísticas de los procesos del sistema.
-
Logs (para este tipo, un componente representa a una aplicación cuyos ficheros de logs se quieren visualizar):
-
Servidor Web Apache: Permite visualizar los ficheros de logs del servidor Web de Apache.
-
Servidor Tomcat: Permite visualizar los ficheros de logs del servidor Tomcat.
-
Logs de Kernel: Permite visualizar los ficheros de logs del Kernel.
-
Instancia: Este objeto, como indica su nombre, representa una instancia de un componente del nivel superior. No todos los componentes tienen instancias. En realidad, este objeto actualmente sólo tiene sentido para los recursos. Las posibles instancias de cada recurso definido en la versión actual son:
-
Para el recurso CPU habrá tantas instancias como CPUs tenga el sistema.
-
Para el recurso Red habrá tantas instancias como interfaces de red haya.
-
Para el recurso Procesos habrá tantas instancias como procesos estén ejecutando en el sistema.
-
Un caso especial es el del recurso Memoria, en el que no existen instancias. En este caso aparecerá una pseudo-instancia que es la propia memoria en sí.
-
Parámetro: Este objeto representa un parámetro a visualizar de un componente determinado (o de una instancia de un componente en el caso de que éste sea instanciable). Este objeto es aplicable a los recursos y a los logs. En el caso de los recursos, un parámetro de una instancia de un recurso representa un tipo de información que se puede medir en una unidad determinada. En el caso de los logs, un parámetro de una aplicación representa un fichero a monitorizar de la aplicación. Los parámetros definidos para cada componente en la versión actual son:
-
CPU: Carga total, carga en modo usuario, carga en modo sistema, carga en modo nice y carga en modo idle.
-
Memoria: Carga de RAM y carga de swap.
-
Red: Velocidades de descarga y de carga.
-
Procesos: Uso CPU, uso CPU modo usuario, uso CPU modo sistema, tamaño memoria virtual, tamaño memoria residente y número de threads.
-
Servidor Web Apache: Fichero access.log.
-
Servidor Tomcat: Fichero catalina.out.
-
Logs de Kernel: Ficheros kern.log y syslog.
Hay que destacar que los componentes de la aplicación no están definidos en tiempo de compilación. Los componentes se definen en un fichero XML y en función de este fichero XML se mostrará una información u otra. Por tanto, todo se hace en tiempo de ejecución. De esta forma los componentes de la aplicación podrán ser ampliados sin necesidad de recompilar todo, sino que tan sólo se tendría que modificar el fichero XML que define los componentes.
Por último, decir que la aplicación es multilenguaje. Actualmente los idiomas que soporta son el inglés y el castellano, aunque añadir soporte para otro lenguaje sería una tarea bastante simple ya que no supondría modificar nada de código fuente. Tan sólo habría que modificar los ficheros de propiedades en los que se definen los textos a mostrar dependiendo del lenguaje elegido y los ficheros XML que definen los componentes a monitorizar.