Skip to main content

HostPool

Struct HostPool 

Source
pub struct HostPool { /* private fields */ }
Expand description

Manages a pool of Host instances and routes requests to appropriate hosts.

The HostPool serves as the central coordinator for per-host rate limiting. It creates host instances on-demand and provides a unified interface for executing HTTP requests with appropriate rate limiting applied.

§Architecture

  • Each unique hostname gets its own Host instance with dedicated rate limiting
  • Hosts are created lazily when first requested
  • Thread-safe using DashMap for concurrent access to host instances

Implementations§

Source§

impl HostPool

Source

pub fn new( global_config: RateLimitConfig, host_configs: HostConfigs, default_client: Client, client_map: ClientMap, ) -> Self

Create a new HostPool with the given configuration

Source

pub fn build_request(&self, method: Method, uri: &Uri) -> Result<Request>

Try to build a Request

§Errors

Fails if:

  • The request URI has no valid hostname
  • The request fails to build
Source

pub fn host_stats(&self, hostname: &str) -> HostStats

Returns statistics for the host if it exists, otherwise returns empty stats. This provides consistent behavior whether or not requests have been made to that host yet.

Source

pub fn all_host_stats(&self) -> HostStatsMap

Returns a HashMap mapping hostnames to their statistics. Only hosts that have had requests will be included.

Source

pub fn active_host_count(&self) -> usize

Get the number of host instances that have been created, which corresponds to the number of unique hostnames that have been accessed.

Source

pub fn host_configurations(&self) -> HostConfigs

Get a copy of the current host-specific configurations. This is useful for debugging or runtime monitoring of configuration.

Source

pub fn remove_host(&self, hostname: &str) -> bool

Remove a host from the pool.

This forces the host to be recreated with updated configuration the next time a request is made to it. Any ongoing requests to that host will continue with the old instance.

§Returns

Returns true if a host was removed, false if no host existed for that hostname.

Source

pub fn cache_stats(&self) -> HashMap<String, (usize, f64)>

Get cache statistics across all hosts

Source

pub fn record_persistent_cache_hit(&self, uri: &Uri)

Record a cache hit for the given URI in host statistics. This tracks that a request was served from the persistent disk cache. Note that no equivalent function for tracking cache misses is exposed, since this is handled internally.

Trait Implementations§

Source§

impl Debug for HostPool

Source§

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

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

impl Default for HostPool

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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