Skip to main content

systemprompt_runtime/trace/models/
log.rs

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