Skip to content

Commit

Permalink
write BackendMetrics and ClusterMetrics in protobuf
Browse files Browse the repository at this point in the history
  • Loading branch information
Keksoj committed Apr 5, 2023
1 parent 03332c7 commit 332ed3e
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 83 deletions.
24 changes: 10 additions & 14 deletions bin/src/ctl/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ use anyhow::{self, Context};
use prettytable::{Row, Table};

use sozu_command_lib::{
proto::command::{filtered_metrics, FilteredMetrics, WorkerInfo},
proto::command::{filtered_metrics, ClusterMetrics, FilteredMetrics, WorkerInfo},
response::{
AggregatedMetrics, AvailableMetrics, ClusterMetrics, ListedFrontends, ListenersList,
ResponseContent, WorkerMetrics,
AggregatedMetrics, AvailableMetrics, ListedFrontends, ListenersList, ResponseContent,
WorkerMetrics,
},
};

Expand Down Expand Up @@ -252,20 +252,16 @@ fn print_cluster_metrics(cluster_metrics: &Option<BTreeMap<String, ClusterMetric
for (cluster_id, cluster_metrics_data) in cluster_metrics.iter() {
println!("\nCluster {cluster_id}\n--------");

if let Some(cluster) = &cluster_metrics_data.cluster {
let filtered = filter_metrics(cluster);
let filtered = filter_metrics(&cluster_metrics_data.cluster);
print_gauges_and_counts(&filtered);
print_percentiles(&filtered);

for backend_metrics in cluster_metrics_data.backends.iter() {
println!("\n{cluster_id}/{}\n--------", backend_metrics.backend_id);
let filtered = filter_metrics(&backend_metrics.metrics);
print_gauges_and_counts(&filtered);
print_percentiles(&filtered);
}

if let Some(backends) = &cluster_metrics_data.backends {
for backend_metrics in backends.iter() {
println!("\n{cluster_id}/{}\n--------", backend_metrics.backend_id);
let filtered = filter_metrics(&backend_metrics.metrics);
print_gauges_and_counts(&filtered);
print_percentiles(&filtered);
}
}
}
}
}
Expand Down
13 changes: 13 additions & 0 deletions command/src/command.proto
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,19 @@ enum RunState {
NOT_ANSWERING = 3;
}

// the metrics of a given cluster, with several backends
message ClusterMetrics {
// metric name -> metric value
map<string, FilteredMetrics> cluster = 1;
// backend_id -> (metric name-> metric value)
repeated BackendMetrics backends = 2;
}

message BackendMetrics {
required string backend_id = 1;
map<string, FilteredMetrics> metrics = 2;
}

