fn call()

in src/metrics.rs [85:113]


    fn call(&self, req: ServiceRequest) -> Self::Future {
        let metrics = match req.app_data::<Data<EndpointState>>() {
            Some(state) => state.metrics.clone(),
            None => return Box::pin(self.service.call(req)),
        };
        let started = Instant::now();

        metrics.incr_with_tags("ongoing_requests").send();

        Box::pin(self.service.call(req).then(move |res| match res {
            Ok(val) => {
                let duration = started.elapsed();
                metrics
                    .time_with_tags("response", duration)
                    .with_tag(
                        "status",
                        if val.status().is_success() {
                            "success"
                        } else {
                            "error"
                        },
                    )
                    .send();
                metrics.decr_with_tags("ongoing_requests").send();
                future::ok(val)
            }
            Err(err) => future::err(err),
        }))
    }