Changelog
Version v1.2.0 Latest
✨ New Features & Enhancements
1. Pluggable Observability & Telemetry Engine (metrics/)
- Core Observer Interface: Introduced
metrics.Observerinterface andmetrics.Eventsnapshot data structure. - Zero-Allocation Guarantee: Evaluated at $0\text{ B/op}$ and $0\text{ allocs/op}$ when telemetry observers are disabled.
- Prometheus Support (
metrics/prometheus): Native collectors for evaluation counts (distlimit_requests_total), execution latency histograms (distlimit_evaluation_duration_seconds), and hybrid failovers (distlimit_hybrid_fallback_total). - OpenTelemetry Support (
metrics/otel): Turnkey OTel MeterProvider integration (Int64Counter&Float64Histogram).
2. Lock-Free Dynamic Policy & Runtime Reload Engine
- Atomic Policy Swapping:
Limiterinternal state refactored toatomic.Pointer[Policy]. Callinglimiter.UpdatePolicy(limit, window)updates limits instantly with zero lock contention ($O(1)$ zero lock delay). - Multi-Tenant
PolicyResolver: AddedPolicyResolverinterface allowing dynamic tier-based rate limit rules per key (e.g., VIP vs Free tiers) viaWithPolicyResolver().
3. Middleware Route Labeling (WithRouteLabeling)
- Context helper utilities
ContextWithRoute(ctx, route)andRouteFromContext(ctx). - Added
WithRouteLabeling(true)option across all middleware adapters (net/http,Gin,Echo v4,Echo v5,Fiber v3, andgRPC). This passes parametrized route patterns (e.g./api/v1/users/:idor gRPCFullMethod) directly into metric labels.
📂 Working Examples
- Prometheus Instrumentation Example:
examples/prometheus-metrics/main.go - Dynamic Policy & Resolver Example:
examples/dynamic-policy/main.go
What’s Changed
- feat: observability & telemetry engine, dynamic policy & runtime relo… by @balramadan in https://github.com/balramadan/distlimit/pull/3
- Release/v1.2.0 by @balramadan in https://github.com/balramadan/distlimit/pull/4
Full Changelog: https://github.com/balramadan/distlimit/compare/v1.1.1...v1.2.0