Updated on 2026-08-14

This commit is contained in:
Tangem 2026-05-07 01:10:09 -07:00
parent 7378429e90
commit a075d9737b
8 changed files with 107 additions and 31 deletions

View file

@ -6,8 +6,31 @@ package com.tangem.core.analytics.models
open class AnalyticsEvent(
val category: String,
val event: String,
var params: Map<String, String> = mapOf(),
val params: Map<String, String> = mapOf(),
) {
val id: String = "[$category] $event"
fun withParams(newParams: Map<String, String>) = AnalyticsEvent(category, event, newParams)
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as AnalyticsEvent
if (category != other.category) return false
if (event != other.event) return false
if (params != other.params) return false
if (id != other.id) return false
return true
}
override fun hashCode(): Int {
var result = category.hashCode()
result = 31 * result + event.hashCode()
result = 31 * result + params.hashCode()
result = 31 * result + id.hashCode()
return result
}
}

View file

@ -91,16 +91,16 @@ object Analytics : GlobalAnalyticsEventHandler {
if (event is OneTimePerSessionEvent && !shouldSendThrottledEvent(event)) {
return@launch
}
event.params = applyParamsInterceptors(event)
val eventFilter = analyticsFilters.firstOrNull { it.canBeAppliedTo(event) }
val eventWithParams = event.withParams(applyParamsInterceptors(event))
val eventFilter = analyticsFilters.firstOrNull { it.canBeAppliedTo(eventWithParams) }
analyticsMutex.withLock {
when {
eventFilter == null -> analyticsHandlers.forEach { handler -> handler.send(event) }
eventFilter.canBeSent(event) -> {
eventFilter == null -> analyticsHandlers.forEach { handler -> handler.send(eventWithParams) }
eventFilter.canBeSent(eventWithParams) -> {
analyticsHandlers
.filter { handler -> eventFilter.canBeConsumedByHandler(handler, event) }
.forEach { handler -> handler.send(event) }
.filter { handler -> eventFilter.canBeConsumedByHandler(handler, eventWithParams) }
.forEach { handler -> handler.send(eventWithParams) }
}
}
}
@ -109,10 +109,10 @@ object Analytics : GlobalAnalyticsEventHandler {
override fun sendErrorEvent(event: AnalyticsEvent) {
analyticsScope.launch {
event.params = applyParamsInterceptors(event)
val eventWithParams = event.withParams(applyParamsInterceptors(event))
analyticsMutex.withLock {
analyticsHandlers.filterIsInstance<AnalyticsErrorHandler>()
.forEach { handler -> handler.sendErrorEvent(event) }
.forEach { handler -> handler.sendErrorEvent(eventWithParams) }
}
}
}