66import datadog .communication .serialization .Writable ;
77import datadog .communication .serialization .WritableFormatter ;
88import datadog .communication .serialization .msgpack .MsgPackWriter ;
9+ import datadog .trace .api .Config ;
910import datadog .trace .api .WellKnownTags ;
1011import datadog .trace .common .metrics .Sink ;
1112import java .util .Collection ;
@@ -31,6 +32,7 @@ public class MsgPackDatastreamsPayloadWriter implements DatastreamsPayloadWriter
3132 private static final byte [] PARENT_HASH = "ParentHash" .getBytes (ISO_8859_1 );
3233 private static final byte [] BACKLOG_VALUE = "Value" .getBytes (ISO_8859_1 );
3334 private static final byte [] BACKLOG_TAGS = "Tags" .getBytes (ISO_8859_1 );
35+ private static final byte [] PRODUCTS_MASK = "ProductMask" .getBytes (ISO_8859_1 );
3436
3537 private static final int INITIAL_CAPACITY = 512 * 1024 ;
3638
@@ -55,9 +57,30 @@ public void reset() {
5557 buffer .reset ();
5658 }
5759
60+ // extend the list as needed
61+ private static final int APM_PRODUCT = 1 ; // 00000001
62+ private static final int DSM_PRODUCT = 2 ; // 00000010
63+ private static final int DJM_PRODUCT = 4 ; // 00000100
64+ private static final int PROFILING_PRODUCT = 8 ; // 00001000
65+
66+ public long getProductsMask () {
67+ long productsMask = APM_PRODUCT ;
68+ if (Config .get ().isDataStreamsEnabled ()) {
69+ productsMask |= DSM_PRODUCT ;
70+ }
71+ if (Config .get ().isDataJobsEnabled ()) {
72+ productsMask |= DJM_PRODUCT ;
73+ }
74+ if (Config .get ().isProfilingEnabled ()) {
75+ productsMask |= PROFILING_PRODUCT ;
76+ }
77+
78+ return productsMask ;
79+ }
80+
5881 @ Override
5982 public void writePayload (Collection <StatsBucket > data , String serviceNameOverride ) {
60- writer .startMap (7 );
83+ writer .startMap (8 );
6184 /* 1 */
6285 writer .writeUTF8 (ENV );
6386 writer .writeUTF8 (wellKnownTags .getEnv ());
@@ -112,6 +135,10 @@ public void writePayload(Collection<StatsBucket> data, String serviceNameOverrid
112135 }
113136 }
114137
138+ /* 8 */
139+ writer .writeUTF8 (PRODUCTS_MASK );
140+ writer .writeLong (getProductsMask ());
141+
115142 buffer .mark ();
116143 sink .accept (buffer .messageCount (), buffer .slice ());
117144 buffer .reset ();
0 commit comments