All files / lib/feedback metrics.ts

0% Statements 0/34
100% Branches 1/1
100% Functions 1/1
0% Lines 0/34

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;
}