@@ -2,57 +2,67 @@ use std::path::PathBuf;
22
33use anyhow:: Result ;
44use bytes:: Bytes ;
5+ use clap:: { Parser , Subcommand } ;
56use http_body_util:: Full ;
67use prometheus:: Encoder ;
7- use structopt:: StructOpt ;
88use tracing:: { info, Level } ;
99use tracing_subscriber:: FmtSubscriber ;
1010
1111use s3_cas:: cas:: { CasFS , StorageEngine } ;
1212use s3_cas:: metastore:: Durability ;
1313
14- #[ derive( StructOpt ) ]
15- struct Args {
16- #[ structopt( long, default_value = "." ) ]
14+ #[ derive( Parser ) ]
15+ #[ command( version) ]
16+ struct Cli {
17+ #[ arg( long, default_value = "." ) ]
1718 fs_root : PathBuf ,
1819
19- #[ structopt ( long, default_value = "." ) ]
20+ #[ arg ( long, default_value = "." ) ]
2021 meta_root : PathBuf ,
2122
22- #[ structopt ( long, default_value = "localhost" ) ]
23+ #[ arg ( long, default_value = "localhost" ) ]
2324 host : String ,
2425
25- #[ structopt ( long, default_value = "8014" ) ]
26+ #[ arg ( long, default_value = "8014" ) ]
2627 port : u16 ,
2728
28- #[ structopt ( long, default_value = "localhost" ) ]
29+ #[ arg ( long, default_value = "localhost" ) ]
2930 metric_host : String ,
3031
31- #[ structopt ( long, default_value = "9100" ) ]
32+ #[ arg ( long, default_value = "9100" ) ]
3233 metric_port : u16 ,
3334
34- #[ structopt ( long, help = "leave empty to disable it" ) ]
35+ #[ arg ( long, help = "leave empty to disable it" ) ]
3536 inline_metadata_size : Option < usize > ,
3637
37- #[ structopt ( long, requires ( "secret-key" ) , display_order = 1000 ) ]
38+ #[ arg ( long, required = true , display_order = 1000 ) ]
3839 access_key : Option < String > ,
3940
40- #[ structopt ( long, requires ( "access-key" ) , display_order = 1000 ) ]
41+ #[ arg ( long, required = true , display_order = 1000 ) ]
4142 secret_key : Option < String > ,
4243
43- #[ structopt (
44+ #[ arg (
4445 long,
4546 default_value = "fjall" ,
46- help = "Metadata DB (fjall, fjall_notx)"
47+ help = "Metadata DB (fjall, fjall_notx)"
4748 ) ]
4849 metadata_db : StorageEngine ,
4950
50- #[ structopt (
51+ #[ arg (
5152 long,
5253 default_value = "fdatasync" ,
5354 help = "Durability level (buffer, fsync, fdatasync)"
5455 ) ]
5556 durability : Durability ,
57+
58+ #[ command( subcommand) ]
59+ command : Option < Command > ,
60+ }
61+
62+ #[ derive( Debug , Subcommand ) ]
63+ pub enum Command {
64+ // TODO: inspect DB
65+ Inspect ,
5666}
5767
5868fn setup_tracing ( ) {
@@ -67,18 +77,24 @@ fn main() -> Result<()> {
6777 dotenv:: dotenv ( ) . ok ( ) ;
6878
6979 setup_tracing ( ) ;
70-
71- let args: Args = Args :: from_args ( ) ;
72-
73- run ( args)
80+ let cli = Cli :: parse ( ) ;
81+ match cli. command {
82+ Some ( Command :: Inspect ) => {
83+ println ! ( "Inspecting" ) ;
84+ }
85+ None => {
86+ run ( cli) ?;
87+ }
88+ }
89+ Ok ( ( ) )
7490}
7591
7692use hyper_util:: rt:: { TokioExecutor , TokioIo } ;
7793use hyper_util:: server:: conn:: auto:: Builder as ConnBuilder ;
7894use s3s:: service:: S3ServiceBuilder ;
7995
8096#[ tokio:: main]
81- async fn run ( args : Args ) -> anyhow:: Result < ( ) > {
97+ async fn run ( args : Cli ) -> anyhow:: Result < ( ) > {
8298 let storage_engine = args. metadata_db ;
8399
84100 // provider
0 commit comments