Es el Webhook para registro de tramites documentarios via Facebook con preguntas y respuestas mediante DialogFlow usando el API Sky Bot
- Pre-Requisitos
- Instalación
- Desarrollo
- Despligue
- Monitoreo
- Analisis de Codigo
- Integración Continua
- Logger
- Construido
Estas instrucciones te permitirán obtener una copia del proyecto en funcionamiento en tu máquina local para propósitos de desarrollo y pruebas.
Software requerido
NodeJS >= 14.X
NPM >= 8.X
NestJS >= 9.X
DialogFlow
Redis
Servicios requeridos
Dialogflow
API Facebook MetaDevelopers
Auth0
Software opcional
Visual Studio Code ( O el editor de su preferencia)
Para ejecutar un entorno de desarrollo
Previamente ejecutar el comando en la terminal para descargar "node_modules" para el funcionamiento del proyecto
npm install
Previamente a ejecutar el servidor en desarrollo configurar el archivo .env con las credenciales del servidor correos y base de datos , ejecutar :
npm run start:dev
Dirigirse a la ruta http://localhost:3000/ donde tendra el Webhook levantado
Se tiene el archivo env.template
, el cual posee un ejemplo de cada valor de las valores de entorno para poder desplegarlas en nuestro propio ambiente local o cloud
Las siguientes instrucciones serviran para ejecutar en su entorno local la pruebas unitarias realizadas para el proyecto
Para ejecutar todos los Unit Test desarrollados en Jest y reporte de cobertura de codigo ejecutar el comando
npm run test:cov
La carpeta con la cobertura del codigo se creara en la raiz del proyecto con la siguiente ruta coverage/Icov-report/index.html el cual se puede visualizar
Los test fueron desarrollados en Jest con ayuda de SuperTest realizados a la API , para validar el funcionamiento adecuado en un entorno más real
Previamente configurar los datos de pruebas en el archivo e2e-config.spec.ts
de la carpeta e2e
Para ejecutar todos los E2E Test y reporte de cobertura de codigo ejecutar el comando
npm run test:e2e:cov
Para generar el build de producción del proyecto ejecutar el siguiente comando:
npm run build
Para desplegar el proyecto mediante Docker tiene el archivo docker-compose.prod.yaml
y la carpeta docker
Las cuales contienen los Dockerfile
y dependencias necesarias para levantar el proyecto
Se dockerizo sobre un servidor de proxy inverso nginx el cual se expone en el puerto 80 por default
Para construir la imagen y ejecutarla tenemos el siguiente comando , el cual tambien tomara nuestras variable de entorno del archivo env
Ejecutar el siguiente comando en la raiz del proyecto
docker compose -f docker-compose.prod.yaml --env-file .env up -d --build skybotwebhook nginx
En caso de requerir volver a ejecutar el contenedor del proyecto previamente creado ejecutar el mismo comando
Adicionalmente en Docker posee Prometheus y Grafana para el monitorio de nuestra API
Se configuro por default el puerto 9090 para Prometheus y para Grafana se configuro el puerto 2525
DashBoard para monitoreo del API en Grafana
Se agrego tambien LogStash , ElasticSearch con Kibana para la ingesta y monitoreo de LOGs
Se configuro por default el puerto 5061 por default para Kibana
Para implementar el ELK se tomo el repositorio de Deaviantony Docker ELK
Se construyo un DashBoard para monitoreo de LOGs con sus status y metricas
Para ejecutar los contenedores referentes al monitoreo ejecutar el comando
docker compose -f "docker-compose.prod.yaml" up -d --build elasticsearch prometheus grafana kibana logstash setup
Previamente inicializar el API en su contenedor indicado en el apartado de despliegue con la siguiente configuración en .env
LOGSTASH_ENABLED= true
LOGSTASH_PORT= 50000
LOGSTASH_NODE_NAME= SKY_BOT_WEBHOOK_LOG
LOGSTASH_HOST= host.docker.internal
GRAFANA_PASSWORD='changeme'
ELASTIC_VERSION=8.5.0
KIBANA_SYSTEM_PASSWORD= 'changeme'
LOGSTASH_INTERNAL_PASSWORD= 'changeme'
ELASTIC_PASSWORD= changeme
Si desea importar los dashboards construidos para este proyecto se encuentran en la carpeta dashboard
siendo los archivos:
- grafana-sky-bot-webhook.json para Grafana
- kibana-sky-bot-webhook.ndjson para Kibana
Pre requisitos
En la raiz del proyecto se tiene el archivo sonar-project.properties el cual tiene las propiedades necesarias para ejecutarlo sobre un SonarQube
Configurar los apartados : sonar.host.url , sonar.login sonar.password con los datos de su instancia correspondiente o usar SonarCloud con su token correspondiente
Sonaqube >= 9.X
Las pruebas fueron realizas sobre SonarQube 9.7 y SonarCloud para ejecutar el analisis de codigo ejecutar el comando para la instancia local:
npm run sonar
Reporte de Cobertura en SonarCloud
Se realizo un CI con SonarCloud para ejecuta de manera automatica los test
Se creo la carpeta .github/workflows
con el archivo build.yml
que contiene los pasos para desplegar mediante GitHub Actions nuestro CI
Posteriormente a la ejecución del workflow se generan los artifacts reports-e2e-test
, reports-unit-test
que contienen el reporte cobertura generado
Se integro winston para reemplazar el logger de NestJS para realizar seguimiento y conservacion de los logs segun sea requerido
En el archivo .env
se tienen los siguientes apartados configurados por default:
APP_NAME=SKY_BOT_WEBHOOK
DATE_PATTERN=YYYY-MM-DD
MAX_SIZE=20m
MAX_DAYS=14d
Por default la carpeta donde se guardan los logs es LOG
, el formato configurado es JSON
Las herramientas utilizadas son:
- NestJS - El framework para construir aplicaciones del lado del servidor eficientes, confiables y escalables.
- NPM - Manejador de dependencias
- Jest - Framework Testing para pruebas unitarias
- SuperTest - Libreria para probar APIs bajo HTTP
- Docker - Para el despliegue de aplicaciones basado en contenedores
- Nginx - Servidor de Proxy Inverso ligero
- Graphana - Para la creación de DashBoard interactivos
- Prometheus - Aplicación para monitorear metricas en tiempo real
- Redis - Almacén de estructura de datos en memoria de código abierto , que se utiliza como base de datos, caché.
- Kibana - Permite visualizar los datos de Elasticsearch y navegar en el Elastic Stack
- Logstash - Procesador de datos gratuito e ingesta de logs
- ElasticSearch - Motor de búsqueda y analítica distribuido, gratuito y abierto
- SonarQube - Evaluacion de codigo on premise
- SonarCloud - Evaluacion de codigo cloud
- Visual Studio Code - Editor de Codigo
- Prettier - Formateador de Codigo
- MetaDevelopers - Plataforma para integración y uso de API Facebook Oficial
- DialogFlow -Plataforma de comprensión del lenguaje natural que se utiliza para diseñar e integrar una interfaz de usuario conversacional
- TabNine - Autocompletador de Codigo
- Auth0 -Servicio para autentificación y autorización fiable y flexible
- Winston - Logger para NodeJS
Usamos GIT para el versionado.
- Jaime Burgos Tejada - Developer
- SkyZeroZx
- email : jaimeburgostejada@gmail.com