@@ -66,6 +66,77 @@ pub fn run_openapi() -> Result<(), String> {
6666 . map_err ( |e| e. to_string ( ) )
6767}
6868
69+ #[ cfg( not( feature = "mock-only" ) ) ]
70+ async fn run_server (
71+ config_app : config:: Config ,
72+ config_dropshot : dropshot:: ConfigDropshot ,
73+ metrics_addr : Option < SocketAddr > ,
74+ vnc_addr : SocketAddr ,
75+ log : slog:: Logger ,
76+ ) -> anyhow:: Result < ( ) > {
77+ // Check that devices conform to expected API version
78+ propolis:: api_version:: check ( ) . context ( "API version checks" ) ?;
79+
80+ let vnc_server = setup_vnc ( & log, vnc_addr) ;
81+ let vnc_server_hdl = vnc_server. clone ( ) ;
82+ let use_reservoir = config:: reservoir_decide ( & log) ;
83+
84+ let config_metrics = metrics_addr. map ( |addr| {
85+ let imc =
86+ MetricsEndpointConfig :: new ( config_dropshot. bind_address , addr) ;
87+ info ! ( log, "Metrics server will use {:?}" , imc) ;
88+ imc
89+ } ) ;
90+
91+ let context = server:: DropshotEndpointContext :: new (
92+ config_app,
93+ vnc_server,
94+ use_reservoir,
95+ log. new ( slog:: o!( ) ) ,
96+ config_metrics,
97+ ) ;
98+
99+ info ! ( log, "Starting server..." ) ;
100+
101+ let server = HttpServerStarter :: new (
102+ & config_dropshot,
103+ server:: api ( ) ,
104+ Arc :: new ( context) ,
105+ & log,
106+ )
107+ . map_err ( |error| anyhow ! ( "Failed to start server: {}" , error) ) ?
108+ . start ( ) ;
109+
110+ let server_res = join ! ( server, vnc_server_hdl. start( ) ) . 0 ;
111+
112+ server_res. map_err ( |e| anyhow ! ( "Server exited with an error: {}" , e) )
113+ }
114+
115+ #[ cfg( feature = "mock-only" ) ]
116+ async fn run_server (
117+ config_app : config:: Config ,
118+ config_dropshot : dropshot:: ConfigDropshot ,
119+ _metrics_addr : Option < SocketAddr > ,
120+ _vnc_addr : SocketAddr ,
121+ log : slog:: Logger ,
122+ ) -> anyhow:: Result < ( ) > {
123+ let context = server:: Context :: new ( config_app, log. new ( slog:: o!( ) ) ) ;
124+
125+ info ! ( log, "Starting server..." ) ;
126+
127+ let server = HttpServerStarter :: new (
128+ & config_dropshot,
129+ server:: api ( ) ,
130+ Arc :: new ( context) ,
131+ & log,
132+ )
133+ . map_err ( |error| anyhow ! ( "Failed to start server: {}" , error) ) ?
134+ . start ( ) ;
135+
136+ let server_res = server. await ;
137+ server_res. map_err ( |e| anyhow ! ( "Server exited with an error: {}" , e) )
138+ }
139+
69140#[ tokio:: main]
70141async fn main ( ) -> anyhow:: Result < ( ) > {
71142 // Ensure proper setup of USDT probes
@@ -93,54 +164,8 @@ async fn main() -> anyhow::Result<()> {
93164 |error| anyhow ! ( "failed to create logger: {}" , error) ,
94165 ) ?;
95166
96- let context;
97- cfg_if:: cfg_if! {
98- if #[ cfg( not( feature = "mock-only" ) ) ] {
99- // Check that devices conform to expected API version
100- propolis:: api_version:: check( ) . context( "API version checks" ) ?;
101-
102- let vnc_server = setup_vnc( & log, vnc_addr) ;
103- let vnc_server_hdl = vnc_server. clone( ) ;
104- let use_reservoir = config:: reservoir_decide( & log) ;
105-
106- let metric_config = metric_addr. map( |addr| {
107- let imc = MetricsEndpointConfig :: new( propolis_addr, addr) ;
108- info!( log, "Metrics server will use {:?}" , imc) ;
109- imc
110- } ) ;
111- context = server:: DropshotEndpointContext :: new(
112- config,
113- vnc_server,
114- use_reservoir,
115- log. new( slog:: o!( ) ) ,
116- metric_config,
117- ) ;
118- } else {
119- context = server:: Context :: new( config, log. new( slog:: o!( ) ) ) ;
120- }
121- }
122-
123- info ! ( log, "Starting server..." ) ;
124-
125- let server = HttpServerStarter :: new (
126- & config_dropshot,
127- server:: api ( ) ,
128- Arc :: new ( context) ,
129- & log,
130- )
131- . map_err ( |error| anyhow ! ( "Failed to start server: {}" , error) ) ?
132- . start ( ) ;
133-
134- let server_res;
135- cfg_if:: cfg_if! {
136- if #[ cfg( not( feature = "mock-only" ) ) ] {
137- server_res = join!( server, vnc_server_hdl. start( ) ) . 0 ;
138- } else {
139- server_res = server. await ;
140- }
141- } ;
142- server_res
143- . map_err ( |e| anyhow ! ( "Server exited with an error: {}" , e) )
167+ run_server ( config, config_dropshot, metric_addr, vnc_addr, log)
168+ . await
144169 }
145170 }
146171}
0 commit comments