1use crate::model::{
2 FrontendError, LogRecord, Session, SpanEventRecord, SpanRecord, TauriEventRecord, TauriIpcCall,
3 TauriWindowState,
4};
5use serde::{Deserialize, Serialize};
6use thiserror::Error;
7
8#[derive(Debug, Error)]
9pub enum StorageError {
10 #[error("storage backend error: {0}")]
11 Backend(String),
12}
13
14pub trait TelemetryStore {
15 fn create_session(&self, session: &Session) -> Result<(), StorageError>;
16 fn insert_log(&self, log: &LogRecord) -> Result<(), StorageError>;
17 fn insert_span(&self, span: &SpanRecord) -> Result<(), StorageError>;
18 fn insert_span_event(&self, event: &SpanEventRecord) -> Result<(), StorageError>;
19 fn insert_frontend_error(&self, error: &FrontendError) -> Result<(), StorageError>;
20 fn insert_tauri_ipc_call(&self, call: &TauriIpcCall) -> Result<(), StorageError>;
21 fn insert_tauri_event(&self, event: &TauriEventRecord) -> Result<(), StorageError>;
22 fn insert_tauri_window_state(&self, window: &TauriWindowState) -> Result<(), StorageError>;
23}
24
25#[derive(Debug, Clone, Default, PartialEq, Eq)]
26pub struct LogQuery {
27 pub session_id: Option<String>,
28 pub trace_id: Option<String>,
29 pub limit: Option<usize>,
30}
31
32#[derive(Debug, Clone, Default, PartialEq, Eq)]
33pub struct SpanQuery {
34 pub session_id: Option<String>,
35 pub trace_id: Option<String>,
36 pub limit: Option<usize>,
37}
38
39#[derive(Debug, Clone, Default, PartialEq, Eq)]
40pub struct SpanEventQuery {
41 pub session_id: Option<String>,
42 pub trace_id: Option<String>,
43 pub limit: Option<usize>,
44}
45
46#[derive(Debug, Clone, Default, PartialEq, Eq)]
47pub struct FrontendErrorQuery {
48 pub session_id: Option<String>,
49 pub trace_id: Option<String>,
50 pub limit: Option<usize>,
51}
52
53#[derive(Debug, Clone, Default, PartialEq, Eq)]
54pub struct TauriIpcQuery {
55 pub session_id: Option<String>,
56 pub trace_id: Option<String>,
57 pub limit: Option<usize>,
58}
59
60#[derive(Debug, Clone, Default, PartialEq, Eq)]
61pub struct TauriEventQuery {
62 pub session_id: Option<String>,
63 pub trace_id: Option<String>,
64 pub limit: Option<usize>,
65}
66
67#[derive(Debug, Clone, Default, PartialEq, Eq)]
68pub struct TauriWindowQuery {
69 pub session_id: Option<String>,
70 pub latest_only: bool,
71 pub limit: Option<usize>,
72}
73
74#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
75#[serde(rename_all = "camelCase")]
76pub struct RelatedTelemetryQuery {
77 pub session_id: Option<String>,
78 pub trace_id: Option<String>,
79 pub window_label: Option<String>,
80 pub start_time_unix_nanos: Option<i64>,
81 pub end_time_unix_nanos: Option<i64>,
82 pub limit: Option<usize>,
83}
84
85#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
86#[serde(rename_all = "camelCase")]
87pub struct RelatedTelemetry {
88 pub filter_notes: Vec<String>,
89 pub spans: Vec<SpanRecord>,
90 pub span_events: Vec<SpanEventRecord>,
91 pub logs: Vec<LogRecord>,
92 pub frontend_errors: Vec<FrontendError>,
93 pub tauri_ipc_calls: Vec<TauriIpcCall>,
94 pub tauri_events: Vec<TauriEventRecord>,
95 pub tauri_windows: Vec<TauriWindowState>,
96}