Alerta se gap > ${health.webhook_gap_alert_minutes || 15} min sem eventos VM112.
diff --git a/projects/ops-desk/frontend/assets/app.js b/projects/ops-desk/frontend/assets/app.js index 1ad8c52..313aec7 100644 --- a/projects/ops-desk/frontend/assets/app.js +++ b/projects/ops-desk/frontend/assets/app.js @@ -3829,17 +3829,21 @@ async function renderInfra() { const el = document.getElementById('infra-content'); el.innerHTML = '
Verificando…
'; try { - const [vm112, wazuh, integrations, health] = await Promise.all([ + const [vm112, wazuh, integrations, health, vm123Health] = await Promise.all([ api('/v1/infra/vm112/status'), api('/v1/infra/wazuh/status'), api('/v1/integrations'), api('/v1/integrations/health'), + api('/v1/vm123/health').catch(() => null), ]); const onboard = health.vm112_onboard || {}; const last = onboard.last_webhook; const gap = onboard.gap_minutes != null ? `${Math.round(onboard.gap_minutes)} min` : '—'; const vmOk = onboard.vm112_api?.reachable; const wazuhOk = wazuh.http_status === 200; + const op = vm123Health?.openpanel || {}; + const opOk = Boolean(op.ok); + const bridgeOk = Boolean(op.bridge); const statusCls = health.status === 'ok' ? 'ok' : health.status === 'critical' ? 'escalated' : 'assisting'; const heroHealthDot = health.status === 'ok' ? '' : health.status === 'critical' ? 'infra-hero-dot--bad' : 'infra-hero-dot--warn'; const alerts = (health.alerts || []).map((a) => @@ -3872,6 +3876,14 @@ async function renderInfra() { ${wazuhOk ? 'online' : 'check'} +Alerta se gap > ${health.webhook_gap_alert_minutes || 15} min sem eventos VM112.
VM123 · bridge FOSS :18087 · multidomínio · conta temporária com cleanup automático.
Status VM123 indisponível — verifique API /vm123/health.
Suite openpanel-multidomain-api-confirm · CLI scripts/test-openpanel-multidomain-api.sh
A carregar…
Spec 028 · VM123 bridge :18087 · multidomínio · conta temporária com cleanup.
-