use anyhow::{anyhow, Result};
use async_trait::async_trait;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::sync::Arc;
use tokio::sync::RwLock;
use uuid::Uuid;
#[derive(Debug, Clone)]
pub struct NetworkRule {
pub protocol: String,
pub port_range: (u16, u16),
pub source_cidr: String,
pub action: String,
}
#[derive(Debug, Clone)]
pub struct EndpointInfo {
pub deployment_id: String,
pub endpoint_url: String,
pub status: EndpointStatus,
pub instance_type: String,
pub instance_count: u32,
pub auto_scaling_enabled: bool,
pub creation_time: DateTime<Utc>,
pub last_modified_time: DateTime<Utc>,
pub model_data_url: Option<String>,
}
#[derive(Debug, Clone)]
pub struct GPUClusterConfig {
pub cluster_name: String,
pub node_type: String,
pub min_nodes: u32,
pub max_nodes: u32,
pub gpu_type: String,
pub gpu_count_per_node: u32,
pub storage_type: String,
pub storage_size_gb: u32,
pub networking: NetworkingConfig,
pub auto_scaling: bool,
}
#[allow(dead_code)]
pub struct AzureCognitiveServices {
subscription_key: String,
endpoint: String,
region: String,
}
impl AzureCognitiveServices {
pub fn new(subscription_key: String, endpoint: String, region: String) -> Self {
Self {
subscription_key,
endpoint,
region,
}
}
pub async fn generate_embeddings(
&self,
deployment_name: &str,
input_texts: &[String],
) -> Result<AzureEmbeddingResult> {
let embeddings = input_texts
.iter()
.enumerate()
.map(|(i, text)| {
let embedding: Vec<f32> = (0..1536)
.map(|j| (i as f32 * 0.01) + (j as f32 * 0.001) + (text.len() as f32 * 0.001))
.collect();
embedding
})
.collect();
Ok(AzureEmbeddingResult {
embeddings,
model: deployment_name.to_string(),
usage: TokenUsage {
prompt_tokens: input_texts
.iter()
.map(|t| t.split_whitespace().count() as u32)
.sum(),
total_tokens: input_texts
.iter()
.map(|t| t.split_whitespace().count() as u32)
.sum(),
},
})
}
pub async fn analyze_sentiment(&self, text: &str) -> Result<SentimentResult> {
let score = (text.len() % 100) as f32 / 100.0;
let sentiment = if score > 0.6 {
"positive"
} else if score < 0.4 {
"negative"
} else {
"neutral"
};
Ok(SentimentResult {
sentiment: sentiment.to_string(),
confidence_scores: SentimentScores {
positive: if sentiment == "positive" {
score
} else {
1.0 - score
},
neutral: if sentiment == "neutral" {
score
} else {
(1.0 - score) / 2.0
},
negative: if sentiment == "negative" {
score
} else {
1.0 - score
},
},
})
}
pub async fn extract_key_phrases(&self, text: &str) -> Result<Vec<String>> {
let words: Vec<&str> = text.split_whitespace().collect();
let key_phrases = words
.chunks(2)
.take(5)
.map(|chunk| chunk.join(" "))
.collect();
Ok(key_phrases)
}
pub async fn detect_language(&self, text: &str) -> Result<LanguageDetectionResult> {
let confidence = 0.95;
let language = if text.contains("the") || text.contains("and") {
"en"
} else if text.contains("le") || text.contains("et") {
"fr"
} else {
"en"
};
Ok(LanguageDetectionResult {
language: language.to_string(),
confidence,
is_translation_supported: true,
is_transliteration_supported: false,
})
}
}
#[derive(Debug, Clone)]
pub struct FunctionInvocationResult {
pub execution_duration_ms: u32,
pub billed_duration_ms: u32,
pub memory_used_mb: u32,
pub max_memory_used_mb: u32,
pub response_payload: Vec<u8>,
pub log_result: Option<String>,
pub status_code: u16,
}
#[derive(Debug, Clone)]
pub struct CostOptimizationConfig {
pub enabled: bool,
pub max_hourly_cost_usd: f64,
pub use_spot_instances: bool,
pub auto_shutdown_idle: bool,
pub idle_threshold_minutes: u32,
pub reserved_capacity_percentage: f32,
}
#[derive(Debug, Clone)]
pub struct DeploymentConfig {
pub model_name: String,
pub model_version: String,
pub instance_type: String,
pub initial_instance_count: u32,
pub auto_scaling_enabled: bool,
pub environment_variables: HashMap<String, String>,
pub resource_requirements: ResourceRequirements,
pub networking: NetworkingConfig,
pub data_capture: Option<DataCaptureConfig>,
}
#[derive(Debug, Clone)]
pub struct BackupConfig {
pub enabled: bool,
pub retention_days: u32,
pub backup_schedule: String,
pub cross_region_backup: bool,
}
#[derive(Debug, Clone)]
pub struct ContainerStatus {
pub name: String,
pub status: String,
pub restart_count: u32,
pub current_state: String,
}
#[derive(Debug, Clone)]
pub struct ContainerConfig {
pub name: String,
pub image: String,
pub cpu_cores: f32,
pub memory_gb: f32,
pub ports: Vec<ContainerPort>,
pub environment_variables: HashMap<String, String>,
pub command: Option<Vec<String>>,
}
#[derive(Debug, Clone)]
pub struct CostEstimate {
pub setup_cost_usd: f64,
pub hourly_cost_usd: f64,
pub storage_cost_usd_per_gb: f64,
pub data_transfer_cost_usd_per_gb: f64,
pub estimated_monthly_cost_usd: f64,
}
#[derive(Debug, Clone)]
pub struct FoundationModel {
pub model_id: String,
pub model_name: String,
pub provider_name: String,
pub input_modalities: Vec<String>,
pub output_modalities: Vec<String>,
pub supported_inference_types: Vec<String>,
pub model_lifecycle_status: String,
}
#[derive(Debug, Clone)]
pub struct CostOptimizationStrategy {
pub use_spot_instances: bool,
pub spot_instance_percentage: f32,
pub use_reserved_instances: bool,
pub reserved_instance_percentage: f32,
pub use_savings_plans: bool,
pub auto_shutdown_schedule: Option<AutoShutdownSchedule>,
pub rightsizing_enabled: bool,
pub resource_tagging_for_cost_allocation: bool,
}
#[derive(Debug, Clone)]
pub enum ReplicationType {
LocallyRedundant,
ZoneRedundant,
GeoRedundant,
ReadAccessGeoRedundant,
}
#[derive(Debug, Clone)]
pub enum ContainerGroupStatus {
Creating,
Running,
Succeeded,
Failed,
Terminated,
}
#[derive(Debug, Clone)]
pub struct NetworkingConfig {
pub vpc_config: Option<VPCConfig>,
pub enable_network_isolation: bool,
pub custom_security_groups: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Eq, Hash, PartialEq)]
pub enum CloudProvider {
AWS,
Azure,
GoogleCloud,
Alibaba,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct StoragePerformanceMetrics {
pub read_iops: u32,
pub write_iops: u32,
pub throughput_mbps: u32,
pub latency_ms: f32,
}
#[derive(Debug, Clone)]
pub struct SentimentResult {
pub sentiment: String,
pub confidence_scores: SentimentScores,
}
#[derive(Debug, Clone)]
pub enum ScalingStatus {
InProgress,
Completed,
Failed,
}
#[derive(Debug, Clone)]
pub struct DeploymentMetrics {
pub deployment_id: String,
pub time_range: (DateTime<Utc>, DateTime<Utc>),
pub invocations: u64,
pub average_latency_ms: f64,
pub error_rate: f64,
pub throughput_per_second: f64,
pub cpu_utilization: f64,
pub memory_utilization: f64,
pub network_in_mb: f64,
pub network_out_mb: f64,
pub costs: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct GPUClusterResult {
pub cluster_id: String,
pub cluster_name: String,
pub status: ClusterStatus,
pub endpoint: String,
pub node_count: u32,
pub total_gpu_count: u32,
pub creation_time: DateTime<Utc>,
pub estimated_hourly_cost: f64,
}
#[derive(Debug, Clone)]
pub struct ResourceRequirements {
pub cpu_cores: f32,
pub memory_gb: f32,
pub gpu_count: u32,
pub storage_gb: u32,
}
#[derive(Debug, Clone)]
pub struct LifecyclePolicy {
pub transition_to_ia_days: Option<u32>,
pub transition_to_glacier_days: Option<u32>,
pub transition_to_deep_archive_days: Option<u32>,
pub expiration_days: Option<u32>,
}
#[derive(Debug, Clone)]
pub enum StorageStatus {
Creating,
Available,
Modifying,
Deleting,
Error,
}
#[derive(Debug, Clone)]
pub struct DeploymentResult {
pub deployment_id: String,
pub status: DeploymentStatus,
pub endpoint_url: Option<String>,
pub estimated_completion: Option<DateTime<Utc>>,
pub cost_estimate: Option<CostEstimate>,
pub metadata: HashMap<String, String>,
}
#[async_trait]
pub trait CloudService: Send + Sync {
async fn deploy_model(&self, deployment_config: &DeploymentConfig) -> Result<DeploymentResult>;
async fn get_endpoint(&self, deployment_id: &str) -> Result<EndpointInfo>;
async fn scale_deployment(
&self,
deployment_id: &str,
target_instances: u32,
) -> Result<ScalingResult>;
async fn get_metrics(
&self,
deployment_id: &str,
time_range: (DateTime<Utc>, DateTime<Utc>),
) -> Result<DeploymentMetrics>;
async fn update_deployment(
&self,
deployment_id: &str,
config: &DeploymentConfig,
) -> Result<UpdateResult>;
async fn delete_deployment(&self, deployment_id: &str) -> Result<()>;
async fn list_deployments(&self) -> Result<Vec<DeploymentInfo>>;
async fn estimate_costs(
&self,
config: &DeploymentConfig,
duration_hours: u32,
) -> Result<CostEstimate>;
async fn deploy_serverless_function(
&self,
function_config: &ServerlessFunctionConfig,
) -> Result<ServerlessDeploymentResult>;
async fn invoke_function(
&self,
function_name: &str,
payload: &[u8],
) -> Result<FunctionInvocationResult>;
async fn create_gpu_cluster(
&self,
cluster_config: &GPUClusterConfig,
) -> Result<GPUClusterResult>;
async fn manage_storage(&self, storage_config: &StorageConfig) -> Result<StorageResult>;
async fn optimize_costs(
&self,
optimization_config: &CostOptimizationStrategy,
) -> Result<CostOptimizationResult>;
}
pub struct CloudIntegrationManager {
pub(crate) providers: Arc<RwLock<HashMap<CloudProvider, Box<dyn CloudService>>>>,
config: CloudIntegrationConfig,
}
impl CloudIntegrationManager {
pub fn new(config: CloudIntegrationConfig) -> Self {
Self {
providers: Arc::new(RwLock::new(HashMap::new())),
config,
}
}
pub async fn register_provider(
&self,
provider_type: CloudProvider,
service: Box<dyn CloudService>,
) -> Result<()> {
let mut providers = self.providers.write().await;
providers.insert(provider_type, service);
Ok(())
}
pub async fn deploy_model(
&self,
provider: Option<CloudProvider>,
config: &DeploymentConfig,
) -> Result<DeploymentResult> {
let provider_type = provider.unwrap_or_else(|| self.config.default_provider.clone());
let providers = self.providers.read().await;
let service = providers
.get(&provider_type)
.ok_or_else(|| anyhow!("Provider not registered: {:?}", provider_type))?;
service.deploy_model(config).await
}
pub async fn compare_costs(
&self,
config: &DeploymentConfig,
duration_hours: u32,
) -> Result<HashMap<CloudProvider, CostEstimate>> {
let providers = self.providers.read().await;
let mut cost_comparison = HashMap::new();
for (provider_type, service) in providers.iter() {
if let Ok(estimate) = service.estimate_costs(config, duration_hours).await {
cost_comparison.insert(provider_type.clone(), estimate);
}
}
Ok(cost_comparison)
}
pub async fn optimize_deployment(
&self,
config: &DeploymentConfig,
) -> Result<OptimizationRecommendation> {
let cost_comparison = self.compare_costs(config, 24 * 30).await?;
let cheapest_provider = cost_comparison
.iter()
.min_by(|a, b| {
a.1.estimated_monthly_cost_usd
.partial_cmp(&b.1.estimated_monthly_cost_usd)
.unwrap_or(std::cmp::Ordering::Equal)
})
.map(|(provider, _)| provider.clone());
Ok(OptimizationRecommendation {
recommended_provider: cheapest_provider,
cost_savings: cost_comparison,
performance_considerations: vec![
"Consider network latency to your primary data sources".to_string(),
"Evaluate regional availability and compliance requirements".to_string(),
],
risk_assessment: "Low risk for cost optimization, medium risk for performance changes"
.to_string(),
})
}
}
#[derive(Debug, Clone)]
pub struct ModelPricing {
pub input_token_price_per_1k: f64,
pub output_token_price_per_1k: f64,
pub model_units_price_per_hour: Option<f64>,
pub embedding_price_per_1k_tokens: Option<f64>,
}
#[derive(Debug, Clone)]
pub struct AutoScalingConfig {
pub enabled: bool,
pub min_instances: u32,
pub max_instances: u32,
pub target_cpu_utilization: f32,
pub target_memory_utilization: f32,
pub scale_up_threshold: f32,
pub scale_down_threshold: f32,
pub cooldown_period_seconds: u32,
}
#[derive(Debug, Clone)]
pub struct LanguageDetectionResult {
pub language: String,
pub confidence: f32,
pub is_translation_supported: bool,
pub is_transliteration_supported: bool,
}
#[derive(Debug, Clone)]
pub enum ImplementationEffort {
Low,
Medium,
High,
}
#[allow(dead_code)]
pub struct AWSSageMakerService {
pub(crate) region: String,
pub(crate) access_key_id: String,
pub(crate) secret_access_key: String,
pub(crate) session_token: Option<String>,
}
impl AWSSageMakerService {
pub fn new(
region: String,
access_key_id: String,
secret_access_key: String,
session_token: Option<String>,
) -> Self {
Self {
region,
access_key_id,
secret_access_key,
session_token,
}
}
}
#[allow(dead_code)]
pub struct AzureMLService {
pub(crate) subscription_id: String,
pub(crate) resource_group: String,
pub(crate) workspace_name: String,
pub(crate) tenant_id: String,
pub(crate) client_id: String,
pub(crate) client_secret: String,
}
impl AzureMLService {
pub fn new(
subscription_id: String,
resource_group: String,
workspace_name: String,
tenant_id: String,
client_id: String,
client_secret: String,
) -> Self {
Self {
subscription_id,
resource_group,
workspace_name,
tenant_id,
client_id,
client_secret,
}
}
}
#[derive(Debug, Clone)]
pub struct CostOptimizationResult {
pub estimated_monthly_savings_usd: f64,
pub optimization_actions_taken: Vec<OptimizationAction>,
pub potential_risks: Vec<String>,
pub implementation_timeline: Vec<OptimizationPhase>,
}
#[derive(Debug, Clone)]
pub struct ContainerGroupResult {
pub container_group_id: String,
pub name: String,
pub status: ContainerGroupStatus,
pub fqdn: Option<String>,
pub ip_address: Option<String>,
pub containers: Vec<ContainerStatus>,
pub creation_time: DateTime<Utc>,
pub estimated_hourly_cost: f64,
}
#[derive(Debug, Clone)]
pub struct VPCConfig {
pub vpc_id: String,
pub subnet_ids: Vec<String>,
pub security_group_ids: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct AutoShutdownSchedule {
pub weekday_shutdown_hour: u8,
pub weekend_shutdown_hour: u8,
pub startup_hour: u8,
pub timezone: String,
}
#[derive(Debug, Clone)]
pub struct IAMConfig {
pub execution_role_arn: String,
pub task_role_arn: Option<String>,
pub policies: Vec<String>,
}
#[derive(Debug, Clone)]
pub enum PerformanceTier {
Standard,
HighPerformance,
Archive,
ColdStorage,
}
#[derive(Debug, Clone)]
pub struct SentimentScores {
pub positive: f32,
pub neutral: f32,
pub negative: f32,
}
#[derive(Debug, Clone)]
pub struct DataCaptureConfig {
pub enabled: bool,
pub initial_sampling_percentage: f32,
pub destination_s3_uri: String,
pub kms_key_id: Option<String>,
}
#[derive(Debug, Clone)]
pub struct ServerlessDeploymentResult {
pub function_arn: String,
pub function_name: String,
pub status: ServerlessStatus,
pub invoke_url: Option<String>,
pub version: String,
pub last_modified: DateTime<Utc>,
}
#[derive(Debug, Clone)]
pub struct OptimizationAction {
pub action_type: String,
pub description: String,
pub estimated_savings_usd: f64,
pub implementation_effort: ImplementationEffort,
}
#[allow(dead_code)]
pub struct AzureContainerInstances {
subscription_id: String,
resource_group: String,
tenant_id: String,
client_id: String,
client_secret: String,
}
impl AzureContainerInstances {
pub fn new(
subscription_id: String,
resource_group: String,
tenant_id: String,
client_id: String,
client_secret: String,
) -> Self {
Self {
subscription_id,
resource_group,
tenant_id,
client_id,
client_secret,
}
}
pub async fn create_container_group(
&self,
config: &ContainerGroupConfig,
) -> Result<ContainerGroupResult> {
let container_group_id = format!("aci-{}", Uuid::new_v4());
let estimated_cost = config.containers.iter().fold(0.0, |acc, container| {
acc + match container.cpu_cores {
cores if cores <= 1.0 => 0.0012,
cores if cores <= 2.0 => 0.0024,
_ => 0.0048,
} * 3600.0
});
Ok(ContainerGroupResult {
container_group_id,
name: config.name.clone(),
status: ContainerGroupStatus::Creating,
fqdn: Some(format!(
"{}.{}.azurecontainer.io",
config.name, config.location
)),
ip_address: Some("20.1.2.3".to_string()),
containers: config
.containers
.iter()
.map(|c| ContainerStatus {
name: c.name.clone(),
status: "Creating".to_string(),
restart_count: 0,
current_state: "Waiting".to_string(),
})
.collect(),
creation_time: Utc::now(),
estimated_hourly_cost: estimated_cost,
})
}
pub async fn get_container_group_status(
&self,
_container_group_name: &str,
) -> Result<ContainerGroupStatus> {
Ok(ContainerGroupStatus::Running)
}
pub async fn delete_container_group(&self, container_group_name: &str) -> Result<()> {
println!("Deleting Azure Container Group: {container_group_name}");
Ok(())
}
pub async fn get_container_logs(
&self,
container_group_name: &str,
container_name: &str,
) -> Result<String> {
Ok(
format!(
"[2025-06-30 10:00:00] Container {container_name} in group {container_group_name} started successfully\n[2025-06-30 10:00:01] Application initialized\n[2025-06-30 10:00:02] Ready to accept requests"
),
)
}
}
#[derive(Debug, Clone)]
pub enum StorageType {
ObjectStorage,
BlockStorage,
FileStorage,
DataLake,
}
#[derive(Debug, Clone)]
pub struct OptimizationRecommendation {
pub recommended_provider: Option<CloudProvider>,
pub cost_savings: HashMap<CloudProvider, CostEstimate>,
pub performance_considerations: Vec<String>,
pub risk_assessment: String,
}
#[derive(Debug, Clone)]
pub struct SecurityConfig {
pub encryption_at_rest: bool,
pub encryption_in_transit: bool,
pub vpc_config: Option<VPCConfig>,
pub iam_config: Option<IAMConfig>,
pub network_acl: Vec<NetworkRule>,
}
#[derive(Debug, Clone)]
pub struct ContainerGroupConfig {
pub name: String,
pub location: String,
pub os_type: String,
pub restart_policy: String,
pub containers: Vec<ContainerConfig>,
pub ip_address_type: String,
pub dns_name_label: Option<String>,
}
#[allow(dead_code)]
pub struct AWSBedrockService {
region: String,
access_key_id: String,
secret_access_key: String,
session_token: Option<String>,
}
impl AWSBedrockService {
pub fn new(
region: String,
access_key_id: String,
secret_access_key: String,
session_token: Option<String>,
) -> Self {
Self {
region,
access_key_id,
secret_access_key,
session_token,
}
}
pub async fn list_foundation_models(&self) -> Result<Vec<FoundationModel>> {
Ok(vec![
FoundationModel {
model_id: "amazon.titan-embed-text-v1".to_string(),
model_name: "Amazon Titan Text Embeddings".to_string(),
provider_name: "Amazon".to_string(),
input_modalities: vec!["TEXT".to_string()],
output_modalities: vec!["EMBEDDING".to_string()],
supported_inference_types: vec!["ON_DEMAND".to_string()],
model_lifecycle_status: "ACTIVE".to_string(),
},
FoundationModel {
model_id: "cohere.embed-english-v3".to_string(),
model_name: "Cohere Embed English".to_string(),
provider_name: "Cohere".to_string(),
input_modalities: vec!["TEXT".to_string()],
output_modalities: vec!["EMBEDDING".to_string()],
supported_inference_types: vec!["ON_DEMAND".to_string()],
model_lifecycle_status: "ACTIVE".to_string(),
},
])
}
pub async fn invoke_model(
&self,
model_id: &str,
input_text: &str,
) -> Result<BedrockEmbeddingResult> {
let embedding_dimension = match model_id {
"amazon.titan-embed-text-v1" => 1536,
"cohere.embed-english-v3" => 1024,
_ => 768,
};
let embedding: Vec<f32> = (0..embedding_dimension)
.map(|i| (i as f32 * 0.001) + (input_text.len() as f32 * 0.01))
.collect();
Ok(BedrockEmbeddingResult {
embedding,
input_token_count: input_text.split_whitespace().count() as u32,
model_id: model_id.to_string(),
response_metadata: HashMap::from([
("request_id".to_string(), Uuid::new_v4().to_string()),
("model_version".to_string(), "1.0".to_string()),
]),
})
}
pub async fn get_model_pricing(&self, model_id: &str) -> Result<ModelPricing> {
let pricing = match model_id {
"amazon.titan-embed-text-v1" => ModelPricing {
input_token_price_per_1k: 0.0001,
output_token_price_per_1k: 0.0,
model_units_price_per_hour: None,
embedding_price_per_1k_tokens: Some(0.0001),
},
"cohere.embed-english-v3" => ModelPricing {
input_token_price_per_1k: 0.0001,
output_token_price_per_1k: 0.0,
model_units_price_per_hour: None,
embedding_price_per_1k_tokens: Some(0.0001),
},
_ => ModelPricing {
input_token_price_per_1k: 0.0002,
output_token_price_per_1k: 0.0,
model_units_price_per_hour: None,
embedding_price_per_1k_tokens: Some(0.0002),
},
};
Ok(pricing)
}
}
#[derive(Debug, Clone)]
pub struct StorageResult {
pub storage_id: String,
pub endpoint: String,
pub status: StorageStatus,
pub actual_capacity_gb: u64,
pub monthly_cost_estimate: f64,
pub performance_metrics: StoragePerformanceMetrics,
}
#[derive(Debug, Clone)]
pub struct BedrockEmbeddingResult {
pub embedding: Vec<f32>,
pub input_token_count: u32,
pub model_id: String,
pub response_metadata: HashMap<String, String>,
}
#[derive(Debug, Clone)]
pub enum ClusterStatus {
Creating,
Active,
Updating,
Deleting,
Failed,
Suspended,
}
#[derive(Debug, Clone)]
pub struct AzureEmbeddingResult {
pub embeddings: Vec<Vec<f32>>,
pub model: String,
pub usage: TokenUsage,
}
#[derive(Debug, Clone)]
pub struct TokenUsage {
pub prompt_tokens: u32,
pub total_tokens: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DeploymentStatus {
Creating,
InService,
Updating,
Failed,
Deleting,
OutOfService,
}
#[derive(Debug, Clone)]
pub enum UpdateStatus {
InProgress,
Completed,
Failed,
RollingBack,
}
#[derive(Debug, Clone)]
pub struct ScalingResult {
pub deployment_id: String,
pub previous_instance_count: u32,
pub target_instance_count: u32,
pub scaling_status: ScalingStatus,
pub estimated_completion: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone)]
pub struct DeploymentInfo {
pub deployment_id: String,
pub name: String,
pub status: DeploymentStatus,
pub model_name: String,
pub instance_type: String,
pub instance_count: u32,
pub creation_time: DateTime<Utc>,
pub last_modified_time: DateTime<Utc>,
}
#[derive(Debug, Clone)]
pub enum ServerlessStatus {
Pending,
Active,
Inactive,
Failed,
}
#[derive(Debug, Clone)]
pub struct StorageConfig {
pub storage_type: StorageType,
pub capacity_gb: u64,
pub performance_tier: PerformanceTier,
pub replication_type: ReplicationType,
pub backup_config: Option<BackupConfig>,
pub lifecycle_policy: Option<LifecyclePolicy>,
}
#[derive(Debug, Clone)]
pub struct UpdateResult {
pub deployment_id: String,
pub update_status: UpdateStatus,
pub previous_config: DeploymentConfig,
pub new_config: DeploymentConfig,
pub estimated_completion: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone)]
pub struct ContainerPort {
pub port: u16,
pub protocol: String,
}
#[derive(Debug, Clone)]
pub struct ServerlessFunctionConfig {
pub function_name: String,
pub runtime: String,
pub memory_mb: u32,
pub timeout_seconds: u32,
pub environment_variables: HashMap<String, String>,
pub code_package_url: String,
pub handler: String,
pub vpc_config: Option<VPCConfig>,
pub layers: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct OptimizationPhase {
pub phase_name: String,
pub duration_days: u32,
pub actions: Vec<String>,
pub expected_savings_usd: f64,
}
#[derive(Debug, Clone)]
pub enum EndpointStatus {
OutOfService,
Creating,
Updating,
SystemUpdating,
RollingBack,
InService,
Deleting,
Failed,
}
#[derive(Debug, Clone)]
pub struct MonitoringConfig {
pub enabled: bool,
pub collection_interval_seconds: u32,
pub alert_thresholds: HashMap<String, f64>,
pub notification_endpoints: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct CloudIntegrationConfig {
pub default_provider: CloudProvider,
pub auto_scaling: AutoScalingConfig,
pub cost_optimization: CostOptimizationConfig,
pub security: SecurityConfig,
pub monitoring: MonitoringConfig,
}