reth_prune/
metrics.rs

1use reth_metrics::{
2    metrics::{Gauge, Histogram},
3    Metrics,
4};
5use reth_prune_types::PruneSegment;
6use std::collections::HashMap;
7
8#[derive(Metrics)]
9#[metrics(scope = "pruner")]
10pub(crate) struct Metrics {
11    /// Pruning duration
12    pub(crate) duration_seconds: Histogram,
13    #[metric(skip)]
14    prune_segments: HashMap<PruneSegment, PrunerSegmentMetrics>,
15}
16
17impl Metrics {
18    /// Returns existing or initializes a new instance of [`PrunerSegmentMetrics`] for the provided
19    /// [`PruneSegment`].
20    pub(crate) fn get_prune_segment_metrics(
21        &mut self,
22        segment: PruneSegment,
23    ) -> &mut PrunerSegmentMetrics {
24        self.prune_segments.entry(segment).or_insert_with(|| {
25            PrunerSegmentMetrics::new_with_labels(&[("segment", segment.to_string())])
26        })
27    }
28}
29
30#[derive(Metrics)]
31#[metrics(scope = "pruner.segments")]
32pub(crate) struct PrunerSegmentMetrics {
33    /// Pruning duration for this segment
34    pub(crate) duration_seconds: Histogram,
35    /// Highest pruned block per segment
36    pub(crate) highest_pruned_block: Gauge,
37}