Event Examples
Complete ForgeEvent JSON output from all adapters. Use these to understand what your exporter receives and how to route different event types.
🔴 criticalCritical — Hot Path (MongoDB)mongoose
json
{
"type": "db.query",
"db": "mongodb",
"adapter": "mongoose",
"model": "User",
"operation": "findOne",
"durationMs": 342,
"slow": true,
"signals": ["slow_query", "hot_path", "unbounded_query"],
"severity": "critical",
"request": { "id": "req_8f29a3b1c", "method": "GET", "route": "/api/users/:id", "userId": "user_abc123" },
"callsite": { "file": "/src/routes/users.ts", "line": 42 },
"timestamp": "2025-02-11T15: 30: 45.123Z",
"metadata": { "limit": null }
}🔴 criticalCritical — N+1 Query (PostgreSQL)pg
json
{
"type": "db.query",
"db": "postgres",
"adapter": "pg",
"model": "posts",
"operation": "select",
"durationMs": 156,
"slow": false,
"signals": ["n_plus_one"],
"severity": "critical",
"request": { "id": "req_7k3m9x2p", "method": "GET", "route": "/api/posts", "userId": "user_xyz789" },
"callsite": { "file": "/src/services/postService.ts", "line": 78 },
"metadata": { "query": "SELECT * FROM posts WHERE user_id = $1", "rowsAffected": 1 }
}🔴 criticalCritical — Redis KEYS Commandioredis
json
{
"type": "db.query",
"db": "redis",
"adapter": "ioredis",
"operation": "keys",
"durationMs": 1250,
"slow": true,
"signals": ["slow_query", "deprecated_api", "blocking_io"],
"severity": "critical",
"request": { "id": "req_2h7k9m3n", "method": "POST", "route": "/api/cache/clear" },
"callsite": { "file": "/src/services/cacheService.ts", "line": 56 },
"metadata": { "command": "KEYS", "commandCategory": "dangerous", "commandDocs": "https://arsenicdev.online/redis/keys", "args": ["user:*"] }
}ℹ️ infoInfo — Healthy Query (Prisma)prisma
json
{
"type": "db.query",
"db": "postgres",
"adapter": "prisma",
"model": "Product",
"operation": "findUnique",
"durationMs": 8,
"slow": false,
"signals": ["fast_query", "bounded_query", "indexed_lookup", "stable_latency", "connection_reused", "low_cpu", "low_memory"],
"severity": "info",
"request": { "id": "req_5p8k2n9m", "method": "GET", "route": "/api/products/:id" },
"callsite": { "file": "/src/routes/products.ts", "line": 23 },
"metadata": { "args": { "where": { "id": "prod_12345" } }, "cpuUsage": 12.5, "memoryUsage": 8388608, "connectionReused": true, "indexUsed": true, "rowsAffected": 1 }
}⚠️ warningWarning — Background Job (No request context)prisma
json
{
"type": "db.query",
"db": "postgres",
"adapter": "prisma",
"model": "Report",
"operation": "aggregate",
"durationMs": 2340,
"slow": true,
"signals": ["slow_query", "large_payload"],
"severity": "warning",
"callsite": { "file": "/src/jobs/reportGenerator.ts", "line": 203 },
"timestamp": "2025-02-11T15: 37: 29.456Z",
"metadata": { "payloadSize": 3145728, "rowsAffected": 50000 }
}Field reference
| Field | Type | Description |
|---|---|---|
type | "db.query" | Always "db.query" |
db | string | Database type: mongodb, postgres, redis |
adapter | string | Adapter: mongoose, prisma, pg, ioredis |
model | string | Model/table/collection name |
operation | string | Operation: find, select, update, etc. |
durationMs | number | Query duration in milliseconds |
slow | boolean | Whether query exceeded slowQueryThresholdMs |
signals | string[] | Array of detected signal names |
severity | "critical"|"warning"|"info" | Overall event severity |
explanations | object | Signal explanations keyed by signal name |
request | object (optional) | HTTP request context (absent in background jobs) |
callsite | object (optional) | Source file and line number |
metadata | object (optional) | Adapter-specific metadata |
timestamp | string | ISO 8601 timestamp |