293 lines
11 KiB
Markdown
293 lines
11 KiB
Markdown
# PLANO BI — MetaSet (Apache Superset)
|
|
## Arquitetura Consolidada
|
|
### Versão 2.0 — Abril 2026
|
|
|
|
---
|
|
|
|
## 1. STATUS — CONSOLIDAÇÃO CONCLUÍDA ✅
|
|
|
|
### 1.1 O que foi realizado
|
|
|
|
A migração do Metabase para o Apache Superset foi **concluída** em abril de 2026.
|
|
|
|
| Componente | Status | Localização |
|
|
|---|---|---|
|
|
| **MetaSet (Apache Superset 4.1.0)** | ✅ Implementado | `/server/bi/metaset/` |
|
|
| **Cliente TypeScript** | ✅ Implementado | `/server/bi/metaset-client/` |
|
|
| **Rotas Express** | ✅ Implementado | `/server/bi/metaset-client/routes.ts` |
|
|
| **Código legado Metabase** | ✅ Backup | `/server/metaset/backup/` |
|
|
| **Integração Kernel** | ✅ Ativa | Porta 8100 |
|
|
| **Documentação** | ✅ Atualizada | `/server/metaset/README.md` |
|
|
|
|
### 1.2 Arquitetura Consolidada
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ ARCÁDIA SUITE (Porta 5000) │
|
|
│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
|
│ │ BI-API GATEWAY (Porta 8004) │ │
|
|
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────────┐ │ │
|
|
│ │ │ /bi/api/* │ │/bi/metaset/*│ │ /bi/fdb/* │ │ │
|
|
│ │ │ (nativo) │ │ (proxy) │ │ (proxy) │ │ │
|
|
│ │ └──────┬──────┘ └──────┬──────┘ └─────────────┬───────────────┘ │ │
|
|
│ │ └─────────────────┴───────────────────────┘ │ │
|
|
│ └─────────────────────────────┬────────────────────────────────────────┘ │
|
|
└────────────────────────────────┼────────────────────────────────────────────┘
|
|
│
|
|
┌───────────────────────┴───────────────────────┐
|
|
▼ ▼
|
|
┌─────────────────────────┐ ┌─────────────────────────┐
|
|
│ METASET BI (Porta 8100)│ │ FDB-BRIDGE (8200) │
|
|
│ Apache Superset 4.1.0 │ │ Sync Firebird → PG │
|
|
│ ┌─────────────────┐ │ │ - Change Data Capture │
|
|
│ │ superset-src/ │ │ │ - Real-time sync │
|
|
│ │ - Dashboards │ │ │ - Tenant isolation │
|
|
│ │ - SQL Lab │ │ │ │
|
|
│ │ - Charts │ │ │ │
|
|
│ │ - RLS │ │ │ │
|
|
│ └─────────────────┘ │ │ │
|
|
└─────────────────────────┘ └─────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────┐
|
|
│ PostgreSQL + Redis │
|
|
│ (metaset_db + cache) │
|
|
└─────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 2. ESTRUTURA DE ARQUIVOS
|
|
|
|
### 2.1 Implementação Atual (Apache Superset)
|
|
|
|
```
|
|
/server/bi/metaset/
|
|
├── main.py # FastAPI wrapper (Porta 8100)
|
|
├── run.py # Entry point Gunicorn
|
|
├── superset_config.py # Configuração Superset
|
|
├── security_manager.py # ArcadiaSecurityManager (JWT + RLS)
|
|
├── Dockerfile # Container MetaSet
|
|
├── init.sh # Script de inicialização
|
|
├── requirements.txt # Dependências Python
|
|
├── superset-src/ # Código fonte Apache Superset 4.1.0
|
|
├── config/ # Configurações adicionais
|
|
├── branding/ # Assets de branding
|
|
├── security/ # Módulos de segurança
|
|
├── extensions/ # Extensões
|
|
└── templates/ # Templates customizados
|
|
|
|
/server/bi/metaset-client/
|
|
├── index.ts # Cliente TypeScript completo
|
|
└── routes.ts # Rotas Express /api/bi/metaset/*
|
|
```
|
|
|
|
### 2.2 Código Legado (Backup)
|
|
|
|
```
|
|
/server/metaset/backup/
|
|
├── client.ts # Cliente Metabase (legado)
|
|
└── routes.ts # Rotas Metabase (legado)
|
|
```
|
|
|
|
---
|
|
|
|
## 3. API ENDPOINTS
|
|
|
|
### 3.1 BI-API Gateway (Porta 8004)
|
|
|
|
| Endpoint | Método | Descrição |
|
|
|----------|--------|-----------|
|
|
| `/api/bi/metaset/health` | GET | Health check |
|
|
| `/api/bi/metaset/databases` | GET/POST | Lista/Cria databases |
|
|
| `/api/bi/metaset/databases/:id/sync` | POST | Sincroniza schema |
|
|
| `/api/bi/metaset/databases/:id/tables` | GET | Lista tabelas |
|
|
| `/api/bi/metaset/tables/:id` | GET | Metadata da tabela |
|
|
| `/api/bi/metaset/query` | POST | Executa SQL |
|
|
| `/api/bi/metaset/charts` | GET/POST | Lista/Cria charts |
|
|
| `/api/bi/metaset/charts/:id` | GET/DELETE | Obtém/Deleta chart |
|
|
| `/api/bi/metaset/dashboards` | GET/POST | Lista/Cria dashboards |
|
|
| `/api/bi/metaset/dashboards/:id` | GET/PUT/DELETE | CRUD dashboard |
|
|
| `/api/bi/metaset/guest-token` | POST | Cria guest token |
|
|
| `/api/bi/metaset/embed/dashboard/:id` | GET | URL de embed |
|
|
| `/api/bi/metaset/suggest/:table` | GET | Sugestões de análise |
|
|
|
|
### 3.2 MetaSet Direto (Porta 8100)
|
|
|
|
API nativa do Apache Superset:
|
|
|
|
```
|
|
GET /health
|
|
GET /api/v1/dashboard/
|
|
GET /api/v1/dashboard/:id
|
|
POST /api/v1/dashboard/
|
|
GET /api/v1/chart/
|
|
GET /api/v1/dataset/
|
|
POST /api/v1/security/guest_token/
|
|
GET /api/v1/database/
|
|
GET /sqllab/
|
|
```
|
|
|
|
---
|
|
|
|
## 4. CONFIGURAÇÃO
|
|
|
|
### 4.1 Variáveis de Ambiente
|
|
|
|
```bash
|
|
# MetaSet Connection
|
|
METASET_HOST=metaset
|
|
METASET_PORT=8100
|
|
|
|
# Database
|
|
DATABASE_URL=postgresql://arcadia:arcadia123@db:5432/metaset_db
|
|
ARCADIA_DATABASE_URL=postgresql://arcadia:arcadia123@db:5432/arcadia
|
|
|
|
# Redis (Cache)
|
|
REDIS_URL=redis://redis:6379/1
|
|
|
|
# Security
|
|
METASET_SECRET_KEY=change-in-production
|
|
JWT_SECRET_KEY=arcadia-jwt-secret
|
|
|
|
# Admin
|
|
METASET_ADMIN_USER=admin
|
|
METASET_ADMIN_EMAIL=admin@arcadia.app
|
|
METASET_ADMIN_PASSWORD=metaset2026
|
|
```
|
|
|
|
### 4.2 Feature Flags
|
|
|
|
```python
|
|
FEATURE_FLAGS = {
|
|
"EMBEDDED_SUPERSET": True, # Embedding de dashboards
|
|
"GUEST_EMBEDDING_ENABLED": True, # Guest tokens
|
|
"DASHBOARD_RBAC": True, # Controle de acesso
|
|
"SQLLAB_BACKEND_PERSISTENCE": True, # Persistência SQL Lab
|
|
"DRILL_BY": True, # Drill-down
|
|
"DASHBOARD_CROSS_FILTERS": True, # Filtros cruzados
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 5. SEGURANÇA
|
|
|
|
### 5.1 ArcadiaSecurityManager
|
|
|
|
- Extrai JWT do header `Authorization: Bearer <token>`
|
|
- Identifica tenant do payload JWT (`tenant_id`)
|
|
- Aplica RLS automaticamente via `SET LOCAL app.current_tenant`
|
|
- Mapeia roles: superadmin→Admin, admin→Alpha, analyst→Gamma, viewer→Public
|
|
|
|
### 5.2 Row Level Security (RLS)
|
|
|
|
```sql
|
|
-- Política aplicada automaticamente
|
|
SET LOCAL app.current_tenant = <tenant_id>;
|
|
|
|
-- Views filtram por tenant
|
|
CREATE VIEW tenant_data AS
|
|
SELECT * FROM data
|
|
WHERE tenant_id = current_setting('app.current_tenant')::int;
|
|
```
|
|
|
|
---
|
|
|
|
## 6. CLIENTE TYPESCRIPT
|
|
|
|
### 6.1 Uso Básico
|
|
|
|
```typescript
|
|
import { metasetClient } from "./server/bi/metaset-client";
|
|
|
|
// Health check
|
|
const health = await metasetClient.isHealthy();
|
|
|
|
// Listar dashboards
|
|
const dashboards = await metasetClient.listDashboards();
|
|
|
|
// Executar query
|
|
const result = await metasetClient.executeSql(1, "SELECT * FROM sales LIMIT 100");
|
|
|
|
// Criar dashboard
|
|
const dashboard = await metasetClient.createDashboard({
|
|
name: "Vendas Q1 2026",
|
|
description: "Dashboard de vendas"
|
|
});
|
|
|
|
// Guest token para embedding
|
|
const token = await metasetClient.createGuestToken({
|
|
resources: [{ type: "dashboard", id: "1" }],
|
|
rls: [{ dataset: 1, clause: "tenant_id = 123" }]
|
|
});
|
|
```
|
|
|
|
### 6.2 Ferramentas do Manus (Agente IA)
|
|
|
|
| Ferramenta | Descrição |
|
|
|------------|-----------|
|
|
| `metaset.query` | Executa SQL |
|
|
| `metaset.list_tables` | Lista tabelas |
|
|
| `metaset.table_fields` | Campos da tabela |
|
|
| `metaset.create_chart` | Cria gráfico |
|
|
| `metaset.list_charts` | Lista gráficos |
|
|
| `metaset.create_dashboard` | Cria dashboard |
|
|
| `metaset.list_dashboards` | Lista dashboards |
|
|
| `metaset.suggest_analysis` | Sugere análises |
|
|
| `metaset.sync_database` | Sincroniza schema |
|
|
| `metaset.health` | Verifica status |
|
|
|
|
---
|
|
|
|
## 7. DEPLOYMENT
|
|
|
|
### 7.1 Docker Compose
|
|
|
|
```yaml
|
|
services:
|
|
metaset:
|
|
build: ./server/bi/metaset
|
|
ports:
|
|
- "8100:8100"
|
|
environment:
|
|
- DATABASE_URL=postgresql://arcadia:arcadia123@db:5432/metaset_db
|
|
- REDIS_URL=redis://redis:6379/1
|
|
labels:
|
|
- "arcadia.discovery.enabled=true"
|
|
- "arcadia.name=MetaSet BI"
|
|
- "arcadia.type=python"
|
|
- "arcadia.port=8100"
|
|
- "arcadia.capabilities=dashboards,charts,sql_lab,rls,embedding"
|
|
```
|
|
|
|
### 7.2 Inicialização
|
|
|
|
```bash
|
|
# Via docker compose
|
|
docker compose up metaset
|
|
|
|
# Ou diretamente
|
|
cd server/bi/metaset
|
|
python run.py --host 0.0.0.0 --port 8100 --workers 2
|
|
```
|
|
|
|
---
|
|
|
|
## 8. HISTÓRICO DE MUDANÇAS
|
|
|
|
| Data | Versão | Mudança |
|
|
|------|--------|---------|
|
|
| 2026-03 | 1.0 | Plano inicial de migração Metabase → Superset |
|
|
| 2026-04-08 | 2.0 | **Consolidação concluída** - Cliente TypeScript, rotas, documentação |
|
|
|
|
---
|
|
|
|
## 9. REFERÊNCIAS
|
|
|
|
- `/server/metaset/README.md` - Documentação completa do MetaSet
|
|
- `/server/bi/metaset-client/index.ts` - Cliente TypeScript
|
|
- `/server/bi/metaset-client/routes.ts` - Rotas Express
|
|
- [Apache Superset Docs](https://superset.apache.org/docs/)
|
|
- [Superset API Reference](https://superset.apache.org/docs/api/)
|