From de6f6409bc2ff1384f205ce29f178a1dd816ea6e Mon Sep 17 00:00:00 2001 From: Alexandcoats Date: Fri, 18 Nov 2022 10:17:32 -0500 Subject: [PATCH] feat(cli): add analytics timings to `fill-analytics` CLI command (#898) * Add analytics timings to `fill-analytics` CLI command * Remove network name from metrics --- src/bin/inx-chronicle/cli.rs | 14 ++++++++++ src/bin/inx-chronicle/stardust_inx/mod.rs | 31 +++++++++++++---------- src/db/collections/metrics/influx.rs | 5 ++++ src/db/collections/metrics/mod.rs | 13 +++++++--- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/bin/inx-chronicle/cli.rs b/src/bin/inx-chronicle/cli.rs index 759f172f8..0f8b5dab8 100644 --- a/src/bin/inx-chronicle/cli.rs +++ b/src/bin/inx-chronicle/cli.rs @@ -254,8 +254,22 @@ impl ClArgs { .get_milestone_timestamp(index) .await? { + #[cfg(feature = "metrics")] + let start_time = std::time::Instant::now(); let analytics = db.get_all_analytics(index).await?; influx_db.insert_all_analytics(timestamp, index, analytics).await?; + #[cfg(feature = "metrics")] + { + let elapsed = start_time.elapsed(); + influx_db + .insert(chronicle::db::collections::metrics::AnalyticsMetrics { + time: chrono::Utc::now(), + milestone_index: index, + analytics_time: elapsed.as_millis() as u64, + chronicle_version: std::env!("CARGO_PKG_VERSION").to_string(), + }) + .await?; + } tracing::info!("Finished analytics for milestone {}", index); } else { tracing::info!("No milestone in database for index {}", index); diff --git a/src/bin/inx-chronicle/stardust_inx/mod.rs b/src/bin/inx-chronicle/stardust_inx/mod.rs index 75c934828..a9f80acd3 100644 --- a/src/bin/inx-chronicle/stardust_inx/mod.rs +++ b/src/bin/inx-chronicle/stardust_inx/mod.rs @@ -322,8 +322,7 @@ impl InxWorker { tracing::Span::current().record("consumed", consumed_count); self.handle_cone_stream(inx, milestone_index).await?; - #[allow(unused)] - let network_name = self.handle_protocol_params(inx, milestone_index).await?; + self.handle_protocol_params(inx, milestone_index).await?; self.handle_node_configuration(inx, milestone_index).await?; // This acts as a checkpoint for the syncing and has to be done last, after everything else completed. @@ -342,10 +341,21 @@ impl InxWorker { } } #[cfg(all(feature = "analytics", feature = "metrics"))] - let analytics_elapsed = self - .influx_db - .as_ref() - .and_then(|db| db.config().analytics_enabled.then_some(analytics_start_time.elapsed())); + { + if let Some(influx_db) = &self.influx_db { + if influx_db.config().analytics_enabled { + let analytics_elapsed = analytics_start_time.elapsed(); + influx_db + .insert(chronicle::db::collections::metrics::AnalyticsMetrics { + time: chrono::Utc::now(), + milestone_index, + analytics_time: analytics_elapsed.as_millis() as u64, + chronicle_version: std::env!("CARGO_PKG_VERSION").to_string(), + }) + .await?; + } + } + } #[cfg(feature = "metrics")] if let Some(influx_db) = &self.influx_db { @@ -356,9 +366,6 @@ impl InxWorker { time: chrono::Utc::now(), milestone_index, milestone_time: elapsed.as_millis() as u64, - #[cfg(feature = "analytics")] - analytics_time: analytics_elapsed.map(|d| d.as_millis() as u64), - network_name, chronicle_version: std::env!("CARGO_PKG_VERSION").to_string(), }) .await?; @@ -369,21 +376,19 @@ impl InxWorker { } #[instrument(skip_all, level = "trace")] - async fn handle_protocol_params(&self, inx: &mut Inx, milestone_index: MilestoneIndex) -> Result { + async fn handle_protocol_params(&self, inx: &mut Inx, milestone_index: MilestoneIndex) -> Result<()> { let parameters = inx .read_protocol_parameters(milestone_index.0.into()) .await? .params .inner(&())?; - let network_name = parameters.network_name().to_string(); - self.db .collection::() .update_latest_protocol_parameters(milestone_index, parameters.into()) .await?; - Ok(network_name) + Ok(()) } #[instrument(skip_all, level = "trace")] diff --git a/src/db/collections/metrics/influx.rs b/src/db/collections/metrics/influx.rs index d0115c878..45877907c 100644 --- a/src/db/collections/metrics/influx.rs +++ b/src/db/collections/metrics/influx.rs @@ -7,3 +7,8 @@ use crate::db::influxdb::InfluxDbMeasurement; impl InfluxDbMeasurement for SyncMetrics { const NAME: &'static str = "sync_metrics"; } + +#[cfg(feature = "analytics")] +impl InfluxDbMeasurement for AnalyticsMetrics { + const NAME: &'static str = "analytics_metrics"; +} diff --git a/src/db/collections/metrics/mod.rs b/src/db/collections/metrics/mod.rs index 73daa3c43..ee6c778b0 100644 --- a/src/db/collections/metrics/mod.rs +++ b/src/db/collections/metrics/mod.rs @@ -17,10 +17,17 @@ pub struct SyncMetrics { pub time: DateTime, pub milestone_index: MilestoneIndex, pub milestone_time: u64, - #[cfg(feature = "analytics")] - pub analytics_time: Option, #[influxdb(tag)] pub chronicle_version: String, +} + +#[cfg(feature = "analytics")] +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, InfluxDbWriteable)] +#[allow(missing_docs)] +pub struct AnalyticsMetrics { + pub time: DateTime, + pub milestone_index: MilestoneIndex, + pub analytics_time: u64, #[influxdb(tag)] - pub network_name: String, + pub chronicle_version: String, }