use quantum_pulse::{profile, Operation, ProfileCollector, ProfileOp};
#[derive(Debug, ProfileOp)]
#[allow(dead_code)]
enum MyProfileOperation {
#[category(name = "IO", description = "File system write operations")]
WriteFile,
#[category(name = "IO")]
ReadFile,
#[category(name = "Network")]
HttpRequest,
#[category(name = "Network")]
WebSocketMessage,
#[category(name = "IO", description = "This description will be ignored")]
DeleteFile,
ComputeHash,
#[category(name = "Database", description = "Database operations")]
QueryDatabase(String),
#[category(name = "Cache", description = "Cache operations")]
CacheOperation {
key: String,
ttl: u64,
},
}
fn main() {
ProfileCollector::clear_all();
let write_op = MyProfileOperation::WriteFile;
println!(
"WriteFile category: {} - {}",
write_op.get_category().get_name(),
write_op.get_category().get_description()
);
let _result = profile!(write_op, {
std::thread::sleep(std::time::Duration::from_millis(10));
"file written"
});
let read_op = MyProfileOperation::ReadFile;
println!(
"ReadFile category: {} - {}",
read_op.get_category().get_name(),
read_op.get_category().get_description()
);
let _result = profile!(read_op, {
std::thread::sleep(std::time::Duration::from_millis(5));
"file content"
});
let http_op = MyProfileOperation::HttpRequest;
println!(
"HttpRequest category: {} - {}",
http_op.get_category().get_name(),
http_op.get_category().get_description()
);
let _result = profile!(http_op, {
std::thread::sleep(std::time::Duration::from_millis(20));
"response"
});
let compute_op = MyProfileOperation::ComputeHash;
println!(
"ComputeHash category: {} - {}",
compute_op.get_category().get_name(),
compute_op.get_category().get_description()
);
let _result = profile!(compute_op, {
std::thread::sleep(std::time::Duration::from_millis(15));
"hash_value"
});
let db_op = MyProfileOperation::QueryDatabase("users".to_string());
println!(
"QueryDatabase category: {} - {}",
db_op.get_category().get_name(),
db_op.get_category().get_description()
);
let _result = profile!(db_op, {
std::thread::sleep(std::time::Duration::from_millis(30));
vec!["user1", "user2"]
});
let cache_op = MyProfileOperation::CacheOperation {
key: "user:123".to_string(),
ttl: 3600,
};
println!(
"CacheOperation category: {} - {}",
cache_op.get_category().get_name(),
cache_op.get_category().get_description()
);
let _result = profile!(cache_op, {
std::thread::sleep(std::time::Duration::from_millis(2));
"cached"
});
let delete_op = MyProfileOperation::DeleteFile;
println!(
"DeleteFile category: {} - {}",
delete_op.get_category().get_name(),
delete_op.get_category().get_description()
);
println!("\n=== Profiling Report ===");
let summary = ProfileCollector::get_summary();
println!("Total operations: {}", summary.total_operations);
println!("Unique operations: {}", summary.unique_operations);
println!("Total time: {} µs", summary.total_time_micros);
println!("\n=== Detailed Stats ===");
let all_stats = ProfileCollector::get_all_stats();
for (operation, stats) in all_stats.iter() {
println!(
"{}: {} calls, avg {:?}",
operation,
stats.count,
stats.mean()
);
}
}