sc_network/litep2p/shim/request_response/
metrics.rs1use crate::{service::metrics::Metrics, types::ProtocolName};
22
23use std::time::Duration;
24
25pub struct RequestResponseMetrics {
27 metrics: Option<Metrics>,
29
30 protocol: ProtocolName,
32}
33
34impl RequestResponseMetrics {
35 pub fn new(metrics: Option<Metrics>, protocol: ProtocolName) -> Self {
36 Self { metrics, protocol }
37 }
38
39 pub fn register_inbound_request_failure(&self, reason: &str) {
41 if let Some(metrics) = &self.metrics {
42 metrics
43 .requests_in_failure_total
44 .with_label_values(&[&self.protocol, reason])
45 .inc();
46 }
47 }
48
49 pub fn register_inbound_request_success(&self, serve_time: Duration) {
51 if let Some(metrics) = &self.metrics {
52 metrics
53 .requests_in_success_total
54 .with_label_values(&[&self.protocol])
55 .observe(serve_time.as_secs_f64());
56 }
57 }
58
59 pub fn register_outbound_request_failure(&self, reason: &str) {
61 if let Some(metrics) = &self.metrics {
62 metrics
63 .requests_out_failure_total
64 .with_label_values(&[&self.protocol, reason])
65 .inc();
66 }
67 }
68
69 pub fn register_outbound_request_success(&self, duration: Duration) {
71 if let Some(metrics) = &self.metrics {
72 metrics
73 .requests_out_success_total
74 .with_label_values(&[&self.protocol])
75 .observe(duration.as_secs_f64());
76 }
77 }
78}