otel_bloc_signals 0.2.2
otel_bloc_signals: ^0.2.2 copied to clipboard
OpenTelemetry tracing instrumentation for BlocSignal.
⚡ otel_bloc_signals #
"With the rigor of Bloc and the flex and speed of Signal"
OpenTelemetry tracing instrumentation for BlocSignal state containers.
This package provides OtelBlocSignalObserver, a custom BlocSignalObserver that maps BLoC events, state transitions, and exception tracebacks into OpenTelemetry spans for end-to-end distributed tracing.
🌐 Ecosystem Packages #
| Package | Purpose | Pub.dev Link |
|---|---|---|
bloc_signals |
Core pure-Dart state containers, event registry, & VM Service telemetry | 📦 pub.dev |
bloc_signals_flutter |
Flutter UI widgets (BlocSignalProvider, BlocSignalBuilder, BlocSignalListener, BlocSignalConsumer, BlocSignalSelector) |
📦 pub.dev |
bloc_signals_riverpod |
Bidirectional Riverpod interop adapters (toBlocSignal(ref), toProvider()) |
📦 pub.dev |
bloc_signals_hydrate |
Persistent state storage (HydratedCubitSignal, HydratedBlocSignal) |
📦 pub.dev |
bloc_signals_devtools |
Dedicated Flutter DevTools extension inspector UI | 📦 pub.dev |
bloc_signals_test |
Declarative unit testing helpers (blocSignalTest) |
📦 pub.dev |
bloc_signals_lint |
Static analysis lints & IDE quick-fixes | 📦 pub.dev |
otel_bloc_signals |
OpenTelemetry tracing observers | 📦 pub.dev |
⚡ Key Features #
- 📊 Span Correlation: Maps incoming BLoC events directly to active OpenTelemetry trace spans.
- 🚨 Error Tracing: Captures exceptions in
onErrorand attaches identity hash-matched stack traces to the active span. - 🛡️ Memory-Leak Protection: Internal active span map capped at 1,000 items with LRU eviction to prevent heap leaks.
🚀 Getting Started #
Add otel_bloc_signals to your pubspec.yaml:
dependencies:
bloc_signals: ^0.2.5
otel_bloc_signals: ^0.1.0
opentelemetry: ^0.1.0
💡 Quick Example #
import 'package:bloc_signals/bloc_signals.dart';
import 'package:otel_bloc_signals/otel_bloc_signals.dart';
import 'package:opentelemetry/api.dart' as otel;
void main() {
final tracer = otel.globalTracerProvider.getTracer('my_app');
// Register OpenTelemetry observer globally
BlocSignalObserver.observer = OtelBlocSignalObserver(tracer: tracer);
final bloc = CounterBloc();
bloc.add(Increment()); // Automatically generates OpenTelemetry spans!
}
📜 License #
MIT License. See LICENSE for details.