From e33710b4a21fd1ff625b4b6feed363d24dfd5e49 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Thu, 6 Feb 2020 14:37:46 -0500 Subject: [PATCH] chore: add typing to propagator carrier --- .../src/context/propagation/HttpTextFormat.ts | 9 ++++---- .../context/propagation/NoopHttpTextFormat.ts | 5 +++-- .../src/context/propagation/carrier.ts | 19 ++++++++++++++++ packages/opentelemetry-api/src/index.ts | 1 + .../src/context/propagation/B3Format.ts | 18 +++++++-------- .../context/propagation/HttpTraceContext.ts | 18 +++++++-------- .../opentelemetry-plugin-http/src/http.ts | 2 +- .../src/JaegerHttpTraceFormat.ts | 22 +++++++++---------- .../src/shim.ts | 7 ++++-- 9 files changed, 60 insertions(+), 41 deletions(-) create mode 100644 packages/opentelemetry-api/src/context/propagation/carrier.ts diff --git a/packages/opentelemetry-api/src/context/propagation/HttpTextFormat.ts b/packages/opentelemetry-api/src/context/propagation/HttpTextFormat.ts index c3cf8c314e7..273d5452208 100644 --- a/packages/opentelemetry-api/src/context/propagation/HttpTextFormat.ts +++ b/packages/opentelemetry-api/src/context/propagation/HttpTextFormat.ts @@ -15,6 +15,7 @@ */ import { SpanContext } from '../../trace/span_context'; +import { Carrier } from './carrier'; /** * Injects and extracts a value as text into carriers that travel in-band @@ -35,18 +36,18 @@ export interface HttpTextFormat { * * @param spanContext the SpanContext to transmit over the wire. * @param format the format of the carrier. - * @param carrier the carrier of propagation fields, such as an http request. + * @param carrier the carrier of propagation fields, such as http request headers. */ - inject(spanContext: SpanContext, format: string, carrier: unknown): void; + inject(spanContext: SpanContext, format: string, carrier: Carrier): void; /** * Returns a {@link SpanContext} instance extracted from `carrier` in the * given format from upstream. * * @param format the format of the carrier. - * @param carrier the carrier of propagation fields, such as an http request. + * @param carrier the carrier of propagation fields, such as http request headers. * @returns SpanContext The extracted SpanContext, or null if no such * SpanContext could be found in carrier. */ - extract(format: string, carrier: unknown): SpanContext | null; + extract(format: string, carrier: Carrier): SpanContext | null; } diff --git a/packages/opentelemetry-api/src/context/propagation/NoopHttpTextFormat.ts b/packages/opentelemetry-api/src/context/propagation/NoopHttpTextFormat.ts index 7596dd96b35..fb7df576041 100644 --- a/packages/opentelemetry-api/src/context/propagation/NoopHttpTextFormat.ts +++ b/packages/opentelemetry-api/src/context/propagation/NoopHttpTextFormat.ts @@ -15,6 +15,7 @@ */ import { SpanContext } from '../../trace/span_context'; +import { Carrier } from './carrier'; import { HttpTextFormat } from './HttpTextFormat'; /** @@ -22,9 +23,9 @@ import { HttpTextFormat } from './HttpTextFormat'; */ export class NoopHttpTextFormat implements HttpTextFormat { // By default does nothing - inject(spanContext: SpanContext, format: string, carrier: unknown): void {} + inject(spanContext: SpanContext, format: string, carrier: Carrier): void {} // By default does nothing - extract(format: string, carrier: unknown): SpanContext | null { + extract(format: string, carrier: Carrier): SpanContext | null { return null; } } diff --git a/packages/opentelemetry-api/src/context/propagation/carrier.ts b/packages/opentelemetry-api/src/context/propagation/carrier.ts new file mode 100644 index 00000000000..7644ace1afb --- /dev/null +++ b/packages/opentelemetry-api/src/context/propagation/carrier.ts @@ -0,0 +1,19 @@ +/*! + * Copyright 2020, OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export type Carrier = { + [key: string]: unknown; +}; diff --git a/packages/opentelemetry-api/src/index.ts b/packages/opentelemetry-api/src/index.ts index ab10bb7ed46..a4539874994 100644 --- a/packages/opentelemetry-api/src/index.ts +++ b/packages/opentelemetry-api/src/index.ts @@ -17,6 +17,7 @@ export * from './common/Logger'; export * from './common/Time'; export * from './context/propagation/BinaryFormat'; +export * from './context/propagation/carrier'; export * from './context/propagation/HttpTextFormat'; export * from './distributed_context/DistributedContext'; export * from './distributed_context/EntryValue'; diff --git a/packages/opentelemetry-core/src/context/propagation/B3Format.ts b/packages/opentelemetry-core/src/context/propagation/B3Format.ts index 2363edc3c7c..a74e30acf4e 100644 --- a/packages/opentelemetry-core/src/context/propagation/B3Format.ts +++ b/packages/opentelemetry-core/src/context/propagation/B3Format.ts @@ -14,7 +14,12 @@ * limitations under the License. */ -import { SpanContext, HttpTextFormat, TraceFlags } from '@opentelemetry/api'; +import { + Carrier, + HttpTextFormat, + SpanContext, + TraceFlags, +} from '@opentelemetry/api'; export const X_B3_TRACE_ID = 'x-b3-traceid'; export const X_B3_SPAN_ID = 'x-b3-spanid'; @@ -36,11 +41,7 @@ function isValidSpanId(spanId: string): boolean { * Based on: https://github.com/openzipkin/b3-propagation */ export class B3Format implements HttpTextFormat { - inject( - spanContext: SpanContext, - format: string, - carrier: { [key: string]: unknown } - ): void { + inject(spanContext: SpanContext, format: string, carrier: Carrier): void { if ( isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId) @@ -56,10 +57,7 @@ export class B3Format implements HttpTextFormat { } } - extract( - format: string, - carrier: { [key: string]: unknown } - ): SpanContext | null { + extract(format: string, carrier: Carrier): SpanContext | null { const traceIdHeader = carrier[X_B3_TRACE_ID]; const spanIdHeader = carrier[X_B3_SPAN_ID]; const sampledHeader = carrier[X_B3_SAMPLED]; diff --git a/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts b/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts index cf9860014fa..63370352084 100644 --- a/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts +++ b/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts @@ -14,7 +14,12 @@ * limitations under the License. */ -import { HttpTextFormat, SpanContext, TraceFlags } from '@opentelemetry/api'; +import { + Carrier, + HttpTextFormat, + SpanContext, + TraceFlags, +} from '@opentelemetry/api'; import { TraceState } from '../../trace/TraceState'; export const TRACE_PARENT_HEADER = 'traceparent'; @@ -56,11 +61,7 @@ export function parseTraceParent(traceParent: string): SpanContext | null { * https://www.w3.org/TR/trace-context/ */ export class HttpTraceContext implements HttpTextFormat { - inject( - spanContext: SpanContext, - format: string, - carrier: { [key: string]: unknown } - ) { + inject(spanContext: SpanContext, format: string, carrier: Carrier) { const traceParent = `${VERSION}-${spanContext.traceId}-${ spanContext.spanId }-0${Number(spanContext.traceFlags || TraceFlags.UNSAMPLED).toString(16)}`; @@ -71,10 +72,7 @@ export class HttpTraceContext implements HttpTextFormat { } } - extract( - format: string, - carrier: { [key: string]: unknown } - ): SpanContext | null { + extract(format: string, carrier: Carrier): SpanContext | null { const traceParentHeader = carrier[TRACE_PARENT_HEADER]; if (!traceParentHeader) return null; const traceParent = Array.isArray(traceParentHeader) diff --git a/packages/opentelemetry-plugin-http/src/http.ts b/packages/opentelemetry-plugin-http/src/http.ts index ee4c7f44ca0..35ce53636d2 100644 --- a/packages/opentelemetry-plugin-http/src/http.ts +++ b/packages/opentelemetry-plugin-http/src/http.ts @@ -407,7 +407,7 @@ export class HttpPlugin extends BasePlugin { const span = plugin._startHttpSpan(operationName, spanOptions); plugin._tracer .getHttpTextFormat() - .inject(span.context(), Format.HTTP, options.headers); + .inject(span.context(), Format.HTTP, options.headers!); const request: ClientRequest = plugin._safeExecute( span, diff --git a/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts b/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts index bcfd9724922..7a24288bf82 100644 --- a/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts +++ b/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts @@ -14,7 +14,12 @@ * limitations under the License. */ -import { SpanContext, HttpTextFormat, TraceFlags } from '@opentelemetry/api'; +import { + SpanContext, + HttpTextFormat, + TraceFlags, + Carrier, +} from '@opentelemetry/api'; export const UBER_TRACE_ID_HEADER = 'uber-trace-id'; @@ -46,13 +51,9 @@ export class JaegerHttpTraceFormat implements HttpTextFormat { /** * @param {SpanContext} spanContext - context from which we take information to inject in carrier. * @param {string} format - unused. - * @param { [key: string]: unknown } carrier - a carrier to which span information will be injected. + * @param {Carrier} carrier - a carrier to which span information will be injected. **/ - inject( - spanContext: SpanContext, - format: string, - carrier: { [key: string]: unknown } - ) { + inject(spanContext: SpanContext, format: string, carrier: Carrier) { const traceFlags = `0${( spanContext.traceFlags || TraceFlags.UNSAMPLED ).toString(16)}`; @@ -64,13 +65,10 @@ export class JaegerHttpTraceFormat implements HttpTextFormat { /** * @param {string} format - unused. - * @param { [key: string]: unknown } carrier - a carrier from which span context will be constructed. + * @param {Carrier} carrier - a carrier from which span context will be constructed. * @return {SpanContext} - returns a span context extracted from carrier. **/ - extract( - format: string, - carrier: { [key: string]: unknown } - ): SpanContext | null { + extract(format: string, carrier: Carrier): SpanContext | null { const uberTraceIdHeader = carrier[this._jaegerTraceHeader]; if (!uberTraceIdHeader) return null; const uberTraceId = Array.isArray(uberTraceIdHeader) diff --git a/packages/opentelemetry-shim-opentracing/src/shim.ts b/packages/opentelemetry-shim-opentracing/src/shim.ts index 778f440c576..0bb64cbd02e 100644 --- a/packages/opentelemetry-shim-opentracing/src/shim.ts +++ b/packages/opentelemetry-shim-opentracing/src/shim.ts @@ -120,7 +120,7 @@ export class TracerShim extends opentracing.Tracer { _inject( spanContext: opentracing.SpanContext, format: string, - carrier: unknown + carrier: types.Carrier ): void { const opentelemSpanContext: types.SpanContext = (spanContext as SpanContextShim).getSpanContext(); switch (format) { @@ -141,7 +141,10 @@ export class TracerShim extends opentracing.Tracer { } } - _extract(format: string, carrier: unknown): opentracing.SpanContext | null { + _extract( + format: string, + carrier: types.Carrier + ): opentracing.SpanContext | null { switch (format) { // tslint:disable-next-line:no-switch-case-fall-through case opentracing.FORMAT_HTTP_HEADERS: