Files
fn_registry/apps/metabase_registry/app.md
T
egutierrez 935c7f30dc docs: documentación completa de metabase_registry
Arquitectura de mounts Docker, tabla de databases, permisos SQLite
(nunca chown, siempre chmod), flujo para app nueva paso a paso,
y referencia a los 3 pipelines relacionados.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 00:54:28 +01:00

4.0 KiB

name, lang, domain, description, tags, uses_functions, uses_types, framework, entry_point, dir_path
name lang domain description tags uses_functions uses_types framework entry_point dir_path
metabase_registry py analytics Setup y dashboards automaticos de Metabase para visualizar metricas del fn-registry y operations.db de cada app.
metabase
dashboard
analytics
visualization
operations
metabase_auth_py_infra
metabase_create_card_py_infra
metabase_create_dashboard_py_infra
metabase_update_dashboard_py_infra
metabase_list_databases_py_infra
metabase_add_database_py_infra
metabase_list_dashboards_py_infra
metabase_delete_dashboard_py_infra
metabase_create_user_py_infra
httpx main.py apps/metabase_registry

Arquitectura

Metabase corre en Docker (fn_registry-metabase) con Postgres como backend interno. Las bases de datos SQLite del proyecto se montan como bind mounts RW en /data/:

Database Mount en container Contenido
registry.db /data/registry/registry.db functions, types, proposals, apps
ops-docker-tui /data/ops-docker-tui/operations.db entities, relations, executions
ops-metabase-registry /data/ops-metabase-registry/operations.db entities, relations, executions
ops-pipeline-launcher /data/ops-pipeline-launcher/operations.db entities, relations, executions

Dashboards

Dashboard Contenido
fn-registry Overview KPIs, distribucion y analisis del registry
fn-registry Apps Apps por lenguaje, dominio, dependencias
ops: <app-name> Dashboard operativo por app (entities, relations, executions, assertions)

Permisos SQLite en Docker

Metabase corre Java como UID 2000 (usuario metabase). SQLite necesita crear journal/WAL files en el mismo directorio que la BD. Reglas:

  • NUNCA hacer chown dentro del container: se propaga al host via bind mount y rompe permisos locales.
  • Usar chmod: chmod 777 en directorios, chmod 666 en archivos .db.
  • Pipeline automatico: ./fn run metabase_fix_permissions arregla todos los permisos.
  • Ejecutar despues de: recrear container, añadir nueva database, o ver error SQLITE_READONLY_DIRECTORY.

Flujo para app nueva

# 1. Crear operations.db
./fn ops init apps/nueva_app

# 2. Recrear container con el nuevo mount
docker stop fn_registry-metabase && docker rm fn_registry-metabase
docker run -d \
  --name fn_registry-metabase \
  --network fn_registry-net \
  -p 3000:3000 \
  -e MB_DB_TYPE=postgres -e MB_DB_DBNAME=metabase \
  -e MB_DB_PORT=5432 -e MB_DB_USER=metabase \
  -e MB_DB_PASS=metabase -e MB_DB_HOST=fn_registry-postgres \
  -v /home/lucas/fn_registry:/registry:ro \
  -v /home/lucas/fn_registry/registry.db:/data/registry/registry.db \
  -v /home/lucas/fn_registry/apps/docker_tui:/data/ops-docker-tui \
  -v /home/lucas/fn_registry/apps/metabase_registry:/data/ops-metabase-registry \
  -v /home/lucas/fn_registry/apps/pipeline_launcher:/data/ops-pipeline-launcher \
  -v /home/lucas/fn_registry/apps/nueva_app:/data/ops-nueva-app \
  metabase/metabase:latest

# 3. Fix permisos
./fn run metabase_fix_permissions

# 4. Registrar database en Metabase
./fn run metabase_add_ops_db nueva_app

# 5. Crear dashboard operativo
./fn run metabase_create_ops_dashboard nueva_app

Scripts

Script Funcion
main.py Setup inicial: datasource + cards basicas + dashboard Overview
create_registry_dashboard.py Dashboard fn-registry Overview (18 cards)
create_apps_dashboard.py Dashboard fn-registry Apps (10 cards)

Pipelines relacionados

Pipeline ID Funcion
metabase_add_ops_db metabase_add_ops_db_py_pipelines Registra operations.db de una app
metabase_create_ops_dashboard metabase_create_ops_dashboard_py_pipelines Crea dashboard operativo para una app
metabase_fix_permissions metabase_fix_permissions_py_pipelines Arregla SQLITE_READONLY_DIRECTORY

Credenciales

En .env local (NO commitear).