/
teterkin
/
vm_load_testing
Обзор
Документация
Войти
/
teterkin
/
vm_load_testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main.rs
91 строка
3 KB
alexefan136
upload files
12 ноя 2025, 18:00
12 ноя 2025, 18:00
eb766a0
Код
Авторство
О чём код?
// src/main.rs use clap::Parser; use std::fs; mod system; mod extra; mod cpu; mod memory; mod disk; mod network; mod report; #[derive(Parser)] struct Args { /// Путь к выходному Markdown-файлу #[arg(short, long, default_value = "vm-benchmark-report.md")] output: String, /// Пропустить дисковый бенчмарк (полезно при отсутствии прав на запись в /tmp) #[arg(long)] no_disk: bool, } #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let args = Args::parse(); println!("🚀 Запуск полного бенчмарка облачной ВМ..."); let start_time = std::time::Instant::now(); println!("🔧 Сбор системной информации..."); let system_info = system::collect_system_info(); let extra_info = extra::collect_extra_info(); println!("🧠 Тест CPU..."); let cpu = cpu::bench_cpu(); println!("🧠 CPU: {:.0} SHA256 ops/sec", cpu.ops_per_sec); println!("💾 Тест памяти..."); let memory = memory::bench_memory(); println!("💾 RAM: {:.2} GiB/s (write), latency: {:.1} ns", memory.write_bandwidth_gib_s, memory.latency_ns); let disk = if !args.no_disk { println!("🗃️ Тест диска..."); match disk::bench_disk() { Ok(d) => { println!( "🗃️ Disk: {:.1} MiB/s write, {} IOPS (4K read)", d.sequential_write_mib_s, d.random_read_iops ); Some(d) } Err(e) => { eprintln!("⚠️ Ошибка дискового теста: {}", e); None } } } else { println!("⏭️ Дисковый тест пропущен (--no-disk)"); None }; println!("🌐 Тест сети..."); let network = network::bench_network().await; println!( "🌐 Сеть: RTT = {:.2} ms, скорость = {:.2} MiB/s", network.tcp_rtt_ms, network.http_dl_mib_s ); let timestamp = chrono::Utc::now().to_rfc3339(); let report = report::BenchmarkReport { system: system_info, extra: extra_info, cpu, memory, disk, network, timestamp, }; let markdown = report::generate_markdown(&report); fs::write(&args.output, markdown)?; let total_time = start_time.elapsed().as_secs_f64(); println!( "✅ Отчёт сохранён в {} (выполнено за {:.1} сек)", args.output, total_time ); Ok(()) }