Skip to content

Commit 7fa6838

Browse files
feat: add info metrics (#234)
Co-authored-by: Manuel Iñaki Bilbao <[email protected]>
1 parent c6f5995 commit 7fa6838

File tree

19 files changed

+596
-167
lines changed

19 files changed

+596
-167
lines changed

.dockerignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
target
22
Dockerfile
33
.dockerignore
4-
.git
54
.gitignore

.github/workflows/release.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ jobs:
3737
uses: actions/checkout@v4
3838
with:
3939
ref: "stable"
40+
fetch-depth: 0
41+
42+
- name: Log commit hash
43+
run: |
44+
echo "Releasing commit: $(git rev-parse HEAD)"
4045
4146
- name: Cache Cargo registry
4247
uses: actions/cache@v3
@@ -107,6 +112,7 @@ jobs:
107112
uses: actions/checkout@v4
108113
with:
109114
ref: "stable"
115+
fetch-depth: 0
110116

111117
- name: Set up QEMU
112118
uses: docker/setup-qemu-action@v3
@@ -141,6 +147,7 @@ jobs:
141147
uses: actions/checkout@v4
142148
with:
143149
ref: "stable"
150+
fetch-depth: 0
144151

145152
- name: Set up QEMU
146153
uses: docker/setup-qemu-action@v3

bin/pbs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ async fn main() -> Result<()> {
1818

1919
let pbs_config = load_pbs_config().await?;
2020

21+
PbsService::init_metrics(pbs_config.chain)?;
2122
let state = PbsState::new(pbs_config);
22-
PbsService::init_metrics()?;
2323
let server = PbsService::run::<_, DefaultBuilderApi>(state);
2424

2525
tokio::select! {

bin/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub mod prelude {
1111
},
1212
pbs::{BuilderEvent, BuilderEventClient, OnBuilderApiEvent},
1313
signer::{BlsPublicKey, BlsSignature, EcdsaPublicKey, EcdsaSignature},
14+
types::Chain,
1415
utils::{
1516
initialize_pbs_tracing_log, initialize_tracing_log, utcnow_ms, utcnow_ns, utcnow_sec,
1617
utcnow_us,

crates/common/build.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use std::process::Command;
2+
3+
fn main() {
4+
let output = Command::new("git").args(["rev-parse", "HEAD"]).output().unwrap();
5+
let git_hash = String::from_utf8(output.stdout).unwrap();
6+
println!("cargo:rustc-env=GIT_HASH={git_hash}");
7+
}

crates/common/src/constants.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ pub const APPLICATION_BUILDER_DOMAIN: [u8; 4] = [0, 0, 0, 1];
22
pub const GENESIS_VALIDATORS_ROOT: [u8; 32] = [0; 32];
33
pub const COMMIT_BOOST_DOMAIN: [u8; 4] = [109, 109, 111, 67];
44
pub const COMMIT_BOOST_VERSION: &str = env!("CARGO_PKG_VERSION");
5+
pub const COMMIT_BOOST_COMMIT: &str = env!("GIT_HASH");

crates/common/src/types.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ pub enum Chain {
2828

2929
pub type ForkVersion = [u8; 4];
3030

31+
impl std::fmt::Display for Chain {
32+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33+
match self {
34+
Self::Mainnet | Self::Holesky | Self::Sepolia | Self::Helder => write!(f, "{self:?}"),
35+
Self::Custom { .. } => write!(f, "Custom"),
36+
}
37+
}
38+
}
39+
3140
impl std::fmt::Debug for Chain {
3241
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3342
match self {

crates/metrics/src/provider.rs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,33 @@ use axum::{
77
response::{IntoResponse, Response},
88
routing::get,
99
};
10-
use cb_common::config::ModuleMetricsConfig;
10+
use cb_common::{
11+
config::ModuleMetricsConfig,
12+
constants::{COMMIT_BOOST_COMMIT, COMMIT_BOOST_VERSION},
13+
types::Chain,
14+
};
1115
use eyre::bail;
12-
use prometheus::{Encoder, Registry, TextEncoder};
16+
use prometheus::{Encoder, IntGauge, Opts, Registry, TextEncoder};
1317
use tokio::net::TcpListener;
1418
use tracing::{error, info, trace, warn};
1519

1620
pub struct MetricsProvider {
21+
network: Chain,
1722
config: ModuleMetricsConfig,
1823
registry: Registry,
1924
}
2025

2126
impl MetricsProvider {
22-
pub fn new(config: ModuleMetricsConfig, registry: Registry) -> Self {
23-
MetricsProvider { config, registry }
27+
pub fn new(network: Chain, config: ModuleMetricsConfig, registry: Registry) -> Self {
28+
MetricsProvider { network, config, registry }
2429
}
2530

26-
pub fn from_registry(registry: Registry) -> eyre::Result<Option<Self>> {
27-
Ok(ModuleMetricsConfig::load_from_env()?.map(|config| MetricsProvider { config, registry }))
31+
pub fn from_registry(network: Chain, registry: Registry) -> eyre::Result<Option<Self>> {
32+
Ok(ModuleMetricsConfig::load_from_env()?.map(|config| Self::new(network, config, registry)))
2833
}
2934

30-
pub fn load_and_run(registry: Registry) -> eyre::Result<()> {
31-
if let Some(provider) = MetricsProvider::from_registry(registry)? {
35+
pub fn load_and_run(network: Chain, registry: Registry) -> eyre::Result<()> {
36+
if let Some(provider) = MetricsProvider::from_registry(network, registry)? {
3237
tokio::spawn(async move {
3338
if let Err(err) = provider.run().await {
3439
error!("Metrics server error: {:?}", err);
@@ -44,6 +49,15 @@ impl MetricsProvider {
4449
pub async fn run(self) -> eyre::Result<()> {
4550
info!("Starting metrics server on port {}", self.config.server_port);
4651

52+
let opts = Opts::new("info", "Commit Boost info")
53+
.const_label("version", COMMIT_BOOST_VERSION)
54+
.const_label("commit", COMMIT_BOOST_COMMIT)
55+
.const_label("network", self.network.to_string());
56+
let info = IntGauge::with_opts(opts).unwrap();
57+
info.set(1);
58+
59+
self.registry.register(Box::new(info)).unwrap();
60+
4761
let router = axum::Router::new()
4862
.route("/metrics", get(handle_metrics))
4963
.route("/status", get(handle_status))

crates/pbs/src/service.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use std::time::Duration;
22

33
use cb_common::{
4-
constants::COMMIT_BOOST_VERSION,
4+
constants::{COMMIT_BOOST_COMMIT, COMMIT_BOOST_VERSION},
55
pbs::{BUILDER_API_PATH, GET_STATUS_PATH},
6+
types::Chain,
67
};
78
use cb_metrics::provider::MetricsProvider;
89
use eyre::{bail, Context, Result};
@@ -25,7 +26,7 @@ impl PbsService {
2526
let addr = state.config.endpoint;
2627
let events_subs =
2728
state.config.event_publisher.as_ref().map(|e| e.n_subscribers()).unwrap_or_default();
28-
info!(version = COMMIT_BOOST_VERSION, ?addr, events_subs, chain =? state.config.chain, "starting PBS service");
29+
info!(version = COMMIT_BOOST_VERSION, commit = COMMIT_BOOST_COMMIT, ?addr, events_subs, chain =? state.config.chain, "starting PBS service");
2930

3031
let app = create_app_router::<S, A>(state);
3132
let listener = TcpListener::bind(addr).await?;
@@ -52,7 +53,7 @@ impl PbsService {
5253
PBS_METRICS_REGISTRY.register(c).expect("failed to register metric");
5354
}
5455

55-
pub fn init_metrics() -> Result<()> {
56-
MetricsProvider::load_and_run(PBS_METRICS_REGISTRY.clone())
56+
pub fn init_metrics(network: Chain) -> Result<()> {
57+
MetricsProvider::load_and_run(network, PBS_METRICS_REGISTRY.clone())
5758
}
5859
}

crates/signer/src/service.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ use cb_common::{
2121
},
2222
},
2323
config::StartSignerConfig,
24-
constants::COMMIT_BOOST_VERSION,
25-
types::{Jwt, ModuleId},
24+
constants::{COMMIT_BOOST_COMMIT, COMMIT_BOOST_VERSION},
25+
types::{Chain, Jwt, ModuleId},
2626
};
2727
use cb_metrics::provider::MetricsProvider;
2828
use eyre::{Context, Result};
@@ -74,10 +74,10 @@ impl SigningService {
7474
let proxies = manager.proxies();
7575
let loaded_proxies = proxies.bls_signers.len() + proxies.ecdsa_signers.len();
7676

77-
info!(version = COMMIT_BOOST_VERSION, modules =? module_ids, port =? config.server_port, loaded_consensus, loaded_proxies, "Starting signing service");
77+
info!(version = COMMIT_BOOST_VERSION, commit = COMMIT_BOOST_COMMIT, modules =? module_ids, port =? config.server_port, loaded_consensus, loaded_proxies, "Starting signing service");
7878

7979
let state = SigningState { manager: RwLock::new(manager).into(), jwts: config.jwts.into() };
80-
SigningService::init_metrics()?;
80+
SigningService::init_metrics(config.chain)?;
8181

8282
let app = axum::Router::new()
8383
.route(REQUEST_SIGNATURE_PATH, post(handle_request_signature))
@@ -96,8 +96,8 @@ impl SigningService {
9696
.wrap_err("signer server exited")
9797
}
9898

99-
fn init_metrics() -> Result<()> {
100-
MetricsProvider::load_and_run(SIGNER_METRICS_REGISTRY.clone())
99+
fn init_metrics(network: Chain) -> Result<()> {
100+
MetricsProvider::load_and_run(network, SIGNER_METRICS_REGISTRY.clone())
101101
}
102102
}
103103

0 commit comments

Comments
 (0)