quantrs2_device/cloud/monitoring/
analytics.rs

1//! Analytics and reporting configuration.
2
3use serde::{Deserialize, Serialize};
4use std::time::Duration;
5
6/// Cloud analytics configuration
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CloudAnalyticsConfig {
9    /// Enable analytics
10    pub enabled: bool,
11    /// Data collection
12    pub data_collection: DataCollectionConfig,
13    /// Analysis engines
14    pub analysis_engines: Vec<AnalysisEngine>,
15    /// Reporting
16    pub reporting: ReportingConfig,
17    /// Anomaly detection
18    pub anomaly_detection: AnomalyDetectionConfig,
19    /// Dashboards
20    pub dashboards: DashboardConfig,
21}
22
23/// Data collection configuration
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct DataCollectionConfig {
26    /// Collection frequency
27    pub frequency: Duration,
28    /// Data sources
29    pub sources: Vec<DataSource>,
30    /// Data retention
31    pub retention: DataRetentionConfig,
32    /// Data quality
33    pub quality: DataQualityConfig,
34}
35
36/// Data sources
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38pub enum DataSource {
39    Metrics,
40    Logs,
41    Events,
42    Traces,
43    Custom(String),
44}
45
46/// Data retention configuration
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct DataRetentionConfig {
49    /// Raw data retention
50    pub raw_data: Duration,
51    /// Aggregated data retention
52    pub aggregated_data: Duration,
53    /// Archive policy
54    pub archive: ArchivePolicy,
55}
56
57/// Archive policy
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct ArchivePolicy {
60    /// Enable archiving
61    pub enabled: bool,
62    /// Archive after
63    pub archive_after: Duration,
64    /// Compression settings
65    pub compression: CompressionSettings,
66}
67
68/// Compression settings
69#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct CompressionSettings {
71    /// Compression algorithm
72    pub algorithm: CompressionAlgorithm,
73    /// Compression level
74    pub level: u8,
75    /// Block size
76    pub block_size: usize,
77}
78
79/// Compression algorithms
80#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
81pub enum CompressionAlgorithm {
82    Gzip,
83    Lz4,
84    Zstd,
85    Custom(String),
86}
87
88/// Data quality configuration
89#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct DataQualityConfig {
91    /// Enable quality checks
92    pub enabled: bool,
93    /// Quality rules
94    pub rules: Vec<QualityRule>,
95    /// Validation frequency
96    pub validation_frequency: Duration,
97}
98
99/// Quality rule
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct QualityRule {
102    /// Rule name
103    pub name: String,
104    /// Rule type
105    pub rule_type: QualityRuleType,
106    /// Parameters
107    pub parameters: std::collections::HashMap<String, String>,
108    /// Actions on failure
109    pub failure_actions: Vec<QualityFailureAction>,
110}
111
112/// Quality rule types
113#[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/// Quality failure actions
124#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
125pub enum QualityFailureAction {
126    Alert,
127    Quarantine,
128    Discard,
129    Repair,
130    Custom(String),
131}
132
133/// Analysis engine
134#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct AnalysisEngine {
136    /// Engine name
137    pub name: String,
138    /// Engine type
139    pub engine_type: AnalysisEngineType,
140    /// Configuration
141    pub config: EngineConfig,
142    /// Enabled analyses
143    pub analyses: Vec<AnalysisType>,
144}
145
146/// Analysis engine types
147#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
148pub enum AnalysisEngineType {
149    Statistical,
150    MachineLearning,
151    StreamProcessing,
152    BatchProcessing,
153    Custom(String),
154}
155
156/// Engine configuration
157#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct EngineConfig {
159    /// Engine parameters
160    pub parameters: std::collections::HashMap<String, String>,
161    /// Resource allocation
162    pub resources: ResourceAllocation,
163    /// Performance settings
164    pub performance: PerformanceSettings,
165}
166
167/// Resource allocation
168#[derive(Debug, Clone, Serialize, Deserialize)]
169pub struct ResourceAllocation {
170    /// CPU cores
171    pub cpu_cores: u32,
172    /// Memory (MB)
173    pub memory_mb: u32,
174    /// Disk space (GB)
175    pub disk_gb: u32,
176    /// GPU units
177    pub gpu_units: Option<u32>,
178}
179
180/// Performance settings
181#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct PerformanceSettings {
183    /// Parallelism level
184    pub parallelism: u32,
185    /// Batch size
186    pub batch_size: usize,
187    /// Timeout
188    pub timeout: Duration,
189    /// Cache settings
190    pub cache: CacheSettings,
191}
192
193/// Cache settings
194#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct CacheSettings {
196    /// Enable caching
197    pub enabled: bool,
198    /// Cache size (MB)
199    pub size_mb: u32,
200    /// Cache TTL
201    pub ttl: Duration,
202    /// Cache policy
203    pub policy: CachePolicy,
204}
205
206/// Cache policies
207#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
208pub enum CachePolicy {
209    LRU,
210    LFU,
211    FIFO,
212    Custom(String),
213}
214
215/// Analysis types
216#[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/// Reporting configuration
228#[derive(Debug, Clone, Serialize, Deserialize, Default)]
229pub struct ReportingConfig {
230    /// Enable automated reporting
231    pub enabled: bool,
232    /// Report schedules
233    pub schedules: Vec<ReportSchedule>,
234    /// Report templates
235    pub templates: Vec<ReportTemplate>,
236    /// Distribution
237    pub distribution: DistributionConfig,
238}
239
240/// Report schedule
241#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct ReportSchedule {
243    /// Schedule name
244    pub name: String,
245    /// Report template
246    pub template: String,
247    /// Frequency
248    pub frequency: ReportFrequency,
249    /// Recipients
250    pub recipients: Vec<String>,
251    /// Filters
252    pub filters: std::collections::HashMap<String, String>,
253}
254
255/// Report frequency
256#[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/// Report template
267#[derive(Debug, Clone, Serialize, Deserialize)]
268pub struct ReportTemplate {
269    /// Template name
270    pub name: String,
271    /// Template type
272    pub template_type: ReportTemplateType,
273    /// Sections
274    pub sections: Vec<ReportSection>,
275    /// Formatting
276    pub formatting: ReportFormatting,
277}
278
279/// Report template types
280#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
281pub enum ReportTemplateType {
282    Executive,
283    Technical,
284    Operational,
285    Compliance,
286    Custom(String),
287}
288
289/// Report section
290#[derive(Debug, Clone, Serialize, Deserialize)]
291pub struct ReportSection {
292    /// Section name
293    pub name: String,
294    /// Section type
295    pub section_type: ReportSectionType,
296    /// Data queries
297    pub queries: Vec<String>,
298    /// Visualizations
299    pub visualizations: Vec<VisualizationType>,
300}
301
302/// Report section types
303#[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/// Visualization types
314#[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/// Report formatting
326#[derive(Debug, Clone, Serialize, Deserialize)]
327pub struct ReportFormatting {
328    /// Output format
329    pub format: OutputFormat,
330    /// Styling
331    pub styling: StylingOptions,
332    /// Layout
333    pub layout: LayoutOptions,
334}
335
336/// Output formats
337#[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/// Styling options
348#[derive(Debug, Clone, Serialize, Deserialize)]
349pub struct StylingOptions {
350    /// Theme
351    pub theme: String,
352    /// Colors
353    pub colors: std::collections::HashMap<String, String>,
354    /// Fonts
355    pub fonts: FontSettings,
356}
357
358/// Font settings
359#[derive(Debug, Clone, Serialize, Deserialize)]
360pub struct FontSettings {
361    /// Primary font
362    pub primary: String,
363    /// Secondary font
364    pub secondary: String,
365    /// Font sizes
366    pub sizes: std::collections::HashMap<String, u32>,
367}
368
369/// Layout options
370#[derive(Debug, Clone, Serialize, Deserialize)]
371pub struct LayoutOptions {
372    /// Page orientation
373    pub orientation: PageOrientation,
374    /// Margins
375    pub margins: Margins,
376    /// Header/footer
377    pub header_footer: HeaderFooterSettings,
378}
379
380/// Page orientation
381#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
382pub enum PageOrientation {
383    Portrait,
384    Landscape,
385}
386
387/// Margins
388#[derive(Debug, Clone, Serialize, Deserialize)]
389pub struct Margins {
390    /// Top margin
391    pub top: u32,
392    /// Bottom margin
393    pub bottom: u32,
394    /// Left margin
395    pub left: u32,
396    /// Right margin
397    pub right: u32,
398}
399
400/// Header/footer settings
401#[derive(Debug, Clone, Serialize, Deserialize)]
402pub struct HeaderFooterSettings {
403    /// Include header
404    pub header: bool,
405    /// Include footer
406    pub footer: bool,
407    /// Header content
408    pub header_content: String,
409    /// Footer content
410    pub footer_content: String,
411}
412
413/// Distribution configuration
414#[derive(Debug, Clone, Serialize, Deserialize)]
415pub struct DistributionConfig {
416    /// Distribution channels
417    pub channels: Vec<DistributionChannel>,
418    /// Access control
419    pub access_control: AccessControlConfig,
420}
421
422/// Distribution channels
423#[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/// Access control configuration
434#[derive(Debug, Clone, Serialize, Deserialize, Default)]
435pub struct AccessControlConfig {
436    /// Enable access control
437    pub enabled: bool,
438    /// Permissions
439    pub permissions: Vec<Permission>,
440    /// Roles
441    pub roles: Vec<Role>,
442}
443
444/// Permission
445#[derive(Debug, Clone, Serialize, Deserialize)]
446pub struct Permission {
447    /// Resource
448    pub resource: String,
449    /// Actions
450    pub actions: Vec<Action>,
451    /// Conditions
452    pub conditions: Vec<String>,
453}
454
455/// Actions
456#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
457pub enum Action {
458    Read,
459    Write,
460    Execute,
461    Delete,
462    Custom(String),
463}
464
465/// Role
466#[derive(Debug, Clone, Serialize, Deserialize)]
467pub struct Role {
468    /// Role name
469    pub name: String,
470    /// Permissions
471    pub permissions: Vec<String>,
472    /// Users
473    pub users: Vec<String>,
474}
475
476/// Anomaly detection configuration
477#[derive(Debug, Clone, Serialize, Deserialize)]
478pub struct AnomalyDetectionConfig {
479    /// Enable anomaly detection
480    pub enabled: bool,
481    /// Detection algorithms
482    pub algorithms: Vec<AnomalyAlgorithm>,
483    /// Sensitivity settings
484    pub sensitivity: SensitivitySettings,
485    /// Notifications
486    pub notifications: AnomalyNotificationConfig,
487}
488
489/// Anomaly detection algorithms
490#[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/// Sensitivity settings
501#[derive(Debug, Clone, Serialize, Deserialize)]
502pub struct SensitivitySettings {
503    /// Detection threshold
504    pub threshold: f64,
505    /// Confidence level
506    pub confidence: f64,
507    /// Minimum severity
508    pub min_severity: AnomalySeverity,
509}
510
511/// Anomaly severity
512#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Serialize, Deserialize)]
513pub enum AnomalySeverity {
514    Critical,
515    High,
516    Medium,
517    Low,
518}
519
520/// Anomaly notification configuration
521#[derive(Debug, Clone, Serialize, Deserialize)]
522pub struct AnomalyNotificationConfig {
523    /// Notification channels
524    pub channels: Vec<super::alerting::NotificationChannel>,
525    /// Recipients
526    pub recipients: Vec<String>,
527    /// Frequency limits
528    pub frequency_limits: NotificationFrequencyLimits,
529}
530
531/// Notification frequency limits
532#[derive(Debug, Clone, Serialize, Deserialize)]
533pub struct NotificationFrequencyLimits {
534    /// Maximum notifications per hour
535    pub max_per_hour: u32,
536    /// Maximum notifications per day
537    pub max_per_day: u32,
538    /// Cooldown period
539    pub cooldown: Duration,
540}
541
542/// Dashboard configuration
543#[derive(Debug, Clone, Serialize, Deserialize, Default)]
544pub struct DashboardConfig {
545    /// Enable dashboards
546    pub enabled: bool,
547    /// Dashboard definitions
548    pub dashboards: Vec<Dashboard>,
549    /// Refresh settings
550    pub refresh: RefreshSettings,
551}
552
553/// Dashboard
554#[derive(Debug, Clone, Serialize, Deserialize)]
555pub struct Dashboard {
556    /// Dashboard name
557    pub name: String,
558    /// Dashboard type
559    pub dashboard_type: DashboardType,
560    /// Widgets
561    pub widgets: Vec<Widget>,
562    /// Layout
563    pub layout: DashboardLayout,
564}
565
566/// Dashboard type
567#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
568pub enum DashboardType {
569    Overview,
570    Detailed,
571    RealTime,
572    Historical,
573    Custom(String),
574}
575
576/// Widget
577#[derive(Debug, Clone, Serialize, Deserialize)]
578pub struct Widget {
579    /// Widget name
580    pub name: String,
581    /// Widget type
582    pub widget_type: WidgetType,
583    /// Data source
584    pub data_source: String,
585    /// Configuration
586    pub config: WidgetConfig,
587}
588
589/// Widget type
590#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
591pub enum WidgetType {
592    Metric,
593    Chart,
594    Table,
595    Alert,
596    Custom(String),
597}
598
599/// Widget configuration
600#[derive(Debug, Clone, Serialize, Deserialize)]
601pub struct WidgetConfig {
602    /// Query
603    pub query: String,
604    /// Visualization settings
605    pub visualization: VisualizationSettings,
606    /// Refresh rate
607    pub refresh_rate: Duration,
608}
609
610/// Visualization settings
611#[derive(Debug, Clone, Serialize, Deserialize)]
612pub struct VisualizationSettings {
613    /// Chart type
614    pub chart_type: VisualizationType,
615    /// Color scheme
616    pub colors: Vec<String>,
617    /// Axes settings
618    pub axes: AxesSettings,
619}
620
621/// Axes settings
622#[derive(Debug, Clone, Serialize, Deserialize)]
623pub struct AxesSettings {
624    /// X-axis label
625    pub x_label: String,
626    /// Y-axis label
627    pub y_label: String,
628    /// Axis ranges
629    pub ranges: std::collections::HashMap<String, (f64, f64)>,
630}
631
632/// Dashboard layout
633#[derive(Debug, Clone, Serialize, Deserialize)]
634pub struct DashboardLayout {
635    /// Grid columns
636    pub columns: u32,
637    /// Grid rows
638    pub rows: u32,
639    /// Widget positions
640    pub positions: std::collections::HashMap<String, (u32, u32, u32, u32)>, // (x, y, w, h)
641}
642
643/// Refresh settings
644#[derive(Debug, Clone, Serialize, Deserialize)]
645pub struct RefreshSettings {
646    /// Auto refresh
647    pub auto_refresh: bool,
648    /// Default refresh rate
649    pub default_rate: Duration,
650    /// Minimum refresh rate
651    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),         // 7 days
682            aggregated_data: Duration::from_secs(86400 * 90), // 90 days
683            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), // 30 days
693            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), // hourly
714        }
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), // 5 minutes
764        }
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}