feat(frontend): Platform > Infraestrutura > FreeSWITCH/SIP Profiles/Nodes

GET /platform/freeswitch/channels|profiles|nodes fazem introspecção ESL real
(show channels/show calls/sofia status/show registrations/status/show gateways),
reaproveitando os métodos do FreeSwitchTelephonyProvider já verificados manualmente
contra o FreeSWITCH real. Mesmo padrão de conexão avulsa do PlatformHealthController
(connect → comando → disconnect).

Nunca deixa a indisponibilidade do ESL virar 500/503 — devolve { ok: false, error }
com 200, mesma filosofia do health check. Necessário: nesta VM apps/api roda fora do
Docker e a porta 8021 é deliberadamente não publicada no host, então as 3 telas
sempre mostram essa explicação aqui (mesmo texto já usado em Infraestrutura >
Saúde), mesmo com o endpoint 100% funcional — confirmado indiretamente pelo
b2bcall-fs-events, que fala ESL de dentro da rede Docker e está com heartbeat ativo.

"Nodes" mostra explicitamente 1 node (container único, sem clustering) em vez de
fingir uma lista.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
2026-08-30 08:41:49 -03:00
parent b1a409da09
commit 12af12f276
15 changed files with 303 additions and 3 deletions

View File

@@ -68,9 +68,21 @@ export const PLATFORM_NAV: NavSection[] = [
label: "Infraestrutura",
icon: ServerCog,
children: [
{ label: "FreeSWITCH" },
{ label: "SIP Profiles" },
{ label: "Nodes" },
{
label: "FreeSWITCH",
href: "/platform/infraestrutura/freeswitch",
description: "Canais e chamadas ativas agora, direto do ESL",
},
{
label: "SIP Profiles",
href: "/platform/infraestrutura/sip-profiles",
description: "sofia status e registros SIP ativos",
},
{
label: "Nodes",
href: "/platform/infraestrutura/nodes",
description: "Nodes FreeSWITCH desta implantação (hoje: 1)",
},
{
label: "Saúde",
href: "/platform/infraestrutura/saude",