sui_rpc_benchmark/json_rpc/
mod.rs1use crate::config::BenchmarkConfig;
5use anyhow::Result;
6use request_loader::load_json_rpc_requests;
7use runner::run_queries;
8use std::{collections::HashSet, time::Duration};
9use tracing::info;
10
11pub mod request_loader;
12pub mod runner;
13
14pub async fn run_benchmark(
15 endpoint: &str,
16 file_path: &str,
17 concurrency: usize,
18 duration_secs: Option<u64>,
19 json_rpc_methods_to_skip: HashSet<String>,
20) -> Result<()> {
21 let config = BenchmarkConfig {
22 concurrency,
23 duration: duration_secs.map(Duration::from_secs),
24 json_rpc_file_path: Some(file_path.to_string()),
25 json_rpc_methods_to_skip,
26 };
27
28 info!("Loading JSON RPC requests from {}", file_path);
29 let requests = load_json_rpc_requests(file_path)?;
30 info!("Loaded {} requests", requests.len());
31
32 let metrics = run_queries(endpoint, &requests, &config).await?;
33 info!("Benchmark results:");
34 info!("=== Overall Statistics ===");
35 info!("Total requests sent: {}", metrics.total_sent);
36 info!("Total errors: {}", metrics.total_errors);
37 if metrics.total_sent > 0 {
38 let avg_latency = metrics.total_latency_ms / metrics.total_sent as f64;
39 info!("Average latency: {:.2}ms", avg_latency);
40 let success_rate = ((metrics.total_sent - metrics.total_errors) as f64
41 / metrics.total_sent as f64)
42 * 100.0;
43 info!("Success rate: {:.1}%", success_rate);
44 }
45 info!("=== Per-Method Statistics ===");
46 let mut methods: Vec<_> = metrics.per_method.iter().collect();
47 methods.sort_by_key(|(method, _)| *method);
48 for (method, stats) in methods {
49 info!("Method: {}", method);
50 info!(" Requests: {}", stats.total_sent);
51 info!(" Errors: {}", stats.total_errors);
52 if stats.total_sent > 0 {
53 let method_avg_latency = stats.total_latency_ms / stats.total_sent as f64;
54 let method_success_rate =
55 ((stats.total_sent - stats.total_errors) as f64 / stats.total_sent as f64) * 100.0;
56 info!(" Avg latency: {:.2}ms", method_avg_latency);
57 info!(" Success rate: {:.1}%", method_success_rate);
58 }
59 }
60 Ok(())
61}