Skip to main content

tailtriage_core/
lib.rs

1#![doc = include_str!("../README.md")]
2#![warn(missing_docs)]
3
4//! Core run schema and split request lifecycle instrumentation API for tailtriage.
5//!
6//! ```no_run
7//! use tailtriage_core::{RequestOptions, Tailtriage};
8//!
9//! # async fn demo() -> Result<(), Box<dyn std::error::Error>> {
10//! let tailtriage = Tailtriage::builder("checkout-service")
11//!     .output("tailtriage-run.json")
12//!     .build()?;
13//!
14//! let started = tailtriage
15//!     .begin_request_with("/checkout", RequestOptions::new().request_id("req-1").kind("http"));
16//! let request = started.handle.clone();
17//!
18//! // queue(...), stage(...), and inflight(...) instrumentation can happen here.
19//! // They do not finish the request lifecycle.
20//! started.completion.finish_ok();
21//! // You must finish each request exactly once via finish(...), finish_ok(), or finish_result(...).
22//! // Drop only asserts on unfinished completions in debug builds; it does not auto-record completion.
23//!
24//! tailtriage.shutdown()?;
25//! # Ok(())
26//! # }
27//! ```
28
29mod collector;
30mod config;
31mod events;
32mod sink;
33mod time;
34mod timers;
35
36pub use collector::{
37    OwnedRequestCompletion, OwnedRequestHandle, OwnedStartedRequest, RequestCompletion,
38    RequestHandle, StartedRequest, Tailtriage,
39};
40pub use config::{BuildError, CaptureLimits, CaptureMode, RequestOptions, TailtriageBuilder};
41pub use events::{
42    InFlightSnapshot, Outcome, QueueEvent, RequestEvent, Run, RunMetadata, RuntimeSnapshot,
43    StageEvent, TruncationSummary, UnfinishedRequestSample, UnfinishedRequests, SCHEMA_VERSION,
44};
45pub use sink::{LocalJsonSink, RunSink, SinkError};
46pub use time::{system_time_to_unix_ms, unix_time_ms};
47pub use timers::{InflightGuard, QueueTimer, StageTimer};
48
49#[cfg(test)]
50mod tests;