From 80f9352a7edce12bc70c8d7a641770ee986cad0d Mon Sep 17 00:00:00 2001 From: Jonas Pacheco Date: Fri, 3 Apr 2026 17:38:45 -0300 Subject: [PATCH] =?UTF-8?q?fix(kernel-adapter):=20vari=C3=A1veis=20de=20am?= =?UTF-8?q?biente=20em=20runtime=20n=C3=A3o=20build=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Transforma SERVICE_URLS (objeto estático) em getServiceUrl() (função) - Garante que process.env.CONTABIL_PYTHON_URL seja lida em runtime - Resolve problema de URL 'bakeada' no build retornar valor errado --- server/engine-room/kernel-adapter.ts | 44 +++++++++++++--------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/server/engine-room/kernel-adapter.ts b/server/engine-room/kernel-adapter.ts index f95aec2..8adc811 100644 --- a/server/engine-room/kernel-adapter.ts +++ b/server/engine-room/kernel-adapter.ts @@ -14,30 +14,25 @@ const IS_DOCKER_MODE = process.env.DOCKER_MODE === 'true'; // URLs dos serviços externos em modo Docker (vindas das env vars) // Em produção (Coolify), os containers têm nomes prefixados como 'arcadia-prod-{nome}-1' -const getContainerUrl = (baseName: string, defaultPort: number): string => { - // Tenta descobrir o nome real do container via variável de ambiente - const envVarName = `${baseName.toUpperCase().replace(/-/g, '_')}_PYTHON_URL`; - const envUrl = process.env[envVarName]; - - if (envUrl) { - return envUrl; +// IMPORTANTE: Esta função é chamada em RUNTIME, não em build time +function getServiceUrl(engineName: string): string { + switch (engineName) { + case 'contabil': + return process.env.CONTABIL_PYTHON_URL || 'http://contabil:8003'; + case 'bi-engine': + return process.env.BI_PYTHON_URL || 'http://bi:8004'; + case 'automation-engine': + return process.env.AUTOMATION_PYTHON_URL || 'http://automation:8005'; + case 'fisco': + return process.env.FISCO_PYTHON_URL || 'http://fisco:8002'; + case 'communication': + return process.env.MIROFLOW_HOST + ? `http://${process.env.MIROFLOW_HOST}:${process.env.MIROFLOW_PORT || 8006}` + : 'http://miroflow:8006'; + default: + return ''; } - - // Fallback: tenta nomes comuns (com e sem prefixo arcadia-prod-) - const prefixes = ['arcadia-prod-', '']; - const suffixes = ['-1', '']; - - // Retorna o primeiro formato (será testado em runtime) - return `http://${prefixes[0]}${baseName}${suffixes[0]}:${defaultPort}`; -}; - -const SERVICE_URLS: Record = { - "contabil": getContainerUrl('contabil', 8003), - "bi-engine": getContainerUrl('bi', 8004), - "automation-engine": getContainerUrl('automation', 8005), - "fisco": getContainerUrl('fisco', 8002), - "communication": process.env.MIROFLOW_HOST ? `http://${process.env.MIROFLOW_HOST}:${process.env.MIROFLOW_PORT || 8006}` : 'http://arcadia-prod-miroflow-1:8006', -}; +} // Mapeamento: Nome do Engine Room -> ID do Kernel // NOTA: metaset NÃO está aqui - é gerenciado externamente (Java) @@ -117,7 +112,8 @@ interface EngineStatus { // Health check direto de um serviço (modo Docker) async function checkServiceHealth(engineName: string): Promise { const config = ENGINE_CONFIG[engineName]; - const serviceUrl = SERVICE_URLS[engineName]; + // IMPORTANTE: getServiceUrl é chamado em RUNTIME, não em build time + const serviceUrl = getServiceUrl(engineName); const kernelId = ENGINE_TO_KERNEL_ID[engineName]; if (!config || !serviceUrl) {