Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,10 @@ interface AttributedMetric {
* @return Parameters to be included with this metric
*/
suspend fun getMetricParameters(): Map<String, String>

/**
* @return Identifier used to deduplicate metric emissions. The same combination of metric
* and tag will only be emitted once.
*/
suspend fun getTag(): String
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.duckduckgo.app.attributed.metrics.api.EventStats
import com.duckduckgo.app.attributed.metrics.store.EventRepository
import com.duckduckgo.app.di.AppCoroutineScope
import com.duckduckgo.app.statistics.pixels.Pixel
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.Unique
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.di.scopes.AppScope
import com.squareup.anvil.annotations.ContributesBinding
Expand Down Expand Up @@ -71,10 +72,12 @@ class RealAttributedMetricClient @Inject constructor(
appCoroutineScope.launch(dispatcherProvider.io()) {
if (!metricsState.isActive()) return@launch
val pixelName = metric.getPixelName()
val tag = metric.getTag()
logcat(tag = "AttributedMetrics") {
"Firing pixel for $pixelName"
}
pixel.fire(pixelName = pixelName, parameters = metric.getMetricParameters())
val pixelTag = "${pixelName}_$tag"
pixel.fire(pixelName = pixelName, parameters = metric.getMetricParameters(), type = Unique(pixelTag))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.duckduckgo.app.attributed.metrics.api.AttributedMetric
import com.duckduckgo.app.attributed.metrics.api.EventStats
import com.duckduckgo.app.attributed.metrics.store.EventRepository
import com.duckduckgo.app.statistics.pixels.Pixel
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.Unique
import com.duckduckgo.common.test.CoroutineTestRule
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
Expand Down Expand Up @@ -105,7 +106,7 @@ class RealAttributedMetricClientTest {

testee.emitMetric(testMetric)

verify(mockPixel).fire(pixelName = "test_pixel", parameters = mapOf("param" to "value"))
verify(mockPixel).fire(pixelName = "test_pixel", parameters = mapOf("param" to "value"), type = Unique("test_pixel_test_tag"))
}

@Test
Expand All @@ -121,5 +122,6 @@ class RealAttributedMetricClientTest {
private class TestAttributedMetric : AttributedMetric {
override fun getPixelName(): String = "test_pixel"
override suspend fun getMetricParameters(): Map<String, String> = mapOf("param" to "value")
override suspend fun getTag(): String = "test_tag"
}
}
Loading