Commit Graph

15 Commits

Author SHA1 Message Date
Claude 37fdce4bf3 fix(metrics): address PR #14 code review feedback
- Add registryConfigured flag to ensure single execution of configureRegistry
- Fix race condition by moving setMetricPrefix/configureRegistry before Promise
- Remove unused prefix parameter from configureRegistry function
- Consolidate prefix to single source of truth (configuredPrefix global)
- Allow clearing default labels by passing empty object
- Add resetMetricsConfiguration() and getConfiguredPrefix() for testing
2026-01-20 13:45:26 +00:00
Claude 82dce29dbd fix(metrics): address PR #13 code review feedback
- Apply configured prefix to all metric names via getFullMetricName()
- Configure customRegistry with defaultLabels at initialization
- Prevent memory leak: collectDefaultMetrics only called once via flag
- collectDefaultMetrics now uses customRegistry instead of global
- Initialize prefix/defaultLabels before creating baileysMetrics

All metrics now properly include prefix (e.g., baileys_connection_attempts)
and inherit defaultLabels configured via environment variables.
2026-01-20 13:25:21 +00:00
Claude 4924912f85 fix(metrics): address PR #11 code review feedback
Major improvements to prometheus-metrics.ts:
- Use custom registry instead of global promClient.register (isolation)
- Remove duplicate localValues - prom-client is now single source of truth
- Fix reset(labels) to respect labels param using remove() instead of reset()
- Migrate Summary class to use prom-client internally
- getMetricsOutput() now uses customRegistry for proper isolation

Fix misleading comments in retry-utils.ts:
- Change "exponential backoff" to "custom progressive backoff"
- Fix comment claiming constants are "from Defaults" (now local)

Breaking changes to getValues()/get() - now async as they query prom-client
2026-01-20 13:16:43 +00:00
Claude 43ece09fe9 feat(metrics): integrate prom-client for native Prometheus support
- Add prom-client ^15.1.3 as production dependency
- Migrate Counter class to use prom-client internally
- Migrate Gauge class to use prom-client internally
- Migrate Histogram class to use prom-client internally
- Update getMetricsOutput() to use prom-client's native metrics()
- Update contentType() to use prom-client's contentType
- Enable collectDefaultMetrics() for Node.js system metrics
- Maintain backward compatibility with existing API

Benefits:
- Native OpenMetrics format export
- Proper histogram bucket handling
- Default Node.js metrics (memory, CPU, event loop, GC)
- Better integration with Grafana/Prometheus ecosystem
2026-01-20 12:37:17 +00:00
Claude 33b44ff19d fix(metrics): clear startPromise on stop() to allow restart
FIX: startPromise was never cleared after stop(), causing start()
to return the old resolved promise instead of creating a new server.

This broke any flow that stops and restarts metrics (config reloads, tests).

Now stop() clears startPromise, allowing proper server restart.
2026-01-20 04:26:27 +00:00
Claude 21b632592a fix(metrics): address PR #6 code review feedback
Fixes based on Copilot AI and Codex code review comments:

1. Race Condition Fix (lines 1065-1069):
   - BEFORE: setTimeout(100ms) was incomplete - callers could resolve
     before server was actually ready
   - FIX: Cache the Promise from first start() call using startPromise
   - All concurrent calls now return the same Promise
   - Properly handles both success and error cases

2. CPU Percentage Calculation (lines 993-996):
   - BEFORE: Division by cpuCount gave artificially low values
     (e.g., 25% instead of 100% on 4-core for single-threaded process)
   - FIX: Removed cpuCount division
   - Now follows Unix/Prometheus standard: 100% = 1 core fully used
   - Values can exceed 100% on multi-core (200% = 2 cores at 100%)
   - Updated metric description to clarify this behavior
2026-01-20 04:22:00 +00:00
Claude 834cb75ba4 fix(metrics): address PR #4 code review feedback
Fixes based on Copilot AI and Codex code review comments:

1. CPU Usage Metric (line ~930-933):
   - FIX: process.cpuUsage() now calculates delta between measurements
   - Returns actual percentage (0-100) instead of cumulative seconds
   - Normalized across CPU cores

2. Duplicate SystemMetricsCollector (line ~1353-1355):
   - FIX: Removed duplicate instantiation from PrometheusMetricsManager
   - Now uses MetricsServer's collector via getSystemCollector()

3. Collection Interval (line ~1006-1008):
   - FIX: Added collectIntervalMs to MetricsConfig
   - Configurable via BAILEYS_PROMETHEUS_COLLECT_INTERVAL_MS

4. Error Handling (line ~1021-1022):
   - FIX: Enhanced error messages with structured JSON response
   - Includes error message, timestamp, and logs to console

5. Server Binding Security (line ~1034-1038):
   - FIX: Default host changed from 0.0.0.0 to 127.0.0.1
   - Configurable via BAILEYS_PROMETHEUS_HOST
   - Warning shown if exposed on all interfaces

6. Race Condition (line ~998-1001):
   - FIX: Added isStarting flag to prevent concurrent initialization
   - Multiple concurrent start() calls now handled safely
