use linera_base::{crypto::ValidatorPublicKey, identifiers::ChainId};
#[derive(Debug, Clone, clap::Parser, serde::Serialize)]
pub struct Benchmark {
pub address: String,
#[arg(long)]
pub public_key: Option<ValidatorPublicKey>,
#[arg(long, required = true)]
pub chain: Vec<ChainId>,
#[arg(long)]
pub skip_preflight: bool,
#[arg(long)]
pub skip_read_baseline: bool,
#[arg(long)]
pub skip_read_stress: bool,
#[arg(long)]
pub skip_bulk_download: bool,
#[arg(long)]
pub skip_tip_lag: bool,
#[arg(long)]
pub deep: bool,
#[arg(long, default_value_t = 200)]
pub baseline_requests: usize,
#[arg(long, value_delimiter = ',', default_value = "1,2,4,8,16,32,64")]
pub stress_levels: Vec<usize>,
#[arg(long, default_value_t = 30)]
pub stress_duration_secs: u64,
#[arg(long, default_value_t = 100)]
pub bulk_batch_size: u32,
#[arg(long, value_delimiter = ',', default_value = "1,8")]
pub bulk_concurrency: Vec<usize>,
#[arg(long, default_value = "auto")]
pub bulk_height_range: String,
#[arg(long, default_value_t = 3)]
pub tip_lag_samples: usize,
#[arg(long, default_value_t = 120)]
pub tip_lag_interval_secs: u64,
#[arg(long, default_value_t = 1000)]
pub deep_blocks: u32,
#[arg(long)]
pub deep_chain: Option<ChainId>,
#[arg(long)]
pub output: Vec<String>,
#[arg(long, default_value = "unspecified")]
pub observer_location: String,
#[arg(long)]
pub no_progress: bool,
#[arg(long, default_value_t = 30)]
pub rpc_timeout_secs: u64,
#[arg(long)]
pub abort_on_preflight_fail: bool,
}