From ad17cc738372e7397d73d6f55cae56beafa4e849 Mon Sep 17 00:00:00 2001 From: Sahkal Poddar Date: Thu, 14 Mar 2024 12:24:41 +0530 Subject: [PATCH] refactor(router): Add IO level application logs (#4042) --- crates/router/src/connector/stripe.rs | 2 +- .../router/src/core/blocklist/transformers.rs | 2 +- crates/router/src/core/health_check.rs | 4 +-- .../router/src/core/payment_methods/cards.rs | 8 ++--- .../src/core/payments/flows/session_flow.rs | 7 +++- crates/router/src/core/verification.rs | 7 +++- crates/router/src/services/api.rs | 34 +++++++++++++++---- crates/router/src/services/pm_auth.rs | 7 +++- .../router/src/types/api/verify_connector.rs | 7 ++-- .../src/types/api/verify_connector/paypal.rs | 2 +- 10 files changed, 58 insertions(+), 22 deletions(-) diff --git a/crates/router/src/connector/stripe.rs b/crates/router/src/connector/stripe.rs index 389e773da5..7718c2fc72 100644 --- a/crates/router/src/connector/stripe.rs +++ b/crates/router/src/connector/stripe.rs @@ -150,7 +150,6 @@ impl _connectors: &settings::Connectors, ) -> CustomResult { let connector_req = stripe::StripeCreditTransferSourceRequest::try_from(req)?; - Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) } @@ -850,6 +849,7 @@ impl } _ => { let connector_req = stripe::PaymentIntentRequest::try_from(req)?; + Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) } } diff --git a/crates/router/src/core/blocklist/transformers.rs b/crates/router/src/core/blocklist/transformers.rs index 6d6834f0b6..a2583e5b60 100644 --- a/crates/router/src/core/blocklist/transformers.rs +++ b/crates/router/src/core/blocklist/transformers.rs @@ -137,7 +137,7 @@ async fn call_to_locker_for_fingerprint( let jwekey = state.conf.jwekey.get_inner(); 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 .change_context(errors::VaultError::GenerateFingerprintFailed); let jwe_body: encryption::JweBody = response diff --git a/crates/router/src/core/health_check.rs b/crates/router/src/core/health_check.rs index 3be764ef66..9997c6261f 100644 --- a/crates/router/src/core/health_check.rs +++ b/crates/router/src/core/health_check.rs @@ -71,7 +71,7 @@ impl HealthCheckInterface for app::AppState { let mut url = locker.host_rs.to_owned(); url.push_str(consts::LOCKER_HEALTH_CALL_PATH); 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 .change_context(errors::HealthCheckLockerError::FailedToCallLocker)? .map_err(|_| { @@ -126,7 +126,7 @@ impl HealthCheckInterface for app::AppState { &self, ) -> CustomResult { 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 .map_err(|err| errors::HealthCheckOutGoing::OutGoingFailed { message: err.to_string(), diff --git a/crates/router/src/core/payment_methods/cards.rs b/crates/router/src/core/payment_methods/cards.rs index 4c38e41e9b..60abf0701a 100644 --- a/crates/router/src/core/payment_methods/cards.rs +++ b/crates/router/src/core/payment_methods/cards.rs @@ -746,7 +746,7 @@ pub async fn get_payment_method_from_hs_locker<'a>( .await .change_context(errors::VaultError::FetchPaymentMethodFailed) .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 .change_context(errors::VaultError::FetchPaymentMethodFailed) .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 = payment_methods::mk_add_locker_request_hs(jwekey, locker, payload, locker_choice) .await?; - let response = services::call_connector_api(state, request) + let response = services::call_connector_api(state, request, "add_card_to_hs_locker") .await .change_context(errors::VaultError::SaveCardFailed); @@ -864,7 +864,7 @@ pub async fn get_card_from_hs_locker<'a>( .await .change_context(errors::VaultError::FetchCardFailed) .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 .change_context(errors::VaultError::FetchCardFailed) .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")?; 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 .change_context(errors::ApiErrorResponse::InternalServerError) .attach_printable("Failed while executing call_connector_api for delete card"); diff --git a/crates/router/src/core/payments/flows/session_flow.rs b/crates/router/src/core/payments/flows/session_flow.rs index e29b66ea0c..4321c0c091 100644 --- a/crates/router/src/core/payments/flows/session_flow.rs +++ b/crates/router/src/core/payments/flows/session_flow.rs @@ -259,7 +259,12 @@ async fn create_applepay_session_token( apple_pay_merchant_cert, 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 log_session_response_if_error(&response); diff --git a/crates/router/src/core/verification.rs b/crates/router/src/core/verification.rs index 04ccdc32f2..3f738df592 100644 --- a/crates/router/src/core/verification.rs +++ b/crates/router/src/core/verification.rs @@ -46,7 +46,12 @@ pub async fn verify_merchant_creds_for_applepay( .add_certificate_key(Some(key_data)) .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); let applepay_response = diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs index 00558e6c4f..3b987452c9 100644 --- a/crates/router/src/services/api.rs +++ b/crates/router/src/services/api.rs @@ -379,11 +379,13 @@ where }; let request_url = request.url.clone(); let request_method = request.method; - 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(); - logger::debug!(connector_response=?response); + logger::info!(raw_connector_request=?masked_request_body); + logger::info!(raw_connector_response=?response); let status_code = response .as_ref() .map(|i| { @@ -563,16 +565,34 @@ where pub async fn call_connector_api( state: &AppState, request: Request, + flow_name: &str, ) -> CustomResult, errors::ApiClientError> { let current_time = Instant::now(); - + let headers = request.headers.clone(); + let url = request.url.clone(); let response = state .api_client .send_request(state, request, None, true) .await; - let elapsed_time = current_time.elapsed(); - logger::info!(request_time=?elapsed_time); + match response.as_ref() { + Ok(resp) => { + let status_code = resp.status().as_u16(); + let elapsed_time = current_time.elapsed(); + 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 } @@ -583,7 +603,7 @@ pub async fn send_request( request: Request, option_timeout_secs: Option, ) -> CustomResult { - 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) .into_report() diff --git a/crates/router/src/services/pm_auth.rs b/crates/router/src/services/pm_auth.rs index 7487b12663..91b752aaf1 100644 --- a/crates/router/src/services/pm_auth.rs +++ b/crates/router/src/services/pm_auth.rs @@ -35,7 +35,12 @@ where match connector_request { Some(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); match response { Ok(body) => { diff --git a/crates/router/src/types/api/verify_connector.rs b/crates/router/src/types/api/verify_connector.rs index bf2053353a..62cdb7c7e1 100644 --- a/crates/router/src/types/api/verify_connector.rs +++ b/crates/router/src/types/api/verify_connector.rs @@ -127,9 +127,10 @@ pub trait VerifyConnector { })? .ok_or(errors::ApiErrorResponse::InternalServerError)?; - let response = services::call_connector_api(&state.to_owned(), request) - .await - .change_context(errors::ApiErrorResponse::InternalServerError)?; + let response = + services::call_connector_api(&state.to_owned(), request, "verify_connector_request") + .await + .change_context(errors::ApiErrorResponse::InternalServerError)?; match response { Ok(_) => Ok(services::ApplicationResponse::StatusOk), diff --git a/crates/router/src/types/api/verify_connector/paypal.rs b/crates/router/src/types/api/verify_connector/paypal.rs index 721562bd4a..2cb2a8061d 100644 --- a/crates/router/src/types/api/verify_connector/paypal.rs +++ b/crates/router/src/types/api/verify_connector/paypal.rs @@ -27,7 +27,7 @@ impl VerifyConnector for connector::Paypal { })? .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 .change_context(errors::ApiErrorResponse::InternalServerError)?;