mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
refactor(grpc): send x-tenant-id and x-request-id in grpc headers (#6904)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -6,6 +6,8 @@ pub mod dynamic_routing;
|
||||
pub mod health_check_client;
|
||||
use std::{fmt::Debug, sync::Arc};
|
||||
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
use common_utils::consts;
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
use dynamic_routing::{DynamicRoutingClientConfig, RoutingStrategy};
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
@ -16,6 +18,8 @@ use http_body_util::combinators::UnsyncBoxBody;
|
||||
use hyper::body::Bytes;
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
use hyper_util::client::legacy::connect::HttpConnector;
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
use router_env::logger;
|
||||
use serde;
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
use tonic::Status;
|
||||
@ -76,3 +80,51 @@ impl GrpcClientSettings {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Contains grpc headers
|
||||
#[derive(Debug)]
|
||||
pub struct GrpcHeaders {
|
||||
/// Tenant id
|
||||
pub tenant_id: String,
|
||||
/// Request id
|
||||
pub request_id: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
/// Trait to add necessary headers to the tonic Request
|
||||
pub(crate) trait AddHeaders {
|
||||
/// Add necessary header fields to the tonic Request
|
||||
fn add_headers_to_grpc_request(&mut self, headers: GrpcHeaders);
|
||||
}
|
||||
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
impl<T> AddHeaders for tonic::Request<T> {
|
||||
#[track_caller]
|
||||
fn add_headers_to_grpc_request(&mut self, headers: GrpcHeaders) {
|
||||
headers.tenant_id
|
||||
.parse()
|
||||
.map(|tenant_id| {
|
||||
self
|
||||
.metadata_mut()
|
||||
.append(consts::TENANT_HEADER, tenant_id)
|
||||
})
|
||||
.inspect_err(
|
||||
|err| logger::warn!(header_parse_error=?err,"invalid {} received",consts::TENANT_HEADER),
|
||||
)
|
||||
.ok();
|
||||
|
||||
headers.request_id.map(|request_id| {
|
||||
request_id
|
||||
.parse()
|
||||
.map(|request_id| {
|
||||
self
|
||||
.metadata_mut()
|
||||
.append(consts::X_REQUEST_ID, request_id)
|
||||
})
|
||||
.inspect_err(
|
||||
|err| logger::warn!(header_parse_error=?err,"invalid {} received",consts::X_REQUEST_ID),
|
||||
)
|
||||
.ok();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user