Skip to content

Commit 9fb8107

Browse files
authored
Expose relay version metric (paritytech#1750)
* expose relay version metric * spelling * and clippy * clippy * typo * use version directly and determine git commit * typos and leftovers
1 parent e806762 commit 9fb8107

File tree

7 files changed

+62
-18
lines changed

7 files changed

+62
-18
lines changed

bridges/relays/bin-substrate/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ hex = "0.4"
1515
log = "0.4.17"
1616
num-format = "0.4"
1717
num-traits = "0.2"
18+
rbtag = "0.3"
1819
structopt = "0.3"
1920
signal-hook = "0.3.14"
2021
signal-hook-async-std = "0.2.2"

bridges/relays/bin-substrate/src/cli/mod.rs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use std::convert::TryInto;
2121
use async_std::prelude::*;
2222
use codec::{Decode, Encode};
2323
use futures::{select, FutureExt};
24+
use rbtag::BuildInfo;
2425
use signal_hook::consts::*;
2526
use signal_hook_async_std::Signals;
2627
use structopt::{clap::arg_enum, StructOpt};
@@ -254,17 +255,30 @@ pub struct PrometheusParams {
254255
pub prometheus_port: u16,
255256
}
256257

257-
impl From<PrometheusParams> for relay_utils::metrics::MetricsParams {
258-
fn from(cli_params: PrometheusParams) -> relay_utils::metrics::MetricsParams {
259-
if !cli_params.no_prometheus {
258+
/// Struct to get git commit info and build time.
259+
#[derive(BuildInfo)]
260+
struct SubstrateRelayBuildInfo;
261+
262+
impl PrometheusParams {
263+
/// Tries to convert CLI metrics params into metrics params, used by the relay.
264+
pub fn into_metrics_params(self) -> anyhow::Result<relay_utils::metrics::MetricsParams> {
265+
let metrics_address = if !self.no_prometheus {
260266
Some(relay_utils::metrics::MetricsAddress {
261-
host: cli_params.prometheus_host,
262-
port: cli_params.prometheus_port,
267+
host: self.prometheus_host,
268+
port: self.prometheus_port,
263269
})
264-
.into()
265270
} else {
266-
None.into()
267-
}
271+
None
272+
};
273+
274+
let relay_version = option_env!("CARGO_PKG_VERSION").unwrap_or("unknown");
275+
let relay_commit = SubstrateRelayBuildInfo.get_build_commit();
276+
relay_utils::metrics::MetricsParams::new(
277+
metrics_address,
278+
relay_version.into(),
279+
relay_commit.into(),
280+
)
281+
.map_err(|e| anyhow::format_err!("{:?}", e))
268282
}
269283
}
270284

bridges/relays/bin-substrate/src/cli/relay_headers.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ where
7777
let target_transactions_mortality = data.target_sign.target_transactions_mortality;
7878
let target_sign = data.target_sign.to_keypair::<Self::Target>()?;
7979

80-
let metrics_params: relay_utils::metrics::MetricsParams = data.prometheus_params.into();
80+
let metrics_params: relay_utils::metrics::MetricsParams =
81+
data.prometheus_params.into_metrics_params()?;
8182
GlobalMetrics::new()?.register_and_spawn(&metrics_params.registry)?;
8283

8384
let target_transactions_params = substrate_relay_helper::TransactionParams {

bridges/relays/bin-substrate/src/cli/relay_headers_and_messages/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ impl<Left: ChainWithTransactions + CliChain, Right: ChainWithTransactions + CliC
110110
right: BridgeEndCommonParams<Right>,
111111
) -> anyhow::Result<Self> {
112112
// Create metrics registry.
113-
let metrics_params = shared.prometheus_params.clone().into();
113+
let metrics_params = shared.prometheus_params.clone().into_metrics_params()?;
114114
let metrics_params = relay_utils::relay_metrics(metrics_params).into_params();
115115

116116
Ok(Self { shared, left, right, metrics_params })

bridges/relays/bin-substrate/src/cli/relay_messages.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ where
8383
source_to_target_headers_relay: None,
8484
target_to_source_headers_relay: None,
8585
lane_id: data.lane.into(),
86-
metrics_params: data.prometheus_params.into(),
86+
metrics_params: data.prometheus_params.into_metrics_params()?,
8787
})
8888
.await
8989
.map_err(|e| anyhow::format_err!("{}", e))

bridges/relays/bin-substrate/src/cli/relay_parachains.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ where
9898
target_transaction_params,
9999
);
100100

101-
let metrics_params: relay_utils::metrics::MetricsParams = data.prometheus_params.into();
101+
let metrics_params: relay_utils::metrics::MetricsParams =
102+
data.prometheus_params.into_metrics_params()?;
102103
GlobalMetrics::new()?.register_and_spawn(&metrics_params.registry)?;
103104

104105
parachains_relay::parachains_loop::run(

bridges/relays/utils/src/metrics.rs

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,39 @@ impl Default for MetricsAddress {
9999
}
100100

101101
impl MetricsParams {
102+
/// Creates metrics params from metrics address.
103+
pub fn new(
104+
address: Option<MetricsAddress>,
105+
relay_version: String,
106+
relay_commit: String,
107+
) -> Result<Self, PrometheusError> {
108+
const BUILD_INFO_METRIC: &str = "substrate_relay_build_info";
109+
110+
let registry = Registry::new();
111+
register(
112+
Gauge::<U64>::with_opts(
113+
Opts::new(
114+
BUILD_INFO_METRIC,
115+
"A metric with a constant '1' value labeled by version",
116+
)
117+
.const_label("version", &relay_version)
118+
.const_label("commit", &relay_commit),
119+
)?,
120+
&registry,
121+
)?
122+
.set(1);
123+
124+
log::info!(
125+
target: "bridge",
126+
"Exposed {} metric: version={} commit={}",
127+
BUILD_INFO_METRIC,
128+
relay_version,
129+
relay_commit,
130+
);
131+
132+
Ok(MetricsParams { address, registry })
133+
}
134+
102135
/// Creates metrics params so that metrics are not exposed.
103136
pub fn disabled() -> Self {
104137
MetricsParams { address: None, registry: Registry::new() }
@@ -112,12 +145,6 @@ impl MetricsParams {
112145
}
113146
}
114147

115-
impl From<Option<MetricsAddress>> for MetricsParams {
116-
fn from(address: Option<MetricsAddress>) -> Self {
117-
MetricsParams { address, registry: Registry::new() }
118-
}
119-
}
120-
121148
/// Returns metric name optionally prefixed with given prefix.
122149
pub fn metric_name(prefix: Option<&str>, name: &str) -> String {
123150
if let Some(prefix) = prefix {

0 commit comments

Comments
 (0)