Skip to main content

systemprompt_logging/trace/models/
log.rs

1//! Log search and summary DTOs (level/module rollups, time ranges, pattern
2//! queries).
3
4use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6use systemprompt_identifiers::{LogId, TraceId};
7
8#[derive(Debug, Clone)]
9pub struct LogSearchFilter {
10    pub pattern: String,
11    pub limit: i64,
12    pub since: Option<DateTime<Utc>>,
13    pub level: Option<String>,
14}
15
16impl LogSearchFilter {
17    pub const fn new(pattern: String, limit: i64) -> Self {
18        Self {
19            pattern,
20            limit,
21            since: None,
22            level: None,
23        }
24    }
25
26    pub const fn with_since(mut self, since: DateTime<Utc>) -> Self {
27        self.since = Some(since);
28        self
29    }
30
31    systemprompt_models::builder_methods! {
32        with_level(level) -> String,
33    }
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct LogSearchItem {
38    pub id: LogId,
39    pub trace_id: TraceId,
40    pub timestamp: DateTime<Utc>,
41    pub level: String,
42    pub module: String,
43    pub message: String,
44    pub metadata: Option<String>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct LevelCount {
49    pub level: String,
50    pub count: i64,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct ModuleCount {
55    pub module: String,
56    pub count: i64,
57}
58
59#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
60pub struct LogTimeRange {
61    pub earliest: Option<DateTime<Utc>>,
62    pub latest: Option<DateTime<Utc>>,
63}