1- use crate :: sagittarius:: test_execution_client_impl:: SagittariusTestExecutionServiceClient ;
21use crate :: { configuration:: Config as AquilaConfig , flow:: get_flow_identifier} ;
32use async_nats:: jetstream:: kv:: Config ;
43use code0_flow:: flow_config:: load_env_file;
@@ -31,8 +30,14 @@ async fn main() {
3130
3231 //Create connection to JetStream
3332 let client = match async_nats:: connect ( config. nats_url . clone ( ) ) . await {
34- Ok ( client) => client,
35- Err ( err) => panic ! ( "Failed to connect to NATS server: {}" , err) ,
33+ Ok ( client) => {
34+ log:: info!( "Connected to NATS" ) ;
35+ client
36+ }
37+ Err ( err) => {
38+ log:: error!( "Failed to connect to NATS: {:?}" , err) ;
39+ panic ! ( "Failed to connect to NATS server: {:?}" , err)
40+ }
3641 } ;
3742
3843 let jet_stream = async_nats:: jetstream:: new ( client. clone ( ) ) ;
@@ -45,47 +50,60 @@ async fn main() {
4550 . await ;
4651
4752 let kv_store = match jet_stream. get_key_value ( config. nats_bucket . clone ( ) ) . await {
48- Ok ( kv) => Arc :: new ( kv) ,
49- Err ( err) => panic ! ( "Failed to get key-value store: {}" , err) ,
53+ Ok ( kv) => {
54+ log:: info!( "Connected to JetStream" ) ;
55+ Arc :: new ( kv)
56+ }
57+ Err ( err) => {
58+ log:: error!( "Failed to get key-value store: {:?}" , err) ;
59+ panic ! ( "Failed to get key-value store: {:?}" , err)
60+ }
5061 } ;
5162
52- //Create connection to Sagittarius if the type is hybrid
53- if !config. is_static ( ) {
54- let server = AquilaGRPCServer :: new ( & config) ;
55-
56- match server. start ( ) . await {
57- Ok ( _) => {
58- log:: info!( "Server started successfully" ) ;
59- }
60- Err ( err) => {
61- log:: error!( "Failed to start server: {:?}" , err) ;
62- panic ! ( "Failed to start server" ) ;
63- }
64- } ;
63+ if config. is_static ( ) {
64+ log:: info!( "Starting with static configuration" ) ;
65+ init_flows_from_json ( config. flow_fallback_path , kv_store) . await ;
66+ return ;
67+ }
6568
66- // Connect to Sagittarius Flow Endpoint
67- SagittariusFlowClient :: new (
68- config. backend_url . clone ( ) ,
69- kv_store. clone ( ) ,
70- config. runtime_token . clone ( ) ,
71- )
72- . await
73- . init_flow_stream ( )
74- . await ;
69+ let server = AquilaGRPCServer :: new ( & config) ;
70+ let backend_url_flow = config. backend_url . clone ( ) ;
71+ let runtime_token_flow = config. runtime_token . clone ( ) ;
72+ let kv_for_flow = kv_store. clone ( ) ;
7573
76- // Connect to Sagittarius Execution Endpoint
77- SagittariusTestExecutionServiceClient :: new (
78- client,
79- kv_store,
80- config. backend_url ,
81- config. runtime_token ,
82- )
83- . await
84- . logon ( )
85- . await ;
86- } else {
87- init_flows_from_json ( config. flow_fallback_path , kv_store) . await
74+ let mut server_task = tokio:: spawn ( async move {
75+ if let Err ( err) = server. start ( ) . await {
76+ log:: error!( "gRPC server error: {:?}" , err) ;
77+ } else {
78+ log:: info!( "gRPC server stopped gracefully" ) ;
79+ }
80+ } ) ;
81+
82+ let mut flow_task = tokio:: spawn ( async move {
83+ let mut flow_client =
84+ SagittariusFlowClient :: new ( backend_url_flow, kv_for_flow, runtime_token_flow) . await ;
85+
86+ flow_client. init_flow_stream ( ) . await ;
87+ log:: warn!( "Flow stream task exited" ) ;
88+ } ) ;
89+
90+ tokio:: select! {
91+ _ = & mut server_task => {
92+ log:: warn!( "gRPC server task finished, shutting down" ) ;
93+ flow_task. abort( ) ;
94+ }
95+ _ = & mut flow_task => {
96+ log:: warn!( "Flow stream task finished, shutting down" ) ;
97+ server_task. abort( ) ;
98+ }
99+ _ = tokio:: signal:: ctrl_c( ) => {
100+ log:: info!( "Ctrl+C/Exit signal received, shutting down" ) ;
101+ server_task. abort( ) ;
102+ flow_task. abort( ) ;
103+ }
88104 }
105+
106+ log:: info!( "Aquila shutdown complete" ) ;
89107}
90108
91109async fn init_flows_from_json (
0 commit comments