1use serde::{Deserialize, Serialize};
4use std::time::Duration;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CloudAnalyticsConfig {
9 pub enabled: bool,
11 pub data_collection: DataCollectionConfig,
13 pub analysis_engines: Vec<AnalysisEngine>,
15 pub reporting: ReportingConfig,
17 pub anomaly_detection: AnomalyDetectionConfig,
19 pub dashboards: DashboardConfig,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct DataCollectionConfig {
26 pub frequency: Duration,
28 pub sources: Vec<DataSource>,
30 pub retention: DataRetentionConfig,
32 pub quality: DataQualityConfig,
34}
35
36#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38pub enum DataSource {
39 Metrics,
40 Logs,
41 Events,
42 Traces,
43 Custom(String),
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct DataRetentionConfig {
49 pub raw_data: Duration,
51 pub aggregated_data: Duration,
53 pub archive: ArchivePolicy,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct ArchivePolicy {
60 pub enabled: bool,
62 pub archive_after: Duration,
64 pub compression: CompressionSettings,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct CompressionSettings {
71 pub algorithm: CompressionAlgorithm,
73 pub level: u8,
75 pub block_size: usize,
77}
78
79#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
81pub enum CompressionAlgorithm {
82 Gzip,
83 Lz4,
84 Zstd,
85 Custom(String),
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct DataQualityConfig {
91 pub enabled: bool,
93 pub rules: Vec<QualityRule>,
95 pub validation_frequency: Duration,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct QualityRule {
102 pub name: String,
104 pub rule_type: QualityRuleType,
106 pub parameters: std::collections::HashMap<String, String>,
108 pub failure_actions: Vec<QualityFailureAction>,
110}
111
112#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
114pub enum QualityRuleType {
115 Completeness,
116 Accuracy,
117 Consistency,
118 Timeliness,
119 Validity,
120 Custom(String),
121}
122
123#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
125pub enum QualityFailureAction {
126 Alert,
127 Quarantine,
128 Discard,
129 Repair,
130 Custom(String),
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct AnalysisEngine {
136 pub name: String,
138 pub engine_type: AnalysisEngineType,
140 pub config: EngineConfig,
142 pub analyses: Vec<AnalysisType>,
144}
145
146#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
148pub enum AnalysisEngineType {
149 Statistical,
150 MachineLearning,
151 StreamProcessing,
152 BatchProcessing,
153 Custom(String),
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct EngineConfig {
159 pub parameters: std::collections::HashMap<String, String>,
161 pub resources: ResourceAllocation,
163 pub performance: PerformanceSettings,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
169pub struct ResourceAllocation {
170 pub cpu_cores: u32,
172 pub memory_mb: u32,
174 pub disk_gb: u32,
176 pub gpu_units: Option<u32>,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct PerformanceSettings {
183 pub parallelism: u32,
185 pub batch_size: usize,
187 pub timeout: Duration,
189 pub cache: CacheSettings,
191}
192
193#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct CacheSettings {
196 pub enabled: bool,
198 pub size_mb: u32,
200 pub ttl: Duration,
202 pub policy: CachePolicy,
204}
205
206#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
208pub enum CachePolicy {
209 LRU,
210 LFU,
211 FIFO,
212 Custom(String),
213}
214
215#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
217pub enum AnalysisType {
218 TrendAnalysis,
219 SeasonalAnalysis,
220 AnomalyDetection,
221 CorrelationAnalysis,
222 PredictiveAnalysis,
223 RootCauseAnalysis,
224 Custom(String),
225}
226
227#[derive(Debug, Clone, Serialize, Deserialize, Default)]
229pub struct ReportingConfig {
230 pub enabled: bool,
232 pub schedules: Vec<ReportSchedule>,
234 pub templates: Vec<ReportTemplate>,
236 pub distribution: DistributionConfig,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct ReportSchedule {
243 pub name: String,
245 pub template: String,
247 pub frequency: ReportFrequency,
249 pub recipients: Vec<String>,
251 pub filters: std::collections::HashMap<String, String>,
253}
254
255#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
257pub enum ReportFrequency {
258 Hourly,
259 Daily,
260 Weekly,
261 Monthly,
262 Quarterly,
263 Custom(Duration),
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
268pub struct ReportTemplate {
269 pub name: String,
271 pub template_type: ReportTemplateType,
273 pub sections: Vec<ReportSection>,
275 pub formatting: ReportFormatting,
277}
278
279#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
281pub enum ReportTemplateType {
282 Executive,
283 Technical,
284 Operational,
285 Compliance,
286 Custom(String),
287}
288
289#[derive(Debug, Clone, Serialize, Deserialize)]
291pub struct ReportSection {
292 pub name: String,
294 pub section_type: ReportSectionType,
296 pub queries: Vec<String>,
298 pub visualizations: Vec<VisualizationType>,
300}
301
302#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
304pub enum ReportSectionType {
305 Summary,
306 Metrics,
307 Trends,
308 Alerts,
309 Recommendations,
310 Custom(String),
311}
312
313#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
315pub enum VisualizationType {
316 Table,
317 LineChart,
318 BarChart,
319 PieChart,
320 Heatmap,
321 Gauge,
322 Custom(String),
323}
324
325#[derive(Debug, Clone, Serialize, Deserialize)]
327pub struct ReportFormatting {
328 pub format: OutputFormat,
330 pub styling: StylingOptions,
332 pub layout: LayoutOptions,
334}
335
336#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
338pub enum OutputFormat {
339 PDF,
340 HTML,
341 Excel,
342 CSV,
343 JSON,
344 Custom(String),
345}
346
347#[derive(Debug, Clone, Serialize, Deserialize)]
349pub struct StylingOptions {
350 pub theme: String,
352 pub colors: std::collections::HashMap<String, String>,
354 pub fonts: FontSettings,
356}
357
358#[derive(Debug, Clone, Serialize, Deserialize)]
360pub struct FontSettings {
361 pub primary: String,
363 pub secondary: String,
365 pub sizes: std::collections::HashMap<String, u32>,
367}
368
369#[derive(Debug, Clone, Serialize, Deserialize)]
371pub struct LayoutOptions {
372 pub orientation: PageOrientation,
374 pub margins: Margins,
376 pub header_footer: HeaderFooterSettings,
378}
379
380#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
382pub enum PageOrientation {
383 Portrait,
384 Landscape,
385}
386
387#[derive(Debug, Clone, Serialize, Deserialize)]
389pub struct Margins {
390 pub top: u32,
392 pub bottom: u32,
394 pub left: u32,
396 pub right: u32,
398}
399
400#[derive(Debug, Clone, Serialize, Deserialize)]
402pub struct HeaderFooterSettings {
403 pub header: bool,
405 pub footer: bool,
407 pub header_content: String,
409 pub footer_content: String,
411}
412
413#[derive(Debug, Clone, Serialize, Deserialize)]
415pub struct DistributionConfig {
416 pub channels: Vec<DistributionChannel>,
418 pub access_control: AccessControlConfig,
420}
421
422#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
424pub enum DistributionChannel {
425 Email,
426 S3,
427 SharePoint,
428 Slack,
429 Teams,
430 Custom(String),
431}
432
433#[derive(Debug, Clone, Serialize, Deserialize, Default)]
435pub struct AccessControlConfig {
436 pub enabled: bool,
438 pub permissions: Vec<Permission>,
440 pub roles: Vec<Role>,
442}
443
444#[derive(Debug, Clone, Serialize, Deserialize)]
446pub struct Permission {
447 pub resource: String,
449 pub actions: Vec<Action>,
451 pub conditions: Vec<String>,
453}
454
455#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
457pub enum Action {
458 Read,
459 Write,
460 Execute,
461 Delete,
462 Custom(String),
463}
464
465#[derive(Debug, Clone, Serialize, Deserialize)]
467pub struct Role {
468 pub name: String,
470 pub permissions: Vec<String>,
472 pub users: Vec<String>,
474}
475
476#[derive(Debug, Clone, Serialize, Deserialize)]
478pub struct AnomalyDetectionConfig {
479 pub enabled: bool,
481 pub algorithms: Vec<AnomalyAlgorithm>,
483 pub sensitivity: SensitivitySettings,
485 pub notifications: AnomalyNotificationConfig,
487}
488
489#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
491pub enum AnomalyAlgorithm {
492 Statistical,
493 IsolationForest,
494 OneClassSVM,
495 AutoEncoder,
496 LSTM,
497 Custom(String),
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
502pub struct SensitivitySettings {
503 pub threshold: f64,
505 pub confidence: f64,
507 pub min_severity: AnomalySeverity,
509}
510
511#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Serialize, Deserialize)]
513pub enum AnomalySeverity {
514 Critical,
515 High,
516 Medium,
517 Low,
518}
519
520#[derive(Debug, Clone, Serialize, Deserialize)]
522pub struct AnomalyNotificationConfig {
523 pub channels: Vec<super::alerting::NotificationChannel>,
525 pub recipients: Vec<String>,
527 pub frequency_limits: NotificationFrequencyLimits,
529}
530
531#[derive(Debug, Clone, Serialize, Deserialize)]
533pub struct NotificationFrequencyLimits {
534 pub max_per_hour: u32,
536 pub max_per_day: u32,
538 pub cooldown: Duration,
540}
541
542#[derive(Debug, Clone, Serialize, Deserialize, Default)]
544pub struct DashboardConfig {
545 pub enabled: bool,
547 pub dashboards: Vec<Dashboard>,
549 pub refresh: RefreshSettings,
551}
552
553#[derive(Debug, Clone, Serialize, Deserialize)]
555pub struct Dashboard {
556 pub name: String,
558 pub dashboard_type: DashboardType,
560 pub widgets: Vec<Widget>,
562 pub layout: DashboardLayout,
564}
565
566#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
568pub enum DashboardType {
569 Overview,
570 Detailed,
571 RealTime,
572 Historical,
573 Custom(String),
574}
575
576#[derive(Debug, Clone, Serialize, Deserialize)]
578pub struct Widget {
579 pub name: String,
581 pub widget_type: WidgetType,
583 pub data_source: String,
585 pub config: WidgetConfig,
587}
588
589#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
591pub enum WidgetType {
592 Metric,
593 Chart,
594 Table,
595 Alert,
596 Custom(String),
597}
598
599#[derive(Debug, Clone, Serialize, Deserialize)]
601pub struct WidgetConfig {
602 pub query: String,
604 pub visualization: VisualizationSettings,
606 pub refresh_rate: Duration,
608}
609
610#[derive(Debug, Clone, Serialize, Deserialize)]
612pub struct VisualizationSettings {
613 pub chart_type: VisualizationType,
615 pub colors: Vec<String>,
617 pub axes: AxesSettings,
619}
620
621#[derive(Debug, Clone, Serialize, Deserialize)]
623pub struct AxesSettings {
624 pub x_label: String,
626 pub y_label: String,
628 pub ranges: std::collections::HashMap<String, (f64, f64)>,
630}
631
632#[derive(Debug, Clone, Serialize, Deserialize)]
634pub struct DashboardLayout {
635 pub columns: u32,
637 pub rows: u32,
639 pub positions: std::collections::HashMap<String, (u32, u32, u32, u32)>, }
642
643#[derive(Debug, Clone, Serialize, Deserialize)]
645pub struct RefreshSettings {
646 pub auto_refresh: bool,
648 pub default_rate: Duration,
650 pub min_rate: Duration,
652}
653
654impl Default for CloudAnalyticsConfig {
655 fn default() -> Self {
656 Self {
657 enabled: true,
658 data_collection: DataCollectionConfig::default(),
659 analysis_engines: vec![],
660 reporting: ReportingConfig::default(),
661 anomaly_detection: AnomalyDetectionConfig::default(),
662 dashboards: DashboardConfig::default(),
663 }
664 }
665}
666
667impl Default for DataCollectionConfig {
668 fn default() -> Self {
669 Self {
670 frequency: Duration::from_secs(60),
671 sources: vec![DataSource::Metrics, DataSource::Logs],
672 retention: DataRetentionConfig::default(),
673 quality: DataQualityConfig::default(),
674 }
675 }
676}
677
678impl Default for DataRetentionConfig {
679 fn default() -> Self {
680 Self {
681 raw_data: Duration::from_secs(86400 * 7), aggregated_data: Duration::from_secs(86400 * 90), archive: ArchivePolicy::default(),
684 }
685 }
686}
687
688impl Default for ArchivePolicy {
689 fn default() -> Self {
690 Self {
691 enabled: false,
692 archive_after: Duration::from_secs(86400 * 30), compression: CompressionSettings::default(),
694 }
695 }
696}
697
698impl Default for CompressionSettings {
699 fn default() -> Self {
700 Self {
701 algorithm: CompressionAlgorithm::Gzip,
702 level: 6,
703 block_size: 65536,
704 }
705 }
706}
707
708impl Default for DataQualityConfig {
709 fn default() -> Self {
710 Self {
711 enabled: false,
712 rules: vec![],
713 validation_frequency: Duration::from_secs(3600), }
715 }
716}
717
718impl Default for DistributionConfig {
719 fn default() -> Self {
720 Self {
721 channels: vec![DistributionChannel::Email],
722 access_control: AccessControlConfig::default(),
723 }
724 }
725}
726
727impl Default for AnomalyDetectionConfig {
728 fn default() -> Self {
729 Self {
730 enabled: false,
731 algorithms: vec![AnomalyAlgorithm::Statistical],
732 sensitivity: SensitivitySettings::default(),
733 notifications: AnomalyNotificationConfig::default(),
734 }
735 }
736}
737
738impl Default for SensitivitySettings {
739 fn default() -> Self {
740 Self {
741 threshold: 0.95,
742 confidence: 0.99,
743 min_severity: AnomalySeverity::Medium,
744 }
745 }
746}
747
748impl Default for AnomalyNotificationConfig {
749 fn default() -> Self {
750 Self {
751 channels: vec![super::alerting::NotificationChannel::Email],
752 recipients: vec![],
753 frequency_limits: NotificationFrequencyLimits::default(),
754 }
755 }
756}
757
758impl Default for NotificationFrequencyLimits {
759 fn default() -> Self {
760 Self {
761 max_per_hour: 10,
762 max_per_day: 50,
763 cooldown: Duration::from_secs(300), }
765 }
766}
767
768impl Default for RefreshSettings {
769 fn default() -> Self {
770 Self {
771 auto_refresh: true,
772 default_rate: Duration::from_secs(30),
773 min_rate: Duration::from_secs(5),
774 }
775 }
776}