Skip to content

Commit a79e076

Browse files
committed
Add tag to metrics to ensure unique emission (#6940)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1202552961248957/task/1211650854212283?focus=true ### Description Add getTag(): String to AttributedMetric ### Steps to test this PR N/A ### UI changes | Before | After | | ------ | ----- | !(Upload before screenshot)|(Upload after screenshot)|
1 parent 8e36785 commit a79e076

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

attributed-metrics/attributed-metrics-api/src/main/java/com/duckduckgo/app/attributed/metrics/api/AttributedMetricsClient.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,10 @@ interface AttributedMetric {
7777
* @return Parameters to be included with this metric
7878
*/
7979
suspend fun getMetricParameters(): Map<String, String>
80+
81+
/**
82+
* @return Identifier used to deduplicate metric emissions. The same combination of metric
83+
* and tag will only be emitted once.
84+
*/
85+
suspend fun getTag(): String
8086
}

attributed-metrics/attributed-metrics-impl/src/main/java/com/duckduckgo/app/attributed/metrics/impl/RealAttributedMetricClient.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.duckduckgo.app.attributed.metrics.api.EventStats
2222
import com.duckduckgo.app.attributed.metrics.store.EventRepository
2323
import com.duckduckgo.app.di.AppCoroutineScope
2424
import com.duckduckgo.app.statistics.pixels.Pixel
25+
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.Unique
2526
import com.duckduckgo.common.utils.DispatcherProvider
2627
import com.duckduckgo.di.scopes.AppScope
2728
import com.squareup.anvil.annotations.ContributesBinding
@@ -71,10 +72,12 @@ class RealAttributedMetricClient @Inject constructor(
7172
appCoroutineScope.launch(dispatcherProvider.io()) {
7273
if (!metricsState.isActive()) return@launch
7374
val pixelName = metric.getPixelName()
75+
val tag = metric.getTag()
7476
logcat(tag = "AttributedMetrics") {
7577
"Firing pixel for $pixelName"
7678
}
77-
pixel.fire(pixelName = pixelName, parameters = metric.getMetricParameters())
79+
val pixelTag = "${pixelName}_$tag"
80+
pixel.fire(pixelName = pixelName, parameters = metric.getMetricParameters(), type = Unique(pixelTag))
7881
}
7982
}
8083
}

attributed-metrics/attributed-metrics-impl/src/test/java/com/duckduckgo/app/attributed/metrics/impl/RealAttributedMetricClientTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.duckduckgo.app.attributed.metrics.api.AttributedMetric
2121
import com.duckduckgo.app.attributed.metrics.api.EventStats
2222
import com.duckduckgo.app.attributed.metrics.store.EventRepository
2323
import com.duckduckgo.app.statistics.pixels.Pixel
24+
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.Unique
2425
import com.duckduckgo.common.test.CoroutineTestRule
2526
import kotlinx.coroutines.test.runTest
2627
import org.junit.Assert.assertEquals
@@ -105,7 +106,7 @@ class RealAttributedMetricClientTest {
105106

106107
testee.emitMetric(testMetric)
107108

108-
verify(mockPixel).fire(pixelName = "test_pixel", parameters = mapOf("param" to "value"))
109+
verify(mockPixel).fire(pixelName = "test_pixel", parameters = mapOf("param" to "value"), type = Unique("test_pixel_test_tag"))
109110
}
110111

111112
@Test
@@ -121,5 +122,6 @@ class RealAttributedMetricClientTest {
121122
private class TestAttributedMetric : AttributedMetric {
122123
override fun getPixelName(): String = "test_pixel"
123124
override suspend fun getMetricParameters(): Map<String, String> = mapOf("param" to "value")
125+
override suspend fun getTag(): String = "test_tag"
124126
}
125127
}

0 commit comments

Comments
 (0)