scouter-dataframe 0.25.0

DataFusion client for long-term storage of scouter data
Documentation
use thiserror::Error;

#[derive(Error, Debug)]
pub enum StorageError {
    #[error(transparent)]
    DecodeError(#[from] base64::DecodeError),

    #[error(transparent)]
    UtilError(#[from] scouter_types::error::UtilError),

    #[error(transparent)]
    ObjectStorageError(#[from] object_store::Error),

    #[error(transparent)]
    ParseError(#[from] url::ParseError),

    #[error(transparent)]
    Utf8Error(#[from] std::string::FromUtf8Error),

    #[error(transparent)]
    IoError(#[from] std::io::Error),

    #[error("Invalid URL: {0}")]
    InvalidUrl(String),
}

#[derive(Error, Debug)]
pub enum DataFrameError {
    #[error("Failed to read batch: {0}")]
    ReadBatchError(String),

    #[error("Failed to create batch: {0}")]
    CreateBatchError(String),

    #[error(transparent)]
    StorageError(#[from] StorageError),

    #[error("Failed to add year column")]
    AddYearColumnError(#[source] datafusion::error::DataFusionError),

    #[error("Failed to add month column")]
    AddMonthColumnError(#[source] datafusion::error::DataFusionError),

    #[error("Failed to add day column")]
    AddDayColumnError(#[source] datafusion::error::DataFusionError),

    #[error("Failed to add hour column")]
    AddHourColumnError(#[source] datafusion::error::DataFusionError),

    #[error("Failed to write to parquet")]
    WriteParquetError(#[source] datafusion::error::DataFusionError),

    #[error("Failed to infer schema")]
    InferSchemaError(#[source] datafusion::error::DataFusionError),

    #[error("Failed to create listing table")]
    CreateListingTableError(#[source] datafusion::error::DataFusionError),

    #[error("Failed to register table")]
    RegisterTableError(#[source] datafusion::error::DataFusionError),

    #[error("Downcast error: {0}")]
    DowncastError(&'static str),

    #[error("Failed to get column: {0}")]
    GetColumnError(&'static str),

    #[error("Missing field: {0}")]
    MissingFieldError(&'static str),

    #[error(transparent)]
    DatafusionError(#[from] datafusion::error::DataFusionError),

    #[error(transparent)]
    RecordError(#[from] scouter_types::error::RecordError),

    #[error(transparent)]
    ArrowError(#[from] arrow::error::ArrowError),

    #[error("Invalid record type provided: {0}")]
    InvalidRecordTypeError(String),

    #[error("Unsupported operation: {0}")]
    UnsupportedOperation(String),
}

#[derive(Error, Debug)]
pub enum TraceEngineError {
    #[error(transparent)]
    DataTableError(#[from] deltalake::DeltaTableError),

    #[error(transparent)]
    UrlParseError(#[from] url::ParseError),

    #[error("Dataframe table not initialized")]
    TableNotInitialized,

    #[error(transparent)]
    StorageError(#[from] StorageError),

    #[error(transparent)]
    ArrowError(#[from] arrow::error::ArrowError),

    #[error(transparent)]
    IoError(#[from] std::io::Error),

    #[error("Invalid record type provided: {0}")]
    InvalidRecordTypeError(String),

    #[error("Unsupported operation: {0}")]
    UnsupportedOperation(String),

    #[error("Invalid timestamp: {0}")]
    InvalidTimestamp(&'static str),

    #[error("Invalid hex ID '{0}': {1}")]
    InvalidHexId(String, String),

    #[error("Downcast error: {0}")]
    DowncastError(&'static str),

    #[error("Failed to acquire lock: {0}")]
    LockError(#[from] tokio::sync::AcquireError),

    #[error(transparent)]
    DatafusionError(#[from] datafusion::error::DataFusionError),

    #[error("Channel closed")]
    ChannelClosed,

    #[error(transparent)]
    RecordError(#[from] scouter_types::error::RecordError),

    #[error("Failed to convert RecordBatch to TraceSpanBatch: {0}")]
    BatchConversion(String),
}

#[derive(Error, Debug)]
pub enum DatasetEngineError {
    #[error(transparent)]
    DeltaTableError(#[from] deltalake::DeltaTableError),

    #[error(transparent)]
    ArrowError(#[from] arrow::error::ArrowError),

    #[error(transparent)]
    DatafusionError(#[from] datafusion::error::DataFusionError),

    #[error(transparent)]
    StorageError(#[from] StorageError),

    #[error(transparent)]
    DatasetError(#[from] scouter_types::dataset::DatasetError),

    #[error("Table not found: {0}")]
    TableNotFound(String),

    #[error("Fingerprint mismatch for table {table}")]
    FingerprintMismatch {
        table: String,
        expected: String,
        actual: String,
    },

    #[error("Channel closed")]
    ChannelClosed,

    #[error("Registry error: {0}")]
    RegistryError(String),

    #[error(transparent)]
    IoError(#[from] std::io::Error),

    #[error(transparent)]
    UrlParseError(#[from] url::ParseError),

    #[error("Serialization error: {0}")]
    SerializationError(String),

    #[error("SQL validation failed: {0}")]
    SqlValidationError(String),

    #[error("Query cancelled: {0}")]
    QueryCancelled(String),

    #[error("Duplicate query ID: {0}")]
    DuplicateQueryId(String),
}