128 lines
5.1 KiB
Markdown
128 lines
5.1 KiB
Markdown
# 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`
|