referrerpolicy=no-referrer-when-downgrade

parachains_relay/
parachains_loop_metrics.rs

1// Copyright 2019-2021 Parity Technologies (UK) Ltd.
2// This file is part of Parity Bridges Common.
3
4// Parity Bridges Common is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8
9// Parity Bridges Common is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License
15// along with Parity Bridges Common.  If not, see <http://www.gnu.org/licenses/>.
16
17use bp_polkadot_core::parachains::ParaId;
18use relay_utils::{
19	metrics::{metric_name, register, Gauge, Metric, PrometheusError, Registry, U64},
20	UniqueSaturatedInto,
21};
22
23/// Parachains sync metrics.
24#[derive(Clone)]
25pub struct ParachainsLoopMetrics {
26	/// Best parachains header numbers at the source.
27	best_source_block_numbers: Gauge<U64>,
28	/// Best parachains header numbers at the target.
29	best_target_block_numbers: Gauge<U64>,
30}
31
32impl ParachainsLoopMetrics {
33	/// Create and register parachains loop metrics.
34	pub fn new(prefix: Option<&str>) -> Result<Self, PrometheusError> {
35		Ok(ParachainsLoopMetrics {
36			best_source_block_numbers: Gauge::new(
37				metric_name(prefix, "best_parachain_block_number_at_source"),
38				"Best parachain block numbers at the source relay chain".to_string(),
39			)?,
40			best_target_block_numbers: Gauge::new(
41				metric_name(prefix, "best_parachain_block_number_at_target"),
42				"Best parachain block numbers at the target chain".to_string(),
43			)?,
44		})
45	}
46
47	/// Update best block number at source.
48	pub fn update_best_parachain_block_at_source<Number: UniqueSaturatedInto<u64>>(
49		&self,
50		parachain: ParaId,
51		block_number: Number,
52	) {
53		let block_number = block_number.unique_saturated_into();
54		log::trace!(
55			target: "bridge-metrics",
56			"Updated value of metric 'best_parachain_block_number_at_source[{:?}]': {:?}",
57			parachain,
58			block_number,
59		);
60		self.best_source_block_numbers.set(block_number);
61	}
62
63	/// Update best block number at target.
64	pub fn update_best_parachain_block_at_target<Number: UniqueSaturatedInto<u64>>(
65		&self,
66		parachain: ParaId,
67		block_number: Number,
68	) {
69		let block_number = block_number.unique_saturated_into();
70		log::trace!(
71			target: "bridge-metrics",
72			"Updated value of metric 'best_parachain_block_number_at_target[{:?}]': {:?}",
73			parachain,
74			block_number,
75		);
76		self.best_target_block_numbers.set(block_number);
77	}
78}
79
80impl Metric for ParachainsLoopMetrics {
81	fn register(&self, registry: &Registry) -> Result<(), PrometheusError> {
82		register(self.best_source_block_numbers.clone(), registry)?;
83		register(self.best_target_block_numbers.clone(), registry)?;
84		Ok(())
85	}
86}