Skip to content

Commit

Permalink
update metrics , remove the use of metrics-derive (#98)
Browse files Browse the repository at this point in the history
- updated metrics crate to 0.23.0
- removed the use of metrics-derive, (harder to maintain on every update
)

---------

Co-authored-by: supernovahs <[email protected]>
  • Loading branch information
supernovahs and supernovahs authored Sep 12, 2024
1 parent bc640f2 commit fed42dc
Show file tree
Hide file tree
Showing 16 changed files with 1,185 additions and 1,470 deletions.
1,353 changes: 778 additions & 575 deletions Cargo.lock

Large diffs are not rendered by default.

6 changes: 2 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ members = [
"crates/metrics/",
"crates/metrics/collectors/economic/",
"crates/metrics/collectors/rpc_calls/",
"crates/metrics/metrics-derive",
"crates/services/avsregistry/",
"crates/services/bls_aggregation/",
"crates/services/operatorsinfo/",
Expand Down Expand Up @@ -73,7 +72,6 @@ eigen-logging = { path = "crates/logging/" }
eigen-metrics = { version = "0.0.1-alpha", path = "crates/metrics/" }
eigen-metrics-collectors-economic = { path = "crates/metrics/collectors/economic" }
eigen-metrics-collectors-rpc-calls = { path = "crates/metrics/collectors/rpc_calls" }
eigen-metrics-derive = { path = "crates/metrics/metrics-derive" }
eigen-services-avsregistry = { path = "crates/services/avsregistry" }
eigen-services-bls_aggregation = { path = "crates/services/bls_aggregation" }
eigen-services-operatorsinfo = { path = "crates/services/operatorsinfo" }
Expand All @@ -92,8 +90,8 @@ hex-literal = "0.4.1"
hyper = "0.14.25"
info-operator-service = { path = "examples/info-operator-service" }
k256 = "0.13.3"
metrics = "0.21.1"
metrics-exporter-prometheus = "0.12.0"
metrics = "0.23.0"
metrics-exporter-prometheus = "0.15.3"
num-bigint = "0.4.6"
once_cell = "1.17"
prometheus-client = "0.22.2"
Expand Down
11 changes: 7 additions & 4 deletions crates/metrics/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@ repository.workspace = true

[dependencies]
eigen-logging.workspace = true
eigen-metrics-derive.workspace = true
eyre.workspace = true
hyper.workspace = true
metrics.workspace = true
metrics-exporter-prometheus.workspace = true
metrics-util = "0.17.0"

[dev-dependencies]
alloy-primitives.workspace = true
eigen-metrics-collectors-economic.workspace = true
eigen-metrics-collectors-rpc-calls.workspace = true
eigen-client-elcontracts.workspace = true
eigen-testing-utils.workspace = true
eigen-client-avsregistry.workspace = true
num-bigint.workspace = true
reqwest = "0.12.4"
tokio.workspace = true
tokio.workspace = true
11 changes: 10 additions & 1 deletion crates/metrics/collectors/economic/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,15 @@ rust-version.workspace = true
repository.workspace = true

[dependencies]
alloy-primitives.workspace = true
eigen-logging.workspace = true
eigen-metrics-derive.workspace = true
eigen-types.workspace = true
eigen-client-elcontracts.workspace = true
eigen-client-avsregistry.workspace = true
thiserror.workspace = true
metrics.workspace = true
num-bigint.workspace = true

[dev-dependencies]
tokio.workspace = true
eigen-testing-utils.workspace = true
18 changes: 18 additions & 0 deletions crates/metrics/collectors/economic/src/error.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use alloy_primitives::ruint;
use thiserror::Error;

#[derive(Debug, Error)]
pub enum CollectorMetricError {
#[error("Collector metrics error ")]
ElContractsError(#[from] eigen_client_elcontracts::error::ElContractsError),

#[error("Operator is not registered")]
OperatorNotRegistered,

#[error("Collector metric error")]
AvsRegistryError(#[from] eigen_client_avsregistry::error::AvsRegistryError),

/// Parse Error
#[error("Parse Error :{0}")]
ParseError(#[from] ruint::ParseError),
}
120 changes: 120 additions & 0 deletions crates/metrics/collectors/economic/src/fake_collector.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
use std::{collections::HashMap, str::FromStr};

use crate::error::CollectorMetricError;

use alloy_primitives::{Address, FixedBytes, U256};
use eigen_client_avsregistry::reader::AvsRegistryChainReader;
use eigen_logging::logger::SharedLogger;
use eigen_types::operator::OperatorId;
use metrics::{describe_gauge, gauge, Key, Label};
use num_bigint::BigInt;

/// RegisteredStakes Metrics with logger
#[derive(Debug)]
pub struct FakeCollector {
logger: SharedLogger,
operator_addr: Address,
operator_id: OperatorId,
avs_registry_reader: AvsRegistryChainReader,
quorum_names: HashMap<u64, String>,
avs_name: String,
}

impl FakeCollector {
/// Operator stakes in AVS registry contract.
/// Most commonly represents a weighted combination of delegated shares in the DelegationManager EigenLayer contract.
pub fn new(
logger: SharedLogger,
operator_addr: Address,
operator_id: OperatorId,
avs_registry_reader: AvsRegistryChainReader,
quorum_names: HashMap<u64, String>,
avs_name: &str,
) -> Self {
describe_gauge!(
"eigen_registered_stakes",
"A gauge with weighted delegation of delegated shares in delegation manager contract"
);
// for now the namespace if "e" instead of eigen as the docs mention to not use the eigen namespace for this metric
describe_gauge!(
format!("{},_slashing_status", "e"),
"Whether the operator has been slashed"
);

Self {
logger,
operator_addr,
avs_registry_reader,
operator_id,
quorum_names,
avs_name: avs_name.to_owned(),
}
}

pub fn set_stake(&self, quorum_number: &str, quorum_name: &str, avs_name: &str, value: f64) {
// Create the metric key with dynamic
let key = Key::from_parts(
"eigen_registered_stakes",
vec![
Label::new("quorum_number", quorum_number.to_string()),
Label::new("quorum_name", quorum_name.to_string()),
Label::new("avs_name", avs_name.to_string()),
],
);
gauge!(key.to_string()).set(value);
self.logger.debug(
&format!(
"set registered stakes , quorum_name: {} , quorum_number: {} , avs_name: {}, value: {}",
quorum_name, quorum_number, avs_name, value
),
"eigen-metrics-collectors-economic.set_stake",
);
}

pub async fn collect(
&mut self,
is_operator_frozen: bool,
quorum_stake_map: HashMap<u8, BigInt>,
) -> Result<(), CollectorMetricError> {
let mut operator_is_frozen_float = 0.0;
if is_operator_frozen {
operator_is_frozen_float = 1.0;
}

gauge!("e_slashing_status").set(operator_is_frozen_float);

for (quorum_num, stake) in quorum_stake_map {
let key = Key::from_parts(
"eigen_registered_stakes",
vec![
Label::new("quorum_number", quorum_num.to_string()),
Label::new(
"quorum_name",
self.quorum_names[&(quorum_num as u64)].to_string(),
),
Label::new("avs_name", self.avs_name.to_string()),
],
);
let u256_intermediate = U256::from_str(&stake.to_string())?;
gauge!(key.to_string()).set(f64::from(u256_intermediate));
}

Ok(())
}

pub async fn init_operator_id(&mut self) -> Result<(), CollectorMetricError> {
if self.operator_id.eq(&FixedBytes::default()) {
let operator_id = self
.avs_registry_reader
.get_operator_id(self.operator_addr)
.await?;

if operator_id.eq(&FixedBytes::default()) {
return Err(CollectorMetricError::OperatorNotRegistered);
}
self.operator_id = operator_id;
return Ok(());
}
Ok(())
}
}
Loading

0 comments on commit fed42dc

Please sign in to comment.