From ae412b253a7a142d9d7d0d18775bef50588b3281 Mon Sep 17 00:00:00 2001 From: Marcos Date: Tue, 28 Jan 2025 10:10:25 +0000 Subject: [PATCH] Calculate conversion window based on days rather than real 24h --- .../metrics/RetentionMetricsAtbLifecyclePlugin.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/feature-toggles/feature-toggles-impl/src/main/java/com/duckduckgo/feature/toggles/impl/metrics/RetentionMetricsAtbLifecyclePlugin.kt b/feature-toggles/feature-toggles-impl/src/main/java/com/duckduckgo/feature/toggles/impl/metrics/RetentionMetricsAtbLifecyclePlugin.kt index 503684b5a750..9f5b9eeecb65 100644 --- a/feature-toggles/feature-toggles-impl/src/main/java/com/duckduckgo/feature/toggles/impl/metrics/RetentionMetricsAtbLifecyclePlugin.kt +++ b/feature-toggles/feature-toggles-impl/src/main/java/com/duckduckgo/feature/toggles/impl/metrics/RetentionMetricsAtbLifecyclePlugin.kt @@ -20,12 +20,12 @@ import com.duckduckgo.app.di.AppCoroutineScope import com.duckduckgo.app.statistics.api.AtbLifecyclePlugin import com.duckduckgo.app.statistics.pixels.Pixel import com.duckduckgo.di.scopes.AppScope -import com.duckduckgo.feature.toggles.api.MetricsPixel import com.duckduckgo.feature.toggles.api.PixelDefinition import com.duckduckgo.feature.toggles.impl.MetricsPixelStore import com.duckduckgo.feature.toggles.impl.RetentionMetric.APP_USE import com.duckduckgo.feature.toggles.impl.RetentionMetric.SEARCH import com.squareup.anvil.annotations.ContributesMultibinding +import java.time.LocalDate import java.time.ZoneId import java.time.ZonedDateTime import java.time.temporal.ChronoUnit @@ -46,7 +46,7 @@ class RetentionMetricsAtbLifecyclePlugin @Inject constructor( appCoroutineScope.launch { searchMetricPixelsPlugin.getMetrics().forEach { metric -> metric.getPixelDefinitions().forEach { definition -> - if (isInConversionWindow(definition, metric)) { + if (isInConversionWindow(definition)) { store.getMetricForPixelDefinition(definition, SEARCH).takeIf { it < metric.value.toInt() }?.let { store.increaseMetricForPixelDefinition(definition, SEARCH).takeIf { it == metric.value.toInt() }?.apply { pixel.fire(definition.pixelName, definition.params) @@ -62,7 +62,7 @@ class RetentionMetricsAtbLifecyclePlugin @Inject constructor( appCoroutineScope.launch { appUseMetricPixelsPlugin.getMetrics().forEach { metric -> metric.getPixelDefinitions().forEach { definition -> - if (isInConversionWindow(definition, metric)) { + if (isInConversionWindow(definition)) { store.getMetricForPixelDefinition(definition, APP_USE).takeIf { it < metric.value.toInt() }?.let { store.increaseMetricForPixelDefinition(definition, APP_USE).takeIf { it == metric.value.toInt() }?.apply { pixel.fire(definition.pixelName, definition.params) @@ -74,8 +74,8 @@ class RetentionMetricsAtbLifecyclePlugin @Inject constructor( } } - private fun isInConversionWindow(definition: PixelDefinition, metric: MetricsPixel): Boolean { - val enrollmentDate = metric.toggle.getCohort()?.enrollmentDateET ?: return false + private fun isInConversionWindow(definition: PixelDefinition): Boolean { + val enrollmentDate = definition.params["enrollmentDate"] ?: return false val lowerWindow = definition.params["conversionWindowDays"]?.split("-")?.first()?.toInt() ?: return false val upperWindow = definition.params["conversionWindowDays"]?.split("-")?.last()?.toInt() ?: return false val daysDiff = daysBetweenTodayAnd(enrollmentDate) @@ -85,7 +85,8 @@ class RetentionMetricsAtbLifecyclePlugin @Inject constructor( private fun daysBetweenTodayAnd(date: String): Long { val today = ZonedDateTime.now(ZoneId.of("America/New_York")) - val localDate = ZonedDateTime.parse(date) - return ChronoUnit.DAYS.between(localDate, today) + val localDate = LocalDate.parse(date) + val zoneDateTime: ZonedDateTime = localDate.atStartOfDay(ZoneId.of("America/New_York")) + return ChronoUnit.DAYS.between(zoneDateTime, today) } }