2026-01-20 04:12:58 +00:00
Claude 11e7c71fd1 feat(event-buffer): enhance with enterprise-grade features
- Add environment variable configuration (BAILEYS_BUFFER_*)
- Implement destroy() method for proper resource cleanup
- Add force flush capability with flush(force) parameter
- Implement buffer overflow detection and prevention
- Add adaptive timeout algorithm based on event rate
- Replace historyCache.clear() with LRU cache cleanup
- Integrate Prometheus metrics for buffer monitoring
- Add isDestroyed state protection
- Fix createBufferedFunction to prevent orphaned timers
- Add comprehensive statistics tracking (getStatistics())
- Add configuration accessor (getConfig())

Enterprise features:
- Configurable buffer size limits (maxBufferSize)
- Configurable timeout ranges (min/max)
- LRU cleanup ratio configuration
- Buffer overflow warning threshold
- Adaptive timeout based on event rate
2026-01-20 03:45:52 +00:00
Claude 8a705e5a1e fix(metrics): update env vars to match BAILEYS_PROMETHEUS_* convention
- Support BAILEYS_PROMETHEUS_ENABLED, BAILEYS_PROMETHEUS_PORT, etc.
- Add support for BAILEYS_PROMETHEUS_LABELS JSON configuration
- Maintain backward compatibility with METRICS_* prefix
- Update default port to 9092 (matching user's .env)
- Enable by opt-in (enabled=false by default)
- Improved startup log with labels info
2026-01-20 03:19:32 +00:00
Claude 0c173212fd feat(metrics): enhance Prometheus metrics with enterprise-grade features
- Add HTTP server for /metrics endpoint with configurable port
- Add environment variable configuration (METRICS_ENABLED, METRICS_PORT, etc.)
- Add SystemMetricsCollector for process/system metrics (CPU, memory, load avg)
- Add Event Buffer metrics (size, capacity, utilization, flushes, overflows)
- Add Adaptive Flush metrics (interval, adjustments, throughput, backpressure)
- Add Circuit Breaker metrics (state, trips, recoveries, rejections)
- Add Query metrics (latency, count, timeouts)
- Add Presence and Group metrics
- Add History Sync metrics
- Add helper functions (trackDuration, trackDurationAsync, trackOperation)
- Add Express middleware support
- Add global metrics manager with initialize/shutdown lifecycle
- Total metrics increased from 18 to 50+
2026-01-20 03:14:44 +00:00
Claude 5714e8e940 merge: resolve conflicts with master 2026-01-20 02:38:37 +00:00
Claude 61f5f76ef0 feat(socket): integrate circuit breaker with Socket operations
- Add circuit breaker configuration options to SocketConfig type
- Initialize circuit breakers for query, connection, and pre-key operations
- Wrap query() with circuit breaker protection for all WhatsApp queries
- Wrap sendRawMessage() with connection circuit breaker
- Integrate pre-key circuit breaker with uploadPreKeys()
- Add circuit breaker utilities to socket return object (stats, reset)
- Clean up circuit breakers on connection close
- Fix TypeScript errors in utility files (prometheus-metrics, logger-adapter, etc.)

Circuit breakers provide:
- Sliding window failure tracking
- Automatic state transitions (closed -> open -> half-open)
- Configurable thresholds and timeouts
- Prometheus metrics integration
- Event callbacks for monitoring
2026-01-20 02:31:23 +00:00
Claude dd59a7fe65 fix(utils): resolve TypeScript compilation errors
- baileys-event-stream.ts: Add null check for buffer item in priority insertion
- baileys-logger.ts: Handle 'silent' log level and fix JID sanitization
- cache-utils.ts: Fix type incompatibility in global cache with any type
- logger-adapter.ts: Add nullish coalescing for level mapping and fix console type cast
- prometheus-metrics.ts: Rename private 'metrics' property to 'metricsMap' to avoid conflict with method
- trace-context.ts: Store baggage header in variable before accessing to fix undefined check
2026-01-20 02:05:14 +00:00
Claude 64c7712da7 refactor(utils): translate all comments to English and enhance circuit breaker
- Translate all Portuguese comments to English in utility modules
- Enhance circuit-breaker.ts with sliding window failure tracking
- Add factory functions for WhatsApp-specific circuit breakers
  (createPreKeyCircuitBreaker, createConnectionCircuitBreaker, createMessageCircuitBreaker)
- Improve volume threshold support for circuit breaker decisions
- Standardize documentation across all utility files

Files updated:
- structured-logger.ts: English comments
- baileys-logger.ts: English comments
- trace-context.ts: English comments
- prometheus-metrics.ts: English comments
- cache-utils.ts: English comments
- circuit-breaker.ts: Enhanced with sliding window + English comments
- retry-utils.ts: English comments
- baileys-event-stream.ts: English comments
- index.ts: English comments
2026-01-20 01:48:23 +00:00
Claude 882a1f57cf feat(utils): add observability and resilience utilities
Implement comprehensive utility modules for InfiniteAPI:

Logging:
- structured-logger: JSON logging with levels, sanitization, metrics
- logger-adapter: Pino/Console/Structured adapter pattern
- baileys-logger: WhatsApp-specific logger with categories

Observability:
- trace-context: Distributed tracing with spans, correlation IDs
- prometheus-metrics: Counter, Gauge, Histogram, Summary metrics

Resilience:
- cache-utils: LRU cache with TTL, multi-level support
- circuit-breaker: 3-state circuit breaker with fallbacks
- retry-utils: Exponential backoff with jitter, predicates

Event Streaming:
- baileys-event-stream: Priority queues, backpressure, DLQ

Includes unit tests for all new modules.
2026-01-20 01:26:06 +00:00