Configuration
All configuration is done in code when calling createMonitor(). There are no config files.
MonitorConfig options
| Option | Type | Default | Description |
|---|---|---|---|
slowQueryThresholdMs | number | 200 | Threshold in ms for slow query detection |
exporter | Exporter | — | Required. Receives all emitted events |
emitPositiveSignals | boolean | false | Enable INFO-level healthy signals |
includeDocs | boolean | true | Include signal explanations in events |
Full example
typescript
import { createMonitor, SignalSeverity } from '@periodic/arsenic';
const monitor = createMonitor({
// Slow query threshold — queries over this emit slow_query signal
slowQueryThresholdMs: 200,
// Required — your event router
exporter: (event) => {
switch (event.severity) {
case SignalSeverity.CRITICAL: sendToPagerDuty(event); break;
case SignalSeverity.WARNING: sendToSlack(event); break;
case SignalSeverity.INFO: logger.info(event); break;
}
},
// Enable INFO signals (disabled by default to reduce noise)
emitPositiveSignals: false,
// Include human-readable signal explanations in events
includeDocs: true,
});Framework adapter options
typescript
// Express context
app.use(expressContext(monitor, {
// Optional — extract user ID from request for event attribution
attachUser: (req) => req.user?.id,
}));
// Fastify context
app.register(fastifyContext(monitor, {
attachUser: (req) => req.user?.id,
}));Environment-based configuration
src/config/monitor.ts
typescript
const isDev = process.env.NODE_ENV === 'development';
const monitor = createMonitor({
// Looser in dev, stricter in prod
slowQueryThresholdMs: isDev ? 500 : 200,
// More verbose in dev
emitPositiveSignals: isDev,
includeDocs: isDev,
exporter: async (event) => {
// Always log
logger.info(event, 'db.event');
// Only alert in production
if (!isDev && event.severity === SignalSeverity.CRITICAL) {
await sendToPagerDuty(event);
}
},
});
export default monitor;No global state
Each monitor is a fully independent instance. Create multiple monitors with different thresholds for different databases or services. Safe for multi-tenant applications.