Levit Monitor

Pub Version Platforms License: MIT codecov

A unified observability and diagnostics engine for the Levit ecosystem.

levit_monitor provides deep visibility into the runtime behavior of your application by capturing and correlating events from both the dependency injection system (levit_dart) and the reactive state engine (levit_reactive).

Key Features

  • Unified Diagnostics: A single pipeline for monitoring service lifecycles, dependency resolutions, and state mutations.
  • Pluggable Transports: Multiple built-in transports (Console, File, WebSocket) for local debugging or external DevTools integration.
  • Monotonic Correlation: Events are tagged with sequence numbers and session IDs to enable precise debugging across asynchronous gaps.
  • Predicated Filtering: Granular control over volume and type of captured diagnostic data.

Getting Started

Installation

Add levit_monitor to your pubspec.yaml:

dependencies:
  levit_monitor: latest

Basic Attachment

The simplest way to start monitoring is to attach the default monitor at the entry point of your application. By default, it uses the ConsoleTransport to log JSON events to standard output.

import 'package:levit_monitor/levit_monitor.dart';

void main() {
  LevitMonitor.attach(); // Starts capturing events immediately
  
  // Your app entry
  runApp(MyApp());
}

Advanced Configuration

Using WebSockets for DevTools

To connect your application to an external visualizer (like Levit DevTools), use the WebSocketTransport:

import 'package:levit_monitor/levit_monitor.dart';
import 'package:web_channel/io.dart'; 

void main() {
  final channel = IOWebSocketChannel.connect('ws://localhost:8080/ws');
  final transport = WebSocketTransport(channel);

  LevitMonitor.attach(transport: transport);
  
  runApp(MyApp());
}

Event Filtering

You can suppress noisy events or focus on specific diagnostic categories using a global filter:

// Only monitor state mutations, ignoring DI and graph changes
LevitMonitor.setFilter((event) => event is ReactiveChangeEvent);

Built-in Transports

  • ConsoleTransport: Prettified or raw JSON logging to the terminal.
  • FileTransport: Persists diagnostic events to the local filesystem.
  • WebSocketTransport: Streams events to remote servers or DevTools.

Monitoring Schema

All events follow a unified schema:

Property Description
seq Monotonic sequence number.
timestamp UTC ISO-8601 timestamp of the event.
sessionId Correlates events within a single execution run.
type The specific event identifier (e.g., state_change, di_resolve).

Libraries

levit_monitor
A monitoring and diagnostics ecosystem for Levit applications.