use foundationdb::{Database, FdbBindingError};
#[tokio::main]
async fn main() {
let network = unsafe { foundationdb::boot() };
if let Err(e) = instrumented_example().await {
eprintln!("Error running instrumented example: {:?}", e);
}
drop(network);
}
async fn instrumented_example() -> Result<(), FdbBindingError> {
let db = Database::default()?;
println!("Running an instrumented transaction...");
let result = db
.instrumented_run(|txn, _| async move {
txn.set(b"instrumented_key", b"instrumented_value");
let _ = txn.get(b"instrumented_key", false).await?;
txn.set_custom_metric("operations_count", 1, &[("type", "write")])?;
Ok(())
})
.await;
match result {
Ok((_, metrics)) => {
println!("Transaction successful!");
println!("--- Metrics Report ---");
println!("{:#?}", metrics);
println!("----------------------");
}
Err((err, metrics)) => {
eprintln!("Transaction failed: {:?}", err);
eprintln!("--- Metrics Report (on failure) ---");
println!("{:#?}", metrics);
println!("-----------------------------------");
return Err(err);
}
}
Ok(())
}