11
2+ use std:: sync:: { Arc , Mutex } ;
3+
24use super :: gateway_node_queries;
35use crate :: {
4- api:: sync:: TCPDefaultResponse ,
5- client:: { Client , ClientError , Result as TCPResult } ,
6- config,
6+ api:: sync:: HTTPCResponse ,
7+ config, module:: httpc:: HttpC ,
78} ;
89use log:: { error, info, warn} ;
910
10- /// Syncs all gateway nodes to the registry server
11- ///
12- /// This function retrieves all gateway nodes by joining data from multiple tables,
13- /// then sends the collected data to the gateway registry server via TCP.
14- ///
15- /// # Returns
16- ///
17- /// * `Ok(())` - If the data was successfully sent to the registry server
18- /// * `Err(ClientError)` - If there was an error retrieving or sending the data
19- ///
20- /// # Errors
21- ///
22- /// This function will return an error if:
23- /// - Database queries fail
24- /// - Connection to the registry server cannot be established
25- /// - Data transmission fails
26- pub async fn sync_gateway_nodes_to_registry ( ) -> TCPResult < TCPDefaultResponse > {
11+ pub async fn sync_gateway_nodes_to_registry ( client : & Arc < Mutex < HttpC > > ) -> Result < HTTPCResponse , HTTPCResponse > {
2712 log:: info!( "Syncing gateway nodes to registry..." ) ;
2813
2914 let gateway_nodes = match gateway_node_queries:: get_all_gateway_nodes ( ) {
3015 Ok ( nodes) => nodes,
3116 Err ( e) => {
3217 error ! ( "Failed to retrieve gateway nodes from database: {}" , e) ;
33- return Err ( ClientError :: ProtocolError ( format ! ( "Database error: {}" , e) ) ) ;
18+ return Err ( HTTPCResponse {
19+ status : "error" . to_string ( ) ,
20+ message : format ! ( "Database error: {}" , e) ,
21+ } ) ;
3422 }
3523 } ;
3624
@@ -42,54 +30,46 @@ pub async fn sync_gateway_nodes_to_registry() -> TCPResult<TCPDefaultResponse> {
4230
4331 // Create the payload with the nodes
4432 let payload = gateway_nodes. clone ( ) ;
45-
46- // Create a new client instance
47- let mut client = Client :: new ( ) ;
48-
49- let server_address = config:: Api :: TCPAddress . get_str ( ) ;
50-
51- // Connect to the server without timeout
52- match client. connect ( server_address) . await {
53- Ok ( _) => info ! ( "Connected to registry server at {}" , server_address) ,
33+ let payload_str = match serde_json:: to_string ( & payload) {
34+ Ok ( json) => json,
5435 Err ( e) => {
55- error ! ( "Failed to connect to registry server: {}" , e) ;
56- return Err ( e) ;
36+ error ! ( "Failed to serialize proxy nodes to JSON: {}" , e) ;
37+ return Err ( HTTPCResponse {
38+ status : "error" . to_string ( ) ,
39+ message : format ! ( "Serialization error: {}" , e) ,
40+ } ) ;
5741 }
58- }
59-
60- // Create a new client with the service set using builder pattern
61- let mut client = client. service ( "registry" ) ;
42+ } ;
6243
63- // Send the payload to the "gateway" endpoint without timeout
64- match client. action :: < _ , TCPDefaultResponse > ( "gwnode" , & payload) . await {
65- Ok ( data) => {
66- info ! (
67- "Successfully sent {} gateway nodes to registry" ,
68- gateway_nodes. len( )
69- ) ;
70- // Close the current client
71- if let Err ( e) = client. close ( ) . await {
72- warn ! ( "Error closing client connection: {}" , e) ;
73- }
74- Ok ( data)
75- }
76- Err ( e) => {
77- error ! ( "Failed to send gateway nodes to registry: {}" , e) ;
78- if let Err ( close_err) = client. close ( ) . await {
79- warn ! ( "Error closing client connection: {}" , close_err) ;
80- }
81- Err ( e)
44+ let _ = match client. lock ( ) {
45+ Ok ( client) =>{
46+ let _ = client. post_text ( "/gateway/node" , & payload_str) ;
47+ info ! ( "Successfully sent proxy nodes to registry" ) ;
48+ } ,
49+ Err ( e) =>{
50+ error ! ( "Failed to lock HTTP client: {}" , e) ;
51+ return Err ( HTTPCResponse {
52+ status : "error" . to_string ( ) ,
53+ message : format ! ( "Client lock error: {}" , e) ,
54+ } ) ;
8255 }
83- }
56+ } ;
57+ Ok ( HTTPCResponse {
58+ status : "success" . to_string ( ) ,
59+ message : format ! ( "Successfully synced gateway nodes" ) ,
60+ } )
8461}
8562
86- pub async fn sync_gateway_paths_to_registry ( ) -> TCPResult < TCPDefaultResponse > {
63+ pub async fn sync_gateway_paths_to_registry ( client : & Arc < Mutex < HttpC > > ) -> Result < HTTPCResponse , HTTPCResponse > {
8764 // Get the gateway nodes from the database using our JOIN query
8865 let gateway_path = match gateway_node_queries:: get_all_gateway_paths ( ) {
8966 Ok ( nodes) => nodes,
9067 Err ( e) => {
9168 error ! ( "Failed to retrieve gateway paths from database: {}" , e) ;
92- return Err ( ClientError :: ProtocolError ( format ! ( "Database error: {}" , e) ) ) ;
69+ return Err ( HTTPCResponse {
70+ status : "error" . to_string ( ) ,
71+ message : format ! ( "Database error: {}" , e) ,
72+ } ) ;
9373 }
9474 } ;
9575
@@ -101,40 +81,33 @@ pub async fn sync_gateway_paths_to_registry() -> TCPResult<TCPDefaultResponse> {
10181
10282 // Create the payload with the nodes for the second action
10383 let payload = gateway_path. clone ( ) ;
104-
105- // Create a new client for the second action without timeout
106- let mut new_client = Client :: new ( ) ;
107- let server_address = config:: Api :: TCPAddress . get_str ( ) ;
108-
109- match new_client. connect ( server_address) . await {
110- Ok ( _) => info ! ( "Connected to registry server at {}" , server_address) ,
84+ let payload_str = match serde_json:: to_string ( & payload) {
85+ Ok ( json) => json,
11186 Err ( e) => {
112- error ! ( "Failed to connect to registry server for second action: {}" , e) ;
113- return Err ( e) ;
87+ error ! ( "Failed to serialize proxy nodes to JSON: {}" , e) ;
88+ return Err ( HTTPCResponse {
89+ status : "error" . to_string ( ) ,
90+ message : format ! ( "Serialization error: {}" , e) ,
91+ } ) ;
11492 }
115- }
116-
117- // Set service for new client
118- let mut new_client = new_client. service ( "registry" ) ;
93+ } ;
11994
120- // Send the second payload without timeout
121- match new_client . action :: < _ , TCPDefaultResponse > ( "gateway" , & payload ) . await {
122- Ok ( data ) => {
123- info ! (
124- "Successfully sent {} gateway paths to registry" ,
125- gateway_path . len ( )
126- ) ;
127- if let Err ( e ) = new_client . close ( ) . await {
128- warn ! ( "Error closing client connection: {}" , e ) ;
129- }
130- Ok ( data )
95+ let _ = match client . lock ( ) {
96+ Ok ( client ) => {
97+ let _ = client . post_text ( "/gateway/path" , & payload_str ) ;
98+ info ! ( "Successfully sent proxy nodes to registry" ) ;
99+ } ,
100+ Err ( e ) => {
101+ error ! ( "Failed to lock HTTP client: {}" , e ) ;
102+ return Err ( HTTPCResponse {
103+ status : "error" . to_string ( ) ,
104+ message : format ! ( "Client lock error: {}" , e ) ,
105+ } ) ;
131106 }
132- Err ( e) => {
133- error ! ( "Failed to send gateway paths to registry: {}" , e) ;
134- if let Err ( close_err) = new_client. close ( ) . await {
135- warn ! ( "Error closing client connection: {}" , close_err) ;
136- }
137- Err ( e)
138- }
139- }
107+ } ;
108+
109+ Ok ( HTTPCResponse {
110+ status : "success" . to_string ( ) ,
111+ message : format ! ( "Successfully synced gateway paths" ) ,
112+ } )
140113}
0 commit comments