1
1
package datadog .trace .core .datastreams ;
2
2
3
+ import static datadog .trace .api .DDTags .PATHWAY_HASH ;
4
+ import static datadog .trace .bootstrap .instrumentation .api .PathwayContext .PROPAGATION_KEY_BASE64 ;
5
+
3
6
import datadog .context .Context ;
4
7
import datadog .context .propagation .CarrierSetter ;
5
8
import datadog .context .propagation .CarrierVisitor ;
6
9
import datadog .context .propagation .Propagator ;
7
10
import datadog .trace .api .TraceConfig ;
11
+ import datadog .trace .api .datastreams .DataStreamsContext ;
8
12
import datadog .trace .api .time .TimeSource ;
9
13
import datadog .trace .bootstrap .instrumentation .api .AgentSpan ;
10
14
import datadog .trace .bootstrap .instrumentation .api .AgentSpanContext ;
11
15
import datadog .trace .bootstrap .instrumentation .api .PathwayContext ;
12
16
import datadog .trace .bootstrap .instrumentation .api .TagContext ;
17
+ import java .io .IOException ;
13
18
import java .util .function .Supplier ;
14
19
import javax .annotation .Nullable ;
15
20
import javax .annotation .ParametersAreNonnullByDefault ;
16
21
17
22
// TODO Javadoc
18
23
@ ParametersAreNonnullByDefault
19
- public class DataStreamPropagator implements Propagator {
24
+ public class DataStreamsPropagator implements Propagator {
25
+ private final DataStreamsMonitoring dataStreamsMonitoring ;
20
26
private final Supplier <TraceConfig > traceConfigSupplier ;
21
27
private final TimeSource timeSource ;
22
28
private final long hashOfKnownTags ;
23
29
private final String serviceNameOverride ;
24
30
25
- public DataStreamPropagator (
31
+ public DataStreamsPropagator (
32
+ DataStreamsMonitoring dataStreamsMonitoring ,
26
33
Supplier <TraceConfig > traceConfigSupplier ,
27
34
TimeSource timeSource ,
28
35
long hashOfKnownTags ,
29
36
String serviceNameOverride ) {
37
+ this .dataStreamsMonitoring = dataStreamsMonitoring ;
30
38
this .traceConfigSupplier = traceConfigSupplier ;
31
39
this .timeSource = timeSource ;
32
40
this .hashOfKnownTags = hashOfKnownTags ;
@@ -35,12 +43,48 @@ public DataStreamPropagator(
35
43
36
44
@ Override
37
45
public <C > void inject (Context context , C carrier , CarrierSetter <C > setter ) {
38
- // TODO Still in CorePropagation, not migrated yet
46
+ // TODO Pathway context needs to be stored into its own context element instead of span context
47
+ AgentSpan span = AgentSpan .fromContext (context );
48
+ DataStreamsContext dsmContext = DataStreamsContext .fromContext (context );
49
+ PathwayContext pathwayContext ;
50
+ if (span == null
51
+ || (pathwayContext = span .context ().getPathwayContext ()) == null
52
+ || dsmContext == null ) {
53
+ return ;
54
+ }
55
+
56
+ // TODO Allow set checkpoint to use DsmContext as parameter?
57
+ pathwayContext .setCheckpoint (
58
+ dsmContext .sortedTags (),
59
+ dsmContext .sendCheckpoint () ? dataStreamsMonitoring ::add : pathwayContext ::saveStats ,
60
+ dsmContext .defaultTimestamp (),
61
+ dsmContext .payloadSizeBytes ());
62
+
63
+ boolean injected = injectPathwayContext (pathwayContext , carrier , setter );
64
+
65
+ if (injected && pathwayContext .getHash () != 0 ) {
66
+ span .setTag (PATHWAY_HASH , Long .toUnsignedString (pathwayContext .getHash ()));
67
+ }
68
+ }
69
+
70
+ private <C > boolean injectPathwayContext (
71
+ PathwayContext pathwayContext , C carrier , CarrierSetter <C > setter ) {
72
+ try {
73
+ String encodedContext = pathwayContext .encode ();
74
+ if (encodedContext != null ) {
75
+ // LOGGER.debug("Injecting pathway context {}", pathwayContext);
76
+ setter .set (carrier , PROPAGATION_KEY_BASE64 , encodedContext );
77
+ return true ;
78
+ }
79
+ } catch (IOException e ) {
80
+ // LOGGER.debug("Unable to set encode pathway context", e);
81
+ }
82
+ return false ;
39
83
}
40
84
41
85
@ Override
42
86
public <C > Context extract (Context context , C carrier , CarrierVisitor <C > visitor ) {
43
- // TODO Pathway context needs to be stored into its own context element
87
+ // TODO Pathway context needs to be stored into its own context element instead of span context
44
88
// Get span context to store pathway context into
45
89
TagContext spanContext = getSpanContextOrNull (context );
46
90
PathwayContext pathwayContext ;
0 commit comments