155 lines
5.1 KiB
Markdown
155 lines
5.1 KiB
Markdown
# Anais de Referência — Serviços MOSP, Orquestração VM122, Purge SSE/Jobs
|
|
|
|
**Data:** 2026-06-16
|
|
**Utilizador:** Roger
|
|
**Transcript Cursor:** `ad3c7400-04ce-47bf-8995-2861d54a831b`
|
|
**Projeto:** Ligbox Ops Platform · Desk VM122 (`10.10.10.122:8091`) + Wizard VM112 (`10.10.10.112`)
|
|
**Chat bruto:** `CHAT_BRUTO_LIGBOX_OPS_SERVICOS_ORQUESTRACAO_PURGE_20260616.{txt,jsonl}`
|
|
|
|
---
|
|
|
|
## 1. Resumo executivo
|
|
|
|
Sessão focada em **orquestração MOSP no Desk** (não no wizard VM112):
|
|
|
|
1. Página **Serviços** (ex-Contas/Overview Home) — clientes + tenants de oferta + purge Spec 017.
|
|
2. Spec **018** — modelo Pizza as a Service / MOSP / catálogo multi-produto.
|
|
3. Purge com painel lateral timeline + **SSE** + **jobs async/polling** (fix 504 / Failed to fetch).
|
|
4. Purges testados: `dratcoin.com`, `eplacebets.com` — UI falhou mas backend concluiu.
|
|
5. **Fase 3 pendente VM112** — passos Carbonio/CF/Traefik em tempo real dentro do purge.
|
|
|
|
---
|
|
|
|
## 2. Specs criadas/actualizadas
|
|
|
|
| Spec | Path | Estado |
|
|
|------|------|--------|
|
|
| 017 | `specs/017-vm112-domain-orchestration/spec.md` | Purge domínio — Fase 1 concluída |
|
|
| 018 | `specs/018-service-orchestration/spec.md` | MOSP, Pizza as a Service, Fase 1 UI |
|
|
|
|
---
|
|
|
|
## 3. UI Desk — menu Serviços
|
|
|
|
| Item | Valor |
|
|
|------|-------|
|
|
| Módulo ID | `overview-home` (sem breaking change) |
|
|
| Menu | **Serviços** |
|
|
| Título | Orquestração de Serviços |
|
|
| Subtítulo | Desk VM122 · Orquestração MOSP |
|
|
| Layout | 3 colunas: Clientes · Tenants de Oferta · Escopo OPS |
|
|
|
|
**Ficheiros principais:**
|
|
- `frontend/assets/accounts.js` → `DeskServices`
|
|
- `frontend/assets/styles.css` → `.servicos-*`, `.vm112-purge-drawer`
|
|
- `frontend/index.html` → modal + drawer purge
|
|
- `api/app/modules/registry.py`
|
|
|
|
**Regra:** cada oferta MOSP terá **wizard próprio**; VM112 Hero = só e-mail.
|
|
|
|
---
|
|
|
|
## 4. API Desk — domínios VM112
|
|
|
|
| Método | Path | Uso |
|
|
|--------|------|-----|
|
|
| GET | `/api/v1/vm112/domains` | Lista clientes Fase 1 |
|
|
| GET | `/api/v1/vm112/domains/{domain}` | Detalhe modal |
|
|
| POST | `/api/v1/vm112/domains/{domain}/purge` | Purge síncrono (legado) |
|
|
| POST | `/api/v1/vm112/domains/{domain}/purge/stream` | SSE timeline |
|
|
| POST | `/api/v1/vm112/domains/{domain}/purge/jobs` | **Recomendado** — job async |
|
|
| GET | `/api/v1/vm112/purge/jobs/{job_id}` | Poll timeline 2s |
|
|
|
|
**Ficheiros API:**
|
|
- `api/app/vm112_domains.py`
|
|
- `api/app/vm112_domains_routes.py`
|
|
- `api/app/vm112_purge_stream.py`
|
|
- `api/app/vm112_purge_jobs.py`
|
|
|
|
**RBAC:** `super_admin`, `ops_lead` + senha Root no purge.
|
|
**Blocklist:** `ligbox.com.br`, `itecnologys.com`
|
|
|
|
---
|
|
|
|
## 5. Purge — incidentes e fixes
|
|
|
|
### 504 Gateway Timeout (~60s)
|
|
- **Causa:** nginx proxy timeout 60s; purge VM112 demora minutos.
|
|
- **Fix:** `frontend/nginx.conf` → `proxy_read_timeout 600s`, `proxy_buffering off`.
|
|
|
|
### Failed to fetch (~79s) via `desk.ligbox.com.br`
|
|
- **Causa:** Traefik/SSE ligação longa cortada; browser perde stream.
|
|
- **Fix:** purge **async jobs + polling** (pedidos curtos GET a cada 2s).
|
|
- **Nota:** purge **concluiu** mesmo com erro UI (`dratcoin`, `eplacebets` sumiram da lista).
|
|
|
|
### Poll automático página Serviços (piscava)
|
|
- **Causa:** `refresh()` 30s re-renderizava com «A carregar…»
|
|
- **Fix:** poll silencioso em `renderPage({ poll: true })`
|
|
|
|
---
|
|
|
|
## 6. Domínios VM112 (fim de sessão)
|
|
|
|
Após purges teste, lista típica:
|
|
- `betinsport.com`, `diarissima.com`, `ibytera.com`, `itecnologys.com`, `myvexx.com`
|
|
- Removidos: `dratcoin.com`, `eplacebets.com` (testes purge)
|
|
|
|
---
|
|
|
|
## 7. Deploy
|
|
|
|
```bash
|
|
cd /opt/ligbox-ops-platform
|
|
docker-compose -f docker-compose.mvp.yml build api frontend
|
|
docker-compose -f docker-compose.mvp.yml up -d api frontend
|
|
```
|
|
|
|
**URLs:**
|
|
- Desk: `http://10.10.10.122:8091` / `https://desk.ligbox.com.br`
|
|
- API: `http://10.10.10.122:8080`
|
|
- Wizard: `https://onboard.ligbox.com.br` (VM112)
|
|
|
|
**Hard refresh:** Ctrl+Shift+R após deploy.
|
|
|
|
---
|
|
|
|
## 8. Reteste E2E wizard e-mail
|
|
|
|
1. Desk → Serviços → purge domínio teste (se existir)
|
|
2. Portal onboard → Self-Service → `/onboard`
|
|
3. Domínio → DNS → conta → infra
|
|
4. Desk → Serviços → Actualizar → cliente reaparece
|
|
|
|
---
|
|
|
|
## 9. Próximo passo — VM112 (Fase 3)
|
|
|
|
**Não implementado nesta sessão** (sem SSH VM112):
|
|
|
|
- `domain_orchestration.py` — purge passo a passo com eventos
|
|
- `POST /api/admin/domains/{domain}/purge/jobs` na VM112
|
|
- Desk proxy eventos VM112 para drawer timeline
|
|
|
|
**Path produção VM112:** `/opt/ligbox-wizard`
|
|
**SSH:** `root@10.10.10.112` (credencial user rule: `@betinplace`)
|
|
|
|
---
|
|
|
|
## 10. Canais de arquivo
|
|
|
|
| Canal | Path |
|
|
|-------|------|
|
|
| Anais VM122 | `/opt/ligbox-ops-platform/docs/anais-referencia/` |
|
|
| Chat bruto projeto | `/opt/ligbox-ops-platform/chat-bruto/` |
|
|
| Chat bruto central | `/root/ligbox-ops-platform-chat-bruto/` |
|
|
| Obsidian | `/root/obsidian-infra/ligbox-ops-platform/` |
|
|
| LAPTOP | `/opt/ligbox-ops-platform/LAPTOP/` |
|
|
|
|
---
|
|
|
|
## 11. Decisões Roger (registo)
|
|
|
|
- MOSP planeado no **Desk VM122**, não na Hero VM112.
|
|
- Cada oferta = wizard próprio (Proxmox, servidor físico, etc.).
|
|
- Modelo comercial Pizza as a Service documentado na Spec 018.
|
|
- Purge Spec 017 mantido; UI evolui (drawer + jobs).
|