use std::time::Duration;
use serde::{Deserialize, Serialize};
use tycho_util::serde_helpers;
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct PublicOverlayClientConfig {
pub neighbors: NeighborsConfig,
pub validators: ValidatorsConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct NeighborsConfig {
#[serde(with = "serde_helpers::humantime")]
pub update_interval: Duration,
#[serde(with = "serde_helpers::humantime")]
pub ping_interval: Duration,
#[serde(with = "serde_helpers::humantime")]
pub apply_score_interval: Duration,
#[serde(with = "serde_helpers::humantime")]
pub update_metrics_interval: Duration,
pub keep: usize,
pub max_ping_tasks: usize,
#[serde(with = "serde_helpers::humantime")]
pub default_roundtrip: Duration,
#[serde(with = "serde_helpers::humantime")]
pub send_timeout: Duration,
#[serde(with = "serde_helpers::humantime")]
pub query_timeout: Duration,
pub enable_metrics: bool,
}
impl Default for NeighborsConfig {
fn default() -> Self {
Self {
update_interval: Duration::from_secs(2 * 60),
ping_interval: Duration::from_secs(30),
apply_score_interval: Duration::from_secs(10),
update_metrics_interval: Duration::from_secs(5),
keep: 5,
max_ping_tasks: 5,
default_roundtrip: Duration::from_millis(300),
send_timeout: Duration::from_millis(500),
query_timeout: Duration::from_secs(1),
enable_metrics: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct ValidatorsConfig {
#[serde(with = "serde_helpers::humantime")]
pub ping_interval: Duration,
#[serde(with = "serde_helpers::humantime")]
pub ping_timeout: Duration,
pub keep: usize,
pub max_ping_tasks: usize,
#[serde(with = "serde_helpers::humantime")]
pub send_timeout: Duration,
}
impl Default for ValidatorsConfig {
fn default() -> Self {
Self {
ping_interval: Duration::from_secs(60),
ping_timeout: Duration::from_secs(1),
keep: 5,
max_ping_tasks: 5,
send_timeout: Duration::from_millis(500),
}
}
}