Updated on 2026-08-14
This commit is contained in:
parent
7378429e90
commit
a075d9737b
8 changed files with 107 additions and 31 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue