mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	refactor(router): Add IO level application logs (#4042)
This commit is contained in:
		| @ -150,7 +150,6 @@ impl | |||||||
|         _connectors: &settings::Connectors, |         _connectors: &settings::Connectors, | ||||||
|     ) -> CustomResult<RequestContent, errors::ConnectorError> { |     ) -> CustomResult<RequestContent, errors::ConnectorError> { | ||||||
|         let connector_req = stripe::StripeCreditTransferSourceRequest::try_from(req)?; |         let connector_req = stripe::StripeCreditTransferSourceRequest::try_from(req)?; | ||||||
|  |  | ||||||
|         Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) |         Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -850,6 +849,7 @@ impl | |||||||
|             } |             } | ||||||
|             _ => { |             _ => { | ||||||
|                 let connector_req = stripe::PaymentIntentRequest::try_from(req)?; |                 let connector_req = stripe::PaymentIntentRequest::try_from(req)?; | ||||||
|  |  | ||||||
|                 Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) |                 Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -137,7 +137,7 @@ async fn call_to_locker_for_fingerprint( | |||||||
|     let jwekey = state.conf.jwekey.get_inner(); |     let jwekey = state.conf.jwekey.get_inner(); | ||||||
|  |  | ||||||
|     let request = generate_fingerprint_request(jwekey, locker, payload, locker_choice).await?; |     let request = generate_fingerprint_request(jwekey, locker, payload, locker_choice).await?; | ||||||
|     let response = services::call_connector_api(state, request) |     let response = services::call_connector_api(state, request, "call_locker_to_get_fingerprint") | ||||||
|         .await |         .await | ||||||
|         .change_context(errors::VaultError::GenerateFingerprintFailed); |         .change_context(errors::VaultError::GenerateFingerprintFailed); | ||||||
|     let jwe_body: encryption::JweBody = response |     let jwe_body: encryption::JweBody = response | ||||||
|  | |||||||
| @ -71,7 +71,7 @@ impl HealthCheckInterface for app::AppState { | |||||||
|             let mut url = locker.host_rs.to_owned(); |             let mut url = locker.host_rs.to_owned(); | ||||||
|             url.push_str(consts::LOCKER_HEALTH_CALL_PATH); |             url.push_str(consts::LOCKER_HEALTH_CALL_PATH); | ||||||
|             let request = services::Request::new(services::Method::Get, &url); |             let request = services::Request::new(services::Method::Get, &url); | ||||||
|             services::call_connector_api(self, request) |             services::call_connector_api(self, request, "health_check_for_locker") | ||||||
|                 .await |                 .await | ||||||
|                 .change_context(errors::HealthCheckLockerError::FailedToCallLocker)? |                 .change_context(errors::HealthCheckLockerError::FailedToCallLocker)? | ||||||
|                 .map_err(|_| { |                 .map_err(|_| { | ||||||
| @ -126,7 +126,7 @@ impl HealthCheckInterface for app::AppState { | |||||||
|         &self, |         &self, | ||||||
|     ) -> CustomResult<HealthState, errors::HealthCheckOutGoing> { |     ) -> CustomResult<HealthState, errors::HealthCheckOutGoing> { | ||||||
|         let request = services::Request::new(services::Method::Get, consts::OUTGOING_CALL_URL); |         let request = services::Request::new(services::Method::Get, consts::OUTGOING_CALL_URL); | ||||||
|         services::call_connector_api(self, request) |         services::call_connector_api(self, request, "outgoing_health_check") | ||||||
|             .await |             .await | ||||||
|             .map_err(|err| errors::HealthCheckOutGoing::OutGoingFailed { |             .map_err(|err| errors::HealthCheckOutGoing::OutGoingFailed { | ||||||
|                 message: err.to_string(), |                 message: err.to_string(), | ||||||
|  | |||||||
| @ -746,7 +746,7 @@ pub async fn get_payment_method_from_hs_locker<'a>( | |||||||
|         .await |         .await | ||||||
|         .change_context(errors::VaultError::FetchPaymentMethodFailed) |         .change_context(errors::VaultError::FetchPaymentMethodFailed) | ||||||
|         .attach_printable("Making get payment method request failed")?; |         .attach_printable("Making get payment method request failed")?; | ||||||
|         let response = services::call_connector_api(state, request) |         let response = services::call_connector_api(state, request, "add_card_to_locker") | ||||||
|             .await |             .await | ||||||
|             .change_context(errors::VaultError::FetchPaymentMethodFailed) |             .change_context(errors::VaultError::FetchPaymentMethodFailed) | ||||||
|             .attach_printable("Failed while executing call_connector_api for get_card"); |             .attach_printable("Failed while executing call_connector_api for get_card"); | ||||||
| @ -798,7 +798,7 @@ pub async fn call_to_locker_hs<'a>( | |||||||
|         let request = |         let request = | ||||||
|             payment_methods::mk_add_locker_request_hs(jwekey, locker, payload, locker_choice) |             payment_methods::mk_add_locker_request_hs(jwekey, locker, payload, locker_choice) | ||||||
|                 .await?; |                 .await?; | ||||||
|         let response = services::call_connector_api(state, request) |         let response = services::call_connector_api(state, request, "add_card_to_hs_locker") | ||||||
|             .await |             .await | ||||||
|             .change_context(errors::VaultError::SaveCardFailed); |             .change_context(errors::VaultError::SaveCardFailed); | ||||||
|  |  | ||||||
| @ -864,7 +864,7 @@ pub async fn get_card_from_hs_locker<'a>( | |||||||
|         .await |         .await | ||||||
|         .change_context(errors::VaultError::FetchCardFailed) |         .change_context(errors::VaultError::FetchCardFailed) | ||||||
|         .attach_printable("Making get card request failed")?; |         .attach_printable("Making get card request failed")?; | ||||||
|         let response = services::call_connector_api(state, request) |         let response = services::call_connector_api(state, request, "get_card_from_locker") | ||||||
|             .await |             .await | ||||||
|             .change_context(errors::VaultError::FetchCardFailed) |             .change_context(errors::VaultError::FetchCardFailed) | ||||||
|             .attach_printable("Failed while executing call_connector_api for get_card"); |             .attach_printable("Failed while executing call_connector_api for get_card"); | ||||||
| @ -916,7 +916,7 @@ pub async fn delete_card_from_hs_locker<'a>( | |||||||
|     .attach_printable("Making delete card request failed")?; |     .attach_printable("Making delete card request failed")?; | ||||||
|  |  | ||||||
|     if !locker.mock_locker { |     if !locker.mock_locker { | ||||||
|         let response = services::call_connector_api(state, request) |         let response = services::call_connector_api(state, request, "delete_card_from_locker") | ||||||
|             .await |             .await | ||||||
|             .change_context(errors::ApiErrorResponse::InternalServerError) |             .change_context(errors::ApiErrorResponse::InternalServerError) | ||||||
|             .attach_printable("Failed while executing call_connector_api for delete card"); |             .attach_printable("Failed while executing call_connector_api for delete card"); | ||||||
|  | |||||||
| @ -259,7 +259,12 @@ async fn create_applepay_session_token( | |||||||
|             apple_pay_merchant_cert, |             apple_pay_merchant_cert, | ||||||
|             apple_pay_merchant_cert_key, |             apple_pay_merchant_cert_key, | ||||||
|         )?; |         )?; | ||||||
|         let response = services::call_connector_api(state, applepay_session_request).await; |         let response = services::call_connector_api( | ||||||
|  |             state, | ||||||
|  |             applepay_session_request, | ||||||
|  |             "create_apple_pay_session_token", | ||||||
|  |         ) | ||||||
|  |         .await; | ||||||
|  |  | ||||||
|         // logging the error if present in session call response |         // logging the error if present in session call response | ||||||
|         log_session_response_if_error(&response); |         log_session_response_if_error(&response); | ||||||
|  | |||||||
| @ -46,7 +46,12 @@ pub async fn verify_merchant_creds_for_applepay( | |||||||
|         .add_certificate_key(Some(key_data)) |         .add_certificate_key(Some(key_data)) | ||||||
|         .build(); |         .build(); | ||||||
|  |  | ||||||
|     let response = services::call_connector_api(&state, apple_pay_merch_verification_req).await; |     let response = services::call_connector_api( | ||||||
|  |         &state, | ||||||
|  |         apple_pay_merch_verification_req, | ||||||
|  |         "verify_merchant_creds_for_applepay", | ||||||
|  |     ) | ||||||
|  |     .await; | ||||||
|     utils::log_applepay_verification_response_if_error(&response); |     utils::log_applepay_verification_response_if_error(&response); | ||||||
|  |  | ||||||
|     let applepay_response = |     let applepay_response = | ||||||
|  | |||||||
| @ -379,11 +379,13 @@ where | |||||||
|                     }; |                     }; | ||||||
|                     let request_url = request.url.clone(); |                     let request_url = request.url.clone(); | ||||||
|                     let request_method = request.method; |                     let request_method = request.method; | ||||||
|  |  | ||||||
|                     let current_time = Instant::now(); |                     let current_time = Instant::now(); | ||||||
|                     let response = call_connector_api(state, request).await; |                     let response = | ||||||
|  |                         call_connector_api(state, request, "execute_connector_processing_step") | ||||||
|  |                             .await; | ||||||
|                     let external_latency = current_time.elapsed().as_millis(); |                     let external_latency = current_time.elapsed().as_millis(); | ||||||
|                     logger::debug!(connector_response=?response); |                     logger::info!(raw_connector_request=?masked_request_body); | ||||||
|  |                     logger::info!(raw_connector_response=?response); | ||||||
|                     let status_code = response |                     let status_code = response | ||||||
|                         .as_ref() |                         .as_ref() | ||||||
|                         .map(|i| { |                         .map(|i| { | ||||||
| @ -563,16 +565,34 @@ where | |||||||
| pub async fn call_connector_api( | pub async fn call_connector_api( | ||||||
|     state: &AppState, |     state: &AppState, | ||||||
|     request: Request, |     request: Request, | ||||||
|  |     flow_name: &str, | ||||||
| ) -> CustomResult<Result<types::Response, types::Response>, errors::ApiClientError> { | ) -> CustomResult<Result<types::Response, types::Response>, errors::ApiClientError> { | ||||||
|     let current_time = Instant::now(); |     let current_time = Instant::now(); | ||||||
|  |     let headers = request.headers.clone(); | ||||||
|  |     let url = request.url.clone(); | ||||||
|     let response = state |     let response = state | ||||||
|         .api_client |         .api_client | ||||||
|         .send_request(state, request, None, true) |         .send_request(state, request, None, true) | ||||||
|         .await; |         .await; | ||||||
|  |  | ||||||
|  |     match response.as_ref() { | ||||||
|  |         Ok(resp) => { | ||||||
|  |             let status_code = resp.status().as_u16(); | ||||||
|             let elapsed_time = current_time.elapsed(); |             let elapsed_time = current_time.elapsed(); | ||||||
|     logger::info!(request_time=?elapsed_time); |             logger::info!( | ||||||
|  |                 headers=?headers, | ||||||
|  |                 url=?url, | ||||||
|  |                 status_code=?status_code, | ||||||
|  |                 flow=?flow_name, | ||||||
|  |                 elapsed_time=?elapsed_time | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |         Err(err) => { | ||||||
|  |             logger::info!( | ||||||
|  |                 call_connector_api_error=?err | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     handle_response(response).await |     handle_response(response).await | ||||||
| } | } | ||||||
| @ -583,7 +603,7 @@ pub async fn send_request( | |||||||
|     request: Request, |     request: Request, | ||||||
|     option_timeout_secs: Option<u64>, |     option_timeout_secs: Option<u64>, | ||||||
| ) -> CustomResult<reqwest::Response, errors::ApiClientError> { | ) -> CustomResult<reqwest::Response, errors::ApiClientError> { | ||||||
|     logger::debug!(method=?request.method, headers=?request.headers, payload=?request.body, ?request); |     logger::info!(method=?request.method, headers=?request.headers, payload=?request.body, ?request); | ||||||
|  |  | ||||||
|     let url = reqwest::Url::parse(&request.url) |     let url = reqwest::Url::parse(&request.url) | ||||||
|         .into_report() |         .into_report() | ||||||
|  | |||||||
| @ -35,7 +35,12 @@ where | |||||||
|     match connector_request { |     match connector_request { | ||||||
|         Some(request) => { |         Some(request) => { | ||||||
|             logger::debug!(connector_request=?request); |             logger::debug!(connector_request=?request); | ||||||
|             let response = services::api::call_connector_api(state, request).await; |             let response = services::api::call_connector_api( | ||||||
|  |                 state, | ||||||
|  |                 request, | ||||||
|  |                 "execute_connector_processing_step", | ||||||
|  |             ) | ||||||
|  |             .await; | ||||||
|             logger::debug!(connector_response=?response); |             logger::debug!(connector_response=?response); | ||||||
|             match response { |             match response { | ||||||
|                 Ok(body) => { |                 Ok(body) => { | ||||||
|  | |||||||
| @ -127,7 +127,8 @@ pub trait VerifyConnector { | |||||||
|             })? |             })? | ||||||
|             .ok_or(errors::ApiErrorResponse::InternalServerError)?; |             .ok_or(errors::ApiErrorResponse::InternalServerError)?; | ||||||
|  |  | ||||||
|         let response = services::call_connector_api(&state.to_owned(), request) |         let response = | ||||||
|  |             services::call_connector_api(&state.to_owned(), request, "verify_connector_request") | ||||||
|                 .await |                 .await | ||||||
|                 .change_context(errors::ApiErrorResponse::InternalServerError)?; |                 .change_context(errors::ApiErrorResponse::InternalServerError)?; | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ impl VerifyConnector for connector::Paypal { | |||||||
|             })? |             })? | ||||||
|             .ok_or(errors::ApiErrorResponse::InternalServerError)?; |             .ok_or(errors::ApiErrorResponse::InternalServerError)?; | ||||||
|  |  | ||||||
|         let response = services::call_connector_api(&state.to_owned(), request) |         let response = services::call_connector_api(&state.to_owned(), request, "get_access_token") | ||||||
|             .await |             .await | ||||||
|             .change_context(errors::ApiErrorResponse::InternalServerError)?; |             .change_context(errors::ApiErrorResponse::InternalServerError)?; | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Sahkal Poddar
					Sahkal Poddar