mirror of
https://github.com/stalwartlabs/mail-server.git
synced 2025-10-29 13:55:54 +08:00
Range scanning of message and report queues
This commit is contained in:
parent
7baa088a19
commit
7328ba8dd5
2 changed files with 33 additions and 15 deletions
|
|
@ -135,14 +135,18 @@ impl JMAP {
|
|||
let to = params.get("to");
|
||||
let before = params.parse::<Timestamp>("before").map(|t| t.into_inner());
|
||||
let after = params.parse::<Timestamp>("after").map(|t| t.into_inner());
|
||||
let page: usize = params.parse::<usize>("page").unwrap_or_default();
|
||||
let limit: usize = params.parse::<usize>("limit").unwrap_or_default();
|
||||
let page = params.parse::<usize>("page").unwrap_or_default();
|
||||
let limit = params.parse::<usize>("limit").unwrap_or_default();
|
||||
let values = params.has_key("values");
|
||||
|
||||
let range_start = params.parse::<u64>("range-start").unwrap_or_default();
|
||||
let range_end = params.parse::<u64>("range-end").unwrap_or(u64::MAX);
|
||||
let max_total = params.parse::<usize>("max-total").unwrap_or_default();
|
||||
|
||||
let mut result_ids = Vec::new();
|
||||
let mut result_values = Vec::new();
|
||||
let from_key = ValueKey::from(ValueClass::Queue(QueueClass::Message(0)));
|
||||
let to_key = ValueKey::from(ValueClass::Queue(QueueClass::Message(u64::MAX)));
|
||||
let from_key = ValueKey::from(ValueClass::Queue(QueueClass::Message(range_start)));
|
||||
let to_key = ValueKey::from(ValueClass::Queue(QueueClass::Message(range_end)));
|
||||
let has_filters = text.is_some()
|
||||
|| from.is_some()
|
||||
|| to.is_some()
|
||||
|
|
@ -203,7 +207,7 @@ impl JMAP {
|
|||
total += 1;
|
||||
}
|
||||
|
||||
Ok(true)
|
||||
Ok(max_total == 0 || total < max_total)
|
||||
},
|
||||
)
|
||||
.await;
|
||||
|
|
@ -376,10 +380,14 @@ impl JMAP {
|
|||
let page: usize = params.parse("page").unwrap_or_default();
|
||||
let limit: usize = params.parse("limit").unwrap_or_default();
|
||||
|
||||
let range_start = params.parse::<u64>("range-start").unwrap_or_default();
|
||||
let range_end = params.parse::<u64>("range-end").unwrap_or(u64::MAX);
|
||||
let max_total = params.parse::<usize>("max-total").unwrap_or_default();
|
||||
|
||||
let mut result = Vec::new();
|
||||
let from_key = ValueKey::from(ValueClass::Queue(QueueClass::DmarcReportHeader(
|
||||
ReportEvent {
|
||||
due: 0,
|
||||
due: range_start,
|
||||
policy_hash: 0,
|
||||
seq_id: 0,
|
||||
domain: String::new(),
|
||||
|
|
@ -387,7 +395,7 @@ impl JMAP {
|
|||
)));
|
||||
let to_key = ValueKey::from(ValueClass::Queue(QueueClass::TlsReportHeader(
|
||||
ReportEvent {
|
||||
due: u64::MAX,
|
||||
due: range_end,
|
||||
policy_hash: 0,
|
||||
seq_id: 0,
|
||||
domain: String::new(),
|
||||
|
|
@ -428,7 +436,7 @@ impl JMAP {
|
|||
}
|
||||
}
|
||||
|
||||
Ok(true)
|
||||
Ok(max_total == 0 || total < max_total)
|
||||
},
|
||||
)
|
||||
.await;
|
||||
|
|
|
|||
|
|
@ -61,30 +61,40 @@ impl JMAP {
|
|||
let page: usize = params.parse::<usize>("page").unwrap_or_default();
|
||||
let limit: usize = params.parse::<usize>("limit").unwrap_or_default();
|
||||
|
||||
let range_start = params.parse::<u64>("range-start").unwrap_or_default();
|
||||
let range_end = params.parse::<u64>("range-end").unwrap_or(u64::MAX);
|
||||
let max_total = params.parse::<usize>("max-total").unwrap_or_default();
|
||||
|
||||
let (from_key, to_key, typ) = match class {
|
||||
"dmarc" => (
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Dmarc {
|
||||
id: 0,
|
||||
id: range_start,
|
||||
expires: 0,
|
||||
})),
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Dmarc {
|
||||
id: u64::MAX,
|
||||
id: range_end,
|
||||
expires: u64::MAX,
|
||||
})),
|
||||
ReportType::Dmarc,
|
||||
),
|
||||
"tls" => (
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Tls { id: 0, expires: 0 })),
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Tls {
|
||||
id: u64::MAX,
|
||||
id: range_start,
|
||||
expires: 0,
|
||||
})),
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Tls {
|
||||
id: range_end,
|
||||
expires: u64::MAX,
|
||||
})),
|
||||
ReportType::Tls,
|
||||
),
|
||||
"arf" => (
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Arf { id: 0, expires: 0 })),
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Arf {
|
||||
id: u64::MAX,
|
||||
id: range_start,
|
||||
expires: 0,
|
||||
})),
|
||||
ValueKey::from(ValueClass::Report(ReportClass::Arf {
|
||||
id: range_end,
|
||||
expires: u64::MAX,
|
||||
})),
|
||||
ReportType::Arf,
|
||||
|
|
@ -145,7 +155,7 @@ impl JMAP {
|
|||
total += 1;
|
||||
}
|
||||
|
||||
Ok(true)
|
||||
Ok(max_total == 0 || total < max_total)
|
||||
},
|
||||
)
|
||||
.await;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue