mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 04:04:55 +08:00
feat: add relevant ids for payment calls & make json logs (#908)
This commit is contained in:
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -2767,7 +2767,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry"
|
||||
version = "0.18.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"opentelemetry_api",
|
||||
"opentelemetry_sdk",
|
||||
@ -2776,7 +2776,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry-otlp"
|
||||
version = "0.11.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"futures",
|
||||
@ -2793,7 +2793,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry-proto"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"futures-util",
|
||||
@ -2805,7 +2805,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry_api"
|
||||
version = "0.18.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"futures-channel",
|
||||
@ -2820,7 +2820,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry_sdk"
|
||||
version = "0.18.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"crossbeam-channel",
|
||||
|
||||
@ -728,6 +728,23 @@ pub enum PaymentIdType {
|
||||
PaymentAttemptId(String),
|
||||
}
|
||||
|
||||
impl std::fmt::Display for PaymentIdType {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
Self::PaymentIntentId(payment_id) => {
|
||||
write!(f, "payment_intent_id = \"{payment_id}\"")
|
||||
}
|
||||
Self::ConnectorTransactionId(connector_transaction_id) => write!(
|
||||
f,
|
||||
"connector_transaction_id = \"{connector_transaction_id}\""
|
||||
),
|
||||
Self::PaymentAttemptId(payment_attempt_id) => {
|
||||
write!(f, "payment_attempt_id = \"{payment_attempt_id}\"")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for PaymentIdType {
|
||||
fn default() -> Self {
|
||||
Self::PaymentIntentId(Default::default())
|
||||
|
||||
@ -9,7 +9,7 @@ use std::{fmt::Debug, marker::PhantomData, time::Instant};
|
||||
use api_models::payments::Metadata;
|
||||
use error_stack::{IntoReport, ResultExt};
|
||||
use futures::future::join_all;
|
||||
use router_env::tracing;
|
||||
use router_env::{instrument, tracing};
|
||||
use time;
|
||||
|
||||
pub use self::operations::{
|
||||
@ -38,6 +38,7 @@ use crate::{
|
||||
utils::{Encode, OptionExt, ValueExt},
|
||||
};
|
||||
|
||||
#[instrument(skip_all, fields(payment_id, merchant_id))]
|
||||
pub async fn payments_operation_core<F, Req, Op, FData>(
|
||||
state: &AppState,
|
||||
merchant_account: storage::MerchantAccount,
|
||||
@ -63,11 +64,13 @@ where
|
||||
{
|
||||
let operation: BoxedOperation<'_, F, Req> = Box::new(operation);
|
||||
|
||||
tracing::Span::current().record("merchant_id", merchant_account.merchant_id.as_str());
|
||||
|
||||
let (operation, validate_result) = operation
|
||||
.to_validate_request()?
|
||||
.validate_request(&req, &merchant_account)?;
|
||||
|
||||
tracing::Span::current().record("payment_id", &format!("{:?}", validate_result.payment_id));
|
||||
tracing::Span::current().record("payment_id", &format!("{}", validate_result.payment_id));
|
||||
|
||||
let (operation, mut payment_data, customer_details) = operation
|
||||
.to_get_tracker()?
|
||||
|
||||
@ -40,3 +40,4 @@ default = ["actix_web"]
|
||||
actix_web = ["tracing-actix-web"]
|
||||
log_custom_entries_to_extra = []
|
||||
log_extra_implicit_fields = []
|
||||
log_active_span_json = []
|
||||
|
||||
@ -13,7 +13,7 @@ use serde::ser::{SerializeMap, Serializer};
|
||||
use serde_json::Value;
|
||||
// use time::format_description::well_known::Rfc3339;
|
||||
use time::format_description::well_known::Iso8601;
|
||||
use tracing::{Event, Id, Metadata, Subscriber};
|
||||
use tracing::{Event, Metadata, Subscriber};
|
||||
use tracing_subscriber::{
|
||||
fmt::MakeWriter,
|
||||
layer::Context,
|
||||
@ -282,6 +282,7 @@ where
|
||||
}
|
||||
|
||||
/// Serialize entries of span.
|
||||
#[cfg(feature = "log_active_span_json")]
|
||||
fn span_serialize<S>(
|
||||
&self,
|
||||
span: &SpanRef<'_, S>,
|
||||
@ -407,14 +408,16 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
fn on_enter(&self, id: &Id, ctx: Context<'_, S>) {
|
||||
#[cfg(feature = "log_active_span_json")]
|
||||
fn on_enter(&self, id: &tracing::Id, ctx: Context<'_, S>) {
|
||||
let span = ctx.span(id).expect("No span");
|
||||
if let Ok(serialized) = self.span_serialize(&span, RecordType::EnterSpan) {
|
||||
let _ = self.flush(serialized);
|
||||
}
|
||||
}
|
||||
|
||||
fn on_close(&self, id: Id, ctx: Context<'_, S>) {
|
||||
#[cfg(feature = "log_active_span_json")]
|
||||
fn on_close(&self, id: tracing::Id, ctx: Context<'_, S>) {
|
||||
let span = ctx.span(&id).expect("No span");
|
||||
if let Ok(serialized) = self.span_serialize(&span, RecordType::ExitSpan) {
|
||||
let _ = self.flush(serialized);
|
||||
|
||||
Reference in New Issue
Block a user