feat: pipelines Metabase — add ops db, create ops dashboard, fix permissions

Tres pipelines Python para gestionar operations.db en Metabase:
- metabase_add_ops_db: registra la operations.db de una app como database SQLite
- metabase_create_ops_dashboard: genera dashboard operativo con 14 cards (KPIs,
  distribución, executions, assertions) para cualquier app
- metabase_fix_permissions: arregla SQLITE_READONLY_DIRECTORY haciendo chmod
  777/666 sin chown (que se propaga al host via bind mount)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 00:54:24 +01:00
parent 95bba767bc
commit 6a05abff03
7 changed files with 744 additions and 0 deletions
@@ -0,0 +1,59 @@
---
name: metabase_add_ops_db
kind: pipeline
lang: py
domain: pipelines
version: "1.0.0"
purity: impure
signature: "metabase_add_ops_db(app_name: str) -> None"
description: "Registra la operations.db de una app en Metabase como database SQLite. Verifica duplicados y muestra el mount necesario para el contenedor Docker."
tags: [metabase, operations, sqlite, docker, pipeline, infra, launcher]
uses_functions:
- metabase_auth_py_infra
- metabase_list_databases_py_infra
- metabase_add_database_py_infra
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/pipelines/metabase_add_ops_db.py"
---
## Ejemplo
```bash
# Registrar una app
python python/functions/pipelines/metabase_add_ops_db.py docker_tui
# Listar estado de todas las apps
python python/functions/pipelines/metabase_add_ops_db.py --list
```
## Flujo
1. `metabase_auth` - autentica contra Metabase
2. `metabase_list_databases` - verifica si la database ya existe
3. `metabase_add_database` - registra la operations.db como SQLite
## Requisitos
El contenedor Metabase debe tener montado el directorio de la app como volumen RW:
```
-v /home/lucas/fn_registry/apps/<app_name>:/data/ops-<app-name>
```
Ademas, el directorio debe tener permisos para el usuario metabase (UID 2000):
```bash
docker exec -u root <container> chown -R metabase:metabase /data/ops-<app-name>/
```
## Convencion de nombres
- Database en Metabase: `ops-<app-name>` (guiones en vez de underscores)
- Path en contenedor: `/data/ops-<app-name>/operations.db`