Skip to content

Commit 03ab092

Browse files
authored
Merge pull request #2709 from DataDog/yl/account-info/add-to-traces
RUM-10278: Add account information in Trace
2 parents fa38ad2 + 46f88a8 commit 03ab092

File tree

9 files changed

+102
-9
lines changed

9 files changed

+102
-9
lines changed

features/dd-sdk-android-trace/api/apiSurface

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ data class com.datadog.android.trace.model.SpanEvent
4444
fun fromJson(kotlin.String): Metrics
4545
fun fromJsonObject(com.google.gson.JsonObject): Metrics
4646
data class Meta
47-
constructor(kotlin.String, Dd, Span, Tracer, Usr, Network? = null, Device, Os, kotlin.collections.Map<kotlin.String, kotlin.String> = mapOf())
47+
constructor(kotlin.String, Dd, Span, Tracer, Usr, Account? = null, Network? = null, Device, Os, kotlin.collections.Map<kotlin.String, kotlin.String> = mapOf())
4848
fun toJson(): com.google.gson.JsonElement
4949
companion object
5050
fun fromJson(kotlin.String): Meta
@@ -73,6 +73,12 @@ data class com.datadog.android.trace.model.SpanEvent
7373
companion object
7474
fun fromJson(kotlin.String): Usr
7575
fun fromJsonObject(com.google.gson.JsonObject): Usr
76+
data class Account
77+
constructor(kotlin.String? = null, kotlin.String? = null, kotlin.collections.MutableMap<kotlin.String, kotlin.Any?> = mutableMapOf())
78+
fun toJson(): com.google.gson.JsonElement
79+
companion object
80+
fun fromJson(kotlin.String): Account
81+
fun fromJsonObject(com.google.gson.JsonObject): Account
7682
data class Network
7783
constructor(Client? = null)
7884
fun toJson(): com.google.gson.JsonElement

features/dd-sdk-android-trace/api/dd-sdk-android-trace.api

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,32 @@ public final class com/datadog/android/trace/model/SpanEvent {
103103
public fun toString ()Ljava/lang/String;
104104
}
105105

