mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
feat(events): adding infra level components to api-events (#8214)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -540,5 +540,6 @@ pub(crate) async fn fetch_raw_secrets(
|
||||
revenue_recovery: conf.revenue_recovery,
|
||||
debit_routing_config: conf.debit_routing_config,
|
||||
clone_connector_allowlist: conf.clone_connector_allowlist,
|
||||
infra_values: conf.infra_values,
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,6 +158,8 @@ pub struct Settings<S: SecretState> {
|
||||
#[cfg(feature = "v2")]
|
||||
pub revenue_recovery: revenue_recovery::RevenueRecoverySettings,
|
||||
pub clone_connector_allowlist: Option<CloneConnectorAllowlistConfig>,
|
||||
#[serde(default)]
|
||||
pub infra_values: Option<HashMap<String, String>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Clone, Default)]
|
||||
|
||||
@ -103,7 +103,7 @@ pub async fn incoming_webhooks_wrapper<W: types::OutgoingWebhookType>(
|
||||
let response_value = serde_json::to_value(&webhooks_response_tracker)
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Could not convert webhook effect to string")?;
|
||||
|
||||
let infra = state.infra_components.clone();
|
||||
let api_event = ApiEvent::new(
|
||||
state.tenant.tenant_id.clone(),
|
||||
Some(merchant_context.get_merchant_account().get_id().clone()),
|
||||
@ -119,6 +119,7 @@ pub async fn incoming_webhooks_wrapper<W: types::OutgoingWebhookType>(
|
||||
api_event,
|
||||
req,
|
||||
req.method(),
|
||||
infra,
|
||||
);
|
||||
state.event_handler().log_event(&api_event);
|
||||
Ok(application_response)
|
||||
|
||||
@ -97,6 +97,8 @@ pub async fn incoming_webhooks_wrapper<W: types::OutgoingWebhookType>(
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Could not convert webhook effect to string")?;
|
||||
|
||||
let infra = state.infra_components.clone();
|
||||
|
||||
let api_event = ApiEvent::new(
|
||||
state.tenant.tenant_id.clone(),
|
||||
Some(merchant_context.get_merchant_account().get_id().clone()),
|
||||
@ -112,6 +114,7 @@ pub async fn incoming_webhooks_wrapper<W: types::OutgoingWebhookType>(
|
||||
api_event,
|
||||
req,
|
||||
req.method(),
|
||||
infra,
|
||||
);
|
||||
state.event_handler().log_event(&api_event);
|
||||
Ok(application_response)
|
||||
|
||||
@ -43,6 +43,8 @@ pub struct ApiEvent {
|
||||
event_type: ApiEventsType,
|
||||
hs_latency: Option<u128>,
|
||||
http_method: String,
|
||||
#[serde(flatten)]
|
||||
infra_components: Option<serde_json::Value>,
|
||||
}
|
||||
|
||||
impl ApiEvent {
|
||||
@ -62,6 +64,7 @@ impl ApiEvent {
|
||||
event_type: ApiEventsType,
|
||||
http_req: &HttpRequest,
|
||||
http_method: &http::Method,
|
||||
infra_components: Option<serde_json::Value>,
|
||||
) -> Self {
|
||||
Self {
|
||||
tenant_id,
|
||||
@ -87,6 +90,7 @@ impl ApiEvent {
|
||||
event_type,
|
||||
hs_latency,
|
||||
http_method: http_method.to_string(),
|
||||
infra_components,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,6 +130,7 @@ pub struct SessionState {
|
||||
pub theme_storage_client: Arc<dyn FileStorageInterface>,
|
||||
pub locale: String,
|
||||
pub crm_client: Arc<dyn CrmInterface>,
|
||||
pub infra_components: Option<serde_json::Value>,
|
||||
}
|
||||
impl scheduler::SchedulerSessionState for SessionState {
|
||||
fn get_db(&self) -> Box<dyn SchedulerInterface> {
|
||||
@ -242,6 +243,7 @@ pub struct AppState {
|
||||
pub grpc_client: Arc<GrpcClients>,
|
||||
pub theme_storage_client: Arc<dyn FileStorageInterface>,
|
||||
pub crm_client: Arc<dyn CrmInterface>,
|
||||
pub infra_components: Option<serde_json::Value>,
|
||||
}
|
||||
impl scheduler::SchedulerAppState for AppState {
|
||||
fn get_tenants(&self) -> Vec<id_type::TenantId> {
|
||||
@ -406,7 +408,7 @@ impl AppState {
|
||||
let crm_client = conf.crm.get_crm_client().await;
|
||||
|
||||
let grpc_client = conf.grpc_client.get_grpc_client_interface().await;
|
||||
|
||||
let infra_component_values = Self::process_env_mappings(conf.infra_values.clone());
|
||||
Self {
|
||||
flow_name: String::from("default"),
|
||||
stores,
|
||||
@ -427,6 +429,7 @@ impl AppState {
|
||||
grpc_client,
|
||||
theme_storage_client,
|
||||
crm_client,
|
||||
infra_components: infra_component_values,
|
||||
}
|
||||
})
|
||||
.await
|
||||
@ -521,8 +524,29 @@ impl AppState {
|
||||
theme_storage_client: self.theme_storage_client.clone(),
|
||||
locale: locale.unwrap_or(common_utils::consts::DEFAULT_LOCALE.to_string()),
|
||||
crm_client: self.crm_client.clone(),
|
||||
infra_components: self.infra_components.clone(),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn process_env_mappings(
|
||||
mappings: Option<HashMap<String, String>>,
|
||||
) -> Option<serde_json::Value> {
|
||||
let result: HashMap<String, String> = mappings?
|
||||
.into_iter()
|
||||
.filter_map(|(key, env_var)| std::env::var(&env_var).ok().map(|value| (key, value)))
|
||||
.collect();
|
||||
|
||||
if result.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(serde_json::Value::Object(
|
||||
result
|
||||
.into_iter()
|
||||
.map(|(k, v)| (k, serde_json::Value::String(v)))
|
||||
.collect(),
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Health;
|
||||
|
||||
@ -602,7 +602,6 @@ where
|
||||
.switch(),
|
||||
)?
|
||||
};
|
||||
|
||||
let locale = utils::get_locale_from_header(&incoming_request_header.clone());
|
||||
let mut session_state =
|
||||
Arc::new(app_state.clone()).get_session_state(&tenant_id, Some(locale), || {
|
||||
@ -701,6 +700,8 @@ where
|
||||
}
|
||||
};
|
||||
|
||||
let infra = state.infra_components.clone();
|
||||
|
||||
let api_event = ApiEvent::new(
|
||||
tenant_id,
|
||||
Some(merchant_id.clone()),
|
||||
@ -716,7 +717,9 @@ where
|
||||
event_type.unwrap_or(ApiEventsType::Miscellaneous),
|
||||
request,
|
||||
request.method(),
|
||||
infra.clone(),
|
||||
);
|
||||
|
||||
state.event_handler().log_event(&api_event);
|
||||
|
||||
output
|
||||
|
||||
Reference in New Issue
Block a user