Skip to content

Commit acb0446

Browse files
committed
RUM-8366 add propagation tag for RUM Session Id
1 parent 6c4e351 commit acb0446

File tree

5 files changed

+43
-0
lines changed

5 files changed

+43
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4481,10 +4481,12 @@ public abstract class com/datadog/trace/core/propagation/PropagationTags {
44814481
public static fun factory (Lcom/datadog/trace/api/Config;)Lcom/datadog/trace/core/propagation/PropagationTags$Factory;
44824482
public abstract fun fillTagMap (Ljava/util/Map;)V
44834483
public abstract fun getOrigin ()Ljava/lang/CharSequence;
4484+
public abstract fun getRumSessionId ()Ljava/lang/String;
44844485
public abstract fun getSamplingPriority ()I
44854486
public abstract fun getTraceIdHighOrderBits ()J
44864487
public abstract fun getW3CTracestate ()Ljava/lang/String;
44874488
public abstract fun headerValue (Lcom/datadog/trace/core/propagation/PropagationTags$HeaderType;)Ljava/lang/String;
4489+
public abstract fun updateRumSessionId (Ljava/lang/String;)V
44884490
public abstract fun updateTraceIdHighOrderBits (J)V
44894491
public abstract fun updateTraceOrigin (Ljava/lang/CharSequence;)V
44904492
public abstract fun updateTraceSamplingPriority (II)V
@@ -4520,6 +4522,7 @@ public class com/datadog/trace/core/propagation/ptags/W3CPTagsCodec {
45204522
protected static final field DECISION_MAKER_TAG Lcom/datadog/trace/core/propagation/ptags/TagKey;
45214523
protected static final field PROPAGATION_ERROR_INCONSISTENT_TID Ljava/lang/String;
45224524
protected static final field PROPAGATION_ERROR_MALFORMED_TID Ljava/lang/String;
4525+
protected static final field RUM_SESSION_ID_TAG Lcom/datadog/trace/core/propagation/ptags/TagKey;
45234526
protected static final field TRACE_ID_TAG Lcom/datadog/trace/core/propagation/ptags/TagKey;
45244527
protected static final field UPSTREAM_SERVICES_DEPRECATED_TAG Lcom/datadog/trace/core/propagation/ptags/TagKey;
45254528
public fun <init> ()V

features/dd-sdk-android-trace/src/main/java/com/datadog/trace/core/propagation/HttpCodec.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public class HttpCodec {
4848
static final String CF_CONNECTING_IP_KEY = "cf-connecting-ip";
4949
static final String CF_CONNECTING_IP_V6_KEY = "cf-connecting-ipv6";
5050

51+
static final String RUM_SESSION_ID_KEY = "session_id";
52+
5153
public interface Injector {
5254
<C> void inject(
5355
final DDSpanContext context, final C carrier, final AgentPropagation.Setter<C> setter);
@@ -184,6 +186,12 @@ public CompoundInjector(final List<Injector> injectors) {
184186
public <C> void inject(
185187
final DDSpanContext context, final C carrier, final AgentPropagation.Setter<C> setter) {
186188
log.debug("Inject context {}", context);
189+
// Update session ide before injecting propagation tags
190+
final String sessionId = (String) context.getTags().get(RUM_SESSION_ID_KEY);
191+
if (sessionId != null) {
192+
context.getPropagationTags().updateRumSessionId(sessionId);
193+
}
194+
187195
for (final Injector injector : injectors) {
188196
injector.inject(context, carrier, setter);
189197
}

features/dd-sdk-android-trace/src/main/java/com/datadog/trace/core/propagation/PropagationTags.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ public interface Factory {
6767

6868
public abstract void updateTraceIdHighOrderBits(long highOrderBits);
6969

70+
public abstract String getRumSessionId();
71+
72+
public abstract void updateRumSessionId(String sessionId);
73+
7074
/**
7175
* Gets the original <a href="https://www.w3.org/TR/trace-context/#tracestate-header">W3C
7276
* tracestate header</a> value.

features/dd-sdk-android-trace/src/main/java/com/datadog/trace/core/propagation/ptags/PTagsCodec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ abstract class PTagsCodec {
1616

1717
protected static final TagKey DECISION_MAKER_TAG = TagKey.from("dm");
1818
protected static final TagKey TRACE_ID_TAG = TagKey.from("tid");
19+
protected static final TagKey RUM_SESSION_ID_TAG = TagKey.from("rsid");
1920
protected static final String PROPAGATION_ERROR_MALFORMED_TID = "malformed_tid ";
2021
protected static final String PROPAGATION_ERROR_INCONSISTENT_TID = "inconsistent_tid ";
2122
protected static final TagKey UPSTREAM_SERVICES_DEPRECATED_TAG = TagKey.from("upstream_services");
@@ -36,6 +37,9 @@ static String headerValue(PTagsCodec codec, PTags ptags) {
3637
if (ptags.getTraceIdHighOrderBitsHexTagValue() != null) {
3738
size = codec.appendTag(sb, TRACE_ID_TAG, ptags.getTraceIdHighOrderBitsHexTagValue(), size);
3839
}
40+
if (ptags.getRumSessionId() != null) {
41+
size = codec.appendTag(sb, RUM_SESSION_ID_TAG, ptags.getRumSessionIdTagValue(), size);
42+
}
3943
Iterator<TagElement> it = ptags.getTagPairs().iterator();
4044
while (it.hasNext() && !codec.isTooLarge(sb, size)) {
4145
TagElement tagKey = it.next();

features/dd-sdk-android-trace/src/main/java/com/datadog/trace/core/propagation/ptags/PTagsFactory.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ static class PTags extends PropagationTags {
8484
private volatile String[] headerCache = null;
8585
/** The high-order 64 bits of the trace id. */
8686
private volatile long traceIdHighOrderBits;
87+
88+
private volatile String rumSessionId;
89+
private volatile TagValue rumSessionIdTagValue ;
90+
8791
/**
8892
* The zero-padded lower-case 16 character hexadecimal representation of the high-order 64 bits
8993
* of the trace id, wrapped into a {@link TagValue}, <code>null</code> if not set.
@@ -203,6 +207,7 @@ public long getTraceIdHighOrderBits() {
203207
return traceIdHighOrderBits;
204208
}
205209

210+
@Override
206211
public void updateTraceIdHighOrderBits(long highOrderBits) {
207212
if (traceIdHighOrderBits != highOrderBits) {
208213
traceIdHighOrderBits = highOrderBits;
@@ -214,6 +219,21 @@ public void updateTraceIdHighOrderBits(long highOrderBits) {
214219
}
215220
}
216221

222+
@Override
223+
public String getRumSessionId() {
224+
return rumSessionId;
225+
}
226+
227+
@Override
228+
public void updateRumSessionId(String sessionId) {
229+
if (!Objects.equals(rumSessionId, sessionId)) {
230+
rumSessionId = sessionId;
231+
rumSessionIdTagValue = TagValue.from(rumSessionId);
232+
clearCachedHeader(DATADOG);
233+
clearCachedHeader(W3C);
234+
}
235+
}
236+
217237
@Override
218238
@SuppressWarnings("StringEquality")
219239
public String headerValue(HeaderType headerType) {
@@ -296,6 +316,10 @@ TagValue getTraceIdHighOrderBitsHexTagValue() {
296316
return traceIdHighOrderBitsHexTagValue;
297317
}
298318

319+
TagValue getRumSessionIdTagValue() {
320+
return rumSessionIdTagValue;
321+
}
322+
299323
TagValue getDecisionMakerTagValue() {
300324
return decisionMakerTagValue;
301325
}

0 commit comments

Comments
 (0)