Add the exportPuffinReports option to the runtime features route

This commit is contained in:
Kerollmops 2023-09-25 14:28:54 +02:00
parent 62dfd09dc6
commit 58db8d85ec
No known key found for this signature in database
GPG Key ID: F250A4C4E3AE5F5F
3 changed files with 26 additions and 3 deletions

View File

@ -67,6 +67,19 @@ impl RoFeatures {
.into()) .into())
} }
} }
pub fn check_puffin(&self) -> Result<()> {
if self.runtime.export_puffin_reports {
Ok(())
} else {
Err(FeatureNotEnabledError {
disabled_action: "Outputting Puffin reports to disk",
feature: "export puffin reports",
issue_link: "https://github.com/meilisearch/product/discussions/693",
}
.into())
}
}
} }
impl FeatureData { impl FeatureData {

View File

@ -5,6 +5,7 @@ use serde::{Deserialize, Serialize};
pub struct RuntimeTogglableFeatures { pub struct RuntimeTogglableFeatures {
pub score_details: bool, pub score_details: bool,
pub vector_store: bool, pub vector_store: bool,
pub export_puffin_reports: bool,
} }
#[derive(Default, Debug, Clone, Copy)] #[derive(Default, Debug, Clone, Copy)]

View File

@ -44,6 +44,8 @@ pub struct RuntimeTogglableFeatures {
pub score_details: Option<bool>, pub score_details: Option<bool>,
#[deserr(default)] #[deserr(default)]
pub vector_store: Option<bool>, pub vector_store: Option<bool>,
#[deserr(default)]
pub export_puffin_reports: Option<bool>,
} }
async fn patch_features( async fn patch_features(
@ -58,23 +60,30 @@ async fn patch_features(
let features = index_scheduler.features()?; let features = index_scheduler.features()?;
let old_features = features.runtime_features(); let old_features = features.runtime_features();
let new_features = meilisearch_types::features::RuntimeTogglableFeatures { let new_features = meilisearch_types::features::RuntimeTogglableFeatures {
score_details: new_features.0.score_details.unwrap_or(old_features.score_details), score_details: new_features.0.score_details.unwrap_or(old_features.score_details),
vector_store: new_features.0.vector_store.unwrap_or(old_features.vector_store), vector_store: new_features.0.vector_store.unwrap_or(old_features.vector_store),
export_puffin_reports: new_features
.0
.export_puffin_reports
.unwrap_or(old_features.export_puffin_reports),
}; };
// explicitly destructure for analytics rather than using the `Serialize` implementation, because // explicitly destructure for analytics rather than using the `Serialize` implementation, because
// the it renames to camelCase, which we don't want for analytics. // the it renames to camelCase, which we don't want for analytics.
// **Do not** ignore fields with `..` or `_` here, because we want to add them in the future. // **Do not** ignore fields with `..` or `_` here, because we want to add them in the future.
let meilisearch_types::features::RuntimeTogglableFeatures { score_details, vector_store } = let meilisearch_types::features::RuntimeTogglableFeatures {
new_features; score_details,
vector_store,
export_puffin_reports,
} = new_features;
analytics.publish( analytics.publish(
"Experimental features Updated".to_string(), "Experimental features Updated".to_string(),
json!({ json!({
"score_details": score_details, "score_details": score_details,
"vector_store": vector_store, "vector_store": vector_store,
"export_puffin_reports": export_puffin_reports,
}), }),
Some(&req), Some(&req),
); );