Skip to main content

scouter_dataframe/
error.rs

1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum StorageError {
5    #[error(transparent)]
6    DecodeError(#[from] base64::DecodeError),
7
8    #[error(transparent)]
9    UtilError(#[from] scouter_types::error::UtilError),
10
11    #[error(transparent)]
12    ObjectStorageError(#[from] object_store::Error),
13
14    #[error(transparent)]
15    ParseError(#[from] url::ParseError),
16
17    #[error(transparent)]
18    Utf8Error(#[from] std::string::FromUtf8Error),
19
20    #[error(transparent)]
21    IoError(#[from] std::io::Error),
22
23    #[error("Invalid URL: {0}")]
24    InvalidUrl(String),
25}
26
27#[derive(Error, Debug)]
28pub enum DataFrameError {
29    #[error("Failed to read batch: {0}")]
30    ReadBatchError(String),
31
32    #[error("Failed to create batch: {0}")]
33    CreateBatchError(String),
34
35    #[error(transparent)]
36    StorageError(#[from] StorageError),
37
38    #[error("Failed to add year column")]
39    AddYearColumnError(#[source] datafusion::error::DataFusionError),
40
41    #[error("Failed to add month column")]
42    AddMonthColumnError(#[source] datafusion::error::DataFusionError),
43
44    #[error("Failed to add day column")]
45    AddDayColumnError(#[source] datafusion::error::DataFusionError),
46
47    #[error("Failed to add hour column")]
48    AddHourColumnError(#[source] datafusion::error::DataFusionError),
49
50    #[error("Failed to write to parquet")]
51    WriteParquetError(#[source] datafusion::error::DataFusionError),
52
53    #[error("Failed to infer schema")]
54    InferSchemaError(#[source] datafusion::error::DataFusionError),
55
56    #[error("Failed to create listing table")]
57    CreateListingTableError(#[source] datafusion::error::DataFusionError),
58
59    #[error("Failed to register table")]
60    RegisterTableError(#[source] datafusion::error::DataFusionError),
61
62    #[error("Downcast error: {0}")]
63    DowncastError(&'static str),
64
65    #[error("Failed to get column: {0}")]
66    GetColumnError(&'static str),
67
68    #[error("Missing field: {0}")]
69    MissingFieldError(&'static str),
70
71    #[error(transparent)]
72    DatafusionError(#[from] datafusion::error::DataFusionError),
73
74    #[error(transparent)]
75    RecordError(#[from] scouter_types::error::RecordError),
76
77    #[error(transparent)]
78    ArrowError(#[from] arrow::error::ArrowError),
79
80    #[error("Invalid record type provided: {0}")]
81    InvalidRecordTypeError(String),
82
83    #[error("Unsupported operation: {0}")]
84    UnsupportedOperation(String),
85}
86
87#[derive(Error, Debug)]
88pub enum TraceEngineError {
89    #[error(transparent)]
90    DataTableError(#[from] deltalake::DeltaTableError),
91
92    #[error(transparent)]
93    UrlParseError(#[from] url::ParseError),
94
95    #[error("Dataframe table not initialized")]
96    TableNotInitialized,
97
98    #[error(transparent)]
99    StorageError(#[from] StorageError),
100
101    #[error(transparent)]
102    ArrowError(#[from] arrow::error::ArrowError),
103
104    #[error(transparent)]
105    IoError(#[from] std::io::Error),
106
107    #[error("Invalid record type provided: {0}")]
108    InvalidRecordTypeError(String),
109
110    #[error("Unsupported operation: {0}")]
111    UnsupportedOperation(String),
112
113    #[error("Invalid timestamp: {0}")]
114    InvalidTimestamp(&'static str),
115
116    #[error("Invalid hex ID '{0}': {1}")]
117    InvalidHexId(String, String),
118
119    #[error("Downcast error: {0}")]
120    DowncastError(&'static str),
121
122    #[error("Failed to acquire lock: {0}")]
123    LockError(#[from] tokio::sync::AcquireError),
124
125    #[error(transparent)]
126    DatafusionError(#[from] datafusion::error::DataFusionError),
127
128    #[error("Channel closed")]
129    ChannelClosed,
130
131    #[error(transparent)]
132    RecordError(#[from] scouter_types::error::RecordError),
133
134    #[error("Failed to convert RecordBatch to TraceSpanBatch: {0}")]
135    BatchConversion(String),
136}
137
138#[derive(Error, Debug)]
139pub enum DatasetEngineError {
140    #[error(transparent)]
141    DeltaTableError(#[from] deltalake::DeltaTableError),
142
143    #[error(transparent)]
144    ArrowError(#[from] arrow::error::ArrowError),
145
146    #[error(transparent)]
147    DatafusionError(#[from] datafusion::error::DataFusionError),
148
149    #[error(transparent)]
150    StorageError(#[from] StorageError),
151
152    #[error(transparent)]
153    DatasetError(#[from] scouter_types::dataset::DatasetError),
154
155    #[error("Table not found: {0}")]
156    TableNotFound(String),
157
158    #[error("Fingerprint mismatch for table {table}")]
159    FingerprintMismatch {
160        table: String,
161        expected: String,
162        actual: String,
163    },
164
165    #[error("Channel closed")]
166    ChannelClosed,
167
168    #[error("Registry error: {0}")]
169    RegistryError(String),
170
171    #[error(transparent)]
172    IoError(#[from] std::io::Error),
173
174    #[error(transparent)]
175    UrlParseError(#[from] url::ParseError),
176
177    #[error("Serialization error: {0}")]
178    SerializationError(String),
179
180    #[error("SQL validation failed: {0}")]
181    SqlValidationError(String),
182
183    #[error("Query cancelled: {0}")]
184    QueryCancelled(String),
185
186    #[error("Duplicate query ID: {0}")]
187    DuplicateQueryId(String),
188}