Skip to content

Commit 47922c3

Browse files
authored
feat: actually dump alpenglow metrics (solana-labs#485)
Closes: solana-labs#408 In the earlier PR, we collected the metrics but did not actually dump them. In this PR, we are also dumping the metrics. The `Datapoint` API is quite restrictive requiring `&'static str` for various arguments forcing a lot of code duplication. On my long list of issues to explore is to see if we can make the `Datapoint` API a bit more friendlier to use.
1 parent 17a23c1 commit 47922c3

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

votor/src/consensus_metrics.rs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use {
22
histogram::Histogram,
33
solana_clock::{Epoch, Slot},
4+
solana_metrics::datapoint_info,
45
solana_pubkey::Pubkey,
56
solana_votor_messages::vote::Vote,
67
std::{
@@ -167,7 +168,48 @@ impl ConsensusMetrics {
167168

168169
/// Performs end of epoch reporting and reset all the statistics for the subsequent epoch.
169170
fn end_of_epoch_reporting(&mut self) {
170-
// TODO: currently, just clearing the stats and not actually reporting
171+
for (addr, metrics) in &self.node_metrics {
172+
let addr = addr.to_string();
173+
datapoint_info!("votor_consensus_metrics",
174+
"address" => addr,
175+
("notar_vote_count", metrics.notar.entries(), i64),
176+
("notar_vote_mean", metrics.notar.mean().ok(), Option<i64>),
177+
("notar_vote_stddev", metrics.notar.stddev(), Option<i64>),
178+
("notar_vote_maximum", metrics.notar.maximum().ok(), Option<i64>),
179+
180+
("notar_fallback_vote_count", metrics.notar_fallback.entries(), i64),
181+
("notar_fallback_vote_mean", metrics.notar_fallback.mean().ok(), Option<i64>),
182+
("notar_fallback_vote_stddev", metrics.notar_fallback.stddev(), Option<i64>),
183+
("notar_fallback_vote_maximum", metrics.notar_fallback.maximum().ok(), Option<i64>),
184+
185+
("skip_vote_count", metrics.skip.entries(), i64),
186+
("skip_vote_mean", metrics.skip.mean().ok(), Option<i64>),
187+
("skip_vote_stddev", metrics.skip.stddev(), Option<i64>),
188+
("skip_vote_maximum", metrics.skip.maximum().ok(), Option<i64>),
189+
190+
("skip_fallback_vote_count", metrics.skip_fallback.entries(), i64),
191+
("skip_fallback_vote_mean", metrics.skip_fallback.mean().ok(), Option<i64>),
192+
("skip_fallback_vote_stddev", metrics.skip_fallback.stddev(), Option<i64>),
193+
("skip_fallback_vote_maximum", metrics.skip_fallback.maximum().ok(), Option<i64>),
194+
195+
("finalize_vote_count", metrics.final_.entries(), i64),
196+
("finalize_vote_mean", metrics.final_.mean().ok(), Option<i64>),
197+
("finalize_vote_stddev", metrics.final_.stddev(), Option<i64>),
198+
("finalize_vote_maximum", metrics.final_.maximum().ok(), Option<i64>),
199+
);
200+
}
201+
202+
for (addr, histogram) in &self.leader_metrics {
203+
let addr = addr.to_string();
204+
datapoint_info!("votor_consensus_metrics",
205+
"address" => addr,
206+
("blocks_seen_vote_count", histogram.entries(), i64),
207+
("blocks_seen_vote_mean", histogram.mean().ok(), Option<i64>),
208+
("blocks_seen_vote_stddev", histogram.stddev(), Option<i64>),
209+
("blocks_seen_vote_maximum", histogram.maximum().ok(), Option<i64>),
210+
);
211+
}
212+
171213
self.node_metrics.clear();
172214
self.leader_metrics.clear();
173215
self.start_of_slot.clear();

0 commit comments

Comments
 (0)