Skip to main content

database_span

Function database_span 

Source
pub fn database_span<T>(
    name: &str,
    statement: &str,
    db_system: Option<&str>,
    f: impl FnOnce() -> T,
) -> T
Expand description

Times a database query as a "database" span carrying its SQL, so ForgeOps can show which statement a slow request spent its time in. Returns what f returned; outside a trace it just runs f.

let sql = "SELECT id FROM orders WHERE customer_id = $1 AND status = 'open'";
let orders = forge_ops_tracker::database_span("load orders", sql, Some("postgresql"), || load_orders(sql));

The statement is masked (every string and number replaced by ?) and cut to 4000 characters when the span is recorded, then sent as db.statement; db_system ("postgresql", "mysql", "sqlite", "mssql", "oracle", or any other name) goes out lowercased as db.system. Bind values are never taken.