11use std:: { process:: exit, sync:: Arc } ;
22
33use aisix:: { config:: Config , * } ;
4+ use anyhow:: { Context , Result } ;
45use axum:: Router ;
56use clap:: Parser ;
67use log:: { error, info} ;
@@ -15,16 +16,17 @@ struct Args {
1516}
1617
1718#[ tokio:: main]
18- async fn main ( ) {
19+ async fn main ( ) -> Result < ( ) > {
1920 let args = Args :: parse ( ) ;
2021
21- let ( ob_shutdown_signal, ob_shutdown_task) = init_observability ( ) ;
22+ let ( ob_shutdown_signal, ob_shutdown_task) =
23+ init_observability ( ) . context ( "failed to initialize observability" ) ?;
2224
23- let config = Arc :: new ( config:: load ( args. config ) . expect ( "Failed to load configuration") ) ;
25+ let config = Arc :: new ( config:: load ( args. config ) . context ( "failed to load configuration") ? ) ;
2426
2527 let config_provider = config:: create_provider ( & config)
2628 . await
27- . expect ( "Failed to create config provider") ;
29+ . context ( "failed to create config provider") ? ;
2830 let resources =
2931 Arc :: new ( config:: entities:: ResourceRegistry :: new ( config_provider. clone ( ) ) . await ) ;
3032
@@ -35,8 +37,11 @@ async fn main() {
3537
3638 let mut exception = false ;
3739 select ! {
38- _ = tokio:: signal:: ctrl_c( ) => {
39- info!( "Stopping, see you next time!" ) ;
40+ res = tokio:: signal:: ctrl_c( ) => {
41+ if let Err ( e) = res {
42+ error!( "Failed to listen for shutdown signal: {}" , e) ;
43+ exception = true ;
44+ }
4045 }
4146 res = serve_proxy( config. clone( ) , proxy_router. clone( ) ) => {
4247 if let Err ( e) = res {
@@ -57,14 +62,16 @@ async fn main() {
5762 exception = true ;
5863 }
5964
65+ info ! ( "Stopping, see you next time!" ) ;
6066 let _ = ob_shutdown_signal. send ( ( ) ) ;
6167 ob_shutdown_task
6268 . await
63- . expect ( "Failed to shutdown observability" ) ;
69+ . context ( "failed to shutdown observability" ) ?;
70+
6471 exit ( if exception { 1 } else { 0 } ) ;
6572}
6673
67- fn init_observability ( ) -> ( oneshot:: Sender < ( ) > , tokio:: task:: JoinHandle < ( ) > ) {
74+ fn init_observability ( ) -> Result < ( oneshot:: Sender < ( ) > , tokio:: task:: JoinHandle < ( ) > ) > {
6875 use std:: { borrow:: Cow , time:: Duration } ;
6976
7077 use fastrace:: collector:: Config ;
@@ -89,7 +96,7 @@ fn init_observability() -> (oneshot::Sender<()>, tokio::task::JoinHandle<()>) {
8996 // log
9097 logforth:: starter_log:: builder ( )
9198 . dispatch ( |d| {
92- d. filter ( EnvFilterBuilder :: from_default_env_or ( "info" ) . build ( ) )
99+ d. filter ( EnvFilterBuilder :: from_default_env_or ( "info,opentelemetry_sdk=off " ) . build ( ) )
93100 . append ( Stdout :: default ( ) . with_layout ( TextLayout :: default ( ) ) )
94101 } )
95102 . dispatch ( |d| {
@@ -102,7 +109,7 @@ fn init_observability() -> (oneshot::Sender<()>, tokio::task::JoinHandle<()>) {
102109 let reporter = OpenTelemetryReporter :: new (
103110 SpanExporter :: builder ( )
104111 . build ( )
105- . expect ( " initialize otlp exporter") ,
112+ . context ( "failed to initialize otlp exporter") ? ,
106113 Cow :: Owned ( Resource :: builder ( ) . build ( ) ) ,
107114 InstrumentationScope :: builder ( INSTRUMENTATION_NAME )
108115 . with_version ( env ! ( "CARGO_PKG_VERSION" ) )
@@ -114,20 +121,18 @@ fn init_observability() -> (oneshot::Sender<()>, tokio::task::JoinHandle<()>) {
114121 ) ;
115122
116123 // metric
117- let exporter = opentelemetry_otlp:: MetricExporter :: builder ( )
118- . build ( )
119- . unwrap ( ) ;
124+ let exporter = opentelemetry_otlp:: MetricExporter :: builder ( ) . build ( ) ?;
120125
121126 let reader = PeriodicReader :: builder ( exporter) . build ( ) ;
122127
123128 let meter_provider = SdkMeterProvider :: builder ( ) . with_reader ( reader) . build ( ) ;
124129 let meter = meter_provider. meter ( INSTRUMENTATION_NAME ) ;
125130
126131 metrics:: set_global_recorder ( OpenTelemetryRecorder :: new ( meter) )
127- . expect ( " initialize metrics recorder") ;
132+ . context ( "failed to initialize metrics recorder") ? ;
128133 utils:: metrics:: describe_metrics ( ) ;
129134
130- // shuting down signal handler
135+ // shutting down signal handler
131136 let shutdown_handle = tokio:: spawn ( async move {
132137 let _ = rx. await ;
133138
@@ -141,7 +146,7 @@ fn init_observability() -> (oneshot::Sender<()>, tokio::task::JoinHandle<()>) {
141146 logforth:: core:: default_logger ( ) . exit ( ) ;
142147 } ) ;
143148
144- ( tx, shutdown_handle)
149+ Ok ( ( tx, shutdown_handle) )
145150}
146151
147152async fn serve_proxy ( config : Arc < Config > , router : Router ) -> Result < ( ) , std:: io:: Error > {
0 commit comments