Do not leak private URLs

This commit is contained in:
Clément Renault
2025-07-07 10:59:39 +02:00
parent 07bfed99e6
commit 4c7a6e5c1b

View File

@ -7,7 +7,7 @@ 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,
hosts: Vec<String>, sum_exports_meilisearch_cloud: usize,
sum_index_patterns: usize, sum_index_patterns: usize,
sum_patterns_with_filter: usize, sum_patterns_with_filter: usize,
sum_patterns_with_override_settings: usize, sum_patterns_with_override_settings: usize,
@ -19,7 +19,11 @@ impl ExportAnalytics {
let Export { url, api_key, payload_size, indexes } = export; let Export { url, api_key, payload_size, indexes } = export;
let url = Url::parse(url).ok(); let url = Url::parse(url).ok();
let host = url.as_ref().and_then(Url::host_str); let is_meilisearch_cloud = url.as_ref().and_then(Url::host_str).is_some_and(|host| {
host.ends_with("meilisearch.dev")
|| host.ends_with("meilisearch.com")
|| host.ends_with("meilisearch.io")
});
let has_api_key = api_key.is_some(); let has_api_key = api_key.is_some();
let index_patterns_count = indexes.as_ref().map_or(0, |indexes| indexes.len()); let index_patterns_count = indexes.as_ref().map_or(0, |indexes| indexes.len());
let patterns_with_filter_count = indexes.as_ref().map_or(0, |indexes| { let patterns_with_filter_count = indexes.as_ref().map_or(0, |indexes| {
@ -38,7 +42,7 @@ impl ExportAnalytics {
Self { Self {
total_received: 1, total_received: 1,
has_api_key, has_api_key,
hosts: host.map(ToOwned::to_owned).map_or_else(Default::default, |h| vec![h]), sum_exports_meilisearch_cloud: is_meilisearch_cloud as usize,
sum_index_patterns: index_patterns_count, sum_index_patterns: index_patterns_count,
sum_patterns_with_filter: patterns_with_filter_count, sum_patterns_with_filter: patterns_with_filter_count,
sum_patterns_with_override_settings: patterns_with_override_settings_count, sum_patterns_with_override_settings: patterns_with_override_settings_count,
@ -55,7 +59,7 @@ 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.hosts.extend(other.hosts); self.sum_exports_meilisearch_cloud += other.sum_exports_meilisearch_cloud;
self.sum_index_patterns += other.sum_index_patterns; self.sum_index_patterns += other.sum_index_patterns;
self.sum_patterns_with_filter += other.sum_patterns_with_filter; self.sum_patterns_with_filter += other.sum_patterns_with_filter;
self.sum_patterns_with_override_settings += other.sum_patterns_with_override_settings; self.sum_patterns_with_override_settings += other.sum_patterns_with_override_settings;
@ -70,6 +74,12 @@ 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_exports_meilisearch_cloud = if self.total_received == 0 {
None
} else {
Some(self.sum_exports_meilisearch_cloud as f64 / self.total_received as f64)
};
let avg_index_patterns = if self.total_received == 0 { let avg_index_patterns = if self.total_received == 0 {
None None
} else { } else {
@ -91,7 +101,7 @@ impl Aggregate for ExportAnalytics {
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,
"hosts": self.hosts, "avg_exports_meilisearch_cloud": avg_exports_meilisearch_cloud,
"avg_index_patterns": avg_index_patterns, "avg_index_patterns": avg_index_patterns,
"avg_patterns_with_filter": avg_patterns_with_filter, "avg_patterns_with_filter": avg_patterns_with_filter,
"avg_patterns_with_override_settings": avg_patterns_with_override_settings, "avg_patterns_with_override_settings": avg_patterns_with_override_settings,