polkadot_node_core_pvf_checker/
metrics.rs1use polkadot_node_subsystem_util::metrics::{self, prometheus};
20
21#[derive(Clone)]
22struct MetricsInner {
23 pre_check_judgement: prometheus::Histogram,
24 votes_total: prometheus::Counter<prometheus::U64>,
25 votes_started: prometheus::Counter<prometheus::U64>,
26 votes_duplicate: prometheus::Counter<prometheus::U64>,
27 pvfs_observed: prometheus::Counter<prometheus::U64>,
28 pvfs_left: prometheus::Counter<prometheus::U64>,
29}
30
31#[derive(Default, Clone)]
32pub struct Metrics(Option<MetricsInner>);
33
34impl Metrics {
35 pub(crate) fn time_pre_check_judgement(
37 &self,
38 ) -> Option<metrics::prometheus::prometheus::HistogramTimer> {
39 self.0.as_ref().map(|metrics| metrics.pre_check_judgement.start_timer())
40 }
41
42 pub(crate) fn on_vote_submitted(&self) {
44 if let Some(metrics) = &self.0 {
45 metrics.votes_total.inc();
46 }
47 }
48
49 pub(crate) fn on_vote_submission_started(&self) {
51 if let Some(metrics) = &self.0 {
52 metrics.votes_started.inc();
53 }
54 }
55
56 pub(crate) fn on_vote_duplicate(&self) {
58 if let Some(metrics) = &self.0 {
59 metrics.votes_duplicate.inc();
60 }
61 }
62
63 pub(crate) fn on_pvf_observed(&self, num: usize) {
65 if let Some(metrics) = &self.0 {
66 metrics.pvfs_observed.inc_by(num as u64);
67 }
68 }
69
70 pub(crate) fn on_pvf_left(&self, num: usize) {
72 if let Some(metrics) = &self.0 {
73 metrics.pvfs_left.inc_by(num as u64);
74 }
75 }
76}
77
78impl metrics::Metrics for Metrics {
79 fn try_register(registry: &prometheus::Registry) -> Result<Self, prometheus::PrometheusError> {
80 let metrics = MetricsInner {
81 pre_check_judgement: prometheus::register(
82 prometheus::Histogram::with_opts(
83 prometheus::HistogramOpts::new(
84 "polkadot_pvf_precheck_judgement",
85 "Time between sending the pre-check request to receiving the response.",
86 )
87 .buckets(vec![0.1, 0.5, 1.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0]),
88 )?,
89 registry,
90 )?,
91 votes_total: prometheus::register(
92 prometheus::Counter::new(
93 "polkadot_pvf_precheck_votes_total",
94 "The total number of votes submitted.",
95 )?,
96 registry,
97 )?,
98 votes_started: prometheus::register(
99 prometheus::Counter::new(
100 "polkadot_pvf_precheck_votes_started",
101 "The number of votes that are pending submission",
102 )?,
103 registry,
104 )?,
105 votes_duplicate: prometheus::register(
106 prometheus::Counter::new(
107 "polkadot_pvf_precheck_votes_duplicate",
108 "The number of votes that are submitted more than once for the same code within\
109the same session.",
110 )?,
111 registry,
112 )?,
113 pvfs_observed: prometheus::register(
114 prometheus::Counter::new(
115 "polkadot_pvf_precheck_pvfs_observed",
116 "The number of new PVFs observed.",
117 )?,
118 registry,
119 )?,
120 pvfs_left: prometheus::register(
121 prometheus::Counter::new(
122 "polkadot_pvf_precheck_pvfs_left",
123 "The number of PVFs removed from the view.",
124 )?,
125 registry,
126 )?,
127 };
128 Ok(Self(Some(metrics)))
129 }
130}