UNPKG

autotel

Version:
1 lines 92.4 kB
{"version":3,"sources":["../src/rate-limiter.ts","../src/event-queue.ts","../src/validation.ts","../src/track.ts","../src/trace-context.ts","../src/correlation-id.ts"],"names":["getConfig","getLogger","DEFAULT_CONFIG","getEventsConfig","isInitialized","warnIfNotInitialized","getValidationConfig","trace","AsyncLocalStorage","context","propagation","recordStructuredError"],"mappings":"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","file":"chunk-FMTHVSYY.cjs","sourcesContent":["/**\n * Token bucket rate limiter for event subscribers\n *\n * Prevents overwhelming downstream events platforms with too many events.\n * Uses token bucket algorithm for smooth rate limiting with burst capacity.\n */\n\nexport interface RateLimiterConfig {\n /** Maximum events per second (default: 100) */\n maxEventsPerSecond: number;\n /** Burst capacity - max events in a single burst (default: 2x rate) */\n burstCapacity?: number;\n}\n\n/**\n * Token bucket rate limiter\n *\n * Allows bursts up to burstCapacity, then smooths to maxEventsPerSecond.\n * Thread-safe for async operations.\n */\nexport class TokenBucketRateLimiter {\n private tokens: number;\n private readonly maxTokens: number;\n private readonly refillRate: number; // tokens per millisecond\n private lastRefill: number;\n\n constructor(config: RateLimiterConfig) {\n this.maxTokens = config.burstCapacity || config.maxEventsPerSecond * 2;\n this.tokens = this.maxTokens; // Start with full bucket\n this.refillRate = config.maxEventsPerSecond / 1000; // Convert to per-ms\n this.lastRefill = Date.now();\n }\n\n /**\n * Try to consume a token (allow an event)\n * Returns true if allowed, false if rate limit exceeded\n */\n tryConsume(count = 1): boolean {\n this.refill();\n\n if (this.tokens >= count) {\n this.tokens -= count;\n return true;\n }\n\n return false;\n }\n\n /**\n * Wait until a token is available (async rate limiting)\n * Returns a promise that resolves when the event can be processed\n */\n async waitForToken(count = 1): Promise<void> {\n this.refill();\n\n if (this.tokens >= count) {\n this.tokens -= count;\n return;\n }\n\n // Calculate wait time until we have enough tokens\n const tokensNeeded = count - this.tokens;\n const waitMs = Math.ceil(tokensNeeded / this.refillRate);\n\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n\n // After waiting, try again (recursive)\n return this.waitForToken(count);\n }\n\n /**\n * Refill tokens based on elapsed time\n */\n private refill(): void {\n const now = Date.now();\n const elapsed = now - this.lastRefill;\n const tokensToAdd = elapsed * this.refillRate;\n\n this.tokens = Math.min(this.maxTokens, this.tokens + tokensToAdd);\n this.lastRefill = now;\n }\n\n /**\n * Get current available tokens (for testing/debugging)\n */\n getAvailableTokens(): number {\n this.refill();\n return Math.floor(this.tokens);\n }\n\n /**\n * Reset the rate limiter (for testing)\n */\n reset(): void {\n this.tokens = this.maxTokens;\n this.lastRefill = Date.now();\n }\n}\n","/**\n * Events event queue with batching, backpressure, retry logic, rate limiting, and OTel metrics\n *\n * Exposes delivery pipeline metrics for observability:\n * - autotel.event_delivery.queue.size - Current queue size\n * - autotel.event_delivery.queue.oldest_age_ms - Age of oldest event in queue\n * - autotel.event_delivery.queue.delivered - Successfully delivered events\n * - autotel.event_delivery.queue.failed - Failed event deliveries\n * - autotel.event_delivery.queue.dropped - Dropped events with reason\n * - autotel.event_delivery.queue.latency_ms - Delivery latency histogram\n * - autotel.event_delivery.subscriber.health - Subscriber health (1=healthy, 0=unhealthy)\n */\n\nimport type {\n Counter,\n Histogram,\n ObservableGauge,\n Attributes,\n} from '@opentelemetry/api';\nimport type { ObservableResult } from '@opentelemetry/api';\nimport type {\n EventSubscriber,\n EventAttributes,\n AutotelEventContext,\n EventSchemaMetadata,\n} from './event-subscriber';\nimport { getLogger } from './init';\nimport { getConfig as getRuntimeConfig } from './config';\nimport { TokenBucketRateLimiter, type RateLimiterConfig } from './rate-limiter';\nimport { getOrCreateCorrelationId } from './correlation-id';\n\nexport interface EventData {\n name: string;\n attributes?: EventAttributes;\n timestamp: number;\n /** Internal: correlation ID for debug breadcrumbs */\n _correlationId?: string;\n /** Internal: trace ID for debug breadcrumbs */\n _traceId?: string;\n /** Autotel context for trace correlation (passed to subscribers) */\n autotel?: AutotelEventContext;\n /** Optional schema metadata for contract-aware subscribers. */\n schema?: EventSchemaMetadata;\n}\n\n/**\n * Drop reasons for event delivery queue metrics\n * LOW CARDINALITY: Only these 4 values allowed in metric labels\n */\nexport type EventDropReason =\n | 'rate_limit'\n | 'circuit_open'\n | 'payload_invalid'\n | 'shutdown';\n\nexport interface QueueConfig {\n maxSize: number; // Max events in queue (default: 50,000)\n batchSize: number; // Events per batch (default: 100)\n flushInterval: number; // Flush interval in ms (default: 10,000)\n maxRetries: number; // Max retry attempts (default: 3)\n rateLimit?: RateLimiterConfig; // Optional rate limiting (default: 100 events/sec)\n}\n\nconst DEFAULT_CONFIG: QueueConfig = {\n maxSize: 50_000,\n batchSize: 100,\n flushInterval: 10_000,\n maxRetries: 3,\n rateLimit: {\n maxEventsPerSecond: 100,\n burstCapacity: 200,\n },\n};\n\n/**\n * Metrics for event delivery queue observability\n *\n * All metrics use low-cardinality labels only:\n * - subscriber: stable identifier (e.g., 'posthog', 'mixpanel')\n * - reason: one of EventDropReason values\n */\ninterface EventQueueMetrics {\n /** Current queue size (observable gauge) */\n queueSize: ObservableGauge;\n /** Age of oldest event in queue in ms (observable gauge) */\n oldestAge: ObservableGauge;\n /** Successfully delivered events (counter) */\n delivered: Counter;\n /** Failed event deliveries after all retries (counter) */\n failed: Counter;\n /** Dropped events (counter with reason label) */\n dropped: Counter;\n /** Event delivery latency histogram in ms */\n latency: Histogram;\n /** Subscriber health: 1=healthy, 0=unhealthy (observable gauge) */\n subscriberHealth: ObservableGauge;\n}\n\n/**\n * Get subscriber name for metrics (stable, low-cardinality)\n *\n * Priority:\n * 1. Explicit config: subscriber.name\n * 2. Class static property (if available)\n * 3. Fallback: lowercase class name without \"Subscriber\" suffix\n */\nfunction getSubscriberName(subscriber: EventSubscriber): string {\n // Use explicit name if provided\n if (subscriber.name) {\n return subscriber.name.toLowerCase();\n }\n\n // Fallback: derive from class name\n const className = subscriber.constructor?.name || 'unknown';\n return className.replace(/Subscriber$/i, '').toLowerCase();\n}\n\n/**\n * Events queue with batching and backpressure\n *\n * Features:\n * - Batches events for efficient sending\n * - Bounded queue with drop-oldest policy (prod) or blocking (dev)\n * - Exponential backoff retry\n * - Rate limiting to prevent overwhelming subscribers\n * - Graceful flush on shutdown\n */\nexport class EventQueue {\n private queue: EventData[] = [];\n private flushTimer: NodeJS.Timeout | null = null;\n private readonly config: QueueConfig;\n private readonly subscribers: EventSubscriber[];\n private readonly rateLimiter: TokenBucketRateLimiter | null;\n private flushPromise: Promise<void> | null = null;\n private isShuttingDown = false;\n\n // Metrics\n private metrics: EventQueueMetrics | null = null;\n\n // Observable callback cleanup functions\n private observableCleanups: Array<() => void> = [];\n\n // Subscriber health tracking (for observable gauges)\n private subscriberHealthy: Map<string, boolean> = new Map();\n\n constructor(subscribers: EventSubscriber[], config?: Partial<QueueConfig>) {\n this.subscribers = subscribers;\n this.config = { ...DEFAULT_CONFIG, ...config };\n\n // Initialize rate limiter if configured\n this.rateLimiter = this.config.rateLimit\n ? new TokenBucketRateLimiter(this.config.rateLimit)\n : null;\n\n // Initialize subscriber health tracking\n for (const subscriber of subscribers) {\n const name = getSubscriberName(subscriber);\n this.subscriberHealthy.set(name, true);\n }\n\n // Initialize metrics\n this.initMetrics();\n }\n\n /**\n * Initialize OTel metrics for queue observability\n */\n private initMetrics(): void {\n const runtimeConfig = getRuntimeConfig();\n const meter = runtimeConfig.meter;\n\n // Queue size gauge - observe current queue length\n const queueSize = meter.createObservableGauge(\n 'autotel.event_delivery.queue.size',\n {\n description: 'Current number of events in the delivery queue',\n unit: 'count',\n },\n );\n const queueSizeCallback = (observableResult: ObservableResult) => {\n observableResult.observe(this.queue.length);\n };\n queueSize.addCallback(queueSizeCallback);\n this.observableCleanups.push(() =>\n queueSize.removeCallback(queueSizeCallback),\n );\n\n // Oldest event age gauge - observe wait time of oldest event\n const oldestAge = meter.createObservableGauge(\n 'autotel.event_delivery.queue.oldest_age_ms',\n {\n description: 'Age of the oldest event in the queue in milliseconds',\n unit: 'ms',\n },\n );\n const oldestAgeCallback = (observableResult: ObservableResult) => {\n if (this.queue.length > 0) {\n const oldest = this.queue[0]!;\n const ageMs = Date.now() - oldest.timestamp;\n observableResult.observe(ageMs);\n } else {\n observableResult.observe(0);\n }\n };\n oldestAge.addCallback(oldestAgeCallback);\n this.observableCleanups.push(() =>\n oldestAge.removeCallback(oldestAgeCallback),\n );\n\n // Delivered counter\n const delivered = meter.createCounter(\n 'autotel.event_delivery.queue.delivered',\n {\n description: 'Number of events successfully delivered to subscribers',\n unit: 'count',\n },\n );\n\n // Failed counter\n const failed = meter.createCounter('autotel.event_delivery.queue.failed', {\n description:\n 'Number of events that failed delivery after all retry attempts',\n unit: 'count',\n });\n\n // Dropped counter (with reason label)\n const dropped = meter.createCounter(\n 'autotel.event_delivery.queue.dropped',\n {\n description: 'Number of events dropped from the queue',\n unit: 'count',\n },\n );\n\n // Latency histogram\n const latency = meter.createHistogram(\n 'autotel.event_delivery.queue.latency_ms',\n {\n description: 'Event delivery latency from enqueue to successful send',\n unit: 'ms',\n },\n );\n\n // Subscriber health gauge\n const subscriberHealth = meter.createObservableGauge(\n 'autotel.event_delivery.subscriber.health',\n {\n description: 'Subscriber health status (1=healthy, 0=unhealthy)',\n unit: '1',\n },\n );\n const subscriberHealthCallback = (observableResult: ObservableResult) => {\n for (const [subscriberName, isHealthy] of this.subscriberHealthy) {\n observableResult.observe(isHealthy ? 1 : 0, {\n subscriber: subscriberName,\n });\n }\n };\n subscriberHealth.addCallback(subscriberHealthCallback);\n this.observableCleanups.push(() =>\n subscriberHealth.removeCallback(subscriberHealthCallback),\n );\n\n this.metrics = {\n queueSize,\n oldestAge,\n delivered,\n failed,\n dropped,\n latency,\n subscriberHealth,\n };\n }\n\n /**\n * Record a dropped event with reason and emit debug breadcrumb\n */\n private recordDropped(\n reason: EventDropReason,\n event?: EventData,\n subscriberName?: string,\n ): void {\n // Increment metric\n const attrs: Attributes = { reason };\n if (subscriberName) {\n attrs.subscriber = subscriberName;\n }\n this.metrics?.dropped.add(1, attrs);\n\n // Debug breadcrumb log (rate-limited via existing logger)\n const logLevel = reason === 'payload_invalid' ? 'error' : 'warn';\n const logger = getLogger();\n\n if (logLevel === 'error') {\n logger.error(\n {\n eventName: event?.name,\n subscriber: subscriberName,\n reason,\n correlationId: event?._correlationId,\n traceId: event?._traceId,\n },\n `[autotel] Event dropped: ${reason}`,\n );\n } else {\n logger.warn(\n {\n eventName: event?.name,\n subscriber: subscriberName,\n reason,\n correlationId: event?._correlationId,\n traceId: event?._traceId,\n },\n `[autotel] Event dropped: ${reason}`,\n );\n }\n }\n\n /**\n * Record permanent delivery failure (after all retries exhausted)\n * Increments failed counter and logs error\n */\n private recordFailed(\n event: EventData,\n subscriberName: string,\n error?: Error,\n ): void {\n this.metrics?.failed.add(1, { subscriber: subscriberName });\n\n // Mark subscriber as unhealthy\n this.subscriberHealthy.set(subscriberName, false);\n\n // Debug breadcrumb log\n getLogger().error(\n {\n eventName: event.name,\n subscriber: subscriberName,\n correlationId: event._correlationId,\n traceId: event._traceId,\n err: error,\n },\n `[autotel] Event delivery failed after all retries`,\n );\n }\n\n /**\n * Mark subscriber as unhealthy on transient failure (without incrementing failed counter)\n * Used during retry attempts - only recordFailed should increment the counter\n */\n private markSubscriberUnhealthy(subscriberName: string): void {\n this.subscriberHealthy.set(subscriberName, false);\n }\n\n /**\n * Record successful delivery\n */\n private recordDelivered(\n event: EventData,\n subscriberName: string,\n startTime: number,\n ): void {\n const latencyMs = Date.now() - startTime;\n\n this.metrics?.delivered.add(1, { subscriber: subscriberName });\n this.metrics?.latency.record(latencyMs, { subscriber: subscriberName });\n\n // Mark subscriber as healthy\n this.subscriberHealthy.set(subscriberName, true);\n }\n\n /**\n * Enqueue an event for sending\n *\n * Backpressure policy:\n * - Drops oldest event and logs warning if queue is full (same behavior in all environments)\n */\n enqueue(event: EventData): void {\n // Reject events during shutdown\n if (this.isShuttingDown) {\n this.recordDropped('shutdown', event);\n return;\n }\n\n // Check queue size\n if (this.queue.length >= this.config.maxSize) {\n // Drop oldest event and log warning (same behavior in all environments)\n const droppedEvent = this.queue.shift();\n this.recordDropped('rate_limit', droppedEvent);\n getLogger().warn(\n {\n droppedEvent: droppedEvent?.name,\n },\n `[autotel] Events queue full (${this.config.maxSize} events). ` +\n 'Dropping oldest event. Events are being produced faster than they can be sent. ' +\n 'Check your subscribers or reduce tracking frequency.',\n );\n }\n\n // Enrich event with correlation context for debug breadcrumbs\n const enrichedEvent: EventData = {\n ...event,\n _correlationId: event._correlationId || getOrCreateCorrelationId(),\n };\n\n this.queue.push(enrichedEvent);\n this.scheduleBatchFlush();\n }\n\n /**\n * Schedule a batch flush if not already scheduled\n */\n private scheduleBatchFlush(): void {\n if (this.flushTimer || this.flushPromise) return;\n\n this.flushTimer = setTimeout(() => {\n this.flushTimer = null;\n void this.flushBatch();\n }, this.config.flushInterval);\n }\n\n /**\n * Flush a batch of events\n * Uses promise-based concurrency control to prevent race conditions\n */\n private async flushBatch(): Promise<void> {\n if (this.queue.length === 0) return;\n\n // If already flushing, wait for existing flush\n if (this.flushPromise) {\n await this.flushPromise;\n return;\n }\n\n this.flushPromise = this.doFlushBatch();\n\n try {\n await this.flushPromise;\n } finally {\n this.flushPromise = null;\n\n // Schedule next flush if more events\n if (this.queue.length > 0) {\n this.scheduleBatchFlush();\n }\n }\n }\n\n /**\n * Internal flush implementation\n */\n private async doFlushBatch(): Promise<void> {\n const batch = this.queue.splice(0, this.config.batchSize);\n await this.sendWithRetry(batch, this.config.maxRetries);\n }\n\n /**\n * Send events with exponential backoff retry\n * Tracks per-event, per-subscriber failures so failed counter reflects actual failed deliveries.\n * On retry, only failed (event, subscriber) pairs are re-sent to avoid double-counting delivered.\n */\n private async sendWithRetry(\n events: EventData[],\n retriesLeft: number,\n subscribersByEventIndex?: Map<number, Set<string>>,\n ): Promise<void> {\n const failedDeliveries = await this.sendToSubscribers(\n events,\n subscribersByEventIndex,\n );\n\n if (failedDeliveries.length > 0) {\n if (retriesLeft > 0) {\n // Retry only events that had at least one failure, and only to subscribers that failed (avoid re-sending to healthy subscribers and double-counting delivered)\n const failedEventIndices = new Set(\n failedDeliveries.map((f) => f.eventIndex),\n );\n const failedEventIndicesOrdered = [...failedEventIndices].sort(\n (a, b) => a - b,\n );\n const eventsToRetry = failedEventIndicesOrdered.map(\n (i) => events[i],\n ) as EventData[];\n const failedSubscribersByRetryIndex = new Map<number, Set<string>>();\n for (let j = 0; j < failedEventIndicesOrdered.length; j++) {\n const origIndex = failedEventIndicesOrdered[j];\n const set = new Set<string>();\n for (const { eventIndex, subscriberName } of failedDeliveries) {\n if (eventIndex === origIndex) set.add(subscriberName);\n }\n failedSubscribersByRetryIndex.set(j, set);\n }\n const delay = Math.pow(2, this.config.maxRetries - retriesLeft) * 1000;\n await new Promise((resolve) => setTimeout(resolve, delay));\n return this.sendWithRetry(\n eventsToRetry,\n retriesLeft - 1,\n failedSubscribersByRetryIndex,\n );\n } else {\n // Give up after max retries - record one failure per (event, subscriber) pair\n for (const { eventIndex, subscriberName, error } of failedDeliveries) {\n const event = events[eventIndex];\n if (event) this.recordFailed(event, subscriberName, error);\n }\n\n const failedSubscriberNames = [\n ...new Set(failedDeliveries.map((f) => f.subscriberName)),\n ];\n getLogger().error(\n {\n failedSubscribers: failedSubscriberNames,\n retriesAttempted: this.config.maxRetries,\n },\n '[autotel] Failed to send events after retries',\n );\n }\n }\n }\n\n /**\n * Send events to configured subscribers with rate limiting and metrics.\n * When subscribersByEventIndex is provided (retry path), only those subscribers are tried per event.\n * Returns per-event, per-subscriber failures (empty if all succeeded).\n */\n private async sendToSubscribers(\n events: EventData[],\n subscribersByEventIndex?: Map<number, Set<string>>,\n ): Promise<\n Array<{ eventIndex: number; subscriberName: string; error?: Error }>\n > {\n const failedDeliveries: Array<{\n eventIndex: number;\n subscriberName: string;\n error?: Error;\n }> = [];\n\n const sendOne = async (event: EventData, eventIndex: number) => {\n // On retry, only try subscribers that failed for this event (never re-send to healthy subscribers)\n const subscriberNames = subscribersByEventIndex?.get(eventIndex);\n const failures = await this.sendEventToSubscribers(\n event,\n subscriberNames ?? undefined,\n );\n for (const failure of failures) {\n failedDeliveries.push({\n eventIndex,\n subscriberName: failure.subscriberName,\n error: failure.error,\n });\n }\n };\n\n if (!this.rateLimiter) {\n for (let i = 0; i < events.length; i++) {\n const event = events[i];\n if (event) await sendOne(event, i);\n }\n return failedDeliveries;\n }\n\n for (let i = 0; i < events.length; i++) {\n await this.rateLimiter.waitForToken();\n const event = events[i];\n if (event) await sendOne(event, i);\n }\n\n return failedDeliveries;\n }\n\n /**\n * Send a single event to subscribers.\n * - When subscriberNames is un