pub struct MetricsStore {
pub sled_db: Db,
pub main: Tree,
pub by_height: Tree,
pub tx_gas_data: Tree,
}
Expand description
The MetricStore
serves as the entry point for managing metrics,
offering an API for fetching, inserting, and resetting metrics backed by a Sled database.
It organizes data into separate Sled trees, including main storage for gas metrics by a defined time interval, a tree containing metrics by height for handling reorgs, and a transaction-specific gas data tree. Different keys, such as gas metric keys, block heights, and transaction hashes, are used to handle various use cases.
The MetricStore
utilizes an overlay pattern for write operations, allowing unified management of metrics,
by internally delegating write-related actions like adding metrics and handling reorgs to MetricsStoreOverlay
.
Fields§
§sled_db: Db
Pointer to the underlying sled database used by the store and its associated overlay
main: Tree
Primary sled tree for storing gas metrics, utilizing GasMetricsKey
as keys and
serialized GasMetrics
as values.
by_height: Tree
Sled tree for storing gas metrics by height, utilizing block height
as keys
and serialized GasMetrics
as values.
tx_gas_data: Tree
Sled tree for storing transaction gas data, utilizing [TransactionHash
] inner value as keys
and serialized [GasData
] as values.
Implementations§
Source§impl MetricsStore
impl MetricsStore
Sourcepub fn new(db: &Db) -> Result<Self>
pub fn new(db: &Db) -> Result<Self>
Creates a MetricsStore
instance by opening the necessary trees in the provided sled database [Db
]
Sourcepub fn get(&self, keys: &[GasMetricsKey]) -> Result<Vec<GasMetrics>>
pub fn get(&self, keys: &[GasMetricsKey]) -> Result<Vec<GasMetrics>>
Fetches GasMetrics
s associated with the provided slice of GasMetricsKey
s.
Sourcepub fn get_by_height(&self, heights: &[u32]) -> Result<Vec<GasMetrics>>
pub fn get_by_height(&self, heights: &[u32]) -> Result<Vec<GasMetrics>>
Fetches GasMetrics
s associated with the provided slice of u32
heights.
Sourcepub fn get_last(&self) -> Result<Option<(GasMetricsKey, GasMetrics)>>
pub fn get_last(&self) -> Result<Option<(GasMetricsKey, GasMetrics)>>
Fetches the most recent GasMetrics
and its associated GasMetricsKey
from the main tree,
returning None
if no metrics are found.
Sourcepub fn get_all_metrics(&self) -> Result<Vec<GasMetrics>>
pub fn get_all_metrics(&self) -> Result<Vec<GasMetrics>>
Fetches all GasMetrics
from the main tree without corresponding key, returning an empty Vec
if no metrics are found.
Sourcepub fn get_last_by_height(&self) -> Result<Option<(u32, GasMetrics)>>
pub fn get_last_by_height(&self) -> Result<Option<(u32, GasMetrics)>>
Fetches the most recent GasMetrics
and its associated height
from the by_height
tree, returning None
if no metrics are found.
Sourcepub fn get_tx_gas_data(
&self,
tx_hash: &TransactionHash,
) -> Result<Option<GasData>>
pub fn get_tx_gas_data( &self, tx_hash: &TransactionHash, ) -> Result<Option<GasData>>
Fetches the [GasData
] associated with the provided [TransactionHash
], or None
if no gas data is found.
Sourcepub fn insert_gas_metrics(
&self,
block_height: u32,
block_timestamp: &Timestamp,
tx_hashes: &[TransactionHash],
tx_gas_data: &[GasData],
) -> Result<GasMetricsKey>
pub fn insert_gas_metrics( &self, block_height: u32, block_timestamp: &Timestamp, tx_hashes: &[TransactionHash], tx_gas_data: &[GasData], ) -> Result<GasMetricsKey>
Adds gas metrics for a specific block of transactions to the store.
This function takes block height
, [Timestamp
], with associated pairs of [TransactionHash
] and [GasData
],
and updates the accumulated gas metrics in the store. It handles the storage of metrics for both regular use and
blockchain reorganizations.
Delegates operation to MetricsStoreOverlay::insert_gas_metrics
, whose documentation
provides more details.
Sourcepub fn reset_gas_metrics(&self, height: u32) -> Result<()>
pub fn reset_gas_metrics(&self, height: u32) -> Result<()>
Resets the gas metrics in the store to a specified height
u32
.
This function reverts all gas metrics data after the given height, effectively undoing changes made beyond that point. It’s useful for handling blockchain reorganizations.
Delegates operation to MetricsStoreOverlay::reset_gas_metrics
, whose documentation
provides more details.
Sourcepub fn contains(&self, key: &GasMetricsKey) -> Result<bool>
pub fn contains(&self, key: &GasMetricsKey) -> Result<bool>
Checks if provided GasMetricsKey
exists in the store’s main tree.
Sourcepub fn len_by_height(&self) -> usize
pub fn len_by_height(&self) -> usize
Provides the number of stored metrics by height.
Sourcepub fn len_tx_gas_data(&self) -> usize
pub fn len_tx_gas_data(&self) -> usize
Returns the number of transaction gas usage metrics stored.
Sourcepub fn is_empty_tx_gas_data(&self) -> bool
pub fn is_empty_tx_gas_data(&self) -> bool
Checks if transaction gas data metrics are stored.
Trait Implementations§
Source§impl Clone for MetricsStore
impl Clone for MetricsStore
Source§fn clone(&self) -> MetricsStore
fn clone(&self) -> MetricsStore
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl Freeze for MetricsStore
impl !RefUnwindSafe for MetricsStore
impl Send for MetricsStore
impl Sync for MetricsStore
impl Unpin for MetricsStore
impl !UnwindSafe for MetricsStore
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Pointee for T
impl<T> Pointee for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.