11use async_trait:: async_trait;
2+ use clap:: Parser ;
23use futures:: stream;
34use pgwire:: api:: Type ;
45use pgwire:: api:: auth:: StartupHandler ;
@@ -24,6 +25,19 @@ use crate::db::DB;
2425use crate :: parser as argus_parser;
2526use crate :: query:: { Statement , execute_plan} ;
2627
28+ /// ArgusDB Server
29+ #[ derive( Parser , Debug ) ]
30+ #[ command( author, version, about, long_about = None ) ]
31+ struct Args {
32+ /// Host to bind to
33+ #[ arg( short, long, default_value = "127.0.0.1" ) ]
34+ host : String ,
35+
36+ /// Port to bind to
37+ #[ arg( short, long, default_value_t = 5432 ) ]
38+ port : u16 ,
39+ }
40+
2741pub struct ArgusHandler {
2842 db : Arc < Mutex < DB > > ,
2943}
@@ -142,22 +156,21 @@ impl PgWireServerHandlers for ArgusProcessor {
142156
143157#[ tokio:: main]
144158async fn main ( ) {
159+ let args = Args :: parse ( ) ;
145160 let db = Arc :: new ( Mutex :: new ( DB :: new ( "argus_data" ) ) ) ;
146161 let handler = Arc :: new ( ArgusHandler :: new ( db) ) ;
147162 let processor = Arc :: new ( ArgusProcessor { handler } ) ;
148163
149- let server_addr = "127.0.0.1:5432" ;
150- let listener = TcpListener :: bind ( server_addr) . await . unwrap ( ) ;
164+ let server_addr = format ! ( "{}:{}" , args . host , args . port ) ;
165+ let listener = TcpListener :: bind ( & server_addr) . await . unwrap ( ) ;
151166 println ! ( "ArgusDB server listening on {}" , server_addr) ;
152167
153168 loop {
154169 let ( socket, _) = listener. accept ( ) . await . unwrap ( ) ;
155170 let processor = processor. clone ( ) ;
156171
157172 tokio:: spawn ( async move {
158- process_socket ( socket, None , processor)
159- . await
160- . expect ( "Failed to process socket" ) ;
173+ let _ = process_socket ( socket, None , processor) . await ;
161174 } ) ;
162175 }
163- }
176+ }
0 commit comments