Skip to content

Commit bd07a1c

Browse files
committed
Unify configs
Remove `--hp-config` option and use just `--config`. HP specific options can be overriden from command line.
1 parent ffe2a83 commit bd07a1c

2 files changed

Lines changed: 58 additions & 24 deletions

File tree

src/bin/hp.rs

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ struct Opts {
1111
/// Config file path
1212
#[arg(long)]
1313
config: Option<String>,
14-
/// Historyprovider config file
15-
#[arg(long, default_value = "config.yaml")]
16-
hp_config: String,
1714
/// Create default config file if one specified by --config is not found
1815
#[arg(short, long)]
1916
create_default_config: bool,
@@ -39,6 +36,24 @@ struct Opts {
3936
/// Print version and exit
4037
#[arg(short = 'V', long)]
4138
version: bool,
39+
40+
// HP specific options
41+
//
42+
/// Path to journal directory
43+
#[arg(long)]
44+
journal_dir: Option<String>,
45+
/// Maximum number of parallel sync tasks
46+
#[arg(long)]
47+
max_sync_tasks: Option<usize>,
48+
/// Maximum size of journal directory in bytes
49+
#[arg(long)]
50+
max_journal_dir_size: Option<usize>,
51+
/// Periodic sync interval in seconds
52+
#[arg(long)]
53+
periodic_sync_interval: Option<u64>,
54+
/// Number of days to keep history data
55+
#[arg(long)]
56+
days_to_keep: Option<i64>,
4257
}
4358

4459
fn init_logger(cli_opts: &Opts) {
@@ -65,24 +80,34 @@ fn print_banner(text: impl AsRef<str>) {
6580
info!("{banner_line}");
6681
}
6782

68-
fn load_client_config(cli_opts: Opts) -> shvrpc::Result<ClientConfig> {
69-
let mut config = if let Some(config_file) = &cli_opts.config {
70-
ClientConfig::from_file_or_default(config_file, cli_opts.create_default_config)?
83+
fn load_client_config(cli_opts: Opts) -> shvrpc::Result<(ClientConfig, HpConfig)> {
84+
let (mut client_config, mut hp_config) = if let Some(config_file) = &cli_opts.config {
85+
(
86+
ClientConfig::from_file_or_default(config_file, cli_opts.create_default_config)?,
87+
HpConfig::load(config_file)?,
88+
)
7189
} else {
72-
Default::default()
90+
(Default::default(), Default::default())
7391
};
74-
config.url = cli_opts.url.map_or_else(|| Ok(config.url), |url_str| Url::parse(&url_str))?;
75-
config.device_id = cli_opts.device_id.or(config.device_id);
76-
config.mount = cli_opts.mount.or(config.mount);
77-
config.reconnect_interval = cli_opts.reconnect_interval.map_or_else(
78-
|| Ok(config.reconnect_interval),
92+
client_config.url = cli_opts.url.map_or_else(|| Ok(client_config.url), |url_str| Url::parse(&url_str))?;
93+
client_config.device_id = cli_opts.device_id.or(client_config.device_id);
94+
client_config.mount = cli_opts.mount.or(client_config.mount);
95+
client_config.reconnect_interval = cli_opts.reconnect_interval.map_or_else(
96+
|| Ok(client_config.reconnect_interval),
7997
|interval_str| duration_str::parse(&interval_str).map(Some)
8098
)?;
81-
config.heartbeat_interval = cli_opts.heartbeat_interval.map_or_else(
82-
|| Ok(config.heartbeat_interval),
99+
client_config.heartbeat_interval = cli_opts.heartbeat_interval.map_or_else(
100+
|| Ok(client_config.heartbeat_interval),
83101
|interval_str| duration_str::parse(&interval_str)
84102
)?;
85-
Ok(config)
103+
104+
hp_config.journal_dir = cli_opts.journal_dir.unwrap_or(hp_config.journal_dir);
105+
hp_config.max_sync_tasks = cli_opts.max_sync_tasks.or(hp_config.max_sync_tasks);
106+
hp_config.max_journal_dir_size = cli_opts.max_journal_dir_size.or(hp_config.max_journal_dir_size);
107+
hp_config.periodic_sync_interval = cli_opts.periodic_sync_interval.or(hp_config.periodic_sync_interval);
108+
hp_config.days_to_keep = cli_opts.days_to_keep.or(hp_config.days_to_keep);
109+
110+
Ok((client_config, hp_config))
86111
}
87112

88113
#[tokio::main]
@@ -97,10 +122,7 @@ pub(crate) async fn main() -> shvrpc::Result<()> {
97122

98123
init_logger(&cli_opts);
99124
print_banner(format!("{} {} starting", std::module_path!(), PKG_VERSION));
100-
101-
let hp_config = cli_opts.hp_config.clone();
102-
let client_config = load_client_config(cli_opts).expect("Invalid config");
103-
let hp_config = HpConfig::load(hp_config)?;
125+
let (client_config, hp_config) = load_client_config(cli_opts).expect("Invalid config");
104126

105127
historyprovider::run(&hp_config, &client_config).await
106128
}

src/lib.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,23 @@ fn default_journal_dir() -> String {
3434
#[derive(Clone, Deserialize)]
3535
pub struct HpConfig {
3636
#[serde(default = "default_journal_dir")]
37-
journal_dir: String,
38-
max_sync_tasks: Option<usize>,
39-
max_journal_dir_size: Option<usize>,
40-
periodic_sync_interval: Option<u64>,
41-
days_to_keep: Option<i64>,
37+
pub journal_dir: String,
38+
pub max_sync_tasks: Option<usize>,
39+
pub max_journal_dir_size: Option<usize>,
40+
pub periodic_sync_interval: Option<u64>,
41+
pub days_to_keep: Option<i64>,
42+
}
43+
44+
impl Default for HpConfig {
45+
fn default() -> Self {
46+
Self {
47+
journal_dir: default_journal_dir(),
48+
max_sync_tasks: None,
49+
max_journal_dir_size: None,
50+
periodic_sync_interval: None,
51+
days_to_keep: None,
52+
}
53+
}
4254
}
4355

4456
impl HpConfig {

0 commit comments

Comments
 (0)