message FilteredMetrics {
oneof inner {
uint64 gauge = 1;
Expand Down
85 changes: 28 additions & 57 deletions command/src/response.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ use std::{

use crate::{
proto::command::{
AddBackend, CertificateSummary, Cluster, FilteredMetrics, FilteredTimeSerie,
LoadBalancingParams, PathRule, PathRuleKind, RequestHttpFrontend, RequestTcpFrontend,
RulePosition, RunState, TlsVersion, WorkerInfo,
AddBackend, CertificateSummary, Cluster, ClusterMetrics, FilteredMetrics,
FilteredTimeSerie, LoadBalancingParams, PathRule, PathRuleKind, RequestHttpFrontend,
RequestTcpFrontend, RulePosition, RunState, TlsVersion, WorkerInfo,
},
request::{default_sticky_name, is_false, PROTOCOL_VERSION},
state::{ClusterId, ConfigState},
Expand Down Expand Up @@ -493,35 +493,6 @@ pub struct WorkerMetrics {
pub clusters: Option<BTreeMap<String, ClusterMetrics>>,
}

/// the metrics of a given cluster, with several backends
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ClusterMetrics {
/// metric name -> metric value
pub cluster: Option<BTreeMap<String, FilteredMetrics>>,
/// backend_id -> (metric name-> metric value)
pub backends: Option<Vec<BackendMetrics>>,
}

/// the metrics of a given backend
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BackendMetrics {
pub backend_id: String,
/// metric name -> metric value
pub metrics: BTreeMap<String, FilteredMetrics>,
}

/*
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "type", content = "data", rename_all = "SCREAMING_SNAKE_CASE")]
pub enum FilteredMetrics {
Gauge(usize),
Count(i64),
Time(usize),
Percentiles(Percentiles),
TimeSerie(FilteredTimeSerie),
}
*/

impl fmt::Display for FilteredTimeSerie {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
Expand All @@ -539,7 +510,9 @@ fn socketaddr_cmp(a: &SocketAddr, b: &SocketAddr) -> Ordering {

#[cfg(test)]
mod tests {
use crate::proto::command::{filtered_metrics, FilteredMetrics, WorkerInfo, Percentiles};
use crate::proto::command::{
filtered_metrics, BackendMetrics, ClusterMetrics, FilteredMetrics, Percentiles, WorkerInfo,
};

use super::*;

Expand Down Expand Up @@ -658,29 +631,27 @@ mod tests {
[(
String::from("cluster_1"),
ClusterMetrics {
cluster: Some(
[(
String::from("request_time"),
FilteredMetrics {
inner: Some(filtered_metrics::Inner::Percentiles(
Percentiles {
samples: 42,
p_50: 1,
p_90: 2,
p_99: 10,
p_99_9: 12,
p_99_99: 20,
p_99_999: 22,
p_100: 30,
}
))
}
)]
.iter()
.cloned()
.collect()
),
backends: Some(vec![BackendMetrics {
cluster: [(
String::from("request_time"),
FilteredMetrics {
inner: Some(filtered_metrics::Inner::Percentiles(
Percentiles {
samples: 42,
p_50: 1,
p_90: 2,
p_99: 10,
p_99_9: 12,
p_99_99: 20,
p_99_999: 22,
p_100: 30,
}
))
}
)]
.iter()
.cloned()
.collect(),
backends: vec![BackendMetrics {
backend_id: String::from("cluster_1-0"),
metrics: [
(
Expand Down Expand Up @@ -722,7 +693,7 @@ mod tests {
.iter()
.cloned()
.collect()
}]),
}],
}
)]
.iter()
Expand Down
23 changes: 11 additions & 12 deletions lib/src/metrics/local_drain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ use std::{collections::BTreeMap, str, time::Instant};
use anyhow::Context;
use hdrhistogram::Histogram;
use sozu_command::{
proto::command::filtered_metrics,
response::{AvailableMetrics, BackendMetrics, ResponseContent},
proto::command::{filtered_metrics, BackendMetrics},
response::{AvailableMetrics, ResponseContent},
};

use crate::sozu_command::{
proto::command::{FilteredMetrics, MetricsConfiguration, Percentiles, QueryMetricsOptions},
response::{ClusterMetrics, WorkerMetrics},
proto::command::{
ClusterMetrics, FilteredMetrics, MetricsConfiguration, Percentiles, QueryMetricsOptions,
},
response::WorkerMetrics,
};

use super::{MetricData, Subscriber};
Expand Down Expand Up @@ -296,10 +298,7 @@ impl LocalDrain {
))?;
backends.push(backend_metrics);
}
Ok(ClusterMetrics {
cluster: Some(cluster),
backends: Some(backends),
})
Ok(ClusterMetrics { cluster, backends })
}

fn metrics_of_one_backend(
Expand Down Expand Up @@ -366,14 +365,14 @@ impl LocalDrain {
.context(format!("No metrics found for backend with id {backend_id}"))?
.to_owned();

let mut backend_vec = Vec::new();
backend_vec.push(self.metrics_of_one_backend(backend_id, metric_names)?);
let mut backends = Vec::new();
backends.push(self.metrics_of_one_backend(backend_id, metric_names)?);

clusters.insert(
cluster_id,
ClusterMetrics {
cluster: None,
backends: Some(backend_vec),
cluster: BTreeMap::new(),
backends,
},
);
}
Expand Down

0 comments on commit 332ed3e

Please sign in to comment.