use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
use super::analyzers::*;
use super::collectors::*;
use super::metrics::*;
pub struct SessionManager {
pub active_sessions: HashMap<String, ProfilingSession>,
pub session_config: SessionConfig,
pub session_storage: SessionStorage,
pub session_analytics: SessionAnalytics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProfilingSession {
pub id: String,
pub start_time: SystemTime,
pub end_time: Option<SystemTime>,
pub status: SessionStatus,
pub collected_data: SessionData,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SessionStatus {
Starting,
Running,
Paused,
Stopping,
Completed,
Failed { error: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionData {
pub metrics: Vec<PerformanceMetric>,
pub gate_profiles: HashMap<String, GateProfile>,
pub memory_snapshots: Vec<MemorySnapshot>,
pub resource_data: Vec<ResourceUsage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionConfig {
pub default_duration: Duration,
pub collection_interval: Duration,
pub max_concurrent_sessions: usize,
pub session_timeout: Duration,
}
#[derive(Debug, Clone)]
pub struct SessionStorage {
pub backend: StorageBackend,
pub config: StorageConfig,
pub serialization: SerializationConfig,
}
#[derive(Debug, Clone)]
pub enum StorageBackend {
InMemory,
FileSystem { path: String },
Database { connection_string: String },
Cloud {
provider: String,
config: HashMap<String, String>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StorageConfig {
pub enable_compression: bool,
pub enable_encryption: bool,
pub retention_policy: DataRetentionPolicy,
pub backup_config: Option<BackupConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BackupConfig {
pub frequency: Duration,
pub location: String,
pub retention: Duration,
pub incremental: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SerializationConfig {
pub format: SerializationFormat,
pub schema_validation: bool,
pub version_compatibility: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SerializationFormat {
JSON,
Binary,
ProtocolBuffers,
MessagePack,
}
#[derive(Debug, Clone)]
pub struct SessionAnalytics {
pub config: AnalyticsConfig,
pub statistics: SessionStatistics,
pub insights: Vec<PerformanceInsight>,
pub trend_analysis: SessionTrendAnalysis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalyticsConfig {
pub enable_realtime: bool,
pub depth: AnalysisDepth,
pub reporting_frequency: Duration,
pub custom_metrics: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionStatistics {
pub total_sessions: usize,
pub avg_duration: Duration,
pub success_rate: f64,
pub collection_efficiency: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceInsight {
pub insight_type: InsightType,
pub description: String,
pub confidence: f64,
pub impact: f64,
pub actions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum InsightType {
OptimizationOpportunity,
ResourceUtilization,
ScalingRecommendation,
ConfigurationImprovement,
ArchitectureRecommendation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionTrendAnalysis {
pub performance_trends: HashMap<String, TrendDirection>,
pub resource_trends: HashMap<String, TrendDirection>,
pub quality_trends: HashMap<String, TrendDirection>,
pub prediction_trends: HashMap<String, f64>,
}