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  }