Performance
Runtime process metrics — CPU, memory, event loop, and GC for instrumented services.
What Performance does
Performance captures process-level runtime metrics — RSS, heap used, heap total, CPU user/system, event loop p50/p99, GC pauses (major/minor/incremental), and 1-/5-/15-minute system load — as a single `performance` event emitted on a configurable interval (default 10s). It works on Node and on Bun via the same `node:perf_hooks` API surface.
Each snapshot is a single row; the dashboard rolls them up into per-service charts. Static labels (`{ service: 'api', region: 'us-east-1' }`) attach to every emit so you can slice by deployment, by host, or by experiment. There is no agent and no sidecar — the SDK is the agent.
Wire payload
Same shape, three syntaxesThe wire protocol is plain HTTP, plain JSON, HMAC-SHA256. The TypeScript tab uses the SDK; the cURL tab is the raw HTTP equivalent; the Python tab shows the preview SDK shape.
import { createCuittyClient } from "@cuitty/sdk";
import { performancePlugin } from "@cuitty/sdk/plugins/performance";
const cuitty = createCuittyClient({
portalUrl: "https://app.cuitty.com",
projectId: process.env.CUITTY_PROJECT_ID!,
apiKey: process.env.CUITTY_API_KEY!,
});
cuitty.use(performancePlugin());
cuitty.start();
cuitty.use(performancePlugin({
intervalMs: 10_000,
labels: { service: "api", region: "us-east-1" },
collect: { memory: true, cpu: true, eventLoop: true, gc: true, system: true },
}));
Drop-in plugin
import { performancePlugin } from "@cuitty/sdk/plugins/performance";
cuitty.use(performancePlugin({
intervalMs: 10_000,
labels: { service: "api" },
}));Database schema
Excerpt from modules/performance/schema.sql.
One libSQL file per module — back it up with cp.
CREATE TABLE IF NOT EXISTS perf_snapshots (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id TEXT NOT NULL,
timestamp INTEGER NOT NULL,
labels TEXT,
mem_rss INTEGER,
mem_heap_used INTEGER,
cpu_percent_user REAL,
cpu_percent_system REAL,
el_utilization REAL,
el_delay_p50_ms REAL,
el_delay_p99_ms REAL,
gc_major_count INTEGER,
gc_minor_count INTEGER,
sys_load_1m REAL
);