mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-30 00:55:00 +08:00
add a profile_memory parameter disabled by default
This commit is contained in:
parent
f839c8e61d
commit
b5db926dbf
@ -32,7 +32,7 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Copy, Deserr)]
|
#[derive(Debug, Default, Clone, Copy, Deserr, PartialEq, Eq)]
|
||||||
#[deserr(rename_all = lowercase)]
|
#[deserr(rename_all = lowercase)]
|
||||||
pub enum LogMode {
|
pub enum LogMode {
|
||||||
#[default]
|
#[default]
|
||||||
@ -82,13 +82,33 @@ impl MergeWithError<MyParseError> for DeserrJsonError<BadRequest> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserr)]
|
#[derive(Debug, Deserr)]
|
||||||
#[deserr(error = DeserrJsonError, rename_all = camelCase, deny_unknown_fields)]
|
#[deserr(error = DeserrJsonError, rename_all = camelCase, deny_unknown_fields, validate = validate_get_logs -> DeserrJsonError<InvalidSettingsTypoTolerance>)]
|
||||||
pub struct GetLogs {
|
pub struct GetLogs {
|
||||||
#[deserr(default = "info".parse().unwrap(), try_from(&String) = MyTargets::from_str -> DeserrJsonError<BadRequest>)]
|
#[deserr(default = "info".parse().unwrap(), try_from(&String) = MyTargets::from_str -> DeserrJsonError<BadRequest>)]
|
||||||
target: MyTargets,
|
target: MyTargets,
|
||||||
|
|
||||||
#[deserr(default, error = DeserrJsonError<BadRequest>)]
|
#[deserr(default, error = DeserrJsonError<BadRequest>)]
|
||||||
mode: LogMode,
|
mode: LogMode,
|
||||||
|
|
||||||
|
#[deserr(default = false, error = DeserrJsonError<BadRequest>)]
|
||||||
|
profile_memory: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn validate_get_logs<E: DeserializeError>(
|
||||||
|
logs: GetLogs,
|
||||||
|
location: ValuePointerRef,
|
||||||
|
) -> Result<GetLogs, E> {
|
||||||
|
if logs.profile_memory && logs.mode != LogMode::Profile {
|
||||||
|
Err(deserr::take_cf_content(E::error::<Infallible>(
|
||||||
|
None,
|
||||||
|
ErrorKind::Unexpected {
|
||||||
|
msg: format!("`profile_memory` can only be used while profiling code and is not compatible with the {:?} mode.", logs.mode),
|
||||||
|
},
|
||||||
|
location,
|
||||||
|
)))
|
||||||
|
} else {
|
||||||
|
Ok(logs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LogWriter {
|
struct LogWriter {
|
||||||
|
@ -97,6 +97,63 @@ async fn logs_stream_bad_mode() {
|
|||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn logs_stream_bad_profile_memory() {
|
||||||
|
let server = Server::new().await;
|
||||||
|
|
||||||
|
// Wrong type
|
||||||
|
let (response, code) =
|
||||||
|
server.service.post("/logs/stream", json!({ "profileMemory": "tamo" })).await;
|
||||||
|
snapshot!(code, @"400 Bad Request");
|
||||||
|
snapshot!(response, @r###"
|
||||||
|
{
|
||||||
|
"message": "Invalid value type at `.profileMemory`: expected a boolean, but found a string: `\"tamo\"`",
|
||||||
|
"code": "bad_request",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#bad_request"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
|
||||||
|
// Wrong type
|
||||||
|
let (response, code) =
|
||||||
|
server.service.post("/logs/stream", json!({ "profileMemory": ["hello", "kefir"] })).await;
|
||||||
|
snapshot!(code, @"400 Bad Request");
|
||||||
|
snapshot!(response, @r###"
|
||||||
|
{
|
||||||
|
"message": "Invalid value type at `.profileMemory`: expected a boolean, but found an array: `[\"hello\",\"kefir\"]`",
|
||||||
|
"code": "bad_request",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#bad_request"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
|
||||||
|
// Used with default parameters
|
||||||
|
let (response, code) =
|
||||||
|
server.service.post("/logs/stream", json!({ "profileMemory": true })).await;
|
||||||
|
snapshot!(code, @"400 Bad Request");
|
||||||
|
snapshot!(response, @r###"
|
||||||
|
{
|
||||||
|
"message": "Invalid value: `profile_memory` can only be used while profiling code and is not compatible with the Fmt mode.",
|
||||||
|
"code": "invalid_settings_typo_tolerance",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#invalid_settings_typo_tolerance"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
|
||||||
|
// Used with an unsupported mode
|
||||||
|
let (response, code) =
|
||||||
|
server.service.post("/logs/stream", json!({ "mode": "fmt", "profileMemory": true })).await;
|
||||||
|
snapshot!(code, @"400 Bad Request");
|
||||||
|
snapshot!(response, @r###"
|
||||||
|
{
|
||||||
|
"message": "Invalid value: `profile_memory` can only be used while profiling code and is not compatible with the Fmt mode.",
|
||||||
|
"code": "invalid_settings_typo_tolerance",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#invalid_settings_typo_tolerance"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn logs_stream_without_enabling_the_route() {
|
async fn logs_stream_without_enabling_the_route() {
|
||||||
let server = Server::new().await;
|
let server = Server::new().await;
|
||||||
|
Loading…
Reference in New Issue
Block a user