tracing-calltree 0.1.2

Always-on hierarchical profiling for Rust tracing spans with rolling latency statistics.
Documentation
use std::time::Duration;
use tracing_calltree::CallTree;
use tracing_subscriber::prelude::*;

#[tracing::instrument(skip_all)]
async fn request() {
    load_context().await;
}

#[tracing::instrument(skip_all)]
async fn load_context() {
    query_database().await;
}

#[tracing::instrument(skip_all)]
async fn query_database() {
    tokio::time::sleep(Duration::from_millis(10)).await;
}

#[tokio::main(flavor = "current_thread")]
async fn main() {
    let calltree = CallTree::new();

    tracing_subscriber::registry().with(calltree.layer()).init();

    for _ in 0..5 {
        request().await;
    }

    println!("{}", calltree.snapshot().display());
}