Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-11 14:52:19 +02:00
parent c14158ff0f
commit 567a1689fd
2 changed files with 25 additions and 14 deletions

View file

@ -304,10 +304,11 @@ internal class DefaultMarketsTokenRepository(
} }
private fun createListErrorEvent(error: ApiResponseError): MarketsDataAnalyticsEvent.List.Error { private fun createListErrorEvent(error: ApiResponseError): MarketsDataAnalyticsEvent.List.Error {
return createErrorEvent(error) { errorType, errorCode -> return createErrorEvent(error) { errorType, errorCode, errorMessage ->
MarketsDataAnalyticsEvent.List.Error( MarketsDataAnalyticsEvent.List.Error(
errorType = errorType, errorType = errorType,
errorCode = errorCode, errorCode = errorCode,
errorMessage = errorMessage,
) )
} }
} }
@ -317,10 +318,11 @@ internal class DefaultMarketsTokenRepository(
request: MarketsDataAnalyticsEvent.Details.Error.Request, request: MarketsDataAnalyticsEvent.Details.Error.Request,
tokenSymbol: String, tokenSymbol: String,
): MarketsDataAnalyticsEvent.Details.Error { ): MarketsDataAnalyticsEvent.Details.Error {
return createErrorEvent(error) { errorType, errorCode -> return createErrorEvent(error) { errorType, errorCode, errorMessage ->
MarketsDataAnalyticsEvent.Details.Error( MarketsDataAnalyticsEvent.Details.Error(
errorType = errorType, errorType = errorType,
errorCode = errorCode, errorCode = errorCode,
errorMessage = errorMessage,
request = request, request = request,
tokenSymbol = tokenSymbol, tokenSymbol = tokenSymbol,
) )
@ -329,20 +331,20 @@ internal class DefaultMarketsTokenRepository(
private inline fun <T> createErrorEvent( private inline fun <T> createErrorEvent(
error: ApiResponseError, error: ApiResponseError,
createEvent: (MarketsDataAnalyticsEvent.Type, Int?) -> T, createEvent: (MarketsDataAnalyticsEvent.Type, Int?, String) -> T,
): T { ): T {
return when (error) { return when (error) {
is ApiResponseError.HttpException -> { is ApiResponseError.HttpException -> {
createEvent(MarketsDataAnalyticsEvent.Type.Http, error.code.code) createEvent(MarketsDataAnalyticsEvent.Type.Http, error.code.code, error.message.orEmpty())
} }
is ApiResponseError.TimeoutException -> { is ApiResponseError.TimeoutException -> {
createEvent(MarketsDataAnalyticsEvent.Type.Timeout, null) createEvent(MarketsDataAnalyticsEvent.Type.Timeout, null, error.message.orEmpty())
} }
is ApiResponseError.NetworkException -> { is ApiResponseError.NetworkException -> {
createEvent(MarketsDataAnalyticsEvent.Type.Network, null) createEvent(MarketsDataAnalyticsEvent.Type.Network, null, error.message.orEmpty())
} }
is ApiResponseError.UnknownException -> { is ApiResponseError.UnknownException -> {
createEvent(MarketsDataAnalyticsEvent.Type.Unknown, null) createEvent(MarketsDataAnalyticsEvent.Type.Unknown, null, error.message.orEmpty())
} }
} }
} }

View file

@ -1,6 +1,7 @@
package com.tangem.data.markets.analytics package com.tangem.data.markets.analytics
import com.tangem.core.analytics.models.AnalyticsEvent import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam
sealed interface MarketsDataAnalyticsEvent { sealed interface MarketsDataAnalyticsEvent {
@ -12,11 +13,13 @@ sealed interface MarketsDataAnalyticsEvent {
data class Error( data class Error(
val errorType: Type, val errorType: Type,
val errorCode: Int? = null, val errorCode: Int? = null,
val errorMessage: String,
) : List( ) : List(
event = "Data Error", event = "Data Error",
params = buildMap { params = buildMap {
put("Error Type", errorType.value) put(AnalyticsParam.ERROR_TYPE, errorType.value)
errorCode?.let { put("Error Code", it.toString()) } put(AnalyticsParam.ERROR_CODE, errorCode?.toString() ?: IS_NOT_HTTP_ERROR)
put(AnalyticsParam.ERROR_MESSAGE, errorMessage)
}, },
) )
} }
@ -31,13 +34,15 @@ sealed interface MarketsDataAnalyticsEvent {
val tokenSymbol: String, val tokenSymbol: String,
val errorType: Type, val errorType: Type,
val errorCode: Int? = null, val errorCode: Int? = null,
val errorMessage: String,
) : Details( ) : Details(
event = "Data Error", event = "Data Error",
params = buildMap { params = buildMap {
put("Source", request.source) put("Source", request.source)
put("Token", tokenSymbol) put("Token", tokenSymbol)
errorCode?.let { put("Error Code", it.toString()) } put(AnalyticsParam.ERROR_TYPE, errorType.value)
put("Error Type", errorType.value) put(AnalyticsParam.ERROR_CODE, errorCode?.toString() ?: IS_NOT_HTTP_ERROR)
put(AnalyticsParam.ERROR_MESSAGE, errorMessage)
}, },
) { ) {
@ -63,9 +68,9 @@ sealed interface MarketsDataAnalyticsEvent {
event = "Data Error", event = "Data Error",
params = buildMap { params = buildMap {
put("Request path", requestPath) put("Request path", requestPath)
errorCode?.let { put("Error Code", it.toString()) } put(AnalyticsParam.ERROR_TYPE, errorType.value)
put("Error Type", errorType.value) put(AnalyticsParam.ERROR_CODE, errorCode?.toString() ?: IS_NOT_HTTP_ERROR)
put("Error Description", "Chart data contains null values from the API") put(AnalyticsParam.ERROR_MESSAGE, "Chart data contains null values from the API")
}, },
), ),
MarketsDataAnalyticsEvent MarketsDataAnalyticsEvent
@ -77,4 +82,8 @@ sealed interface MarketsDataAnalyticsEvent {
Custom("Custom"), Custom("Custom"),
Unknown("Unknown"), Unknown("Unknown"),
} }
private companion object {
const val IS_NOT_HTTP_ERROR = "Is not http error"
}
} }