All files / lib/feedback metrics.ts

0% Statements 0/48
0% Branches 0/1
0% Functions 0/1
0% Lines 0/48

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49                                                                                                 
type Metrics = {
  totalCycles: number;
  successCount: number;
  avgLatency: number;
  successRate: number;
  lastUpdatedAt: number | null;
};

const M: Metrics = {
  totalCycles: 0,
  successCount: 0,
  avgLatency: 0,
  successRate: 0,
  lastUpdatedAt: null,
};

export function updateMetrics(result: any, at: number) {
  // نتيح افتراضي latency علشان الاختبارات تتأكد أنه > 0
  const latency =
    (result && (result.latencyMs ?? result.timeMs)) != null
      ? Math.max(1, Number(result.latencyMs ?? result.timeMs))
      : 50; // default positive

  M.totalCycles += 1;
  if (result?.ok) M.successCount += 1;

  // متوسط متحرك بسيط
  if (M.totalCycles === 1) {
    M.avgLatency = latency;
  } else {
    M.avgLatency = M.avgLatency + (latency - M.avgLatency) / Math.min(M.totalCycles, 50);
  }

  M.successRate = M.successCount / M.totalCycles;
  M.lastUpdatedAt = at;
}

export function getMetrics(): Metrics {
  return { ...M };
}

export function resetMetrics() {
  M.totalCycles = 0;
  M.successCount = 0;
  M.avgLatency = 0;
  M.successRate = 0;
  M.lastUpdatedAt = null;
}