use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CloudAnalyticsConfig {
pub enabled: bool,
pub data_collection: DataCollectionConfig,
pub analysis_engines: Vec<AnalysisEngine>,
pub reporting: ReportingConfig,
pub anomaly_detection: AnomalyDetectionConfig,
pub dashboards: DashboardConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataCollectionConfig {
pub frequency: Duration,
pub sources: Vec<DataSource>,
pub retention: DataRetentionConfig,
pub quality: DataQualityConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DataSource {
Metrics,
Logs,
Events,
Traces,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataRetentionConfig {
pub raw_data: Duration,
pub aggregated_data: Duration,
pub archive: ArchivePolicy,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArchivePolicy {
pub enabled: bool,
pub archive_after: Duration,
pub compression: CompressionSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompressionSettings {
pub algorithm: CompressionAlgorithm,
pub level: u8,
pub block_size: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompressionAlgorithm {
Gzip,
Lz4,
Zstd,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataQualityConfig {
pub enabled: bool,
pub rules: Vec<QualityRule>,
pub validation_frequency: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityRule {
pub name: String,
pub rule_type: QualityRuleType,
pub parameters: std::collections::HashMap<String, String>,
pub failure_actions: Vec<QualityFailureAction>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum QualityRuleType {
Completeness,
Accuracy,
Consistency,
Timeliness,
Validity,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum QualityFailureAction {
Alert,
Quarantine,
Discard,
Repair,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalysisEngine {
pub name: String,
pub engine_type: AnalysisEngineType,
pub config: EngineConfig,
pub analyses: Vec<AnalysisType>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AnalysisEngineType {
Statistical,
MachineLearning,
StreamProcessing,
BatchProcessing,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EngineConfig {
pub parameters: std::collections::HashMap<String, String>,
pub resources: ResourceAllocation,
pub performance: PerformanceSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceAllocation {
pub cpu_cores: u32,
pub memory_mb: u32,
pub disk_gb: u32,
pub gpu_units: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceSettings {
pub parallelism: u32,
pub batch_size: usize,
pub timeout: Duration,
pub cache: CacheSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CacheSettings {
pub enabled: bool,
pub size_mb: u32,
pub ttl: Duration,
pub policy: CachePolicy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CachePolicy {
LRU,
LFU,
FIFO,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AnalysisType {
TrendAnalysis,
SeasonalAnalysis,
AnomalyDetection,
CorrelationAnalysis,
PredictiveAnalysis,
RootCauseAnalysis,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ReportingConfig {
pub enabled: bool,
pub schedules: Vec<ReportSchedule>,
pub templates: Vec<ReportTemplate>,
pub distribution: DistributionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportSchedule {
pub name: String,
pub template: String,
pub frequency: ReportFrequency,
pub recipients: Vec<String>,
pub filters: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportFrequency {
Hourly,
Daily,
Weekly,
Monthly,
Quarterly,
Custom(Duration),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportTemplate {
pub name: String,
pub template_type: ReportTemplateType,
pub sections: Vec<ReportSection>,
pub formatting: ReportFormatting,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportTemplateType {
Executive,
Technical,
Operational,
Compliance,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportSection {
pub name: String,
pub section_type: ReportSectionType,
pub queries: Vec<String>,
pub visualizations: Vec<VisualizationType>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportSectionType {
Summary,
Metrics,
Trends,
Alerts,
Recommendations,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VisualizationType {
Table,
LineChart,
BarChart,
PieChart,
Heatmap,
Gauge,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportFormatting {
pub format: OutputFormat,
pub styling: StylingOptions,
pub layout: LayoutOptions,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum OutputFormat {
PDF,
HTML,
Excel,
CSV,
JSON,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StylingOptions {
pub theme: String,
pub colors: std::collections::HashMap<String, String>,
pub fonts: FontSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FontSettings {
pub primary: String,
pub secondary: String,
pub sizes: std::collections::HashMap<String, u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayoutOptions {
pub orientation: PageOrientation,
pub margins: Margins,
pub header_footer: HeaderFooterSettings,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PageOrientation {
Portrait,
Landscape,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Margins {
pub top: u32,
pub bottom: u32,
pub left: u32,
pub right: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HeaderFooterSettings {
pub header: bool,
pub footer: bool,
pub header_content: String,
pub footer_content: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DistributionConfig {
pub channels: Vec<DistributionChannel>,
pub access_control: AccessControlConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DistributionChannel {
Email,
S3,
SharePoint,
Slack,
Teams,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AccessControlConfig {
pub enabled: bool,
pub permissions: Vec<Permission>,
pub roles: Vec<Role>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Permission {
pub resource: String,
pub actions: Vec<Action>,
pub conditions: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Action {
Read,
Write,
Execute,
Delete,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Role {
pub name: String,
pub permissions: Vec<String>,
pub users: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnomalyDetectionConfig {
pub enabled: bool,
pub algorithms: Vec<AnomalyAlgorithm>,
pub sensitivity: SensitivitySettings,
pub notifications: AnomalyNotificationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AnomalyAlgorithm {
Statistical,
IsolationForest,
OneClassSVM,
AutoEncoder,
LSTM,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SensitivitySettings {
pub threshold: f64,
pub confidence: f64,
pub min_severity: AnomalySeverity,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Serialize, Deserialize)]
pub enum AnomalySeverity {
Critical,
High,
Medium,
Low,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnomalyNotificationConfig {
pub channels: Vec<super::alerting::NotificationChannel>,
pub recipients: Vec<String>,
pub frequency_limits: NotificationFrequencyLimits,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NotificationFrequencyLimits {
pub max_per_hour: u32,
pub max_per_day: u32,
pub cooldown: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DashboardConfig {
pub enabled: bool,
pub dashboards: Vec<Dashboard>,
pub refresh: RefreshSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Dashboard {
pub name: String,
pub dashboard_type: DashboardType,
pub widgets: Vec<Widget>,
pub layout: DashboardLayout,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DashboardType {
Overview,
Detailed,
RealTime,
Historical,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Widget {
pub name: String,
pub widget_type: WidgetType,
pub data_source: String,
pub config: WidgetConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WidgetType {
Metric,
Chart,
Table,
Alert,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WidgetConfig {
pub query: String,
pub visualization: VisualizationSettings,
pub refresh_rate: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VisualizationSettings {
pub chart_type: VisualizationType,
pub colors: Vec<String>,
pub axes: AxesSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AxesSettings {
pub x_label: String,
pub y_label: String,
pub ranges: std::collections::HashMap<String, (f64, f64)>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DashboardLayout {
pub columns: u32,
pub rows: u32,
pub positions: std::collections::HashMap<String, (u32, u32, u32, u32)>, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RefreshSettings {
pub auto_refresh: bool,
pub default_rate: Duration,
pub min_rate: Duration,
}
impl Default for CloudAnalyticsConfig {
fn default() -> Self {
Self {
enabled: true,
data_collection: DataCollectionConfig::default(),
analysis_engines: vec![],
reporting: ReportingConfig::default(),
anomaly_detection: AnomalyDetectionConfig::default(),
dashboards: DashboardConfig::default(),
}
}
}
impl Default for DataCollectionConfig {
fn default() -> Self {
Self {
frequency: Duration::from_secs(60),
sources: vec![DataSource::Metrics, DataSource::Logs],
retention: DataRetentionConfig::default(),
quality: DataQualityConfig::default(),
}
}
}
impl Default for DataRetentionConfig {
fn default() -> Self {
Self {
raw_data: Duration::from_secs(86400 * 7), aggregated_data: Duration::from_secs(86400 * 90), archive: ArchivePolicy::default(),
}
}
}
impl Default for ArchivePolicy {
fn default() -> Self {
Self {
enabled: false,
archive_after: Duration::from_secs(86400 * 30), compression: CompressionSettings::default(),
}
}
}
impl Default for CompressionSettings {
fn default() -> Self {
Self {
algorithm: CompressionAlgorithm::Gzip,
level: 6,
block_size: 65536,
}
}
}
impl Default for DataQualityConfig {
fn default() -> Self {
Self {
enabled: false,
rules: vec![],
validation_frequency: Duration::from_secs(3600), }
}
}
impl Default for DistributionConfig {
fn default() -> Self {
Self {
channels: vec![DistributionChannel::Email],
access_control: AccessControlConfig::default(),
}
}
}
impl Default for AnomalyDetectionConfig {
fn default() -> Self {
Self {
enabled: false,
algorithms: vec![AnomalyAlgorithm::Statistical],
sensitivity: SensitivitySettings::default(),
notifications: AnomalyNotificationConfig::default(),
}
}
}
impl Default for SensitivitySettings {
fn default() -> Self {
Self {
threshold: 0.95,
confidence: 0.99,
min_severity: AnomalySeverity::Medium,
}
}
}
impl Default for AnomalyNotificationConfig {
fn default() -> Self {
Self {
channels: vec![super::alerting::NotificationChannel::Email],
recipients: vec![],
frequency_limits: NotificationFrequencyLimits::default(),
}
}
}
impl Default for NotificationFrequencyLimits {
fn default() -> Self {
Self {
max_per_hour: 10,
max_per_day: 50,
cooldown: Duration::from_secs(300), }
}
}
impl Default for RefreshSettings {
fn default() -> Self {
Self {
auto_refresh: true,
default_rate: Duration::from_secs(30),
min_rate: Duration::from_secs(5),
}
}
}