polkadot_availability_distribution/
metrics.rs1use polkadot_node_subsystem_util::{
18 metrics,
19 metrics::{
20 prometheus,
21 prometheus::{Counter, CounterVec, Opts, PrometheusError, Registry, U64},
22 },
23};
24
25pub const SUCCEEDED: &'static str = "succeeded";
27
28pub const FAILED: &'static str = "failed";
30
31pub const NOT_FOUND: &'static str = "not-found";
33
34#[derive(Clone, Default)]
36pub struct Metrics(Option<MetricsInner>);
37
38#[derive(Clone)]
39struct MetricsInner {
40 fetched_chunks: CounterVec<U64>,
46
47 served_chunks: CounterVec<U64>,
49
50 fetched_povs: CounterVec<U64>,
52
53 served_povs: CounterVec<U64>,
55
56 retries: Counter<U64>,
59}
60
61impl Metrics {
62 pub fn new_dummy() -> Self {
64 Metrics(None)
65 }
66
67 pub fn on_fetch(&self, label: &'static str) {
69 if let Some(metrics) = &self.0 {
70 metrics.fetched_chunks.with_label_values(&[label]).inc()
71 }
72 }
73
74 pub fn on_served_chunk(&self, label: &'static str) {
76 if let Some(metrics) = &self.0 {
77 metrics.served_chunks.with_label_values(&[label]).inc()
78 }
79 }
80
81 pub fn on_fetched_pov(&self, label: &'static str) {
83 if let Some(metrics) = &self.0 {
84 metrics.fetched_povs.with_label_values(&[label]).inc()
85 }
86 }
87
88 pub fn on_served_pov(&self, label: &'static str) {
90 if let Some(metrics) = &self.0 {
91 metrics.served_povs.with_label_values(&[label]).inc()
92 }
93 }
94
95 pub fn on_retry(&self) {
97 if let Some(metrics) = &self.0 {
98 metrics.retries.inc()
99 }
100 }
101}
102
103impl metrics::Metrics for Metrics {
104 fn try_register(registry: &Registry) -> Result<Self, PrometheusError> {
105 let metrics = MetricsInner {
106 fetched_chunks: prometheus::register(
107 CounterVec::new(
108 Opts::new(
109 "polkadot_parachain_fetched_chunks_total",
110 "Total number of fetched chunks.",
111 ),
112 &["success"]
113 )?,
114 registry,
115 )?,
116 served_chunks: prometheus::register(
117 CounterVec::new(
118 Opts::new(
119 "polkadot_parachain_served_chunks_total",
120 "Total number of chunks served by this backer.",
121 ),
122 &["success"]
123 )?,
124 registry,
125 )?,
126 fetched_povs: prometheus::register(
127 CounterVec::new(
128 Opts::new(
129 "polkadot_parachain_fetched_povs_total",
130 "Total number of povs fetches by this backer.",
131 ),
132 &["success"]
133 )?,
134 registry,
135 )?,
136 served_povs: prometheus::register(
137 CounterVec::new(
138 Opts::new(
139 "polkadot_parachain_served_povs_total",
140 "Total number of povs served by this backer.",
141 ),
142 &["success"]
143 )?,
144 registry,
145 )?,
146 retries: prometheus::register(
147 Counter::new(
148 "polkadot_parachain_fetch_retries_total",
149 "Number of times we did not succeed in fetching a chunk and needed to try more backers.",
150 )?,
151 registry,
152 )?,
153 };
154 Ok(Metrics(Some(metrics)))
155 }
156}