selium_server/
args.rs

1use clap::{Args, Parser};
2use clap_verbosity_flag::Verbosity;
3use std::{net::SocketAddr, path::PathBuf};
4
5#[derive(Parser, Debug)]
6#[command(version, about)]
7pub struct UserArgs {
8    /// Address to bind this server to
9    #[clap(short = 'a', long = "bind-addr", default_value = "127.0.0.1:7001")]
10    pub bind_addr: SocketAddr,
11
12    #[clap(flatten)]
13    pub cert: CertGroup,
14
15    #[clap(flatten)]
16    pub log: LogArgs,
17
18    /// Enable stateless retries
19    #[clap(long = "stateless-retry")]
20    pub stateless_retry: bool,
21
22    /// File to log TLS keys to for debugging
23    #[clap(long = "keylog")]
24    pub keylog: bool,
25
26    /// Maximum time in ms a client can idle waiting for data - default to 15 seconds
27    #[clap(long = "max-idle-timeout", default_value_t = 15000, value_parser = clap::value_parser!(u32))]
28    pub max_idle_timeout: u32,
29
30    /// Can be called multiple times to increase output
31    #[clap(flatten)]
32    pub verbose: Verbosity,
33}
34
35#[derive(Args, Debug)]
36pub struct CertGroup {
37    /// CA certificate
38    #[clap(long, default_value = "certs/server/ca.der")]
39    pub ca: PathBuf,
40    /// TLS private key
41    #[clap(
42        short = 'k',
43        long = "key",
44        default_value = "certs/server/localhost.key.der"
45    )]
46    pub key: PathBuf,
47    /// TLS certificate
48    #[clap(
49        short = 'c',
50        long = "cert",
51        default_value = "certs/server/localhost.der"
52    )]
53    pub cert: PathBuf,
54}
55
56#[derive(Args, Debug)]
57pub struct LogArgs {
58    /// Path to directory to store log segments.
59    #[clap(long, default_value = "logs/")]
60    pub log_segments_directory: PathBuf,
61
62    /// Interval in seconds to poll log cleaner task - default to 5 minutes.
63    #[clap(long, default_value_t = 300_000)]
64    pub log_cleaner_interval: u64,
65
66    /// Maximum number of entries per log segment.
67    #[clap(long, default_value_t = 100_000)]
68    pub log_maximum_entries: u32,
69
70    /// Number of writes before flushing log to filesystem.
71    #[clap(long)]
72    pub flush_policy_num_writes: Option<u64>,
73
74    /// Interval in millis to asynchronously flush log to filesystem.
75    #[clap(long, default_value_t = 3000)]
76    pub flush_policy_interval: u64,
77
78    /// Subscriber polling interval in milliseconds.
79    #[clap(long, default_value_t = 25)]
80    pub subscriber_polling_interval: u64,
81}