// Generated, do not edit. sha256:227dda965713b9b51597f6f128f59f6569f0a5729dc340b98c56d958390f053d import * as db from '../db.js'; export async function recordApiCall({ providerId, capability, ok, latency_ms }) { if (!Number.isInteger(providerId)) return; const bucket = new Date().toISOString().slice(0, 16); const lat = Number.isFinite(latency_ms) ? Math.max(0, Math.round(latency_ms)) : 0; db.run(`INSERT INTO ApiCallMetric (providerId, capability, bucketMinute, okCount, failCount, sumLatencyMs, maxLatencyMs) VALUES (?,?,?,?,?,?,?) ON CONFLICT(providerId, capability, bucketMinute) DO UPDATE SET okCount = okCount + excluded.okCount, failCount = failCount + excluded.failCount, sumLatencyMs = sumLatencyMs + excluded.sumLatencyMs, maxLatencyMs = MAX(maxLatencyMs, excluded.maxLatencyMs)`, [providerId, capability, bucket, ok ? 1 : 0, ok ? 0 : 1, lat, lat]); await db.persist(); } export function apiMetricsTotals(providerId, sinceBucket) { const r = db.one(`SELECT COALESCE(SUM(okCount),0) AS ok, COALESCE(SUM(failCount),0) AS fail, COALESCE(SUM(sumLatencyMs),0) AS sum_lat, COALESCE(MAX(maxLatencyMs),0) AS max_lat FROM ApiCallMetric WHERE providerId = ? AND bucketMinute >= ?`, [providerId, sinceBucket]); const calls = (r.ok || 0) + (r.fail || 0); return { ok: r.ok || 0, fail: r.fail || 0, calls, avg_latency_ms: calls ? Math.round(r.sum_lat / calls) : 0, maxLatencyMs: r.max_lat || 0 }; } export function apiMetricsGlobal(sinceBucket) { const r = db.one(`SELECT COALESCE(SUM(okCount),0) AS ok, COALESCE(SUM(failCount),0) AS fail, COALESCE(SUM(sumLatencyMs),0) AS sum_lat, COALESCE(MAX(maxLatencyMs),0) AS max_lat FROM ApiCallMetric WHERE bucketMinute >= ?`, [sinceBucket]); const calls = (r.ok || 0) + (r.fail || 0); return { ok: r.ok || 0, fail: r.fail || 0, calls, avg_latency_ms: calls ? Math.round(r.sum_lat / calls) : 0, maxLatencyMs: r.max_lat || 0 }; } export function apiCallsByProvider(sinceBucket) { return db.all(`SELECT providerId, SUM(okCount) + SUM(failCount) AS calls FROM ApiCallMetric WHERE bucketMinute >= ? GROUP BY providerId`, [sinceBucket]); } export function apiMetricsByCapability(providerId, sinceBucket) { return db.all(`SELECT capability, SUM(okCount) AS ok, SUM(failCount) AS fail, SUM(sumLatencyMs) AS sum_lat, MAX(maxLatencyMs) AS max_lat FROM ApiCallMetric WHERE providerId = ? AND bucketMinute >= ? GROUP BY capability ORDER BY capability`, [providerId, sinceBucket]); } export function apiMetricsSeries(providerId, sinceBucket, groupLen) { return db.all(`SELECT substr(bucketMinute,1,?) AS b, COALESCE(SUM(okCount),0) AS ok, COALESCE(SUM(failCount),0) AS fail, COALESCE(MAX(maxLatencyMs),0) AS max_lat FROM ApiCallMetric WHERE providerId = ? AND bucketMinute >= ? GROUP BY b ORDER BY b`, [groupLen, providerId, sinceBucket]); }