Skip to content

Commit 510a897

Browse files
authored
Merge pull request #67 from TelemetryDeck/feat/#45-add-default-parameters
Add a way to include default parameters with all signals
2 parents c19c039 + 3edf75b commit 510a897

File tree

3 files changed

+72
-1
lines changed

3 files changed

+72
-1
lines changed

README.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,24 @@ By default, Kotlin SDK for TelemetryDeck will include the following environment
148148

149149
See [Custom Telemetry](#custom-telemetry) on how to implement your own parameter enrichment.
150150

151+
## Default Parameters
152+
153+
If there are parameters you would like to include with every outgoing signal, you can use `DefaultParameterProvider` instead of passing them with every call.
154+
155+
```kotlin
156+
// create an instance of [DefaultParameterProvider] and pass the key value you wish to be appended to every signal
157+
val provider = DefaultParameterProvider(mapOf("key" to "value"))
158+
159+
// add the provider when configuring an instance of TelemetryDeck
160+
161+
val builder = TelemetryDeck.Builder()
162+
.appID("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
163+
.addProvider(provider)
164+
```
165+
151166
## Custom Telemetry
152167

153-
Another way to send signals is to register a custom `TelemetryDeckProvider`.
168+
Another way to send signals is to implement a custom `TelemetryDeckProvider`.
154169
A provider uses the TelemetryDeck client in order to queue or send signals based on environment or other triggers.
155170

156171

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.telemetrydeck.sdk.providers
2+
3+
import android.app.Application
4+
import com.telemetrydeck.sdk.TelemetryDeckProvider
5+
import com.telemetrydeck.sdk.TelemetryDeckSignalProcessor
6+
7+
8+
/**
9+
* [DefaultParameterProvider] is a [TelemetryDeckProvider] that adds default parameters
10+
* to every telemetry signal. It ensures that signals are enriched with predefined data,
11+
* unless the signal already contains a value for the same key.
12+
*
13+
* @property defaultParameters A map of key-value pairs representing the default parameters
14+
* that will be added to each telemetry signal.
15+
*/
16+
class DefaultParameterProvider(val defaultParameters: Map<String, String>): TelemetryDeckProvider {
17+
override fun register(ctx: Application?, client: TelemetryDeckSignalProcessor) {
18+
// nothing to do
19+
}
20+
21+
override fun stop() {
22+
// nothing to do
23+
}
24+
25+
override fun enrich(
26+
signalType: String,
27+
clientUser: String?,
28+
additionalPayload: Map<String, String>
29+
): Map<String, String> {
30+
val signalPayload = additionalPayload.toMutableMap()
31+
for (item in defaultParameters) {
32+
if (!signalPayload.containsKey(item.key)) {
33+
signalPayload[item.key] = item.value
34+
}
35+
}
36+
return signalPayload
37+
}
38+
}

lib/src/test/java/com/telemetrydeck/sdk/TelemetryDeckTests.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.telemetrydeck.sdk
22

33
import android.app.Application
44
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
5+
import com.telemetrydeck.sdk.providers.DefaultParameterProvider
56
import org.junit.Assert
67
import org.junit.Rule
78
import org.junit.Test
@@ -433,6 +434,23 @@ class TelemetryDeckTests {
433434
Assert.assertEquals(hashString("always the same"), queuedSignal?.clientUser)
434435
}
435436

437+
@Test
438+
fun telemetryDeck_supports_default_parameter_provider() {
439+
val config = TelemetryManagerConfiguration("32CB6574-6732-4238-879F-582FEBEB6536")
440+
val manager = TelemetryDeck.Builder().addProvider(DefaultParameterProvider(mapOf("param1" to "value1"))).configuration(config).build(null)
441+
442+
manager.signal("test")
443+
444+
val queuedSignal = manager.cache?.empty()?.first()
445+
446+
Assert.assertNotNull(queuedSignal)
447+
448+
// validate the signal type
449+
Assert.assertEquals(queuedSignal?.type, "test")
450+
451+
Assert.assertEquals("param1:value1", queuedSignal?.payload?.firstOrNull { it.startsWith("param1:") }, )
452+
}
453+
436454
private fun hashString(input: String, algorithm: String = "SHA-256"): String {
437455
return MessageDigest.getInstance(algorithm)
438456
.digest(input.toByteArray())

0 commit comments

Comments
 (0)