From e6afd5f9853ca6c039396819bb722b8e7bad6ac8 Mon Sep 17 00:00:00 2001 From: Jason Brown Date: Mon, 18 Sep 2023 12:04:07 -0700 Subject: [PATCH] adapter: Add 'start time' to SHOW READYSET STATUS Add the start time of the adapter to the output of SHOW READYSET STATUS. Fixes: REA-3321 Release-Note-Core: ReadySet will display the process start time in SHOW READYSET SATAUS if `--prometheus-metrics` is enabled. Change-Id: I5e9810a73551ff7ecc3b0a554de4e493a09fef8e Reviewed-on: https://gerrit.readyset.name/c/readyset/+/6076 Tested-by: Buildkite CI Reviewed-by: Tamas Juhasz --- readyset-adapter/src/backend.rs | 7 ++++++- readyset-adapter/src/metrics_handle.rs | 27 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/readyset-adapter/src/backend.rs b/readyset-adapter/src/backend.rs index 3b311e1bab..71af766561 100644 --- a/readyset-adapter/src/backend.rs +++ b/readyset-adapter/src/backend.rs @@ -1969,7 +1969,7 @@ where } SqlQuery::Show(ShowStatement::ReadySetStatus) => { // Add upstream connectivity status - let additional_meta = if let Some(upstream) = &mut self.upstream { + let mut additional_meta = if let Some(upstream) = &mut self.upstream { let connection_status = upstream .is_connected() .await @@ -1980,6 +1980,11 @@ where vec![] }; + if let Some(handle) = self.metrics_handle.as_ref() { + let mut statuses = handle.readyset_status(); + additional_meta.append(&mut statuses); + } + self.noria .readyset_status(&self.authority, additional_meta) .await diff --git a/readyset-adapter/src/metrics_handle.rs b/readyset-adapter/src/metrics_handle.rs index 7fc8705dba..fc248855eb 100644 --- a/readyset-adapter/src/metrics_handle.rs +++ b/readyset-adapter/src/metrics_handle.rs @@ -5,6 +5,8 @@ use metrics_exporter_prometheus::formatting::{sanitize_label_key, sanitize_label use metrics_exporter_prometheus::{Distribution, PrometheusHandle}; use metrics_util::Summary; use quanta::Instant; +// adding an alias to disambiguate vs readyset_client_metrics::recorded +use readyset_client::metrics::recorded as client_recorded; use readyset_client_metrics::recorded::QUERY_LOG_EXECUTION_TIME; #[derive(Debug, Default, Clone)] @@ -106,4 +108,29 @@ impl MetricsHandle { p99_us: summary.quantile(0.99).unwrap_or_default(), }) } + + fn sum_counter(&self, name: &str) -> u64 { + let results = self.counters(Some(|x: &str| x.eq(name))); + match results.get(name) { + Some(res) => { + let mut f = 0; + for (_, v) in res.iter() { + f += v; + } + f + } + None => 0, + } + } + + /// Gather all the metrics that are relevant to be printed with + /// `SHOW READYSET STATUS` + pub fn readyset_status(&self) -> Vec<(String, String)> { + let mut statuses = Vec::new(); + + let val = self.sum_counter(client_recorded::NORIA_STARTUP_TIMESTAMP); + statuses.push(("Process start time".to_string(), val.to_string())); + + statuses + } }