Skip to content

Commit 1975647

Browse files
KaindlJulianmayurkale22
authored andcommitted
feat: add IsRemote field to SpanContext, set by propagators (#451)
* feat(opentelemetry-types): add isRemote field * fix(opentelemetry-core): set isRemote true when extracting * fix(opentelemetry-core): set isRemote on BinaryTraceContext * fix(opentelemetry-types): adjust isRemote comment Makes it more obvious when the flag changes and what the default value is.
1 parent f33dc7c commit 1975647

File tree

7 files changed

+20
-1
lines changed

7 files changed

+20
-1
lines changed

packages/opentelemetry-core/src/context/propagation/B3Format.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export class B3Format implements HttpTextFormat {
7676
return {
7777
traceId,
7878
spanId,
79+
isRemote: true,
7980
traceFlags: isNaN(Number(options))
8081
? TraceFlags.UNSAMPLED
8182
: Number(options),

packages/opentelemetry-core/src/context/propagation/BinaryTraceContext.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ export class BinaryTraceContext implements BinaryFormat {
8686
) {
8787
return null;
8888
}
89+
90+
result.isRemote = true;
91+
8992
// See serializeSpanContext for byte offsets.
9093
result.traceId = toHex(buf.slice(TRACE_ID_OFFSET, SPAN_ID_FIELD_ID_OFFSET));
9194
result.spanId = toHex(

packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ export class HttpTraceContext implements HttpTextFormat {
9090
const spanContext = parse(traceParent);
9191
if (!spanContext) return null;
9292

93+
spanContext.isRemote = true;
94+
9395
const traceStateHeader = carrier[TRACE_STATE_HEADER];
9496
if (traceStateHeader) {
9597
// If more than one `tracestate` header is found, we merge them into a

packages/opentelemetry-core/test/context/B3Format.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ describe('B3Format', () => {
5555
spanId: '6e0c63257de34c92',
5656
traceFlags: TraceFlags.UNSAMPLED,
5757
traceState: new TraceState('foo=bar,baz=qux'),
58+
isRemote: false,
5859
};
5960

6061
b3Format.inject(spanContext, 'B3Format', carrier);
@@ -101,6 +102,7 @@ describe('B3Format', () => {
101102
assert.deepStrictEqual(extractedSpanContext, {
102103
spanId: 'b7ad6b7169203331',
103104
traceId: '0af7651916cd43dd8448eb211c80319c',
105+
isRemote: true,
104106
traceFlags: TraceFlags.UNSAMPLED,
105107
});
106108
});
@@ -114,6 +116,7 @@ describe('B3Format', () => {
114116
assert.deepStrictEqual(extractedSpanContext, {
115117
spanId: 'b7ad6b7169203331',
116118
traceId: '0af7651916cd43dd8448eb211c80319c',
119+
isRemote: true,
117120
traceFlags: TraceFlags.SAMPLED,
118121
});
119122
});
@@ -127,6 +130,7 @@ describe('B3Format', () => {
127130
assert.deepStrictEqual(extractedSpanContext, {
128131
spanId: 'b7ad6b7169203331',
129132
traceId: '0af7651916cd43dd8448eb211c80319c',
133+
isRemote: true,
130134
traceFlags: TraceFlags.SAMPLED,
131135
});
132136
});
@@ -140,6 +144,7 @@ describe('B3Format', () => {
140144
assert.deepStrictEqual(extractedSpanContext, {
141145
spanId: 'b7ad6b7169203331',
142146
traceId: '0af7651916cd43dd8448eb211c80319c',
147+
isRemote: true,
143148
traceFlags: TraceFlags.UNSAMPLED,
144149
});
145150
});
@@ -173,6 +178,7 @@ describe('B3Format', () => {
173178
assert.deepStrictEqual(extractedSpanContext, {
174179
spanId: 'b7ad6b7169203331',
175180
traceId: '0af7651916cd43dd8448eb211c80319c',
181+
isRemote: true,
176182
traceFlags: TraceFlags.SAMPLED,
177183
});
178184
});

packages/opentelemetry-core/test/context/BinaryTraceContext.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ describe('BinaryTraceContext', () => {
134134
binaryTraceContext.fromBytes(testCase.binary),
135135
testCase.structured &&
136136
Object.assign(
137-
{ traceFlags: TraceFlags.UNSAMPLED },
137+
{ isRemote: true, traceFlags: TraceFlags.UNSAMPLED },
138138
testCase.structured
139139
)
140140
);

packages/opentelemetry-core/test/context/HttpTraceContext.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ describe('HttpTraceContext', () => {
7676
assert.deepStrictEqual(extractedSpanContext, {
7777
spanId: 'b7ad6b7169203331',
7878
traceId: '0af7651916cd43dd8448eb211c80319c',
79+
isRemote: true,
7980
traceFlags: TraceFlags.SAMPLED,
8081
});
8182
});
@@ -106,6 +107,7 @@ describe('HttpTraceContext', () => {
106107
assert.deepStrictEqual(extractedSpanContext, {
107108
spanId: 'b7ad6b7169203331',
108109
traceId: '0af7651916cd43dd8448eb211c80319c',
110+
isRemote: true,
109111
traceFlags: TraceFlags.SAMPLED,
110112
});
111113
});
@@ -139,6 +141,7 @@ describe('HttpTraceContext', () => {
139141
assert.deepStrictEqual(extractedSpanContext, {
140142
spanId: 'b7ad6b7169203331',
141143
traceId: '0af7651916cd43dd8448eb211c80319c',
144+
isRemote: true,
142145
traceFlags: TraceFlags.SAMPLED,
143146
traceState: new TraceState('foo=bar,baz=qux,quux=quuz'),
144147
});

packages/opentelemetry-types/src/trace/span_context.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ export interface SpanContext {
3535
* lowercase hex characters corresponding to 64 bits.
3636
*/
3737
spanId: string;
38+
/**
39+
* Only true if the SpanContext was propagated from a remote parent.
40+
*/
41+
isRemote?: boolean;
3842
/**
3943
* Trace flags to propagate.
4044
*

0 commit comments

Comments
 (0)