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