Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,56 @@
|
||||
// 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]);
|
||||
}
|
||||
Reference in new issue
Block a user