@uoa/lambda-tracing 2.0.0-beta.6 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,7 @@
1
1
  /**
2
- * Class extended from OpenTelemetry B3MultiPropagator so that we can propagate & log the X-B3-Info header
2
+ * Class extended from OpenTelemetry B3MultiPropagator so that we can:
3
+ * 1. Propagate & log the X-B3-Info header
4
+ * 2. Propagate the correct X-B3-ParentSpanId
3
5
  *
4
6
  * See {@link https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-propagator-b3/src/B3MultiPropagator.ts}
5
7
  */
@@ -33,6 +35,9 @@ export const B3_INFO_KEY = createContextKey(
33
35
  export const B3_TRACE_ID_LENGTH_KEY = createContextKey(
34
36
  'B3 TraceId Header Length'
35
37
  );
38
+ export const B3_PARENT_SPAN_ID_KEY = createContextKey(
39
+ 'B3 Parent Span Id'
40
+ );
36
41
 
37
42
  const VALID_SAMPLED_VALUES = new Set([true, 'true', 'True', '1', 1]);
38
43
  const VALID_UNSAMPLED_VALUES = new Set([false, 'false', 'False', '0', 0]);
@@ -74,6 +79,14 @@ function getSpanId(carrier: unknown, getter: TextMapGetter): string {
74
79
  return '';
75
80
  }
76
81
 
82
+ function getParentSpanId(carrier: unknown, getter: TextMapGetter): string {
83
+ const parentSpanId = getHeaderValue(carrier, getter, X_B3_PARENT_SPAN_ID);
84
+ if (typeof parentSpanId === 'string') {
85
+ return parentSpanId;
86
+ }
87
+ return '';
88
+ }
89
+
77
90
  function getDebug(carrier: unknown, getter: TextMapGetter): string | undefined {
78
91
  const debug = getHeaderValue(carrier, getter, X_B3_FLAGS);
79
92
  return debug === '1' ? '1' : undefined;
@@ -147,6 +160,9 @@ export class UoaB3Propagator implements TextMapPropagator {
147
160
 
148
161
  const traceId = getTraceId(carrier, getter);
149
162
  const spanId = getSpanId(carrier, getter);
163
+ const parentSpanId = getParentSpanId(carrier, getter);
164
+ context = context.setValue(B3_PARENT_SPAN_ID_KEY, parentSpanId);
165
+
150
166
  const traceFlags = getTraceFlags(carrier, getter) as TraceFlags;
151
167
  const debug = getDebug(carrier, getter);
152
168
  const info = getInfo(carrier, getter);
@@ -1,5 +1,7 @@
1
1
  /**
2
- * Class extended from OpenTelemetry B3MultiPropagator so that we can propagate & log the X-B3-Info header
2
+ * Class extended from OpenTelemetry B3MultiPropagator so that we can:
3
+ * 1. Propagate & log the X-B3-Info header
4
+ * 2. Propagate the correct X-B3-ParentSpanId
3
5
  *
4
6
  * See {@link https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-propagator-b3/src/B3MultiPropagator.ts}
5
7
  */
@@ -13,6 +15,7 @@ export declare const X_B3_INFO = "x-b3-info";
13
15
  export declare const B3_DEBUG_FLAG_KEY: symbol;
14
16
  export declare const B3_INFO_KEY: symbol;
15
17
  export declare const B3_TRACE_ID_LENGTH_KEY: symbol;
18
+ export declare const B3_PARENT_SPAN_ID_KEY: symbol;
16
19
  export declare class UoaB3Propagator implements TextMapPropagator {
17
20
  inject(context: Context, carrier: any, setter: TextMapSetter<any>): void;
18
21
  extract(context: Context, carrier: any, getter: TextMapGetter<any>): Context;
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UoaB3Propagator = exports.B3_TRACE_ID_LENGTH_KEY = exports.B3_INFO_KEY = exports.B3_DEBUG_FLAG_KEY = exports.X_B3_INFO = exports.X_B3_FLAGS = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_SPAN_ID = exports.X_B3_TRACE_ID = void 0;
3
+ exports.UoaB3Propagator = exports.B3_PARENT_SPAN_ID_KEY = exports.B3_TRACE_ID_LENGTH_KEY = exports.B3_INFO_KEY = exports.B3_DEBUG_FLAG_KEY = exports.X_B3_INFO = exports.X_B3_FLAGS = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_SPAN_ID = exports.X_B3_TRACE_ID = void 0;
4
4
  /**
5
- * Class extended from OpenTelemetry B3MultiPropagator so that we can propagate & log the X-B3-Info header
5
+ * Class extended from OpenTelemetry B3MultiPropagator so that we can:
6
+ * 1. Propagate & log the X-B3-Info header
7
+ * 2. Propagate the correct X-B3-ParentSpanId
6
8
  *
7
9
  * See {@link https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-propagator-b3/src/B3MultiPropagator.ts}
8
10
  */
@@ -19,6 +21,7 @@ exports.X_B3_INFO = 'x-b3-info';
19
21
  exports.B3_DEBUG_FLAG_KEY = (0, api_1.createContextKey)('B3 Debug Flag');
20
22
  exports.B3_INFO_KEY = (0, api_1.createContextKey)('B3 Info Header');
21
23
  exports.B3_TRACE_ID_LENGTH_KEY = (0, api_1.createContextKey)('B3 TraceId Header Length');
24
+ exports.B3_PARENT_SPAN_ID_KEY = (0, api_1.createContextKey)('B3 Parent Span Id');
22
25
  const VALID_SAMPLED_VALUES = new Set([true, 'true', 'True', '1', 1]);
23
26
  const VALID_UNSAMPLED_VALUES = new Set([false, 'false', 'False', '0', 0]);
24
27
  function parseHeader(header) {
@@ -54,6 +57,13 @@ function getSpanId(carrier, getter) {
54
57
  }
55
58
  return '';
56
59
  }
60
+ function getParentSpanId(carrier, getter) {
61
+ const parentSpanId = getHeaderValue(carrier, getter, exports.X_B3_PARENT_SPAN_ID);
62
+ if (typeof parentSpanId === 'string') {
63
+ return parentSpanId;
64
+ }
65
+ return '';
66
+ }
57
67
  function getDebug(carrier, getter) {
58
68
  const debug = getHeaderValue(carrier, getter, exports.X_B3_FLAGS);
59
69
  return debug === '1' ? '1' : undefined;
@@ -114,6 +124,8 @@ class UoaB3Propagator {
114
124
  context = context.setValue(exports.B3_TRACE_ID_LENGTH_KEY, traceIdLength);
115
125
  const traceId = getTraceId(carrier, getter);
116
126
  const spanId = getSpanId(carrier, getter);
127
+ const parentSpanId = getParentSpanId(carrier, getter);
128
+ context = context.setValue(exports.B3_PARENT_SPAN_ID_KEY, parentSpanId);
117
129
  const traceFlags = getTraceFlags(carrier, getter);
118
130
  const debug = getDebug(carrier, getter);
119
131
  const info = getInfo(carrier, getter);
package/dist/tracing.js CHANGED
@@ -12,7 +12,7 @@ const provider = new sdk_trace_node_1.NodeTracerProvider({ sampler: new sdk_trac
12
12
  let infoHeader;
13
13
  function initializeTracing(serviceName) {
14
14
  const options = {
15
- url: process.env.zipkinUrl ? process.env.zipkinUrl : 'http://zipkin-uoa-its-nonprod-external-2087446318.ap-southeast-2.elb.amazonaws.com:443/api/v2/spans',
15
+ url: process.env.zipkinUrl ? process.env.zipkinUrl : 'http://internal-zipkin-uoa-its-nonprod-internal-1407434909.ap-southeast-2.elb.amazonaws.com:443/api/v2/spans',
16
16
  serviceName: serviceName
17
17
  };
18
18
  provider.addSpanProcessor(new sdk_trace_node_1.BatchSpanProcessor(new zipkin_1.ZipkinExporter(options)));
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copied from https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-exporter-zipkin/src/transform.ts
3
3
  *
4
- * Modified to handle our traceId length being either 16 or 32 characters
4
+ * Modified to handle our traceId length being either 16 or 32 characters, and to send the correct Parent Span ID
5
5
  */
6
6
  import * as api from '@opentelemetry/api';
7
7
  import { ReadableSpan, TimedEvent } from '@opentelemetry/sdk-trace-base';
@@ -42,7 +42,7 @@ exports._toZipkinAnnotations = exports._toZipkinTags = exports.toZipkinSpan = ex
42
42
  /**
43
43
  * Copied from https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-exporter-zipkin/src/transform.ts
44
44
  *
45
- * Modified to handle our traceId length being either 16 or 32 characters
45
+ * Modified to handle our traceId length being either 16 or 32 characters, and to send the correct Parent Span ID
46
46
  */
47
47
  const api = __importStar(require("@opentelemetry/api"));
48
48
  const core_1 = require("@opentelemetry/core");
@@ -67,9 +67,10 @@ exports.defaultStatusErrorTagName = 'error';
67
67
  function toZipkinSpan(span, serviceName, statusCodeTagName, statusErrorTagName) {
68
68
  const traceIdLength = api_1.context.active().getValue(UoaB3Propagator_1.B3_TRACE_ID_LENGTH_KEY);
69
69
  let traceId = span.spanContext().traceId.slice(span.spanContext().traceId.length - traceIdLength);
70
+ const parentSpanId = api_1.context.active().getValue(UoaB3Propagator_1.B3_PARENT_SPAN_ID_KEY);
70
71
  const zipkinSpan = {
71
72
  traceId: traceId,
72
- parentId: span.parentSpanId,
73
+ parentId: parentSpanId || span.parentSpanId,
73
74
  name: span.name,
74
75
  id: span.spanContext().spanId,
75
76
  kind: ZIPKIN_SPAN_KIND_MAPPING[span.kind],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uoa/lambda-tracing",
3
- "version": "2.0.0-beta.6",
3
+ "version": "2.0.1",
4
4
  "description": "Library for logging & distributed tracing in UoA Lambda projects",
5
5
  "repository": {
6
6
  "type": "git",
package/tracing.ts CHANGED
@@ -11,7 +11,7 @@ let infoHeader: string | undefined;
11
11
 
12
12
  export function initializeTracing(serviceName: string) {
13
13
  const options = {
14
- url: process.env.zipkinUrl ? process.env.zipkinUrl : 'http://zipkin-uoa-its-nonprod-external-2087446318.ap-southeast-2.elb.amazonaws.com:443/api/v2/spans',
14
+ url: process.env.zipkinUrl ? process.env.zipkinUrl : 'http://internal-zipkin-uoa-its-nonprod-internal-1407434909.ap-southeast-2.elb.amazonaws.com:443/api/v2/spans',
15
15
  serviceName: serviceName
16
16
  }
17
17
  provider.addSpanProcessor(new BatchSpanProcessor(new ZipkinExporter(options)));
@@ -17,7 +17,7 @@
17
17
  /**
18
18
  * Copied from https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-exporter-zipkin/src/transform.ts
19
19
  *
20
- * Modified to handle our traceId length being either 16 or 32 characters
20
+ * Modified to handle our traceId length being either 16 or 32 characters, and to send the correct Parent Span ID
21
21
  */
22
22
 
23
23
  import * as api from '@opentelemetry/api';
@@ -26,7 +26,7 @@ import { hrTimeToMicroseconds } from '@opentelemetry/core';
26
26
  import * as zipkinTypes from './types';
27
27
  import { Resource } from '@opentelemetry/resources';
28
28
  import {context} from "@opentelemetry/api";
29
- import {B3_TRACE_ID_LENGTH_KEY} from "../UoaB3Propagator";
29
+ import {B3_PARENT_SPAN_ID_KEY, B3_TRACE_ID_LENGTH_KEY} from "../UoaB3Propagator";
30
30
 
31
31
  const ZIPKIN_SPAN_KIND_MAPPING = {
32
32
  [api.SpanKind.CLIENT]: zipkinTypes.SpanKind.CLIENT,
@@ -53,9 +53,10 @@ export function toZipkinSpan(
53
53
  ): zipkinTypes.Span {
54
54
  const traceIdLength: number = <number>context.active().getValue(B3_TRACE_ID_LENGTH_KEY);
55
55
  let traceId = span.spanContext().traceId.slice(span.spanContext().traceId.length - traceIdLength);
56
+ const parentSpanId = <string>context.active().getValue(B3_PARENT_SPAN_ID_KEY);
56
57
  const zipkinSpan: zipkinTypes.Span = {
57
58
  traceId: traceId,
58
- parentId: span.parentSpanId,
59
+ parentId: parentSpanId || span.parentSpanId,
59
60
  name: span.name,
60
61
  id: span.spanContext().spanId,
61
62
  kind: ZIPKIN_SPAN_KIND_MAPPING[span.kind],