Skip to main content

PoolBuilder

Struct PoolBuilder 

Source
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>

Source

pub fn with_database(self, database: impl Into<String>) -> Self

Override the db.namespace attribute (the database name).

Source

pub fn with_host(self, host: impl Into<String>) -> Self

Override the server.address attribute (the logical hostname).

Source

pub fn with_port(self, port: u16) -> Self

Override the server.port attribute.

Source

pub fn with_network_peer_address(self, address: impl Into<String>) -> Self

Set the network.peer.address attribute (the resolved IP address).

Source

pub fn with_network_peer_port(self, port: u16) -> Self

Set the network.peer.port attribute (the resolved port).

Source

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.

Source

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.

Source

pub fn with_query_text_mode(self, mode: QueryTextMode) -> Self

Configure how db.query.text is captured on spans. Defaults to QueryTextMode::Full.

Source

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.

Source

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.

Source

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: Debug + Database> Debug for PoolBuilder<DB>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<DB: Database> From<Pool<DB>> for PoolBuilder<DB>

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more