@@ -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
4459fn 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 . unwrap_or ( hp_config. max_sync_tasks ) ;
106+ hp_config. max_journal_dir_size = cli_opts. max_journal_dir_size . unwrap_or ( hp_config. max_journal_dir_size ) ;
107+ hp_config. periodic_sync_interval = cli_opts. periodic_sync_interval . unwrap_or ( hp_config. periodic_sync_interval ) ;
108+ hp_config. days_to_keep = cli_opts. days_to_keep . unwrap_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}
0 commit comments