From 5f6e43f6e2d2a4b4cf0819e0e0f290779516dc90 Mon Sep 17 00:00:00 2001 From: Jonas Pacheco Date: Wed, 8 Apr 2026 14:48:43 -0300 Subject: [PATCH] feat: metaset proxy com kernel discovery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adiciona função discoverMetasetEndpoint() que consulta o Kernel Registry - Prioridade 1: Registry global (mesmo processo) - Prioridade 2: HTTP request para porta 5001 - Fallback para configuração padrão se discovery falhar - setupMetasetProxy agora é async e usa endpoint descoberto --- server/bi/metaset-proxy.ts | 51 +++++++++++++++++++++++++++++++++++--- server/routes.ts | 4 +-- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/server/bi/metaset-proxy.ts b/server/bi/metaset-proxy.ts index c6f1226..a92d96a 100644 --- a/server/bi/metaset-proxy.ts +++ b/server/bi/metaset-proxy.ts @@ -5,8 +5,53 @@ const METASET_HOST = process.env.METASET_HOST || "metaset"; const METASET_PORT = parseInt(process.env.METASET_PORT || "8100", 10); const METASET_TIMEOUT = 60000; -export function setupMetasetProxy(app: Express): void { - const target = `http://${METASET_HOST}:${METASET_PORT}`; +// Consulta o Kernel Registry para descobrir onde o Metaset está rodando +async function discoverMetasetEndpoint(): Promise { + try { + // PRIORIDADE 1: Registry global (mesmo processo) + const globalRegistry = (global as any).arcadiaKernelRegistry; + if (globalRegistry) { + const services = globalRegistry.getServices(); + const metasetService = services.find((s: any) => + s.id === 'metaset' || + s.name?.toLowerCase().includes('metaset') || + s.displayName?.toLowerCase().includes('metaset') + ); + + if (metasetService?.endpoint) { + console.log(`[Metaset Proxy] Discovery via Kernel Registry: ${metasetService.endpoint}`); + return metasetService.endpoint; + } + } + + // PRIORIDADE 2: HTTP request para porta 5001 + const response = await fetch('http://127.0.0.1:5001/api/services'); + if (response.ok) { + const services = await response.json(); + const metasetService = services.find((s: any) => + s.id === 'metaset' || + s.name?.toLowerCase().includes('metaset') + ); + + if (metasetService?.endpoint) { + console.log(`[Metaset Proxy] Discovery via HTTP: ${metasetService.endpoint}`); + return metasetService.endpoint; + } + } + } catch (error) { + console.log('[Metaset Proxy] Discovery falhou, usando fallback:', error); + } + + // FALLBACK: Configuração padrão + return null; +} + +export async function setupMetasetProxy(app: Express): Promise { + // Tenta descobrir endpoint via Kernel Discovery + const discoveredEndpoint = await discoverMetasetEndpoint(); + const target = discoveredEndpoint || `http://${METASET_HOST}:${METASET_PORT}`; + + console.log(`[Metaset Proxy] Configurando proxy -> ${target}`); const metasetProxy = createProxyMiddleware({ target, @@ -35,5 +80,5 @@ export function setupMetasetProxy(app: Express): void { }); app.use("/metaset", metasetProxy); - console.log(`[Metaset Proxy] Configurado -> /metaset/* => ${target}`); + console.log(`[Metaset Proxy] Ativo em /metaset -> ${target}`); } diff --git a/server/routes.ts b/server/routes.ts index f20a837..e9e4c63 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -90,8 +90,8 @@ export async function registerRoutes( setupSupersetProxy(app); registerSupersetRoutes(app); - // MetaSet - BI alternativo (porta 8100) - setupMetasetProxy(app); + // MetaSet - BI alternativo (porta 8100) - com Kernel Discovery + await setupMetasetProxy(app); // ERPNext container proxy (ativo apenas em DOCKER_MODE ou ERPNEXT_PROXY_ENABLED=true) setupErpNextProxy(app);