use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PipelineConfig {
pub max_batch_size: usize,
pub batch_timeout_ms: u64,
pub max_concurrent_updates: usize,
pub stream_buffer_size: usize,
pub update_timeout_seconds: u64,
pub consistency_level: ConsistencyLevel,
pub backpressure_strategy: BackpressureStrategy,
pub retry_config: RetryConfig,
pub monitoring_config: MonitoringConfig,
pub version_control: VersionControlConfig,
pub quality_assurance: QualityAssuranceConfig,
}
impl Default for PipelineConfig {
fn default() -> Self {
Self {
max_batch_size: 1000,
batch_timeout_ms: 100,
max_concurrent_updates: 10,
stream_buffer_size: 10000,
update_timeout_seconds: 30,
consistency_level: ConsistencyLevel::Session,
backpressure_strategy: BackpressureStrategy::Adaptive,
retry_config: RetryConfig::default(),
monitoring_config: MonitoringConfig::default(),
version_control: VersionControlConfig::default(),
quality_assurance: QualityAssuranceConfig::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ConsistencyLevel {
Eventual,
Session,
Strong,
Causal,
MonotonicRead,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum BackpressureStrategy {
DropOldest,
DropNewest,
Block,
Adaptive,
ExponentialBackoff {
initial_delay_ms: u64,
max_delay_ms: u64,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetryConfig {
pub max_retries: usize,
pub base_delay_ms: u64,
pub max_delay_ms: u64,
pub backoff_multiplier: f64,
pub jitter_factor: f64,
}
impl Default for RetryConfig {
fn default() -> Self {
Self {
max_retries: 3,
base_delay_ms: 100,
max_delay_ms: 5000,
backoff_multiplier: 2.0,
jitter_factor: 0.1,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MonitoringConfig {
pub metrics_interval_ms: u64,
pub alert_thresholds: AlertThresholds,
pub enable_tracing: bool,
pub metrics_retention_hours: u64,
}
impl Default for MonitoringConfig {
fn default() -> Self {
Self {
metrics_interval_ms: 1000,
alert_thresholds: AlertThresholds::default(),
enable_tracing: false,
metrics_retention_hours: 24,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertThresholds {
pub max_processing_latency_ms: u64,
pub max_queue_depth: usize,
pub max_error_rate: f64,
pub max_memory_usage_mb: f64,
pub min_throughput_ups: f64,
}
impl Default for AlertThresholds {
fn default() -> Self {
Self {
max_processing_latency_ms: 1000,
max_queue_depth: 10000,
max_error_rate: 0.05,
max_memory_usage_mb: 1024.0,
min_throughput_ups: 100.0,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VersionControlConfig {
pub enable_versioning: bool,
pub max_versions: usize,
pub compression_threshold: usize,
pub enable_incremental: bool,
}
impl Default for VersionControlConfig {
fn default() -> Self {
Self {
enable_versioning: true,
max_versions: 10,
compression_threshold: 1000,
enable_incremental: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityAssuranceConfig {
pub enable_quality_checks: bool,
pub quality_threshold: f64,
pub enable_anomaly_detection: bool,
pub anomaly_sensitivity: f64,
}
impl Default for QualityAssuranceConfig {
fn default() -> Self {
Self {
enable_quality_checks: true,
quality_threshold: 0.8,
enable_anomaly_detection: true,
anomaly_sensitivity: 0.7,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AutoScalingConfig {
pub enable_autoscaling: bool,
pub min_workers: usize,
pub max_workers: usize,
pub scale_up_cpu_threshold: f64,
pub scale_down_cpu_threshold: f64,
pub scale_up_memory_threshold: f64,
pub scale_up_queue_threshold: usize,
pub scaling_cooldown_seconds: u64,
}
impl Default for AutoScalingConfig {
fn default() -> Self {
Self {
enable_autoscaling: true,
min_workers: 2,
max_workers: 20,
scale_up_cpu_threshold: 0.8,
scale_down_cpu_threshold: 0.3,
scale_up_memory_threshold: 0.8,
scale_up_queue_threshold: 1000,
scaling_cooldown_seconds: 300,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompressionConfig {
pub enable_compression: bool,
pub compression_method: CompressionMethod,
pub compression_level: u8,
pub compression_threshold: usize,
}
impl Default for CompressionConfig {
fn default() -> Self {
Self {
enable_compression: true,
compression_method: CompressionMethod::Quantization,
compression_level: 6,
compression_threshold: 100,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum CompressionMethod {
ProductQuantization,
ScalarQuantization,
Quantization,
PCA,
Dictionary,
}