pub struct PoolBuilder<DB: Database> { /* private fields */ }Expand description
Builder for constructing an instrumented Pool from a raw sqlx::Pool.
The builder auto-extracts connection attributes (host, port, database namespace) from
the underlying connect options via the Database trait, then lets you override any of
them before calling build. Settings on the wrapped sqlx::Pool itself
(max connections, idle timeout, etc.) should be applied to the sqlx::Pool before
passing it to the builder – sqlx-otel does not duplicate SQLx’s configuration
surface.
§Example
use sqlx_otel::{PoolBuilder, QueryTextMode};
use std::time::Duration;
let raw = sqlx::SqlitePool::connect(":memory:").await?;
let pool = PoolBuilder::from(raw)
.with_database("my_db")
.with_query_text_mode(QueryTextMode::Obfuscated)
.with_pool_name("my-service-db")
.with_pool_metrics_interval(Duration::from_secs(5))
.build();Implementations§
Source§impl<DB: Database> PoolBuilder<DB>
impl<DB: Database> PoolBuilder<DB>
Sourcepub fn with_database(self, database: impl Into<String>) -> Self
pub fn with_database(self, database: impl Into<String>) -> Self
Override the db.namespace attribute (the database name).
Sourcepub fn with_host(self, host: impl Into<String>) -> Self
pub fn with_host(self, host: impl Into<String>) -> Self
Override the server.address attribute (the logical hostname).
Sourcepub fn with_network_peer_address(self, address: impl Into<String>) -> Self
pub fn with_network_peer_address(self, address: impl Into<String>) -> Self
Set the network.peer.address attribute (the resolved IP address).
Sourcepub fn with_network_peer_port(self, port: u16) -> Self
pub fn with_network_peer_port(self, port: u16) -> Self
Set the network.peer.port attribute (the resolved port).
Sourcepub fn with_network_protocol_name(self, name: impl Into<String>) -> Self
pub fn with_network_protocol_name(self, name: impl Into<String>) -> Self
Override the network.protocol.name attribute. Defaults to the backend’s wire
protocol via Database::DEFAULT_NETWORK_PROTOCOL_NAME ("postgresql" /
"mysql"; absent for SQLite). Override when the connection is tunnelled through
a different application-layer protocol or when reporting to a system that expects a
specific name.
Sourcepub fn with_network_transport(self, transport: impl Into<String>) -> Self
pub fn with_network_transport(self, transport: impl Into<String>) -> Self
Set the network.transport attribute (the OSI L4 transport: "tcp", "udp",
"pipe", "unix", "inproc"). The wrapper does not infer transport from the
connect string – callers who want this attribute on spans / metrics must set it
explicitly so the value reflects the deployment configuration rather than a guess.
Sourcepub fn with_query_text_mode(self, mode: QueryTextMode) -> Self
pub fn with_query_text_mode(self, mode: QueryTextMode) -> Self
Configure how db.query.text is captured on spans. Defaults to
QueryTextMode::Full.
Sourcepub fn with_pool_name(self, name: impl Into<String>) -> Self
pub fn with_pool_name(self, name: impl Into<String>) -> Self
Set the db.client.connection.pool.name attribute and enable the
db.client.connection.count polling task.
When a runtime feature (runtime-tokio or runtime-async-std) is also enabled, a
background task is spawned that periodically records db.client.connection.count
(idle / used). See with_pool_metrics_interval
to configure the polling frequency. The task is cancelled when the Pool (and
every clone of it) is dropped.
Without a runtime feature, the name is recorded but no connection.count task is
spawned and the gauge is never reported. All other operation- and pool-level
metrics still work in that configuration.
Sourcepub fn with_pool_metrics_interval(self, interval: Duration) -> Self
pub fn with_pool_metrics_interval(self, interval: Duration) -> Self
Set the polling interval for db.client.connection.count. Defaults to 10 seconds.
Has no effect unless with_pool_name is also called and a
runtime feature is enabled.
Sourcepub fn build(self) -> Pool<DB>
pub fn build(self) -> Pool<DB>
Consume the builder and produce an instrumented Pool.
At this point the static pool gauges (db.client.connection.max,
db.client.connection.idle.max, db.client.connection.idle.min) are recorded
once with the connection-level attributes – they do not change over the pool’s
lifetime. The wait-time / use-time / timeout / pending-request instruments are
created here and updated inline on every acquire() and connection drop.
Trait Implementations§
Source§impl<DB: Database> From<Pool<DB>> for PoolBuilder<DB>
impl<DB: Database> From<Pool<DB>> for PoolBuilder<DB>
Source§fn from(pool: Pool<DB>) -> Self
fn from(pool: Pool<DB>) -> Self
Create a builder from an existing sqlx::Pool, auto-extracting connection
attributes from the backend’s connect options. network.protocol.name is
pre-populated from Database::DEFAULT_NETWORK_PROTOCOL_NAME (the wire protocol
for Postgres / MySQL; absent for SQLite); override via
with_network_protocol_name.
Auto Trait Implementations§
impl<DB> Freeze for PoolBuilder<DB>
impl<DB> !RefUnwindSafe for PoolBuilder<DB>
impl<DB> Send for PoolBuilder<DB>
impl<DB> Sync for PoolBuilder<DB>
impl<DB> Unpin for PoolBuilder<DB>
impl<DB> UnsafeUnpin for PoolBuilder<DB>
impl<DB> !UnwindSafe for PoolBuilder<DB>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more