[−][src]Struct tower::load::peak_ewma::PeakEwma
load
only.Measures the load of the underlying service using Peak-EWMA load measurement.
PeakEwma
implements Load
with the Cost
metric that estimates the amount of
pending work to an endpoint. Work is calculated by multiplying the
exponentially-weighted moving average (EWMA) of response latencies by the number of
pending requests. The Peak-EWMA algorithm is designed to be especially sensitive to
worst-case latencies. Over time, the peak latency value decays towards the moving
average of latencies to the endpoint.
When no latency information has been measured for an endpoint, an arbitrary default RTT of 1 second is used to prevent the endpoint from being overloaded before a meaningful baseline can be established..
Note
This is derived from Finagle, which is distributed under the Apache V2 license. Copyright 2017, Twitter Inc.
Implementations
impl<S, C> PeakEwma<S, C>
[src]
pub fn new(
service: S,
default_rtt: Duration,
decay_ns: f64,
completion: C
) -> Self
[src]
service: S,
default_rtt: Duration,
decay_ns: f64,
completion: C
) -> Self
Wraps an S
-typed service so that its load is tracked by the EWMA of its peak latency.
Trait Implementations
impl<S: Debug, C: Debug> Debug for PeakEwma<S, C>
[src]
impl<S, C> Load for PeakEwma<S, C>
[src]
impl<S, C, Request> Service<Request> for PeakEwma<S, C> where
S: Service<Request>,
C: TrackCompletion<Handle, S::Response>,
[src]
S: Service<Request>,
C: TrackCompletion<Handle, S::Response>,
type Response = C::Output
Responses given by the service.
type Error = S::Error
Errors produced by the service.
type Future = TrackCompletionFuture<S::Future, C, Handle>
The future response value.
pub fn poll_ready(
&mut self,
cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>
[src]
&mut self,
cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>
pub fn call(&mut self, req: Request) -> Self::Future
[src]
Auto Trait Implementations
impl<S, C> RefUnwindSafe for PeakEwma<S, C> where
C: RefUnwindSafe,
S: RefUnwindSafe,
[src]
C: RefUnwindSafe,
S: RefUnwindSafe,
impl<S, C> Send for PeakEwma<S, C> where
C: Send,
S: Send,
[src]
C: Send,
S: Send,
impl<S, C> Sync for PeakEwma<S, C> where
C: Sync,
S: Sync,
[src]
C: Sync,
S: Sync,
impl<S, C> Unpin for PeakEwma<S, C> where
C: Unpin,
S: Unpin,
[src]
C: Unpin,
S: Unpin,
impl<S, C> UnwindSafe for PeakEwma<S, C> where
C: UnwindSafe,
S: UnwindSafe,
[src]
C: UnwindSafe,
S: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T> Instrument for T
[src]
pub fn instrument(self, span: Span) -> Instrumented<Self>
[src]
pub fn in_current_span(self) -> Instrumented<Self>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, Request> ServiceExt<Request> for T where
T: Service<Request> + ?Sized,
[src]
T: Service<Request> + ?Sized,
pub fn ready_and(&mut self) -> ReadyAnd<'_, Self, Request>ⓘ where
Self: Sized,
[src]
Self: Sized,
pub fn ready_oneshot(self) -> ReadyOneshot<Self, Request>ⓘNotable traits for ReadyOneshot<T, Request>
impl<T, Request> Future for ReadyOneshot<T, Request> where
T: Service<Request>, type Output = Result<T, T::Error>;
where
Self: Sized,
[src]
Notable traits for ReadyOneshot<T, Request>
impl<T, Request> Future for ReadyOneshot<T, Request> where
T: Service<Request>, type Output = Result<T, T::Error>;
Self: Sized,
pub fn oneshot(self, req: Request) -> Oneshot<Self, Request>ⓘ where
Self: Sized,
[src]
Self: Sized,
pub fn call_all<S>(self, reqs: S) -> CallAll<Self, S> where
Self: Sized,
Self::Error: Into<BoxError>,
S: Stream<Item = Request>,
[src]
Self: Sized,
Self::Error: Into<BoxError>,
S: Stream<Item = Request>,
pub fn and_then<F>(self, f: F) -> AndThen<Self, F> where
Self: Sized,
F: Clone,
[src]
Self: Sized,
F: Clone,
pub fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F> where
Self: Sized,
F: FnOnce(Self::Response) -> Response + Clone,
[src]
Self: Sized,
F: FnOnce(Self::Response) -> Response + Clone,
pub fn map_err<F, Error>(self, f: F) -> MapErr<Self, F> where
Self: Sized,
F: FnOnce(Self::Error) -> Error + Clone,
[src]
Self: Sized,
F: FnOnce(Self::Error) -> Error + Clone,
pub fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F> where
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Result<Response, Error> + Clone,
[src]
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Result<Response, Error> + Clone,
pub fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F> where
Self: Sized,
F: FnMut(NewRequest) -> Request + Clone,
[src]
Self: Sized,
F: FnMut(NewRequest) -> Request + Clone,
pub fn filter<F, NewRequest>(self, filter: F) -> Filter<Self, F> where
Self: Sized,
F: Predicate<NewRequest>,
[src]
Self: Sized,
F: Predicate<NewRequest>,
pub fn filter_async<F, NewRequest>(self, filter: F) -> AsyncFilter<Self, F> where
Self: Sized,
F: AsyncPredicate<NewRequest>,
[src]
Self: Sized,
F: AsyncPredicate<NewRequest>,
pub fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F> where
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Fut + Clone,
Fut: Future<Output = Result<Response, Error>>,
[src]
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Fut + Clone,
Fut: Future<Output = Result<Response, Error>>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,