// src/services/voiceDiag/checks/wan/wanJitter.js // // Per-path WAN jitter (LQM inter-packet arrival variation, ms) vs // voice-quality references: // - <= 30ms : good (jitter buffer handles it cleanly) // - 30-50ms : warn (audible choppiness on longer calls) // - > 50ms : error (jitter buffer starts dropping packets; // garbled audio) // // Both thresholds are env-configurable via WAN_STANDARD_JITTER_*. import { maybeSkippedByKillSwitch, getLinks, getJitterWarnMs, getJitterErrorMs, evaluatePerLinkMetric, } from './_helpers.js'; export const WAN_JITTER_STANDARDS = Object.freeze({ maxWarnMs: 30, maxErrorMs: 50, unit: 'ms', reference: 'RFC 3550 jitter buffer sizing', }); export const wanJitterCheck = { id: 'wanJitter', label: 'SD-WAN Jitter (per path)', requires: ['sdwanSite'], scope: null, standards: WAN_JITTER_STANDARDS, async run(ctx) { const skip = maybeSkippedByKillSwitch(wanJitterCheck); if (skip) return skip; const warnThresh = getJitterWarnMs(); const errorThresh = getJitterErrorMs(); return evaluatePerLinkMetric({ links: getLinks(ctx), metricKey: 'jitterMs', label: 'jitter', unit: 'ms', warnThresh, errorThresh, lowIsBad: false, standardLabel: `warn > ${warnThresh}ms, error > ${errorThresh}ms`, }); }, };