feat(analytics): added dispute as uri param to analytics info api (#3693)

This commit is contained in:
harsh-sharma-juspay
2024-02-19 18:14:51 +05:30
committed by GitHub
parent e0d8bb207e
commit 76ac1a753a
7 changed files with 86 additions and 1 deletions

View File

@ -130,7 +130,8 @@ impl AnalyticsDataSource for ClickhouseClient {
match table { match table {
AnalyticsCollection::Payment AnalyticsCollection::Payment
| AnalyticsCollection::Refund | AnalyticsCollection::Refund
| AnalyticsCollection::PaymentIntent => { | AnalyticsCollection::PaymentIntent
| AnalyticsCollection::Dispute => {
TableEngine::CollapsingMergeTree { sign: "sign_flag" } TableEngine::CollapsingMergeTree { sign: "sign_flag" }
} }
AnalyticsCollection::SdkEvents => TableEngine::BasicTree, AnalyticsCollection::SdkEvents => TableEngine::BasicTree,
@ -374,6 +375,7 @@ impl ToSql<ClickhouseClient> for AnalyticsCollection {
Self::PaymentIntent => Ok("payment_intents".to_string()), Self::PaymentIntent => Ok("payment_intents".to_string()),
Self::ConnectorEvents => Ok("connector_events_audit".to_string()), Self::ConnectorEvents => Ok("connector_events_audit".to_string()),
Self::OutgoingWebhookEvent => Ok("outgoing_webhook_events_audit".to_string()), Self::OutgoingWebhookEvent => Ok("outgoing_webhook_events_audit".to_string()),
Self::Dispute => Ok("dispute".to_string()),
} }
} }
} }

View File

@ -26,6 +26,11 @@ pub async fn get_domain_info(
download_dimensions: None, download_dimensions: None,
dimensions: utils::get_api_event_dimensions(), dimensions: utils::get_api_event_dimensions(),
}, },
AnalyticsDomain::Dispute => GetInfoResponse {
metrics: utils::get_dispute_metrics_info(),
download_dimensions: None,
dimensions: utils::get_dispute_dimensions(),
},
}; };
Ok(info) Ok(info)
} }

View File

@ -445,6 +445,7 @@ impl ToSql<SqlxClient> for AnalyticsCollection {
.attach_printable("ConnectorEvents table is not implemented for Sqlx"))?, .attach_printable("ConnectorEvents table is not implemented for Sqlx"))?,
Self::OutgoingWebhookEvent => Err(error_stack::report!(ParsingError::UnknownError) Self::OutgoingWebhookEvent => Err(error_stack::report!(ParsingError::UnknownError)
.attach_printable("OutgoingWebhookEvents table is not implemented for Sqlx"))?, .attach_printable("OutgoingWebhookEvents table is not implemented for Sqlx"))?,
Self::Dispute => Ok("dispute".to_string()),
} }
} }
} }

View File

@ -17,6 +17,7 @@ pub enum AnalyticsDomain {
Refunds, Refunds,
SdkEvents, SdkEvents,
ApiEvents, ApiEvents,
Dispute,
} }
#[derive(Debug, strum::AsRefStr, strum::Display, Clone, Copy)] #[derive(Debug, strum::AsRefStr, strum::Display, Clone, Copy)]
@ -28,6 +29,7 @@ pub enum AnalyticsCollection {
PaymentIntent, PaymentIntent,
ConnectorEvents, ConnectorEvents,
OutgoingWebhookEvent, OutgoingWebhookEvent,
Dispute,
} }
#[allow(dead_code)] #[allow(dead_code)]

View File

@ -1,5 +1,6 @@
use api_models::analytics::{ use api_models::analytics::{
api_event::{ApiEventDimensions, ApiEventMetrics}, api_event::{ApiEventDimensions, ApiEventMetrics},
disputes::{DisputeDimensions, DisputeMetrics},
payments::{PaymentDimensions, PaymentMetrics}, payments::{PaymentDimensions, PaymentMetrics},
refunds::{RefundDimensions, RefundMetrics}, refunds::{RefundDimensions, RefundMetrics},
sdk_events::{SdkEventDimensions, SdkEventMetrics}, sdk_events::{SdkEventDimensions, SdkEventMetrics},
@ -38,3 +39,11 @@ pub fn get_sdk_event_metrics_info() -> Vec<NameDescription> {
pub fn get_api_event_metrics_info() -> Vec<NameDescription> { pub fn get_api_event_metrics_info() -> Vec<NameDescription> {
ApiEventMetrics::iter().map(Into::into).collect() ApiEventMetrics::iter().map(Into::into).collect()
} }
pub fn get_dispute_metrics_info() -> Vec<NameDescription> {
DisputeMetrics::iter().map(Into::into).collect()
}
pub fn get_dispute_dimensions() -> Vec<NameDescription> {
DisputeDimensions::iter().map(Into::into).collect()
}

View File

@ -13,6 +13,7 @@ pub use crate::payments::TimeRange;
pub mod api_event; pub mod api_event;
pub mod connector_events; pub mod connector_events;
pub mod disputes;
pub mod outgoing_webhook_event; pub mod outgoing_webhook_event;
pub mod payments; pub mod payments;
pub mod refunds; pub mod refunds;

View File

@ -0,0 +1,65 @@
use super::NameDescription;
#[derive(
Clone,
Debug,
Hash,
PartialEq,
Eq,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumIter,
strum::AsRefStr,
)]
#[strum(serialize_all = "snake_case")]
#[serde(rename_all = "snake_case")]
pub enum DisputeMetrics {
DisputesChallenged,
DisputesWon,
DisputesLost,
TotalAmountDisputed,
TotalDisputeLostAmount,
}
#[derive(
Debug,
serde::Serialize,
serde::Deserialize,
strum::AsRefStr,
PartialEq,
PartialOrd,
Eq,
Ord,
strum::Display,
strum::EnumIter,
Clone,
Copy,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum DisputeDimensions {
// Do not change the order of these enums
// Consult the Dashboard FE folks since these also affects the order of metrics on FE
Connector,
DisputeStatus,
ConnectorStatus,
}
impl From<DisputeDimensions> for NameDescription {
fn from(value: DisputeDimensions) -> Self {
Self {
name: value.to_string(),
desc: String::new(),
}
}
}
impl From<DisputeMetrics> for NameDescription {
fn from(value: DisputeMetrics) -> Self {
Self {
name: value.to_string(),
desc: String::new(),
}
}
}