106+
public final class com/datadog/android/trace/model/SpanEvent$Account {
107+
public static final field Companion Lcom/datadog/android/trace/model/SpanEvent$Account$Companion;
108+
public fun <init> ()V
109+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
110+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
111+
public final fun component1 ()Ljava/lang/String;
112+
public final fun component2 ()Ljava/lang/String;
113+
public final fun component3 ()Ljava/util/Map;
114+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/trace/model/SpanEvent$Account;
115+
public static synthetic fun copy$default (Lcom/datadog/android/trace/model/SpanEvent$Account;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/trace/model/SpanEvent$Account;
116+
public fun equals (Ljava/lang/Object;)Z
117+
public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/trace/model/SpanEvent$Account;
118+
public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/trace/model/SpanEvent$Account;
119+
public final fun getAdditionalProperties ()Ljava/util/Map;
120+
public final fun getId ()Ljava/lang/String;
121+
public final fun getName ()Ljava/lang/String;
122+
public fun hashCode ()I
123+
public final fun toJson ()Lcom/google/gson/JsonElement;
124+
public fun toString ()Ljava/lang/String;
125+
}
126+
127+
public final class com/datadog/android/trace/model/SpanEvent$Account$Companion {
128+
public final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/trace/model/SpanEvent$Account;
129+
public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/trace/model/SpanEvent$Account;
130+
}
131+
106132
public final class com/datadog/android/trace/model/SpanEvent$Application {
107133
public static final field Companion Lcom/datadog/android/trace/model/SpanEvent$Application$Companion;
108134
public fun <init> ()V
@@ -219,22 +245,24 @@ public final class com/datadog/android/trace/model/SpanEvent$Device$Companion {
219245

220246
public final class com/datadog/android/trace/model/SpanEvent$Meta {
221247
public static final field Companion Lcom/datadog/android/trace/model/SpanEvent$Meta$Companion;
222-
public fun <init> (Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;)V
223-
public synthetic fun <init> (Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
248+
public fun <init> (Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Account;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;)V
249+
public synthetic fun <init> (Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Account;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
224250
public final fun component1 ()Ljava/lang/String;
251+
public final fun component10 ()Ljava/util/Map;
225252
public final fun component2 ()Lcom/datadog/android/trace/model/SpanEvent$Dd;
226253
public final fun component3 ()Lcom/datadog/android/trace/model/SpanEvent$Span;
227254
public final fun component4 ()Lcom/datadog/android/trace/model/SpanEvent$Tracer;
228255
public final fun component5 ()Lcom/datadog/android/trace/model/SpanEvent$Usr;
229-
public final fun component6 ()Lcom/datadog/android/trace/model/SpanEvent$Network;
230-
public final fun component7 ()Lcom/datadog/android/trace/model/SpanEvent$Device;
231-
public final fun component8 ()Lcom/datadog/android/trace/model/SpanEvent$Os;
232-
public final fun component9 ()Ljava/util/Map;
233-
public final fun copy (Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;)Lcom/datadog/android/trace/model/SpanEvent$Meta;
234-
public static synthetic fun copy$default (Lcom/datadog/android/trace/model/SpanEvent$Meta;Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/trace/model/SpanEvent$Meta;
256+
public final fun component6 ()Lcom/datadog/android/trace/model/SpanEvent$Account;
257+
public final fun component7 ()Lcom/datadog/android/trace/model/SpanEvent$Network;
258+
public final fun component8 ()Lcom/datadog/android/trace/model/SpanEvent$Device;
259+
public final fun component9 ()Lcom/datadog/android/trace/model/SpanEvent$Os;
260+
public final fun copy (Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Account;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;)Lcom/datadog/android/trace/model/SpanEvent$Meta;
261+
public static synthetic fun copy$default (Lcom/datadog/android/trace/model/SpanEvent$Meta;Ljava/lang/String;Lcom/datadog/android/trace/model/SpanEvent$Dd;Lcom/datadog/android/trace/model/SpanEvent$Span;Lcom/datadog/android/trace/model/SpanEvent$Tracer;Lcom/datadog/android/trace/model/SpanEvent$Usr;Lcom/datadog/android/trace/model/SpanEvent$Account;Lcom/datadog/android/trace/model/SpanEvent$Network;Lcom/datadog/android/trace/model/SpanEvent$Device;Lcom/datadog/android/trace/model/SpanEvent$Os;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/trace/model/SpanEvent$Meta;
235262
public fun equals (Ljava/lang/Object;)Z
236263
public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/trace/model/SpanEvent$Meta;
237264
public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/trace/model/SpanEvent$Meta;
265+
public final fun getAccount ()Lcom/datadog/android/trace/model/SpanEvent$Account;
238266
public final fun getAdditionalProperties ()Ljava/util/Map;
239267
public final fun getDd ()Lcom/datadog/android/trace/model/SpanEvent$Dd;
240268
public final fun getDevice ()Lcom/datadog/android/trace/model/SpanEvent$Device;

features/dd-sdk-android-trace/src/main/json/trace/span-schema.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,26 @@
191191
},
192192
"readOnly": true
193193
},
194+
"account": {
195+
"type": "object",
196+
"description": "Account properties",
197+
"properties": {
198+
"id": {
199+
"type": "string",
200+
"description": "Identifier of the account",
201+
"readOnly": true
202+
},
203+
"name": {
204+
"type": "string",
205+
"description": "Name of the account",
206+
"readOnly": true
207+
}
208+
},
209+
"additionalProperties": {
210+
"type": "object"
211+
},
212+
"readOnly": true
213+
},
194214
"network": {
195215
"type": "object",
196216
"description": "The network information in the moment the Span was created",

features/dd-sdk-android-trace/src/main/kotlin/com/datadog/android/trace/internal/domain/event/BaseSpanEventMapper.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.datadog.android.trace.internal.domain.event
88

9+
import com.datadog.android.api.context.AccountInfo
910
import com.datadog.android.api.context.DeviceInfo
1011
import com.datadog.android.api.context.DeviceType
1112
import com.datadog.android.api.context.NetworkInfo
@@ -21,6 +22,12 @@ internal abstract class BaseSpanEventMapper<T> : ContextAwareMapper<T, SpanEvent
2122
additionalProperties = userInfo.additionalProperties.toMutableMap()
2223
)
2324

25+
protected fun resolveAccountInfo(accountInfo: AccountInfo) = SpanEvent.Account(
26+
id = accountInfo.id,
27+
name = accountInfo.name,
28+
additionalProperties = accountInfo.extraInfo.toMutableMap()
29+
)
30+
2431
protected fun resolveDeviceInfo(deviceInfo: DeviceInfo): SpanEvent.Device {
2532
return SpanEvent.Device(
2633
type = resolveDeviceType(deviceInfo.deviceType),

features/dd-sdk-android-trace/src/main/kotlin/com/datadog/android/trace/internal/domain/event/CoreTracerSpanToSpanEventMapper.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,14 @@ internal class CoreTracerSpanToSpanEventMapper(
7272
val osInfo = resolveOsInfo(datadogContext.deviceInfo)
7373
val networkInfoMeta = if (networkInfoEnabled) resolveNetworkInfo(datadogContext.networkInfo) else null
7474
val userInfo = datadogContext.userInfo
75+
val accountInfo = datadogContext.accountInfo
7576
val usrMeta = SpanEvent.Usr(
7677
id = userInfo.id,
7778
name = userInfo.name,
7879
email = userInfo.email,
7980
additionalProperties = userInfo.additionalProperties.toMutableMap()
8081
)
82+
val accountMeta = accountInfo?.let { resolveAccountInfo(it) }
8183
val dd = SpanEvent.Dd(
8284
source = datadogContext.source,
8385
application = event.tags[LogAttributes.RUM_APPLICATION_ID]?.let { SpanEvent.Application(it as? String) },
@@ -101,6 +103,7 @@ internal class CoreTracerSpanToSpanEventMapper(
101103
version = datadogContext.sdkVersion
102104
),
103105
usr = usrMeta,
106+
account = accountMeta,
104107
network = networkInfoMeta,
105108
device = deviceInfo,
106109
os = osInfo,

features/dd-sdk-android-trace/src/main/kotlin/com/datadog/android/trace/internal/domain/event/DdSpanToSpanEventMapper.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ internal class DdSpanToSpanEventMapper(
5353
val deviceInfo = resolveDeviceInfo(datadogContext.deviceInfo)
5454
val osInfo = resolveOsInfo(datadogContext.deviceInfo)
5555
val userInfo = datadogContext.userInfo
56+
val accountInfo = datadogContext.accountInfo
5657
val mostSignificantTraceId = bigIntegerUtils.mostSignificant64BitsAsHex(event.traceId)
5758
val additionalProperties = mutableMapOf<String, String>()
5859
additionalProperties[TRACE_ID_META_KEY] = mostSignificantTraceId
5960
additionalProperties[APPLICATION_VARIANT_KEY] = datadogContext.variant
6061
additionalProperties += event.meta
6162
val usrMeta = resolveUserInfo(userInfo)
63+
val accountMeta = accountInfo?.let { resolveAccountInfo(it) }
6264
val dd = SpanEvent.Dd(
6365
source = datadogContext.source,
6466
application = event.tags[LogAttributes.RUM_APPLICATION_ID]?.let { SpanEvent.Application(it as? String) },
@@ -73,6 +75,7 @@ internal class DdSpanToSpanEventMapper(
7375
version = datadogContext.sdkVersion
7476
),
7577
usr = usrMeta,
78+
account = accountMeta,
7679
network = networkInfoMeta,
7780
device = deviceInfo,
7881
os = osInfo,

features/dd-sdk-android-trace/src/test/kotlin/com/datadog/android/trace/assertj/SpanEventAssert.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.datadog.android.trace.assertj
88

9+
import com.datadog.android.api.context.AccountInfo
910
import com.datadog.android.api.context.DeviceInfo
1011
import com.datadog.android.api.context.DeviceType
1112
import com.datadog.android.api.context.NetworkInfo
@@ -327,6 +328,27 @@ internal class SpanEventAssert(actual: SpanEvent) :
327328
return this
328329
}
329330

331+
fun hasAccountInfo(accountInfo: AccountInfo?): SpanEventAssert {
332+
assertThat(actual.meta.account?.name)
333+
.overridingErrorMessage(
334+
"Expected SpanEvent to have account name: " +
335+
"${accountInfo?.name} but " +
336+
"instead was: ${actual.meta.account?.name}"
337+
)
338+
.isEqualTo(accountInfo?.name)
339+
assertThat(actual.meta.account?.id)
340+
.overridingErrorMessage(
341+
"Expected SpanEvent to have account id: " +
342+
"${accountInfo?.id} but " +
343+
"instead was: ${actual.meta.account?.id}"
344+
)
345+
.isEqualTo(accountInfo?.id)
346+
assertThat(actual.meta.account?.additionalProperties)
347+
.hasSameSizeAs(accountInfo?.extraInfo)
348+
.containsAllEntriesOf(accountInfo?.extraInfo)
349+
return this
350+
}
351+
330352
fun hasDeviceInfo(deviceInfo: DeviceInfo): SpanEventAssert {
331353
val expectedType: SpanEvent.Type = when (deviceInfo.deviceType) {
332354
DeviceType.MOBILE -> SpanEvent.Type.MOBILE

features/dd-sdk-android-trace/src/test/kotlin/com/datadog/android/trace/internal/domain/event/CoreTracerSpanToSpanEventMapperTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ internal class CoreTracerSpanToSpanEventMapperTest {
9494
.hasDeviceInfo(fakeDatadogContext.deviceInfo)
9595
.hasOsInfo(fakeDatadogContext.deviceInfo)
9696
.hasUserInfo(fakeDatadogContext.userInfo)
97+
.hasAccountInfo(fakeDatadogContext.accountInfo)
9798
.hasVariant(fakeDatadogContext.variant)
9899
.hasMeta(expectedMeta)
99100
.hasMetrics(expectedMetrics)
@@ -150,6 +151,7 @@ internal class CoreTracerSpanToSpanEventMapperTest {
150151
doesntHaveNetworkInfo()
151152
}
152153
}.hasUserInfo(fakeDatadogContext.userInfo)
154+
.hasAccountInfo(fakeDatadogContext.accountInfo)
153155
.hasDeviceInfo(fakeDatadogContext.deviceInfo)
154156
.hasOsInfo(fakeDatadogContext.deviceInfo)
155157
.hasVariant(fakeDatadogContext.variant)

features/dd-sdk-android-trace/src/test/kotlin/com/datadog/android/trace/internal/domain/event/DdSpanToSpanEventMapperTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ internal class DdSpanToSpanEventMapperTest {
101101
}
102102
}
103103
.hasUserInfo(fakeDatadogContext.userInfo)
104+
.hasAccountInfo(fakeDatadogContext.accountInfo)
104105
.hasMeta(fakeSpan.meta)
105106
.hasDeviceInfo(fakeDatadogContext.deviceInfo)
106107
.hasOsInfo(fakeDatadogContext.deviceInfo)
@@ -149,6 +150,7 @@ internal class DdSpanToSpanEventMapperTest {
149150
}
150151
}
151152
.hasUserInfo(fakeDatadogContext.userInfo)
153+
.hasAccountInfo(fakeDatadogContext.accountInfo)
152154
.hasMeta(fakeSpan.meta)
153155
.hasDeviceInfo(fakeDatadogContext.deviceInfo)
154156
.hasOsInfo(fakeDatadogContext.deviceInfo)

0 commit comments

Comments
 (0)