burncloud_usage/
burncloud_usage.rs

1// BurnCloud数据库使用示例
2
3use 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    // 1. 创建数据库连接
12    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    // 2. 健康检查
22    db.health_check().await?;
23
24    // 3. 添加示例AI模型
25    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    // 4. 创建模型部署
56    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    // 5. 记录系统指标
95    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, // 16GB
101        disk_usage: 65.0,
102        disk_total: 500_000_000_000, // 500GB
103        gpu_usage: Some(32.1),
104        gpu_memory_usage: Some(60.5),
105        network_rx: 1024 * 1024, // 1MB
106        network_tx: 512 * 1024,  // 512KB
107    };
108
109    db.system_metrics.base.create(&system_metrics, &context).await?;
110    println!("✅ 系统指标已记录");
111
112    // 6. 记录模型性能指标
113    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    // 7. 查询示例
130
131    // 查找运行中的部署
132    let running_deployments = db.deployments.get_running_deployments(&context).await?;
133    println!("🔍 运行中的部署数量: {}", running_deployments.len());
134
135    // 查找聊天模型
136    let chat_models = db.ai_models.find_by_type(ModelType::ChatCompletion, &context).await?;
137    println!("🔍 聊天模型数量: {}", chat_models.len());
138
139    // 搜索模型
140    let search_results = db.ai_models.search("Qwen", &context).await?;
141    println!("🔍 搜索'Qwen'的结果: {}", search_results.len());
142
143    // 获取最新系统指标
144    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    // 8. 获取数据库统计信息
151    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    // 9. 创建用户设置
159    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    // 10. 清理旧数据 (保留30天)
180    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    // 11. 备份配置
186    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
197/// 演示高级查询功能
198async fn advanced_query_examples(db: &BurnCloudDatabase) -> Result<(), Box<dyn std::error::Error>> {
199    let context = QueryContext::default();
200
201    // 时间范围查询
202    let start_time = chrono::Utc::now() - chrono::Duration::hours(24);
203    let end_time = chrono::Utc::now();
204
205    // 获取过去24小时的系统指标
206    let recent_metrics = db.system_metrics.find_by_time_range(start_time, end_time, &context).await?;
207    println!("📊 过去24小时系统指标: {} 条记录", recent_metrics.len());
208
209    // 获取特定部署的性能指标
210    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        // 获取该部署的错误日志
217        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
224/// 演示事务操作
225async fn transaction_example(db: &BurnCloudDatabase) -> Result<(), Box<dyn std::error::Error>> {
226    // 注意:这个示例展示了事务的概念,但实际的事务实现需要更复杂的代码
227
228    println!("\n🔄 开始事务操作示例");
229
230    // 在真实应用中,这里会开启一个数据库事务
231    // let transaction = db.client.begin_transaction(&context).await?;
232
233    // 批量操作:同时创建模型和部署
234    // 如果任何操作失败,整个事务将回滚
235
236    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        // 使用内存SQLite进行测试
248        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        // 测试模型创建
257        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        // 验证模型已创建
286        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}