@454creative/easy-events
Version:
A minimal event engine for Node.js and NestJS, wrapping Emmett for lightweight in-process event handling
82 lines • 2.62 kB
TypeScript
export interface EventMetrics {
totalEvents: number;
eventsByType: Record<string, number>;
averageProcessingTime: number;
errorCount: number;
activeHandlers: number;
processingTimePercentiles?: {
p50: number;
p95: number;
p99: number;
};
performanceAlerts?: {
slowOperations: number;
memoryUsage?: number;
cpuUsage?: number;
};
performanceTrends?: {
avgProcessingTimeTrend: 'improving' | 'stable' | 'degrading';
errorRateTrend: 'improving' | 'stable' | 'degrading';
};
}
export interface EventAudit {
eventId: string;
eventType: string;
timestamp: Date;
payload: any;
correlationId?: string | undefined;
userId?: string | undefined;
source?: string | undefined;
processingTime?: number | undefined;
success: boolean;
error?: string | undefined;
}
export interface ObservabilityConfig {
enableMetrics?: boolean;
enableAuditing?: boolean;
enableTracing?: boolean;
enablePerformanceMonitoring?: boolean;
auditRetentionDays?: number;
metricsRetentionDays?: number;
logLevel?: "debug" | "info" | "warn" | "error";
customAuditLogger?: (audit: EventAudit) => void;
customMetricsCollector?: (metrics: EventMetrics) => void;
performanceMonitoring?: {
enablePercentiles?: boolean;
enableMemoryMonitoring?: boolean;
enableCpuMonitoring?: boolean;
slowOperationThreshold?: number;
performanceAlertThreshold?: number;
enablePerformanceTrends?: boolean;
performanceBudget?: {
maxProcessingTime: number;
maxErrorRate: number;
maxMemoryUsage: number;
};
};
storage?: {
type: "memory" | "file" | "database";
path?: string;
connectionString?: string;
retentionDays?: number;
maxLogs?: number;
};
}
export interface EventTracing {
traceId: string;
spanId: string;
parentSpanId?: string;
correlationId?: string;
userId?: string;
metadata?: Record<string, any>;
}
export interface ObservabilityEngine {
recordEvent(event: string, payload: any, tracing?: EventTracing): void;
recordHandlerExecution(event: string, handler: string, duration: number, success: boolean, error?: string): void;
recordError(event: string, error: Error, tracing?: EventTracing): void;
getMetrics(): EventMetrics;
getAuditLogs(filters?: Partial<EventAudit>): EventAudit[];
clearAuditLogs(): void;
clearMetrics(): void;
}
//# sourceMappingURL=observability.interface.d.ts.map