Skip to content

Commit 95bc660

Browse files
authored
Merge pull request #2712 from DataDog/feature/account-info
Merge Feature/account-info into develop
2 parents dc4ab79 + 042c7d9 commit 95bc660

File tree

60 files changed

+1625
-43
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1625
-43
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ object com.datadog.android.Datadog
1111
DEPRECATED fun setUserInfo(String? = null, String? = null, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
1212
fun addUserProperties(Map<String, Any?>, com.datadog.android.api.SdkCore = getInstance())
1313
fun clearAllData(com.datadog.android.api.SdkCore = getInstance())
14+
fun setAccountInfo(String, String? = null, Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
15+
fun addAccountExtraInfo(Map<String, Any?> = emptyMap(), com.datadog.android.api.SdkCore = getInstance())
16+
fun clearAccountInfo(com.datadog.android.api.SdkCore = getInstance())
1417
fun _internalProxy(String? = null): _InternalProxy
1518
enum com.datadog.android.DatadogSite
1619
- US1
@@ -57,8 +60,13 @@ interface com.datadog.android.api.SdkCore
5760
fun setUserInfo(String? = null, String? = null, String? = null, Map<String, Any?> = emptyMap())
5861
fun addUserProperties(Map<String, Any?>)
5962
fun clearAllData()
63+
fun setAccountInfo(String, String? = null, Map<String, Any?> = emptyMap())
64+
fun addAccountExtraInfo(Map<String, Any?> = emptyMap())
65+
fun clearAccountInfo()
66+
data class com.datadog.android.api.context.AccountInfo
67+
constructor(String, String? = null, Map<String, Any?> = emptyMap())
6068
data class com.datadog.android.api.context.DatadogContext
61-
constructor(com.datadog.android.DatadogSite, String, String, String, String, String, String, String, TimeInfo, ProcessInfo, NetworkInfo, DeviceInfo, UserInfo, com.datadog.android.privacy.TrackingConsent, String?, Map<String, Map<String, Any?>>)
69+
constructor(com.datadog.android.DatadogSite, String, String, String, String, String, String, String, TimeInfo, ProcessInfo, NetworkInfo, DeviceInfo, UserInfo, AccountInfo?, com.datadog.android.privacy.TrackingConsent, String?, Map<String, Map<String, Any?>>)
6270
data class com.datadog.android.api.context.DeviceInfo
6371
constructor(String, String, String, DeviceType, String, String, String, String, String, Int?)
6472
enum com.datadog.android.api.context.DeviceType

dd-sdk-android-core/api/dd-sdk-android-core.api

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,16 @@ public final class com/datadog/android/Datadog {
1212
public static final field INSTANCE Lcom/datadog/android/Datadog;
1313
public final fun _internalProxy (Ljava/lang/String;)Lcom/datadog/android/_InternalProxy;
1414
public static synthetic fun _internalProxy$default (Lcom/datadog/android/Datadog;Ljava/lang/String;ILjava/lang/Object;)Lcom/datadog/android/_InternalProxy;
15+
public static final fun addAccountExtraInfo ()V
16+
public static final fun addAccountExtraInfo (Ljava/util/Map;)V
17+
public static final fun addAccountExtraInfo (Ljava/util/Map;Lcom/datadog/android/api/SdkCore;)V
18+
public static synthetic fun addAccountExtraInfo$default (Ljava/util/Map;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
1519
public static final fun addUserProperties (Ljava/util/Map;)V
1620
public static final fun addUserProperties (Ljava/util/Map;Lcom/datadog/android/api/SdkCore;)V
1721
public static synthetic fun addUserProperties$default (Ljava/util/Map;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
22+
public static final fun clearAccountInfo ()V
23+
public static final fun clearAccountInfo (Lcom/datadog/android/api/SdkCore;)V
24+
public static synthetic fun clearAccountInfo$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
1825
public static final fun clearAllData ()V
1926
public static final fun clearAllData (Lcom/datadog/android/api/SdkCore;)V
2027
public static synthetic fun clearAllData$default (Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
@@ -27,6 +34,11 @@ public final class com/datadog/android/Datadog {
2734
public static final fun isInitialized ()Z
2835
public static final fun isInitialized (Ljava/lang/String;)Z
2936
public static synthetic fun isInitialized$default (Ljava/lang/String;ILjava/lang/Object;)Z
37+
public static final fun setAccountInfo (Ljava/lang/String;)V
38+
public static final fun setAccountInfo (Ljava/lang/String;Ljava/lang/String;)V
39+
public static final fun setAccountInfo (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
40+
public static final fun setAccountInfo (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;)V
41+
public static synthetic fun setAccountInfo$default (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
3042
public static final fun setTrackingConsent (Lcom/datadog/android/privacy/TrackingConsent;)V
3143
public static final fun setTrackingConsent (Lcom/datadog/android/privacy/TrackingConsent;Lcom/datadog/android/api/SdkCore;)V
3244
public static synthetic fun setTrackingConsent$default (Lcom/datadog/android/privacy/TrackingConsent;Lcom/datadog/android/api/SdkCore;ILjava/lang/Object;)V
@@ -118,30 +130,52 @@ public final class com/datadog/android/api/InternalLogger$Target : java/lang/Enu
118130
}
119131

120132
public abstract interface class com/datadog/android/api/SdkCore {
133+
public abstract fun addAccountExtraInfo (Ljava/util/Map;)V
121134
public abstract fun addUserProperties (Ljava/util/Map;)V
135+
public abstract fun clearAccountInfo ()V
122136
public abstract fun clearAllData ()V
123137
public abstract fun getName ()Ljava/lang/String;
124138
public abstract fun getService ()Ljava/lang/String;
125139
public abstract fun getTime ()Lcom/datadog/android/api/context/TimeInfo;
126140
public abstract fun isCoreActive ()Z
141+
public abstract fun setAccountInfo (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
127142
public abstract fun setTrackingConsent (Lcom/datadog/android/privacy/TrackingConsent;)V
128143
public abstract fun setUserInfo (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
129144
}
130145

131146
public final class com/datadog/android/api/SdkCore$DefaultImpls {
147+
public static synthetic fun addAccountExtraInfo$default (Lcom/datadog/android/api/SdkCore;Ljava/util/Map;ILjava/lang/Object;)V
148+
public static synthetic fun setAccountInfo$default (Lcom/datadog/android/api/SdkCore;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V
132149
public static synthetic fun setUserInfo$default (Lcom/datadog/android/api/SdkCore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V
133150
}
134151

152+
public final class com/datadog/android/api/context/AccountInfo {
153+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
154+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
155+
public final fun component1 ()Ljava/lang/String;
156+
public final fun component2 ()Ljava/lang/String;
157+
public final fun component3 ()Ljava/util/Map;
158+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/AccountInfo;
159+
public static synthetic fun copy$default (Lcom/datadog/android/api/context/AccountInfo;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/AccountInfo;
160+
public fun equals (Ljava/lang/Object;)Z
161+
public final fun getExtraInfo ()Ljava/util/Map;
162+
public final fun getId ()Ljava/lang/String;
163+
public final fun getName ()Ljava/lang/String;
164+
public fun hashCode ()I
165+
public fun toString ()Ljava/lang/String;
166+
}
167+
135168
public final class com/datadog/android/api/context/DatadogContext {
136-
public fun <init> (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)V
169+
public fun <init> (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/api/context/AccountInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)V
137170
public final fun component1 ()Lcom/datadog/android/DatadogSite;
138171
public final fun component10 ()Lcom/datadog/android/api/context/ProcessInfo;
139172
public final fun component11 ()Lcom/datadog/android/api/context/NetworkInfo;
140173
public final fun component12 ()Lcom/datadog/android/api/context/DeviceInfo;
141174
public final fun component13 ()Lcom/datadog/android/api/context/UserInfo;
142-
public final fun component14 ()Lcom/datadog/android/privacy/TrackingConsent;
143-
public final fun component15 ()Ljava/lang/String;
144-
public final fun component16 ()Ljava/util/Map;
175+
public final fun component14 ()Lcom/datadog/android/api/context/AccountInfo;
176+
public final fun component15 ()Lcom/datadog/android/privacy/TrackingConsent;
177+
public final fun component16 ()Ljava/lang/String;
178+
public final fun component17 ()Ljava/util/Map;
145179
public final fun component2 ()Ljava/lang/String;
146180
public final fun component3 ()Ljava/lang/String;
147181
public final fun component4 ()Ljava/lang/String;
@@ -150,9 +184,10 @@ public final class com/datadog/android/api/context/DatadogContext {
150184
public final fun component7 ()Ljava/lang/String;
151185
public final fun component8 ()Ljava/lang/String;
152186
public final fun component9 ()Lcom/datadog/android/api/context/TimeInfo;
153-
public final fun copy (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/DatadogContext;
154-
public static synthetic fun copy$default (Lcom/datadog/android/api/context/DatadogContext;Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/DatadogContext;
187+
public final fun copy (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/api/context/AccountInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/DatadogContext;
188+
public static synthetic fun copy$default (Lcom/datadog/android/api/context/DatadogContext;Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/api/context/AccountInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/DatadogContext;
155189
public fun equals (Ljava/lang/Object;)Z
190+
public final fun getAccountInfo ()Lcom/datadog/android/api/context/AccountInfo;
156191
public final fun getAppBuildId ()Ljava/lang/String;
157192
public final fun getClientToken ()Ljava/lang/String;
158193
public final fun getDeviceInfo ()Lcom/datadog/android/api/context/DeviceInfo;

dd-sdk-android-core/src/main/kotlin/com/datadog/android/Datadog.kt

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package com.datadog.android
99
import android.content.Context
1010
import androidx.annotation.AnyThread
1111
import androidx.annotation.WorkerThread
12+
import com.datadog.android.Datadog.clearAccountInfo
1213
import com.datadog.android.api.InternalLogger
1314
import com.datadog.android.api.SdkCore
1415
import com.datadog.android.api.context.UserInfo
@@ -260,7 +261,10 @@ object Datadog {
260261
}
261262

262263
/**
263-
* Sets the user information.
264+
* Sets the information used to identify a real user.
265+
*
266+
* This API should be used to assign a stable identifier for the user, such as a user ID,
267+
* email, or username. The information set here will be added to logs, traces and RUM events.
264268
*
265269
* @param id (nullable) a unique user identifier (relevant to your business domain)
266270
* @param name (nullable) the user name or alias
@@ -314,6 +318,82 @@ object Datadog {
314318
sdkCore.clearAllData()
315319
}
316320

321+
/**
322+
* Sets the account information that the user is currently logged into.
323+
*
324+
* This API should be used to assign an identifier for the user's account which represents a
325+
* contextual identity within the app, typically tied to business or tenant logic. The
326+
* information set here will be added to logs, traces and RUM events.
327+
*
328+
* This value should be set when user logs in with his account, and cleared by calling
329+
* [clearAccountInfo] when he logs out.
330+
*
331+
* @param id Account ID.
332+
* @param name representing the account, if exists.
333+
* @param extraInfo Account's custom attributes, if exists.
334+
* @param sdkCore SDK instance to set account information. If not provided, default SDK
335+
* instance will be used.
336+
*/
337+
@JvmStatic
338+
@JvmOverloads
339+
fun setAccountInfo(
340+
id: String,
341+
name: String? = null,
342+
extraInfo: Map<String, Any?> = emptyMap(),
343+
sdkCore: SdkCore = getInstance()
344+
) {
345+
sdkCore.setAccountInfo(
346+
id = id,
347+
name = name,
348+
extraInfo = extraInfo
349+
)
350+
}
351+
352+
/**
353+
* Add custom attributes to the current account information.
354+
*
355+
* This extra info will be added to already existing extra info that is added
356+
* to Logs, Traces and RUM events automatically.
357+
*
358+
* @param extraInfo Account's additional custom attributes.
359+
* @param sdkCore SDK instance to add account custom attributes. If not provided,
360+
* default SDK instance will be used.
361+
*/
362+
@JvmStatic
363+
@JvmOverloads
364+
fun addAccountExtraInfo(
365+
extraInfo: Map<String, Any?> = emptyMap(),
366+
sdkCore: SdkCore = getInstance()
367+
) {
368+
sdkCore.addAccountExtraInfo(extraInfo)
369+
}
370+
371+
/**
372+
* Clear the current account information.
373+
*
374+
* Account information will set to null
375+
* Following Logs, Traces, RUM Events will not include the account information anymore.
376+
*
377+
* Any active RUM Session, active RUM View at the time of call will have their `account` attribute cleared
378+
*
379+
* If you want to retain the current `account` on the active RUM session,
380+
* you need to stop the session first by using `GlobalRumMonitor.get().stopSession()`
381+
*
382+
* If you want to retain the current `account` on the active RUM views,
383+
* you need to stop the view first by using `GlobalRumMonitor.get().stopView()`.
384+
*
385+
* @param sdkCore SDK instance to clear account info. If not provided,
386+
* default SDK instance will be used.
387+
*
388+
*/
389+
@JvmStatic
390+
@JvmOverloads
391+
fun clearAccountInfo(
392+
sdkCore: SdkCore = getInstance()
393+
) {
394+
sdkCore.clearAccountInfo()
395+
}
396+
317397
// Executes all the pending queues in the upload/persistence executors.
318398
// Tries to send all the granted data for each feature and then clears the folders and shuts
319399
// down the persistence and the upload executors.

dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/SdkCore.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,45 @@ interface SdkCore {
8181
*/
8282
@AnyThread
8383
fun clearAllData()
84+
85+
/**
86+
* Sets current account information.
87+
*
88+
* Those will be added to logs, traces and RUM events automatically.
89+
*
90+
* @param id Account ID.
91+
* @param name representing the account, if exists.
92+
* @param extraInfo Account's custom attributes, if exists.
93+
*/
94+
fun setAccountInfo(
95+
id: String,
96+
name: String? = null,
97+
extraInfo: Map<String, Any?> = emptyMap()
98+
)
99+
100+
/** Add custom attributes to the current account information
101+
*
102+
* This extra info will be added to already existing extra info that is added
103+
* to logs traces and RUM events automatically.
104+
*
105+
* @param extraInfo Account's additional custom attributes.
106+
*/
107+
fun addAccountExtraInfo(
108+
extraInfo: Map<String, Any?> = emptyMap()
109+
)
110+
111+
/** Clear the current account information
112+
*
113+
* Account information will set to null
114+
* Following Logs, Traces, RUM Events will not include the account information anymore.
115+
*
116+
* Any active RUM Session, active RUM View at the time of call will have their `account` attribute cleared
117+
*
118+
* If you want to retain the current `account` on the active RUM session,
119+
* you need to stop the session first by using `GlobalRumMonitor.get().stopSession()`
120+
*
121+
* If you want to retain the current `account` on the active RUM views,
122+
* you need to stop the view first by using `GlobalRumMonitor.get().stopView()`
123+
*/
124+
fun clearAccountInfo()
84125
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.api.context
8+
9+
/**
10+
* Holds information about the current account.
11+
* @property id a unique identifier for the account, or null.
12+
* @property name the name of the account, or null.
13+
* @property extraInfo a dictionary of extra information to the current account.
14+
*/
15+
data class AccountInfo(
16+
val id: String,
17+
val name: String? = null,
18+
val extraInfo: Map<String, Any?> = emptyMap()
19+
)

dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/context/DatadogContext.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.datadog.android.privacy.TrackingConsent
2929
* @property networkInfo information about the current network availability and quality
3030
* @property deviceInfo information about device
3131
* @property userInfo information about the current user
32+
* @property accountInfo information about the current account
3233
* @property trackingConsent information about the current tracking consent
3334
* @property appBuildId unique build ID of the running application. Will be missing if Datadog Gradle Plugin is not applied or obfuscation is not enabled for the running build.
3435
* @property featuresContext agnostic dictionary with information from all features registered to
@@ -48,6 +49,7 @@ data class DatadogContext(
4849
val networkInfo: NetworkInfo,
4950
val deviceInfo: DeviceInfo,
5051
val userInfo: UserInfo,
52+
val accountInfo: AccountInfo?,
5153
val trackingConsent: TrackingConsent,
5254
val appBuildId: String?,
5355
val featuresContext: Map<String, Map<String, Any?>>

0 commit comments

Comments
 (0)