arcadiasuite/docs/METASET_INTEGRATION.md

5.1 KiB

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

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

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:

docker ps | grep metaset
docker logs metaset

Erro: "Metaset indisponível"

Verificar health endpoint:

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