Commander reloaded: Recodificamos Commander usando Node.js y AngularJS.

Commander nació como un pequeño proyecto personal. En sus comienzos, consistía en una pequeña API Rest que permitiría principalmente arrancar y parar los servidores de los diferentes entornos de un proyecto. Su primera codificación del backend fue en Java, y no disponía de una interfaz de usuario.
El propósito inicial de poder arrancar y parar los servidores de forma remota fue olvidado pronto, no se ha utilizado nunca para ello. Sin embargo, pronto descubrimos que su verdadera utilidad era como repositorio de información. Sin pretender ser un verdadero sistema CMDB ( desde el principio dejamos claro que Commander no lo es ), nos permite almacenar la información de los servidores que integran los diferentes entornos de cada proyecto. Y al tener la capacidad de correr comandos (remotos, en los diferentes servidores) y capturar su salida, permite interrogar a los servidores, obteniendo datos relativos a la versión del software desplegada, esquema de BDD, estado (alive status), etc.
Ejemplo de archivo de configuración de commander

En cuanto codificamos la primera interfaz de usuario en entorno WEB (jquery+bootstrap), se convirtió en una herramienta de uso común en nuestra organización, sobre todo en clientes de tamaño medio (con decenas de entornos, y unos pocos centenares de servidores). Ya que nos permite mostrar toda la información relativa a los nodos de forma centralizada, y poder acceder de forma sencilla al software desplegado en cualquier entorno a través del balanceador, o a un nodo en particular. Simplemente es cómodo y conveniente, todo el mundo usa Commander.
Posteriormente, y como ejercicio de "CodeKata", codificamos de nuevo el backend con Node.js, y el frontend con AngularJS. Ha sido divertido desarrollar todo el código (back y front) en javascript, sin pretender llegar al paradigma de las aplicaciones isomórficas (que eso es otra cosa). Los que me conocéis ya sabéis por qué lo digo, no es lo mismo hacer paella que “arroz con pollo” en una paella, y aquí preferimos hacer arroz con pollo ;-) que esté bueno.

Interfaz de Commander

En la siguiente imagen ilustramos mediante un gráfico la relación entre proyecto, entorno y host (las tres entidades presentes en Commander). Como hemos dicho, Commander no es un CMDB, no es posible definir los tipos de entidades y sus relaciones. Tampoco tiene esta vista, que por cierto, ha sido generada con CmdBuild, una excelente herramienta de gestión de la configuración que estuvimos probando.

Gráfico de relaciones en Commander

Con tiempo iremos publicando aspectos interesantes que nos han surgido durante esta recodificación. Mientras tanto, si estáis interesados, podéis echarle un vistazo al código en nuestro repositorio de GitHub: back -Node.js- y front -AngularJS-

Alberto Morales Morales

Software craftsman. Passion for developing quality code that can be proud of. Happily married.

Madrid, Spain.