5 releases

0.1.4 Nov 25, 2021
0.1.3 Mar 11, 2021
0.1.2 Apr 4, 2020
0.1.1 Apr 4, 2020
0.1.0 Apr 4, 2020

#169 in Profiling

Download history 928/week @ 2023-12-14 250/week @ 2023-12-21 255/week @ 2023-12-28 1163/week @ 2024-01-04 2098/week @ 2024-01-11 4817/week @ 2024-01-18 5479/week @ 2024-01-25 5873/week @ 2024-02-01 4666/week @ 2024-02-08 8524/week @ 2024-02-15 10405/week @ 2024-02-22 13204/week @ 2024-02-29 4746/week @ 2024-03-07 5282/week @ 2024-03-14 6225/week @ 2024-03-21 3375/week @ 2024-03-28

20,466 downloads per month
Used in 3 crates (via tract)

MIT/Apache

19KB
355 lines

Instrumentation Probe for Readings

Readings goal is to make process vital metrics intrumentation as easy as possible.

This is the instrumentation library that must be embedded in the client code.

Please refer to the Readings

// this is optional but the cost may be worth it. YMMV. It instruments
// Rust global allocator.
readings_probe::instrumented_allocator!();

fn main() -> readings_probe::ReadingsResult<()> {
    // setup the probe
    let mut probe =
        readings_probe::Probe::new(std::fs::File::create("readings.out").unwrap()).unwrap();

    // We will use an AtomicI64 to communicate a user-defined metrics ("progress") to the probe.
    let progress = probe.register_i64("progress".to_string())?;

    // Starts the probe (1sec i a lot. heartbeat can be realistically set as low as a few millis).
    probe.spawn_heartbeat(std::time::Duration::from_millis(1000))?;

    // do some stuff, update progress
    let percent_done = 12;
    progress.store(percent_done, std::sync::atomic::Ordering::Relaxed);

    // do more stuff, log an event
    probe.log_event("about to get crazy")?;

    // still more stuff, and another event
    probe.log_event("done")?;
    Ok(())
}

Dependencies

~0.4–1.1MB
~22K SLoC