From 03a08d49abfd4a936378ac56df43613f7029d754 Mon Sep 17 00:00:00 2001 From: Taras Teslyuk Date: Wed, 27 Nov 2024 10:49:16 +0200 Subject: [PATCH] add: send error events, when API fails; --- .../main/kotlin/com/crobox/sdk/core/Crobox.kt | 21 ++++++---- .../sdk/data/model/RequestQueryParams.kt | 2 +- .../sdk/presenter/CroboxAPIPresenter.kt | 39 +++++++++++++++++-- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/sdk/src/main/kotlin/com/crobox/sdk/core/Crobox.kt b/sdk/src/main/kotlin/com/crobox/sdk/core/Crobox.kt index f30961c..1a647e8 100644 --- a/sdk/src/main/kotlin/com/crobox/sdk/core/Crobox.kt +++ b/sdk/src/main/kotlin/com/crobox/sdk/core/Crobox.kt @@ -81,7 +81,8 @@ class Crobox private constructor(config: CroboxConfig) { presenter.event( eventType = EventType.Click, queryParams = queryParams, - additionalParams = clickQueryParams + additionalParams = clickQueryParams, + errorQueryParams = ErrorQueryParams("sdk", "click") ) } @@ -99,7 +100,8 @@ class Crobox private constructor(config: CroboxConfig) { presenter.event( eventType = EventType.AddCart, queryParams = queryParams, - additionalParams = cartQueryParams + additionalParams = cartQueryParams, + errorQueryParams = ErrorQueryParams("sdk", "addcart") ) } @@ -116,7 +118,8 @@ class Crobox private constructor(config: CroboxConfig) { presenter.event( eventType = EventType.RemoveCart, queryParams = queryParams, - additionalParams = cartQueryParams + additionalParams = cartQueryParams, + errorQueryParams = ErrorQueryParams("sdk", "rmcart") ) } @@ -148,7 +151,8 @@ class Crobox private constructor(config: CroboxConfig) { presenter.event( eventType = EventType.PageView, queryParams = queryParams, - additionalParams = pageViewParams + additionalParams = pageViewParams, + errorQueryParams = ErrorQueryParams("sdk", "pageview") ) } @@ -162,7 +166,8 @@ class Crobox private constructor(config: CroboxConfig) { presenter.event( eventType = EventType.Checkout, queryParams = queryParams, - additionalParams = checkoutParams + additionalParams = checkoutParams, + errorQueryParams = ErrorQueryParams("sdk", "checkout") ) } @@ -176,7 +181,8 @@ class Crobox private constructor(config: CroboxConfig) { presenter.event( eventType = EventType.Purchase, queryParams = queryParams.copy(pageType = PageType.PageComplete), - additionalParams = purchaseParams + additionalParams = purchaseParams, + errorQueryParams = ErrorQueryParams("sdk", "purchase") ) } @@ -193,7 +199,8 @@ class Crobox private constructor(config: CroboxConfig) { presenter.event( eventType = EventType.CustomEvent, queryParams = queryParams, - additionalParams = customQueryParams + additionalParams = customQueryParams, + errorQueryParams = ErrorQueryParams("sdk", "custom") ) } diff --git a/sdk/src/main/kotlin/com/crobox/sdk/data/model/RequestQueryParams.kt b/sdk/src/main/kotlin/com/crobox/sdk/data/model/RequestQueryParams.kt index 421e50d..b2e4b05 100644 --- a/sdk/src/main/kotlin/com/crobox/sdk/data/model/RequestQueryParams.kt +++ b/sdk/src/main/kotlin/com/crobox/sdk/data/model/RequestQueryParams.kt @@ -56,7 +56,7 @@ enum class EventType(internal val type: String) { data class ErrorQueryParams( val tag: String? = null, val name: String? = null, - val message: String? = null, + var message: String? = null, val file: String? = null, val line: Int? = null, ) diff --git a/sdk/src/main/kotlin/com/crobox/sdk/presenter/CroboxAPIPresenter.kt b/sdk/src/main/kotlin/com/crobox/sdk/presenter/CroboxAPIPresenter.kt index 72009f8..2a9f751 100644 --- a/sdk/src/main/kotlin/com/crobox/sdk/presenter/CroboxAPIPresenter.kt +++ b/sdk/src/main/kotlin/com/crobox/sdk/presenter/CroboxAPIPresenter.kt @@ -1,5 +1,6 @@ package com.crobox.sdk.presenter +import com.crobox.sdk.BuildConfig import com.crobox.sdk.common.CroboxDebug import com.crobox.sdk.common.CroboxEncoder import com.crobox.sdk.config.CroboxConfig @@ -69,7 +70,8 @@ internal class CroboxAPIPresenter(private val config: CroboxConfig) { } fun event( - eventType: EventType, queryParams: RequestQueryParams, additionalParams: Any? + eventType: EventType, queryParams: RequestQueryParams, additionalParams: Any?, + errorQueryParams: ErrorQueryParams? = null ) { val parameters = eventQuery(queryParams, additionalParams, eventType) @@ -81,19 +83,48 @@ internal class CroboxAPIPresenter(private val config: CroboxConfig) { ) { try { if (!response.isSuccessful) { - CroboxDebug.eventError(response.body().toString()) + notifyError(eventType, queryParams, errorQueryParams, response.body().toString()) } } catch (ex: Exception) { - CroboxDebug.eventError(response.body().toString()) + notifyError( + eventType, + queryParams, + errorQueryParams, + response.body().toString() + ) } } override fun onFailure(call: Call, t: Throwable) { - CroboxDebug.eventError(t.message.toString()) + notifyError( + eventType, + queryParams, + errorQueryParams, + t.message.toString() + ) } }) } + private fun notifyError( + eventType: EventType, queryParams: RequestQueryParams, + errorQueryParams: ErrorQueryParams?, + message: String + ) { + if (eventType == EventType.Error) { + return; //We don't want to have error loop cycle + } + if (BuildConfig.DEBUG) { + CroboxDebug.eventError(message) + } + if(errorQueryParams != null) errorQueryParams.message = message + event( + eventType = EventType.Error, + queryParams = queryParams, + additionalParams = errorQueryParams + ) + } + private fun eventQuery( queryParams: RequestQueryParams, additionalParams: Any?, eventType: EventType ): Map {