pitchfork_cli/log_store/
mod.rs1use crate::Result;
2use crate::daemon_id::DaemonId;
3use chrono::{DateTime, Local};
4
5#[derive(Debug, Clone)]
7pub struct LogEntry {
8 pub id: i64,
9 pub daemon_id: String,
10 pub timestamp: DateTime<Local>,
11 pub message: String,
12}
13
14#[derive(Debug, Clone, Default)]
16pub struct LogQuery {
17 pub daemon_ids: Vec<String>,
18 pub from: Option<DateTime<Local>>,
19 pub to: Option<DateTime<Local>>,
20 pub limit: Option<usize>,
21 pub order_desc: bool,
22 pub after_id: Option<i64>,
23}
24
25#[derive(Debug, Clone, Copy)]
27pub struct RetentionPolicy {
28 pub age: Option<chrono::Duration>,
30 pub count: Option<u64>,
32}
33
34impl RetentionPolicy {
35 #[allow(dead_code)]
36 pub fn is_none(&self) -> bool {
37 self.age.is_none() && self.count.is_none()
38 }
39}
40
41pub trait LogStore: Send + Sync {
43 fn append(&self, daemon_id: &DaemonId, message: &str) -> Result<()>;
45
46 fn query(&self, opts: &LogQuery) -> Result<Vec<LogEntry>>;
48
49 fn tail(&self, daemon_id: &DaemonId, after_id: Option<i64>) -> Result<Vec<LogEntry>>;
53
54 fn clear(&self, daemon_ids: &[DaemonId]) -> Result<()>;
56
57 fn apply_retention(
64 &self,
65 policy: &RetentionPolicy,
66 excluded_daemon_ids: &[DaemonId],
67 ) -> Result<u64> {
68 let _ = (policy, excluded_daemon_ids);
69 Ok(0)
70 }
71
72 fn apply_retention_for_daemon(
74 &self,
75 daemon_id: &DaemonId,
76 policy: &RetentionPolicy,
77 ) -> Result<u64> {
78 let _ = (daemon_id, policy);
79 Ok(0)
80 }
81
82 fn list_daemon_ids(&self) -> Result<Vec<String>>;
84
85 fn last_clear_generation(&self, daemon_id: &DaemonId) -> Result<Option<u64>> {
89 let _ = daemon_id;
90 Ok(None)
91 }
92}
93
94pub mod sqlite;