From b2966388884ca1fe2a8e517b000376071175a989 Mon Sep 17 00:00:00 2001 From: Jonas Pacheco Date: Wed, 8 Apr 2026 14:40:32 -0300 Subject: [PATCH] =?UTF-8?q?docs:=20adiciona=20especifica=C3=A7=C3=A3o=20da?= =?UTF-8?q?=20integra=C3=A7=C3=A3o=20Metaset=20BI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Documenta arquitetura e componentes - Lista rotas e variáveis de ambiente - Descreve fluxo de navegação - Inclui troubleshooting --- docs/METASET_INTEGRATION.md | 127 ++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 docs/METASET_INTEGRATION.md diff --git a/docs/METASET_INTEGRATION.md b/docs/METASET_INTEGRATION.md new file mode 100644 index 0000000..7903f02 --- /dev/null +++ b/docs/METASET_INTEGRATION.md @@ -0,0 +1,127 @@ +# Integração Metaset BI - Especificações + +## Visão Geral +Integração do Metaset BI (Apache Superset modificado) na Arcadia Suite, permitindo acesso via navegação interna sem sair da aplicação. + +## Arquitetura + +### Componentes +``` +┌─────────────────────────────────────────────────────────────┐ +│ Arcadia Suite │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ +│ │ Navbar │ │ BrowserFrame │ │ Metaset.tsx │ │ +│ └──────────────┘ └──────────────┘ └──────────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ iframe src="/metaset" │ │ +│ └─────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Proxy /metaset (metaset-proxy.ts) │ +│ pathRewrite: "^/metaset" → "" │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Serviço Metaset (Docker) │ +│ http://metaset:8100 │ +└─────────────────────────────────────────────────────────────┘ +``` + +## Arquivos + +### Backend +- `server/bi/metaset-proxy.ts` - Proxy web para o serviço Metaset +- `server/routes.ts` - Registro do proxy no servidor Express + +### Frontend +- `client/src/pages/Metaset.tsx` - Página React com iframe +- `client/src/App.tsx` - Rota `/metaset` +- `client/src/components/Browser/BrowserFrame.tsx` - Item na navbar + +### Proxy Configuração +```typescript +const METASET_HOST = process.env.METASET_HOST || "metaset"; +const METASET_PORT = parseInt(process.env.METASET_PORT || "8100", 10); + +createProxyMiddleware({ + target: `http://${METASET_HOST}:${METASET_PORT}`, + changeOrigin: true, + pathRewrite: { "^/metaset": "" }, + // ...error handling +}); +``` + +## Rotas + +| Rota | Descrição | +|------|-----------| +| `/metaset` | Página React do módulo Metaset | +| `/metaset/*` | Proxy para serviço Metaset (8100) | +| `/api/bi/metaset/*` | API REST do Metaset (já existente) | + +## Variáveis de Ambiente + +```env +METASET_HOST=metaset # hostname do container +METASET_PORT=8100 # porta do serviço +``` + +## Fluxo de Navegação + +1. Usuário clica em "Metaset" na navbar +2. Navegação React para rota `/metaset` +3. `Metaset.tsx` renderiza iframe apontando para `/metaset` +4. Proxy redireciona para `http://metaset:8100` +5. Interface Metaset carrega dentro do iframe +6. Navbar Arcadia permanece visível + +## Estados da UI + +### Loading +- Spinner animado com texto "Carregando Metaset..." +- Overlay sobre o iframe + +### Erro (Serviço Offline) +- Alert vermelho com mensagem de erro +- Botão "Tentar novamente" para reload +- Health check via `/api/bi/metaset/health` + +### Sucesso +- iframe carrega interface completa do Metaset +- Navegação suave entre módulos Arcadia + +## Segurança + +- Proxy preserva cookies/sessão +- Health check requer autenticação +- PathRewrite remove prefixo /metaset antes de enviar ao serviço +- Headers Location são reescritos para manter contexto + +## Troubleshooting + +### Erro: "Conexão recusada" +Verificar se container Metaset está rodando: +```bash +docker ps | grep metaset +docker logs metaset +``` + +### Erro: "Metaset indisponível" +Verificar health endpoint: +```bash +curl /api/bi/metaset/health +``` + +### iframe não carrega +Verificar se Metaset permite embed (X-Frame-Options): +- Verificar configuração do Superset/TALISMAN_ENABLED + +## Referências + +- Proxy similar: `server/superset/proxy.ts` +- Cliente API: `server/bi/metaset-client/` +- Rotas API: `server/bi/routes.ts`