Saltar a contenido

Servicios: render, mapas, API y MCP#

La configuración de los servicios que Empowerment Center ofrece hacia fuera o que usa de otras piezas: el navegador sin interfaz, los mapas y el motor de rutas, la API de consulta, el servidor MCP, la incrustación y el puerto de gestión para Prometheus. Cómo se instalan está en Servicios opcionales, y cómo se usan la API, el MCP y la incrustación, en Integraciones.

El navegador sin interfaz#

Propiedad Por defecto Qué es
ecenter.render.enabled false (ECENTER_RENDER_ENABLED) Si la instalación tiene el navegador. Apagado, no se ofrecen los formatos que lo necesitan.
ecenter.render.browser-url (vacía; ECENTER_RENDER_BROWSER_URL) Dónde escucha el protocolo DevTools de Chromium (http://chromium:9222). Vale un nombre: ECenter lo resuelve y se conecta por su dirección.
ecenter.render.frontend-url ECENTER_PUBLIC_URL (ECENTER_RENDER_FRONTEND_URL) Por dónde llega Chromium al frontal. Tiene que ser algo que sirva la aplicación web y mande /api/ y /embed/ al backend, nunca el backend solo. Mejor una dirección interna, que no depende del DNS público ni del certificado.
ecenter.render.page-size A4 El papel del PDF (A3, A4, A5, LETTER o LEGAL), que da también el tamaño de la imagen.
ecenter.render.landscape true Apaisado.
ecenter.render.timeout 60s Lo que puede tardar un dibujo entero.
ecenter.render.queue-wait 30s Lo que espera un dibujo a que haya hueco.
ecenter.render.max-concurrent 2 Los dibujos a la vez por instancia (cada uno, una pestaña del navegador).
ecenter.render.token-ttl 2m Lo que vale el token de un solo uso con que el navegador abre el documento (de 10 s a 2 min).
ecenter.render.session-ttl 5m Lo que dura la sesión que abre ese token.
ecenter.render.connect-timeout 10s Lo que se espera al navegador al conectarse.
ecenter.render.image-scale 1 La escala de la imagen del cuerpo del correo (de 0,5 a 3). Con 2 es el doble de nítida y pesa cuatro veces más.

Cuándo cambiarlo. Si los dibujos agotan su tiempo con documentos grandes (un mapa con muchas entidades, una página con varios bloques), suba timeout y la memoria del contenedor. Si se acumulan en cola, suba max-concurrent y la memoria a la vez.

Los mapas#

Propiedad Por defecto Qué es
ecenter.maps.base-map.style (ninguno) El estilo de MapLibre del mapa base: la URL de un proveedor o autoalojada (por ejemplo, un .pmtiles de Protomaps).
ecenter.maps.base-map.style-dark (ninguno) El estilo para el tema oscuro. Sin él, el tema oscuro usa style.
ecenter.maps.base-map.tiles (ninguna) Una plantilla de teselas ráster (…/{z}/{x}/{y}.png), si no hay estilo.
ecenter.maps.base-map.tiles-dark (ninguna) Su variante oscura. Sin ella, en oscuro se ven las claras atenuadas.
ecenter.maps.base-map.attribution (ninguna) El texto de atribución que exige el proveedor.
ecenter.maps.base-map.max-zoom 19 El zoom máximo.
ecenter.maps.routing.provider none El motor de rutas: none, valhalla u openrouteservice.
ecenter.maps.routing.url (vacía) La dirección del motor.
ecenter.maps.routing.api-key (vacía) La clave de OpenRouteService.
ecenter.maps.routing.profile (el del motor) El perfil de coche: auto en Valhalla y driving-car en OpenRouteService si no se dice.
ecenter.maps.routing.timeout 30s El tiempo máximo de cada llamada al motor.
ecenter.maps.routing.cache-ttl 7d Lo que vale una respuesta guardada del motor.
ecenter.maps.routing.max-matrix-targets 500 Los destinos de una matriz de tiempos y distancias.

Sin mapa base, las capas se dibujan sobre un fondo liso. Añada los orígenes del mapa base a ECENTER_CSP_MAP_ORIGINS del frontal. Los límites de las capas que se suben están en Recursos.

La API de consulta#

La API de consulta (/api/query/v1) responde con los datos que ve el usuario de la credencial. Sus consultas son trabajos de la clase API, 2 a la vez por defecto, para no quitar sesiones a los cubos.

Propiedad Por defecto Qué es
ecenter.api.enabled true Con false, sus rutas (salvo whoami) responden 404 API_DISABLED.
ecenter.api.wait 10s Lo que espera una petición a su consulta si no dice wait.
ecenter.api.max-wait 30s Lo más que puede pedir con wait. Pasado, responde 202 con el identificador de la consulta.
ecenter.api.page-size 1000 Las filas de una página si no se dice limit.
ecenter.api.max-page-size 10000 Lo más que puede pedir limit. El CSV va entero.
ecenter.api.max-rows 50000 Las filas de un resultado. Por encima, 422 TOO_HEAVY.
ecenter.api.max-cells 2000000 Las celdas (filas por columnas) de un resultado. Por encima, 422 TOO_HEAVY.
ecenter.api.max-estimated-rows 2000000 Las filas estimadas por la BD por encima de las que no se calcula ni confirmándolo (422 TOO_HEAVY).
ecenter.api.max-running-per-user 2 Las consultas en curso a la vez de un titular, por instancia. La siguiente, 429 TOO_MANY_RUNNING.
ecenter.api.rate 60 Las peticiones por minuto de cada credencial, por instancia. Por encima, 429 RATE_LIMITED.
ecenter.api.max-retained-cells 10000000 Las celdas que conservan los resultados terminados de la instancia. Al pasarlo, se descarta el más antiguo (404 RESULT_NOT_FOUND).
ecenter.api.max-retained-per-user 20 Los resultados terminados que se conservan de cada titular.

El aviso de consulta pesada usa ecenter.cube.warn-rows (100 000 filas estimadas), como el cubo.

El servidor MCP#

El servidor MCP (/api/mcp) deja que un asistente de IA consulte los datos en nombre de un usuario. Viene apagado: activarlo lo decide la organización, porque lo que consulta el asistente sale hacia su proveedor de IA.

Propiedad Por defecto Qué es
ecenter.mcp.enabled false (ECENTER_MCP_ENABLED) Con false, /api/mcp responde 404 MCP_DISABLED.
ecenter.mcp.wait 20s Lo que espera una consulta antes de devolver que sigue en marcha.
ecenter.mcp.rows-per-call 200 Las filas de un resultado en una llamada si no se dice cuántas.
ecenter.mcp.max-rows-per-call 1000 Las filas como mucho de una llamada. El resto, por páginas o en CSV.
ecenter.mcp.rate 120 Las llamadas por minuto de cada credencial, por instancia. Por encima, 429 RATE_LIMITED.
ecenter.mcp.allowed-origins (ninguno) Los Origin admitidos (https://asistente.example.org, o http://localhost:* para un puerto cualquiera). Una petición con otro, 403. Sin cabecera Origin (un cliente que no es un navegador) no se mira.
ecenter.mcp.allowed-connections (las del titular) Las conexiones (por su identificador) que se pueden consultar por el MCP. Solo restringe.
ecenter.mcp.max-payload 1MB El cuerpo más grande de una petición. Por encima, 413 CONTENT_TOO_LARGE.

Para que los asistentes entren con la cuenta de la organización (OAuth), se configura ecenter.security.bearer.oauth.* con el proveedor de identidad: véase Integraciones. El proxy tiene que mandar al backend /.well-known/oauth-protected-resource/, como hace el frontal.

La incrustación#

La incrustación muestra documentos y páginas del portal dentro de otras aplicaciones, con un token que pide el servidor de la aplicación anfitriona.

Propiedad Por defecto Qué es
ecenter.embedding.enabled true Con false, ni se emiten ni se canjean tokens (404), y la página de la incrustación no se deja enmarcar.
ecenter.embedding.token-ttl 5m Lo que vive un token para canjearlo (de 1 s a 5 min).
ecenter.embedding.access-token-ttl 15m Lo que vive cada credencial de la sesión incrustada antes de renovarla (de 30 s a 1 h).
ecenter.embedding.refresh-grace 30s Lo que sigue valiendo la anterior tras renovarla.
ecenter.embedding.idle-timeout 30m La inactividad que termina una sesión incrustada (al menos 1 min).
ecenter.embedding.max-session-duration 8h La duración máxima de una sesión incrustada (de 5 min a 24 h). Cada aplicación anfitriona puede tener una menor.
ecenter.embedding.allow-insecure-localhost false Admitir orígenes http://localhost en las aplicaciones anfitrionas. Solo para desarrollo.
ecenter.embedding.index-location classpath:/static/index.html (ECENTER_EMBEDDING_INDEX_LOCATION) Dónde lee el backend el index.html de la aplicación web.
ecenter.embedding.issue-rate 600/min Los tokens que puede pedir cada aplicación anfitriona, por instancia (<número>/<s, min o h>). Por encima, 429 con Retry-After.
ecenter.embedding.retention 30d Lo que se conserva una sesión terminada (al menos un día).
ecenter.embedding.maintenance.interval 15m Cada cuánto se purgan los tokens y las sesiones terminadas.

El puerto de gestión#

Variable Propiedad Por defecto Qué es
ECENTER_MANAGEMENT_PORT management.server.port (vacía: apagado) El puerto en que se sirven /actuator/prometheus, /actuator/health (con las sondas) y /actuator/info sin sesión.
management.server.address (todas las interfaces) La interfaz a la que se ata el puerto de gestión.

Con el puerto de gestión activado, el de la aplicación deja de servir /actuator. Sin él, /actuator/prometheus no responde a nadie, la salud y las sondas responden sin sesión en el puerto de la aplicación y lo demás de /actuator exige Administración del Sistema. Las métricas que se publican están en Operación.

Importante

El puerto de gestión responde sin sesión. Déjelo solo en la red interna: no lo publique ni lo mande por el proxy.

Véase también#