chadtmiller.com/knotless
git that lives in your Atmosphere account
1
10
Reading the logs by message walks that message's index
crates/knotless-serve/src/logs.rs+12−5
| @@ -166,13 +166,20 @@ impl Logs { | ||
let limit = asked.limit.unwrap_or(unasked).clamp(1, LIMIT_MAX); | ||
let db = self.db.lock().unwrap(); | ||
let level = asked.level.as_deref().map_or(0, rank); | ||
let stmt = match &asked.trace { | ||
Some(_) => db.prepare_cached( | ||
// A statement for each way of asking, each by its own index: one | ||
// asking `?2 IS NULL OR message = ?2` could use none, and read | ||
// every line kept, newest first, for a message seldom logged. | ||
let stmt = match (&asked.trace, &asked.message) { | ||
(Some(_), _) => db.prepare_cached( | ||
"SELECT line FROM line WHERE trace = ?1 AND level >= ?3 ORDER BY id DESC LIMIT ?5", | ||
), | ||
None => db.prepare_cached( | ||
"SELECT line FROM line WHERE level >= ?3 AND (?2 IS NULL OR message = ?2) | ||
AND (?4 IS NULL OR ms >= ?4) | ||
(None, Some(_)) => db.prepare_cached( | ||
"SELECT line FROM line INDEXED BY line_message | ||
WHERE message = ?2 AND level >= ?3 AND (?4 IS NULL OR ms >= ?4) | ||
ORDER BY id DESC LIMIT ?5", | ||
), | ||
(None, None) => db.prepare_cached( | ||
"SELECT line FROM line WHERE level >= ?3 AND (?4 IS NULL OR ms >= ?4) | ||
ORDER BY id DESC LIMIT ?5", | ||
), | ||
}; | ||