1use std::time::Duration;
2
3use clap4::{self as clap, Parser};
4use tracing::Level;
5
6use si_observability::clap4::LoggingArgs;
7
8#[derive(Debug, Parser)]
9pub struct AppArgs {
10 #[clap(flatten)]
11 logging: LoggingArgs,
12}
13
14#[tracing::instrument(level = Level::INFO)]
15pub fn do_stuff(iterations: u64) {
16 tracing::info!(iterations, "Doing stuff for {iterations} iterations.");
17 for iteration in 0..iterations {
18 tracing::debug!(iteration, "Actually getting something done!");
19 std::thread::sleep(Duration::from_millis(50));
20 do_stuff_inner();
21 }
22}
23
24#[tracing::instrument(level = Level::DEBUG)]
25pub fn do_stuff_inner() {
26 tracing::debug!("Doing some internal stuff!");
27 std::thread::sleep(Duration::from_millis(50));
28 tracing::error!("Oops! Something went wrong.");
29}
30
31pub fn main() {
32 let args = AppArgs::parse();
33
34 let _guard = si_observability::Initializer::new("APP")
35 .apply(&args.logging)
36 .init();
37
38 tracing::info!("Hello, World!");
39
40 do_stuff(5);
41}