Crate function_timer
source ·Expand description
This crate allow to put a time
attribut macro on any function.
It will time the execution of the function and emit a histogram
metric using metrics crate.
Example
use std::error::Error;
use metrics_exporter_prometheus::PrometheusBuilder;
use function_timer::time;
struct Test {}
impl Test {
#[time("my_metric")]
pub fn impl_function(&self) {
println!("This another test");
}
#[time("another_metric")]
pub fn impl_fail_function(&self, text:&str) -> Result<(), Box<dyn Error>>{
let number:usize = text.parse()?;
println!("{number}");
Ok(())
}
#[time("my_metric")]
pub fn static_function() {
println!("This another test");
}
}
#[time("my_metric")]
pub fn free_function() {
println!("This a test");
}
fn main() -> Result<(), Box<dyn Error>> {
let builder = PrometheusBuilder::new();
let handle = builder.install_recorder()?;
free_function();
Test::static_function();
let t = Test {};
t.impl_function();
let result = t.impl_fail_function("azerty");
assert!(result.is_err());
let result = t.impl_fail_function("1");
assert!(result.is_ok());
println!("{}", handle.render());
Ok(())
}
Note
If time is put on functions that have the same names, the only way to distinguish between them
is to not use the same metric name. Plan is to allow custom tag on annotation and/or allow to
put time
on an impl
block.
Structs
- Timer.
Attribute Macros
- Macro that time a function and emit a histogram metric using
metrics
crate