github.com/grafana/pyroscope@v1.18.0/examples/language-sdk-instrumentation/rust/basic/src/main.rs (about) 1 use pyroscope::PyroscopeAgent; 2 use pyroscope_pprofrs::{pprof_backend, PprofConfig}; 3 4 fn main() -> Result<(), Box<dyn std::error::Error>> { 5 std::env::set_var("RUST_LOG", "debug"); 6 pretty_env_logger::init_timed(); 7 8 let agent = PyroscopeAgent::builder("http://pyroscope:4040", "rust-app") 9 .backend(pprof_backend(PprofConfig::new().sample_rate(100))) 10 .tags(vec![("Hostname", "pyroscope")]) 11 .build()?; 12 13 let agent_running = agent.start()?; 14 15 let (add_tag, _remove_tag) = agent_running.tag_wrapper(); 16 17 add_tag("Batch".to_string(), "first".to_string())?; 18 19 mutex_lock(2); 20 21 add_tag("Batch".to_string(), "second".to_string())?; 22 23 mutex_lock(5); 24 25 add_tag("Batch".to_string(), "third".to_string())?; 26 27 mutex_lock(12); 28 29 let agent_ready = agent_running.stop()?; 30 agent_ready.shutdown(); 31 32 Ok(()) 33 } 34 35 // Generate useless load 36 fn mutex_lock(n: u64) { 37 let mut _i: u64 = 0; 38 39 let start_time = std::time::Instant::now(); 40 while start_time.elapsed().as_secs() < (n * 10) { 41 _i += 1; 42 } 43 }