1use burncloud_database_client::*;
4use burncloud_database_core::*;
5use uuid::Uuid;
6
7#[tokio::main]
8async fn main() -> Result<(), Box<dyn std::error::Error>> {
9 println!("🚀 BurnCloud Database Example");
10
11 let db = BurnCloudDatabaseBuilder::new()
13 .with_postgres("localhost", 5432, "burncloud", "postgres", "password")
14 .with_pool_size(10)
15 .with_timeout(30)
16 .build_and_initialize()
17 .await?;
18
19 println!("✅ Database connected and initialized");
20
21 db.health_check().await?;
23
24 let context = QueryContext::default();
26
27 let model = AiModel {
28 id: Uuid::new_v4(),
29 name: "Qwen2.5-7B-Chat".to_string(),
30 version: "v1.0".to_string(),
31 size_gb: 4.1,
32 model_type: ModelType::ChatCompletion,
33 provider: "Alibaba".to_string(),
34 description: Some("7B参数的对话模型".to_string()),
35 tags: vec!["chat".to_string(), "chinese".to_string()],
36 capabilities: vec!["text-generation".to_string(), "conversation".to_string()],
37 requirements: ModelRequirements {
38 min_ram_gb: 8.0,
39 min_vram_gb: Some(6.0),
40 gpu_required: true,
41 cpu_cores: 4,
42 disk_space_gb: 5.0,
43 supported_platforms: vec!["linux".to_string(), "windows".to_string()],
44 },
45 status: ModelStatus::Downloaded,
46 download_url: Some("https://example.com/qwen2.5-7b".to_string()),
47 checksum: Some("abc123".to_string()),
48 created_at: chrono::Utc::now(),
49 updated_at: chrono::Utc::now(),
50 };
51
52 let model_id = db.ai_models.base.create(&model, &context).await?;
53 println!("✅ AI模型已添加: {}", model_id);
54
55 let deployment = ModelDeployment {
57 id: Uuid::new_v4(),
58 model_id: model.id,
59 name: "qwen2.5-chat-prod".to_string(),
60 port: 8001,
61 bind_address: "127.0.0.1".to_string(),
62 api_key: "sk-burncloud-123456".to_string(),
63 max_concurrent: 4,
64 config: DeploymentConfig {
65 auto_start: true,
66 restart_on_failure: true,
67 max_restart_count: 3,
68 health_check_interval: 30,
69 timeout_seconds: 60,
70 log_level: LogLevel::Info,
71 custom_args: std::collections::HashMap::new(),
72 },
73 resource_config: ResourceConfig {
74 context_length: 4096,
75 temperature: 0.7,
76 top_p: 0.9,
77 top_k: 50,
78 max_tokens: 2048,
79 gpu_layers: Some(32),
80 threads: Some(8),
81 batch_size: 1,
82 },
83 status: DeploymentStatus::Running,
84 pid: Some(12345),
85 started_at: Some(chrono::Utc::now()),
86 stopped_at: None,
87 created_at: chrono::Utc::now(),
88 updated_at: chrono::Utc::now(),
89 };
90
91 let deployment_id = db.deployments.base.create(&deployment, &context).await?;
92 println!("✅ 模型部署已创建: {}", deployment_id);
93
94 let system_metrics = SystemMetrics {
96 id: Uuid::new_v4(),
97 timestamp: chrono::Utc::now(),
98 cpu_usage: 45.2,
99 memory_usage: 78.5,
100 memory_total: 16_000_000_000, disk_usage: 65.0,
102 disk_total: 500_000_000_000, gpu_usage: Some(32.1),
104 gpu_memory_usage: Some(60.5),
105 network_rx: 1024 * 1024, network_tx: 512 * 1024, };
108
109 db.system_metrics.base.create(&system_metrics, &context).await?;
110 println!("✅ 系统指标已记录");
111
112 let model_metrics = ModelMetrics {
114 id: Uuid::new_v4(),
115 deployment_id: deployment.id,
116 timestamp: chrono::Utc::now(),
117 request_count: 142,
118 error_count: 2,
119 average_response_time: 1.2,
120 tokens_per_second: 45.3,
121 concurrent_requests: 3,
122 queue_length: 0,
123 memory_usage: 85.2,
124 };
125
126 db.model_metrics.base.create(&model_metrics, &context).await?;
127 println!("✅ 模型性能指标已记录");
128
129 let running_deployments = db.deployments.get_running_deployments(&context).await?;
133 println!("🔍 运行中的部署数量: {}", running_deployments.len());
134
135 let chat_models = db.ai_models.find_by_type(ModelType::ChatCompletion, &context).await?;
137 println!("🔍 聊天模型数量: {}", chat_models.len());
138
139 let search_results = db.ai_models.search("Qwen", &context).await?;
141 println!("🔍 搜索'Qwen'的结果: {}", search_results.len());
142
143 let latest_metrics = db.system_metrics.get_latest(&context).await?;
145 if let Some(metrics) = latest_metrics {
146 println!("📊 当前CPU使用率: {:.1}%", metrics.cpu_usage);
147 println!("📊 当前内存使用率: {:.1}%", metrics.memory_usage);
148 }
149
150 let stats = db.get_database_stats().await?;
152 println!("\n📈 数据库统计:");
153 println!(" 模型数量: {}", stats.models_count);
154 println!(" 部署数量: {}", stats.deployments_count);
155 println!(" 指标记录数: {}", stats.metrics_count);
156 println!(" 连接池大小: {}", stats.pool_size);
157
158 let user_settings = UserSettings {
160 id: Uuid::new_v4(),
161 user_id: "admin".to_string(),
162 theme: Theme::Dark,
163 language: "zh-CN".to_string(),
164 font_size: FontSize::Medium,
165 auto_refresh_interval: 30,
166 notifications_enabled: true,
167 notification_types: vec![
168 NotificationType::ModelStarted,
169 NotificationType::ModelStopped,
170 NotificationType::ModelError,
171 ],
172 created_at: chrono::Utc::now(),
173 updated_at: chrono::Utc::now(),
174 };
175
176 db.user_settings.base.create(&user_settings, &context).await?;
177 println!("✅ 用户设置已保存");
178
179 let cleanup_stats = db.cleanup_old_data(30).await?;
181 println!("\n🧹 数据清理完成:");
182 println!(" 删除指标记录: {}", cleanup_stats.metrics_deleted);
183 println!(" 删除日志记录: {}", cleanup_stats.logs_deleted);
184
185 let backup_config = db.backup_config().await?;
187 println!("\n💾 配置已备份:");
188 println!(" 模型数量: {}", backup_config.models.len());
189 println!(" 部署数量: {}", backup_config.deployments.len());
190 println!(" 备份时间: {}", backup_config.backup_time.format("%Y-%m-%d %H:%M:%S"));
191
192 println!("\n🎉 BurnCloud数据库示例运行完成!");
193
194 Ok(())
195}
196
197async fn advanced_query_examples(db: &BurnCloudDatabase) -> Result<(), Box<dyn std::error::Error>> {
199 let context = QueryContext::default();
200
201 let start_time = chrono::Utc::now() - chrono::Duration::hours(24);
203 let end_time = chrono::Utc::now();
204
205 let recent_metrics = db.system_metrics.find_by_time_range(start_time, end_time, &context).await?;
207 println!("📊 过去24小时系统指标: {} 条记录", recent_metrics.len());
208
209 if let Some(deployment) = db.deployments.get_running_deployments(&context).await?.first() {
211 let deployment_metrics = db.model_metrics
212 .find_by_deployment_id(deployment.id, start_time, end_time, &context)
213 .await?;
214 println!("📈 部署 {} 的性能指标: {} 条记录", deployment.name, deployment_metrics.len());
215
216 let error_logs = db.request_logs.find_errors(start_time, end_time, &context).await?;
218 println!("❌ 过去24小时错误日志: {} 条记录", error_logs.len());
219 }
220
221 Ok(())
222}
223
224async fn transaction_example(db: &BurnCloudDatabase) -> Result<(), Box<dyn std::error::Error>> {
226 println!("\n🔄 开始事务操作示例");
229
230 println!("✅ 事务操作完成");
237
238 Ok(())
239}
240
241#[cfg(test)]
242mod tests {
243 use super::*;
244
245 #[tokio::test]
246 async fn test_database_operations() {
247 let db = BurnCloudDatabaseBuilder::new()
249 .with_sqlite(":memory:")
250 .build_and_initialize()
251 .await
252 .expect("Failed to create test database");
253
254 let context = QueryContext::default();
255
256 let model = AiModel {
258 id: Uuid::new_v4(),
259 name: "test-model".to_string(),
260 version: "v1.0".to_string(),
261 size_gb: 1.0,
262 model_type: ModelType::TextGeneration,
263 provider: "test".to_string(),
264 description: None,
265 tags: vec![],
266 capabilities: vec![],
267 requirements: ModelRequirements {
268 min_ram_gb: 2.0,
269 min_vram_gb: None,
270 gpu_required: false,
271 cpu_cores: 2,
272 disk_space_gb: 2.0,
273 supported_platforms: vec!["linux".to_string()],
274 },
275 status: ModelStatus::Available,
276 download_url: None,
277 checksum: None,
278 created_at: chrono::Utc::now(),
279 updated_at: chrono::Utc::now(),
280 };
281
282 let _model_id = db.ai_models.base.create(&model, &context).await
283 .expect("Failed to create model");
284
285 let models = db.ai_models.find_by_status(ModelStatus::Available, &context).await
287 .expect("Failed to find models");
288 assert_eq!(models.len(), 1);
289 assert_eq!(models[0].name, "test-model");
290 }
291}