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),
}))
}