import { registry } from "#lib/server/metrics.ts"; import type { DataPoint } from "#lib/server/otlp.ts"; export const points = (name: string, labels: Record = {}): DataPoint[] => { const [{ metrics }] = registry.payload({}, 0n, 0n).resourceMetrics[0].scopeMetrics; const metric = metrics.find((m) => m.name === name); const dataPoints = (metric?.sum ?? metric?.histogram ?? metric?.gauge)?.dataPoints ?? []; return dataPoints.filter((p) => Object.entries(labels).every(([key, value]) => p.attributes?.some((a) => a.key === key && a.value.stringValue === value) ) ); }; export const total = (name: string, labels: Record = {}): number => points(name, labels).reduce((sum, p) => sum + Number(p.asInt ?? p.count), 0);