Better compute aggragates

This commit is contained in:
Clément Renault 2025-06-26 16:03:13 +02:00
parent 0bb7866f1e
commit bf13268649
No known key found for this signature in database
GPG key ID: F250A4C4E3AE5F5F

View file

@ -5,8 +5,8 @@ use crate::routes::export::Export;
pub struct ExportAnalytics { pub struct ExportAnalytics {
total_received: usize, total_received: usize,
has_api_key: bool, has_api_key: bool,
total_index_patterns: usize, sum_index_patterns: usize,
total_patterns_with_filter: usize, sum_patterns_with_filter: usize,
payload_sizes: Vec<u64>, payload_sizes: Vec<u64>,
} }
@ -15,8 +15,8 @@ impl ExportAnalytics {
let Export { url: _, api_key, payload_size, indexes } = export; let Export { url: _, api_key, payload_size, indexes } = export;
let has_api_key = api_key.is_some(); let has_api_key = api_key.is_some();
let total_index_patterns = indexes.len(); let index_patterns_count = indexes.len();
let total_patterns_with_filter = let patterns_with_filter_count =
indexes.values().filter(|settings| settings.filter.is_some()).count(); indexes.values().filter(|settings| settings.filter.is_some()).count();
let payload_sizes = let payload_sizes =
if let Some(crate::routes::export::ByteWithDeserr(byte_size)) = payload_size { if let Some(crate::routes::export::ByteWithDeserr(byte_size)) = payload_size {
@ -28,8 +28,8 @@ impl ExportAnalytics {
Self { Self {
total_received: 1, total_received: 1,
has_api_key, has_api_key,
total_index_patterns, sum_index_patterns: index_patterns_count,
total_patterns_with_filter, sum_patterns_with_filter: patterns_with_filter_count,
payload_sizes, payload_sizes,
} }
} }
@ -43,8 +43,8 @@ impl Aggregate for ExportAnalytics {
fn aggregate(mut self: Box<Self>, other: Box<Self>) -> Box<Self> { fn aggregate(mut self: Box<Self>, other: Box<Self>) -> Box<Self> {
self.total_received += other.total_received; self.total_received += other.total_received;
self.has_api_key |= other.has_api_key; self.has_api_key |= other.has_api_key;
self.total_index_patterns += other.total_index_patterns; self.sum_index_patterns += other.sum_index_patterns;
self.total_patterns_with_filter += other.total_patterns_with_filter; self.sum_patterns_with_filter += other.sum_patterns_with_filter;
self.payload_sizes.extend(other.payload_sizes); self.payload_sizes.extend(other.payload_sizes);
self self
} }
@ -56,11 +56,23 @@ impl Aggregate for ExportAnalytics {
Some(self.payload_sizes.iter().sum::<u64>() / self.payload_sizes.len() as u64) Some(self.payload_sizes.iter().sum::<u64>() / self.payload_sizes.len() as u64)
}; };
let avg_index_patterns = if self.total_received == 0 {
None
} else {
Some(self.sum_index_patterns as f64 / self.total_received as f64)
};
let avg_patterns_with_filter = if self.total_received == 0 {
None
} else {
Some(self.sum_patterns_with_filter as f64 / self.total_received as f64)
};
serde_json::json!({ serde_json::json!({
"total_received": self.total_received, "total_received": self.total_received,
"has_api_key": self.has_api_key, "has_api_key": self.has_api_key,
"total_index_patterns": self.total_index_patterns, "avg_index_patterns": avg_index_patterns,
"total_patterns_with_filter": self.total_patterns_with_filter, "avg_patterns_with_filter": avg_patterns_with_filter,
"avg_payload_size": avg_payload_size, "avg_payload_size": avg_payload_size,
}) })
} }