# 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`