El analytics worker es un add-on exclusivo de Enterprise. Ejecuta el cron de ingestión que alimenta los dashboards del Cockpit (métricas tipo DORA, ciclo de vida de PR, classifier de PR basado en LLM).Documentation Index
Fetch the complete documentation index at: https://docs.kodus.io/llms.txt
Use this file to discover all available pages before exploring further.
Qué hace
Un proceso Node separado ejecutando la misma imagen delworker
(kodus-ai-worker), seleccionado en el boot vía WORKER_ROLE=analytics.
Dos crons disparan desde este proceso y solo desde él:
- Ingestión (
ANALYTICS_INGESTION_CRON, default*/30 * * * *) — lee pull requests y sesiones de review desde Mongo + el Postgres OLTP, y los proyecta al schemaanalytics. - Classifier (
ANALYTICS_CLASSIFIER_CRON, default*/15 * * * *) — llama un LLM para etiquetar cada PR con un tipo (feature/bugfix/refactor/etc).
worker principal mantiene el event loop de code review
libre de queries de ingestión largas.
Topología
El warehouse de analytics es un schema de Postgres, no una base de datos separada. Dos layouts soportados:- Postgres compartido (recomendado para self-hosted) — deja
ANALYTICS_PG_DB_HOSTvacío. El config loader cae en el fallback de las varsAPI_PG_DB_*y crea un schemaanalyticsen la misma instancia. Una sola DB para respaldar y operar. - Postgres dedicado — define el bloque
ANALYTICS_PG_DB_*apuntando a otra instancia. Úsalo cuando quieras queries analíticas totalmente aisladas del write path del OLTP.
Habilitando en self-hosted Enterprise
1. Agrega el servicio a docker-compose.yml
worker — solo WORKER_ROLE=analytics
lo cambia a modo ingestión.
2. Agrega el bloque de analytics al .env
Postgres compartido (recomendado):
3. Boot — las migrations corren automáticamente
El contenedorworker-analytics comparte el mismo prod-entrypoint.sh
que api/worker/webhooks. Con RUN_MIGRATIONS=true (default del
installer), las migrations del warehouse de analytics
(yarn analytics:migration:run:prod) corren en el primer boot, creando
el schema analytics y sus tablas.
Referencia
| Variable | Descripción | Default |
|---|---|---|
WORKER_ROLE | Debe estar en analytics en este contenedor. | requerido |
ANALYTICS_PG_DB_HOST | Host del Postgres de analytics. Vacío → reutiliza el Postgres principal. | vacío |
ANALYTICS_PG_DB_PORT | Puerto del Postgres de analytics. | 5432 |
ANALYTICS_PG_DB_USERNAME | Usuario del Postgres de analytics. Vacío → reutiliza API_PG_DB_USERNAME. | vacío |
ANALYTICS_PG_DB_PASSWORD | Contraseña del Postgres de analytics. Vacío → reutiliza API_PG_DB_PASSWORD. | vacío |
ANALYTICS_PG_DB_DATABASE | Base del Postgres de analytics. Vacío → reutiliza API_PG_DB_DATABASE. | vacío |
ANALYTICS_PG_DB_SCHEMA | Nombre del schema de las tablas del warehouse. | analytics |
ANALYTICS_PG_POOL_MAX | Límite superior del pool del Postgres de analytics. | 5 |
ANALYTICS_INGESTION_CRON | Cron schedule de la ingestión (UTC). | */30 * * * * |
ANALYTICS_CLASSIFIER_CRON | Cron schedule del classifier de tipo de PR vía LLM (UTC). | */15 * * * * |
Pausando la ingestión (avanzado)
Para detener la ingestión en runtime sin remover el contenedor, defineANALYTICS_INGESTION_DISABLED=true y/o ANALYTICS_CLASSIFIER_DISABLED=true
y reinicia worker-analytics. El cron sigue agendado pero cada tick
hace short-circuit. Úsalo para triaje de incidentes, no como config a
largo plazo — esas vars se gestionan principalmente para cloud y pueden
no aparecer en el template del installer.
Verificando que funciona
Después del boot, sigue los logs del analytics worker:analytics ingestion done in NNNms — {...} cada
30 minutos y analytics classifier done ... cada 15 minutos. Si no,
confirma que WORKER_ROLE=analytics está seteado solo en este
contenedor (no en el worker principal — ese debe permanecer en
code-review).