diff --git a/crates/analytics/src/api_event/core.rs b/crates/analytics/src/api_event/core.rs index b368d6374f..81b82c5dce 100644 --- a/crates/analytics/src/api_event/core.rs +++ b/crates/analytics/src/api_event/core.rs @@ -8,6 +8,7 @@ use api_models::analytics::{ AnalyticsMetadata, ApiEventFiltersResponse, GetApiEventFiltersRequest, GetApiEventMetricRequest, MetricsResponse, }; +use common_utils::errors::ReportSwitchExt; use error_stack::{IntoReport, ResultExt}; use router_env::{ instrument, logger, @@ -32,16 +33,18 @@ pub async fn api_events_core( merchant_id: String, ) -> AnalyticsResult> { let data = match pool { - AnalyticsProvider::Sqlx(_) => Err(FiltersError::NotImplemented) - .into_report() - .attach_printable("SQL Analytics is not implemented for API Events"), + AnalyticsProvider::Sqlx(_) => Err(FiltersError::NotImplemented( + "API Events not implemented for SQLX", + )) + .into_report() + .attach_printable("SQL Analytics is not implemented for API Events"), AnalyticsProvider::Clickhouse(pool) => get_api_event(&merchant_id, req, pool).await, AnalyticsProvider::CombinedSqlx(_sqlx_pool, ckh_pool) | AnalyticsProvider::CombinedCkh(_sqlx_pool, ckh_pool) => { get_api_event(&merchant_id, req, ckh_pool).await } } - .change_context(AnalyticsError::UnknownError)?; + .switch()?; Ok(data) } @@ -58,9 +61,11 @@ pub async fn get_filters( let mut res = ApiEventFiltersResponse::default(); for dim in req.group_by_names { let values = match pool { - AnalyticsProvider::Sqlx(_pool) => Err(FiltersError::NotImplemented) - .into_report() - .attach_printable("SQL Analytics is not implemented for API Events"), + AnalyticsProvider::Sqlx(_pool) => Err(FiltersError::NotImplemented( + "API Events not implemented for SQLX", + )) + .into_report() + .attach_printable("SQL Analytics is not implemented for API Events"), AnalyticsProvider::Clickhouse(ckh_pool) | AnalyticsProvider::CombinedSqlx(_, ckh_pool) | AnalyticsProvider::CombinedCkh(_, ckh_pool) => { @@ -68,7 +73,7 @@ pub async fn get_filters( .await } } - .change_context(AnalyticsError::UnknownError)? + .switch()? .into_iter() .filter_map(|fil: ApiEventFilter| match dim { ApiEventDimensions::StatusCode => fil.status_code.map(|i| i.to_string()), diff --git a/crates/analytics/src/sdk_events/core.rs b/crates/analytics/src/sdk_events/core.rs index 34f23c745b..46cc636f43 100644 --- a/crates/analytics/src/sdk_events/core.rs +++ b/crates/analytics/src/sdk_events/core.rs @@ -7,6 +7,7 @@ use api_models::analytics::{ AnalyticsMetadata, GetSdkEventFiltersRequest, GetSdkEventMetricRequest, MetricsResponse, SdkEventFiltersResponse, }; +use common_utils::errors::ReportSwitchExt; use error_stack::{IntoReport, ResultExt}; use router_env::{instrument, logger, tracing}; @@ -28,16 +29,18 @@ pub async fn sdk_events_core( publishable_key: String, ) -> AnalyticsResult> { match pool { - AnalyticsProvider::Sqlx(_) => Err(FiltersError::NotImplemented) - .into_report() - .attach_printable("SQL Analytics is not implemented for Sdk Events"), + AnalyticsProvider::Sqlx(_) => Err(FiltersError::NotImplemented( + "SDK Events not implemented for SQLX", + )) + .into_report() + .attach_printable("SQL Analytics is not implemented for Sdk Events"), AnalyticsProvider::Clickhouse(pool) => get_sdk_event(&publishable_key, req, pool).await, AnalyticsProvider::CombinedSqlx(_sqlx_pool, ckh_pool) | AnalyticsProvider::CombinedCkh(_sqlx_pool, ckh_pool) => { get_sdk_event(&publishable_key, req, ckh_pool).await } } - .change_context(AnalyticsError::UnknownError) + .switch() } #[instrument(skip_all)] @@ -159,9 +162,11 @@ pub async fn get_filters( if let Some(publishable_key) = publishable_key { for dim in req.group_by_names { let values = match pool { - AnalyticsProvider::Sqlx(_pool) => Err(FiltersError::NotImplemented) - .into_report() - .attach_printable("SQL Analytics is not implemented for SDK Events"), + AnalyticsProvider::Sqlx(_pool) => Err(FiltersError::NotImplemented( + "SDK Events not implemented for SQLX", + )) + .into_report() + .attach_printable("SQL Analytics is not implemented for SDK Events"), AnalyticsProvider::Clickhouse(pool) => { get_sdk_event_filter_for_dimension(dim, publishable_key, &req.time_range, pool) .await diff --git a/crates/analytics/src/types.rs b/crates/analytics/src/types.rs index 16d342d3d2..8b1bdbd1ab 100644 --- a/crates/analytics/src/types.rs +++ b/crates/analytics/src/types.rs @@ -8,6 +8,7 @@ use common_utils::{ use error_stack::{report, Report, ResultExt}; use super::query::QueryBuildingError; +use crate::errors::AnalyticsError; #[derive(serde::Deserialize, Debug, serde::Serialize)] #[serde(rename_all = "snake_case")] @@ -124,8 +125,8 @@ pub enum FiltersError { #[error("Error running Query")] QueryExecutionFailure, #[allow(dead_code)] - #[error("Not Implemented")] - NotImplemented, + #[error("Not Implemented: {0}")] + NotImplemented(&'static str), } impl ErrorSwitch for QueryBuildingError { @@ -134,4 +135,13 @@ impl ErrorSwitch for QueryBuildingError { } } +impl ErrorSwitch for FiltersError { + fn switch(&self) -> AnalyticsError { + match self { + Self::QueryBuildingError | Self::QueryExecutionFailure => AnalyticsError::UnknownError, + Self::NotImplemented(a) => AnalyticsError::NotImplemented(a), + } + } +} + impl_misc_api_event_type!(AnalyticsDomain); diff --git a/crates/router/src/core/webhooks.rs b/crates/router/src/core/webhooks.rs index c7e7548f00..4354a3ee19 100644 --- a/crates/router/src/core/webhooks.rs +++ b/crates/router/src/core/webhooks.rs @@ -938,7 +938,7 @@ pub async fn webhooks_wrapper { diff --git a/crates/router/src/events/api_logs.rs b/crates/router/src/events/api_logs.rs index bfc10f722c..42017f4500 100644 --- a/crates/router/src/events/api_logs.rs +++ b/crates/router/src/events/api_logs.rs @@ -41,7 +41,7 @@ pub struct ApiEvent { #[serde(flatten)] event_type: ApiEventsType, hs_latency: Option, - http_method: Option, + http_method: String, } impl ApiEvent { @@ -59,7 +59,7 @@ impl ApiEvent { error: Option, event_type: ApiEventsType, http_req: &HttpRequest, - http_method: Option, + http_method: &http::Method, ) -> Self { Self { merchant_id, @@ -83,7 +83,7 @@ impl ApiEvent { url_path: http_req.path().to_string(), event_type, hs_latency, - http_method, + http_method: http_method.to_string(), } } } diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs index 9ac8d5e5eb..8298d9a105 100644 --- a/crates/router/src/services/api.rs +++ b/crates/router/src/services/api.rs @@ -938,7 +938,7 @@ where error, event_type.unwrap_or(ApiEventsType::Miscellaneous), request, - Some(request.method().to_string()), + request.method(), ); match api_event.clone().try_into() { Ok(event) => {