pub struct SqliteLogStore { /* private fields */ }Expand description
SQLite-backed log store with WAL mode for concurrent readers.
Implementations§
Source§impl SqliteLogStore
impl SqliteLogStore
Sourcepub fn open(path: impl Into<PathBuf>) -> Result<Self>
pub fn open(path: impl Into<PathBuf>) -> Result<Self>
Open or create the SQLite log store at the given path.
Sourcepub fn rotate_by_age(
&self,
daemon_id: &DaemonId,
max_age: Duration,
archive_hook: Option<&ArchiveHook>,
) -> Result<u64>
pub fn rotate_by_age( &self, daemon_id: &DaemonId, max_age: Duration, archive_hook: Option<&ArchiveHook>, ) -> Result<u64>
Rotate (delete) old log entries for a specific daemon based on retention policy.
When an archive hook is configured, entries are fetched in batches of
batch_size, the hook is invoked without holding the SQLite mutex
(so concurrent log appends are not blocked), and then deleted by ID.
Row-read errors are propagated rather than silently dropped.
Sourcepub fn rotate_by_count(
&self,
daemon_id: &DaemonId,
max_count: u64,
archive_hook: Option<&ArchiveHook>,
) -> Result<u64>
pub fn rotate_by_count( &self, daemon_id: &DaemonId, max_count: u64, archive_hook: Option<&ArchiveHook>, ) -> Result<u64>
Rotate (delete) old log entries keeping only the most recent max_count rows
for a specific daemon.
When an archive hook is configured, entries are fetched in batches of
batch_size, the hook is invoked without holding the SQLite mutex
(so concurrent log appends are not blocked), and then deleted by ID.
Row-read errors are propagated rather than silently dropped.
Sourcepub fn migrate_daemon_text_logs(&self, daemon_id: &DaemonId) -> Result<u64>
pub fn migrate_daemon_text_logs(&self, daemon_id: &DaemonId) -> Result<u64>
Migrate existing text logs for a daemon into SQLite.
Reads the legacy text file line-by-line (streaming) and inserts in batches of 1000 to avoid loading multi-GB files into memory at once.
Sourcepub fn distinct_loggers(&self, daemon_id: &str) -> Result<Vec<String>>
pub fn distinct_loggers(&self, daemon_id: &str) -> Result<Vec<String>>
Return distinct non-null logger values for a daemon, sorted alphabetically.
Scans only the most recent 5000 entries for performance — autocomplete only needs a representative sample, not the full history.
Sourcepub fn distinct_field_keys(&self, daemon_id: &str) -> Result<Vec<String>>
pub fn distinct_field_keys(&self, daemon_id: &str) -> Result<Vec<String>>
Return distinct keys from the fields_json column for a daemon.
Uses json_each to extract all object keys across recent structured log
entries, returning a sorted unique list. Useful for jq autocomplete.
Scans only the most recent 5000 entries for performance.
Trait Implementations§
Source§impl LogStore for SqliteLogStore
impl LogStore for SqliteLogStore
Source§fn append(&self, daemon_id: &DaemonId, message: &str) -> Result<()>
fn append(&self, daemon_id: &DaemonId, message: &str) -> Result<()>
Source§fn append_batch(&self, daemon_id: &DaemonId, messages: &[String]) -> Result<()>
fn append_batch(&self, daemon_id: &DaemonId, messages: &[String]) -> Result<()>
Source§fn append_structured(
&self,
daemon_id: &DaemonId,
parsed: &ParsedLog,
) -> Result<()>
fn append_structured( &self, daemon_id: &DaemonId, parsed: &ParsedLog, ) -> Result<()>
Source§fn append_structured_batch(
&self,
daemon_id: &DaemonId,
entries: &[ParsedLog],
) -> Result<()>
fn append_structured_batch( &self, daemon_id: &DaemonId, entries: &[ParsedLog], ) -> Result<()>
Source§fn query(&self, opts: &LogQuery) -> Result<Vec<LogEntry>>
fn query(&self, opts: &LogQuery) -> Result<Vec<LogEntry>>
Source§fn tail(
&self,
daemon_id: &DaemonId,
after_id: Option<i64>,
) -> Result<Vec<LogEntry>>
fn tail( &self, daemon_id: &DaemonId, after_id: Option<i64>, ) -> Result<Vec<LogEntry>>
after_id is Some(id), returns only entries with row id > id.
When after_id is None, returns all entries for the daemon.Source§fn clear(&self, daemon_ids: &[DaemonId]) -> Result<()>
fn clear(&self, daemon_ids: &[DaemonId]) -> Result<()>
Source§fn last_id(&self, daemon_id: &DaemonId) -> Result<Option<i64>>
fn last_id(&self, daemon_id: &DaemonId) -> Result<Option<i64>>
None if no
entries exist. Used by tailing loops to advance the cursor past
non-matching rows without re-scanning them on every poll.Source§fn apply_retention(
&self,
policy: &RetentionPolicy,
excluded_daemon_ids: &[DaemonId],
archive_hook: Option<&ArchiveHook>,
) -> Result<u64>
fn apply_retention( &self, policy: &RetentionPolicy, excluded_daemon_ids: &[DaemonId], archive_hook: Option<&ArchiveHook>, ) -> Result<u64>
Source§fn apply_retention_for_daemon(
&self,
daemon_id: &DaemonId,
policy: &RetentionPolicy,
archive_hook: Option<&ArchiveHook>,
) -> Result<u64>
fn apply_retention_for_daemon( &self, daemon_id: &DaemonId, policy: &RetentionPolicy, archive_hook: Option<&ArchiveHook>, ) -> Result<u64>
Auto Trait Implementations§
impl !Freeze for SqliteLogStore
impl RefUnwindSafe for SqliteLogStore
impl Send for SqliteLogStore
impl Sync for SqliteLogStore
impl Unpin for SqliteLogStore
impl UnsafeUnpin for SqliteLogStore
impl UnwindSafe for SqliteLogStore
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more