PoC: Reportes con Jasper y Ruby

No siempre se tiene la oportunidad de validar una idea con una prueba de concepto antes de comenzar a desarrollarla en código, si bien esto es deseable y ayuda en gran parte a la planeaciones y forma en como se ataca un problema, usualmente es ignorado, en esta ocasión tuve la oportunidad de hacer uno y quiero platicarme mi experiencia.

Comenzamos aclarando Proof of Concept (PoC) es una técnica común actualmente para comprobar que un grupo de conceptos/tecnologías pueden trabajar juntas para resolver una idea, se centra completamente en la viabilidad haciendo a un lado factores que pueden limitar este ejercicio como usabilidad. No debemos confundirnos con un prototipo, cuya finalidad es muy diferente a un PoC, como se muestra en el diagrama de venn a continuación:

El problema y la posible solución

Ahora si teniendo claro a que debemos enfocarnos, el momento de platicarles el problema y la idea a validar.

Reportes, este instrumento que se usa para tomar desiciones o simplemente para saber el estado general de tu producto, es una parte importante y muchas veces un dolor de cabeza el hacerlo bien. Y aquí es donde comienza mi aventura, con un producto que tiene un modulo de reportes que ya no es suficiente a las necesidades teniendo problemas como:

  • Agrega complejidad al codigo
  • Es difícil de mantener y extender
  • Tiene un gran impacto en el performance
  • Ya no cubre todas las necesidades

Como sabrán ruby no es especialmente bueno en tareas de reportes, donde muy comúnmente terminamos desarrollando soluciones propias que llevan tiempo y se requiere de experiencia. Sin embargo ya existen soluciones que nos faciliten esto, me refiero al mundo de Java y Jasper Reports una herramienta de software libre diseñada especialmente para generar reportes, pero que significaría el utilizarlo y de que forma solucionaríamos los problemas:

  • Haciendo uso de un microservicio para reducir la complejidad de código.
  • Delegando la creación de plantillas de reportes a Jasper Studio
  • Creando una base de datos paralela que pueda consumir Jasper Server aliviando el servidor de la aplicación principal con requests costosos.

Parece que estas acciones podrían darnos la flexibilidad que buscamos, sin comprometer código ni performance, es tiempo de validar la solución.

Plan de Ataque

La infraestructura que describe en la solución seria algo similar a este diagrama:

overview

Siendo el microservicio nuestra area de oportunidad, ya que no deseamos agregar complejidad a la aplicación principal y tenemos muy poco control en el ecosistema de Jasper de nuestra infraestructura.

Microservicio

El microservicio sera el corazón que orqueste todo y el cual tendremos control en caso de una emergencia o de que los requerimientos cambien incluido un servicio diferente de reportes. Para lograr esto tendremos una interfaz común API Rest, un sistema de trabajos en cola como Sidekiq y un wrapper para comunicarnos el servidor de Jasper, todo esto junto nos da la suficiente modul para hacer cambios futuros, de esta forma:

microservice

Integración

Para la integración con la aplicación principal necesitamos que se algo menos intrusión posible, para eso haremos uso de un script embebido de javascript, el cual se hará cargo de toda la comunicación con nuestro microservicio de reportes e incrustando las vistas y controles necesarios para interactuar, de esta forma:

integration

Si te cuesta trabajo visualizarlo, imagina este script como los usados por los sistemas de pagos como stripe, o de atención al cliente como zendesk, entre otros.

Usando JasperSoft

Jasper tiene sus propias aplicaciones para trabajar con reportes, esta prueba de concepto no se mete mucho en este flujo pero es importante saber que alguien del equipo tendrá que diseñar los reportes en Jasper Studio, incluso generar las consultas SQL que traen los datos, y posteriormente sincronizar los reportes con el servidor de Jasper.

jasper_studio

Afortunadamente hay mucho material de ayuda en internet que te va ayudar agilizar su uso, incluso tiene una muy buena comunidad que te puede responder dudas específicas, pero tomara algo de tiempo hasta que domines esta herramienta.

Demo

Es dificil tener un demo disponible para que puedan utilizarlo, asi que pongo el repositorio que utilice para este PoC donde pueden tener mas detalles de como levantar un demo aqui.

cover

En conclusion este tipo de ejercicios son muy buenos para descubrir los limites de nuestras ideas, después de la prueba de concepto la planeación, el reto técnico e incluso la certidumbre de una fecha de entrega se hizo menos por mucho, también fuimos capaz de ver si este flujo se adaptaría al proceso actual y que cambios se requerirían, considero que fue un éxito total.



Adrian Castillo

Adrian Castillo


comments powered by Disqus

Siguenos

Boletí de noticias