148 lines · 4.1 KB · TypeScript
RawDownload
import assert from "node:assert/strict";import test from "node:test";import { normalizeUsageStats } from "@/features/usage/normalize-usage-stats";import type { UsageStats } from "@/lib/types"; test("usage normalization preserves controller observability payload", () => {  const normalized = normalizeUsageStats({    totals: {      total_requests: "4",      successful_requests: "2",      failed_requests: "2",    },    controller: {      totals: {        total_requests: "4",        successful_requests: "2",        failed_requests: "2",        success_rate: "50",      },      latency: { avg_ms: "12.4", max_ms: "33" },      recent_activity: {        last_hour_requests: "4",        last_24h_requests: "4",        last_24h_failed_requests: "2",      },      by_path: [        {          method: "POST",          path: "/vram-calculator",          requests: "1",          successful: "0",          failed: "1",          success_rate: "0",          avg_duration_ms: "12",          max_duration_ms: "12",        },      ],      by_status: [{ status: "400", requests: "2" }],      recent_errors: [        {          method: "POST",          path: "/vram-calculator",          status: "400",          error_class: "",          error_message: "model is required",          created_at: "2026-05-26T12:00:00.000Z",        },      ],      function_calls: {        totals: {          total_calls: "2",          successful_calls: "1",          failed_calls: "1",          success_rate: "50",        },        latency: { avg_ms: "5.5", max_ms: "8" },        by_function: [          {            function_name: "usage.aggregateInferenceRequests",            calls: "1",            successful: "0",            failed: "1",            success_rate: "0",            avg_duration_ms: "8",            max_duration_ms: "8",          },        ],        recent_errors: [          {            function_name: "usage.aggregateInferenceRequests",            error_class: "Error",            error_message: "forced aggregate failure",            created_at: "2026-05-26T12:00:01.000Z",          },        ],      },    },  } as unknown as UsageStats);   assert.equal(normalized.totals.total_requests, 4);  assert.deepEqual(normalized.controller?.totals, {    total_requests: 4,    successful_requests: 2,    failed_requests: 2,    success_rate: 50,  });  assert.deepEqual(normalized.controller?.latency, {    avg_ms: 12.4,    max_ms: 33,  });  assert.deepEqual(normalized.controller?.recent_activity, {    last_hour_requests: 4,    last_24h_requests: 4,    last_24h_failed_requests: 2,  });  assert.deepEqual(normalized.controller?.by_status, [    { status: 400, requests: 2 },  ]);  assert.deepEqual(normalized.controller?.by_path[0], {    method: "POST",    path: "/vram-calculator",    requests: 1,    successful: 0,    failed: 1,    success_rate: 0,    avg_duration_ms: 12,    max_duration_ms: 12,  });  assert.deepEqual(normalized.controller?.recent_errors[0], {    method: "POST",    path: "/vram-calculator",    status: 400,    error_class: null,    error_message: "model is required",    created_at: "2026-05-26T12:00:00.000Z",  });  assert.deepEqual(normalized.controller?.function_calls?.totals, {    total_calls: 2,    successful_calls: 1,    failed_calls: 1,    success_rate: 50,  });  assert.deepEqual(normalized.controller?.function_calls?.latency, {    avg_ms: 5.5,    max_ms: 8,  });  assert.deepEqual(normalized.controller?.function_calls?.by_function[0], {    function_name: "usage.aggregateInferenceRequests",    calls: 1,    successful: 0,    failed: 1,    success_rate: 0,    avg_duration_ms: 8,    max_duration_ms: 8,  });  assert.deepEqual(normalized.controller?.function_calls?.recent_errors[0], {    function_name: "usage.aggregateInferenceRequests",    error_class: "Error",    error_message: "forced aggregate failure",    created_at: "2026-05-26T12:00:01.000Z",  });}); test("usage normalization leaves controller observability absent when provider data has none", () => {  const normalized = normalizeUsageStats(null);   assert.equal(normalized.controller, undefined);});