mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-07-16 03:10:50 +00:00
Merge pull request #5733 from meilisearch/improve-export-analytics
Improve the analytics of the `/export` route
This commit is contained in:
@ -1,3 +1,5 @@
|
|||||||
|
use url::Url;
|
||||||
|
|
||||||
use crate::analytics::Aggregate;
|
use crate::analytics::Aggregate;
|
||||||
use crate::routes::export::Export;
|
use crate::routes::export::Export;
|
||||||
|
|
||||||
@ -5,6 +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,
|
||||||
|
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,
|
||||||
@ -13,8 +16,14 @@ pub struct ExportAnalytics {
|
|||||||
|
|
||||||
impl ExportAnalytics {
|
impl ExportAnalytics {
|
||||||
pub fn from_export(export: &Export) -> Self {
|
pub fn from_export(export: &Export) -> Self {
|
||||||
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 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| {
|
||||||
@ -33,6 +42,7 @@ impl ExportAnalytics {
|
|||||||
Self {
|
Self {
|
||||||
total_received: 1,
|
total_received: 1,
|
||||||
has_api_key,
|
has_api_key,
|
||||||
|
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,
|
||||||
@ -49,6 +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.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;
|
||||||
@ -63,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 {
|
||||||
@ -84,6 +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,
|
||||||
|
"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,
|
||||||
|
Reference in New Issue
Block a user