32c7336bf6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.3 KiB
5.3 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| render_glance_config | function | py | infra | 1.1.0 | pure | render_glance_config(services: list[dict], title: str = "Procesos locales", host_suffix: str = "localhost") -> str | Transforma una lista de servicios normalizados en el YAML de configuración de Glance (dashboard self-hosted). Genera una página con un widget monitor por categoría que hace health-check de cada servicio y lo pinta verde/rojo. Función pura y determinista. Parte del sistema local_hub. |
|
false |
|
|
String con el YAML completo de configuración de Glance (cabecera de comentario + pages/columns/widgets), terminado en '\n'. Parseable con yaml.safe_load. Cada site lleva 'title' y 'url' (raíz del subdominio); además 'check-url' (url+health_path) cuando el servicio trae un health_path distinto de '/', e 'icon' cuando no está vacío. | true |
|
python/functions/infra/render_glance_config_test.py | python/functions/infra/render_glance_config.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from infra.render_glance_config import render_glance_config
services = [
{"subdomain": "metabase", "title": "Metabase", "icon": "si:metabase", "category": "Datos"},
{"subdomain": "jupyter", "title": "Jupyter Lab", "icon": "si:jupyter", "category": "Datos"},
{"subdomain": "portainer","title": "Portainer", "icon": "si:portainer", "category": "Infra"},
]
yaml_text = render_glance_config(services, title="Inicio")
print(yaml_text)
# pages:
# - name: Inicio
# columns:
# - size: full
# widgets:
# - type: monitor
# title: Datos
# cache: 1m
# sites:
# - title: Jupyter Lab # ordenado por title dentro de la categoría
# url: http://jupyter.localhost
# icon: si:jupyter
# - title: Metabase
# url: http://metabase.localhost
# icon: si:metabase
# - type: monitor
# title: Infra
# cache: 1m
# sites:
# - title: Portainer
# url: http://portainer.localhost
# icon: si:portainer
Cuando usarla
Cuando necesites regenerar el glance.yml del dashboard local a partir de
apps/local_hub/local_services.yaml: tras añadir/quitar un servicio local, o
en el pipeline refresh_local_hub que corre diario via dag_engine. La salida se
escribe al archivo de config de Glance (el borde impuro: I/O lo hace el caller).
Notas
- Decisión
title->name: el parámetrotitlese usa como el camponamede la (única) página de Glance. No es un comentario de cabecera ni se ignora. Default"Procesos locales". Así la firma queda útil sin añadir un parámetro extra para el nombre de página. - Determinismo: las categorías se ordenan alfabéticamente y los servicios de
cada categoría por
title(desempate porsubdomain). Se serializa conyaml.safe_dump(sort_keys=False)sobre estructuras ya ordenadas, por lo que la misma entrada (en cualquier orden) produce siempre la misma salida byte a byte. - Robustez: los servicios sin
subdomainse ignoran silenciosamente (no se lanza). Eliconse omite del site cuando está vacío o ausente. Cada categoría produce un widgettype: monitorconcache: 1m; todos los widgets van en una sola columnasize: full. - Función pura: sin I/O, sin estado, determinista. El health-check real lo
hace Glance en runtime (GET a
check-urlsi existe, si no aurl); esta función solo genera el texto. check-urlvsurl:urles siempre la raíz del subdominio (lo que abre el usuario al clicar).check-urlsolo aparece cuando el servicio trae unhealth_pathdistinto de/, y valeurl + health_path. Sirve para APIs que devuelven 404 en/pero 200 en su ruta de salud (ej./api/health), de modo que Glance las pinta verde sin cambiar el enlace navegable.
Capability growth log
- v1.1.0 (2026-06-20) — añade check-url (health_path) por site para health-check preciso de APIs sin ruta raíz