From 6e617410a73b12b8c06ab5527973062fa0e12ae0 Mon Sep 17 00:00:00 2001 From: Mayur Kale Date: Thu, 7 Feb 2019 13:57:58 -0800 Subject: [PATCH 1/2] Use enum for MessageEvent Type, Link Type and SpanKind --- CHANGELOG.md | 1 + .../src/trace/model/root-span.ts | 5 +- .../src/trace/model/span-base.ts | 7 ++- .../opencensus-core/src/trace/model/tracer.ts | 6 +- .../opencensus-core/src/trace/model/types.ts | 61 ++++++++++++++++--- .../test/test-console-exporter.ts | 5 +- .../test/test-exporter-buffer.ts | 3 +- .../opencensus-core/test/test-root-span.ts | 18 +++--- packages/opencensus-core/test/test-span.ts | 11 ++-- packages/opencensus-core/test/test-tracer.ts | 9 +-- .../src/instana.ts | 6 +- .../test/test-instana.ts | 5 +- .../src/adapters.ts | 24 ++++---- .../test/test-ocagent.ts | 31 +++++----- .../test/test-zipkin.ts | 9 +-- .../src/grpc.ts | 6 +- .../test/test-grpc.ts | 24 +++++--- .../src/http.ts | 10 +-- .../src/http2.ts | 10 +-- .../src/mongodb.ts | 12 ++-- 20 files changed, 162 insertions(+), 101 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9334e17d0..f01873ec9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ All notable changes to this project will be documented in this file. - The ```new Stats()``` has been deprecated on Stats class. The global singleton ```globalStats``` object should be used instead. Also, ```registerView()``` is separated out from ```createView()```. - Use ```TagKey```, ```TagValue``` and ```TagMap``` to create the tag keys, tag values. - The `status` field on `Span` is no longer a number, use `CanonicalCode` instead. +- Add enum type for `MessageEvent`, `Link` and `SpanKind`, instead of string. ##### Old code ```js diff --git a/packages/opencensus-core/src/trace/model/root-span.ts b/packages/opencensus-core/src/trace/model/root-span.ts index f2fce7eaa..f3a137e63 100644 --- a/packages/opencensus-core/src/trace/model/root-span.ts +++ b/packages/opencensus-core/src/trace/model/root-span.ts @@ -52,7 +52,8 @@ export class RootSpan extends SpanBase implements types.RootSpan { this.traceStateLocal = context.spanContext.traceState; } this.spansLocal = []; - this.kind = context && context.kind ? context.kind : null; + this.kind = + context && context.kind ? context.kind : types.SpanKind.UNSPECIFIED; this.logger = tracer.logger || logger.logger(); this.activeTraceParams = tracer.activeTraceParams; } @@ -105,7 +106,7 @@ export class RootSpan extends SpanBase implements types.RootSpan { * @param kind Span kind. * @param parentSpanId Span parent ID. */ - startChildSpan(name: string, kind: string, parentSpanId?: string): + startChildSpan(name: string, kind: types.SpanKind, parentSpanId?: string): types.Span { if (this.ended) { this.logger.debug( diff --git a/packages/opencensus-core/src/trace/model/span-base.ts b/packages/opencensus-core/src/trace/model/span-base.ts index e070ba6df..41e6de52c 100644 --- a/packages/opencensus-core/src/trace/model/span-base.ts +++ b/packages/opencensus-core/src/trace/model/span-base.ts @@ -54,7 +54,7 @@ export abstract class SpanBase implements types.Span { /** The resource name of the span */ name: string = null; /** Kind of span. */ - kind: string = null; + kind: types.SpanKind = types.SpanKind.UNSPECIFIED; /** A final status for this span */ status: types.Status = STATUS_OK; /** set isRootSpan */ @@ -189,7 +189,7 @@ export abstract class SpanBase implements types.Span { * @param attributes A set of attributes on the link. */ addLink( - traceId: string, spanId: string, type: string, + traceId: string, spanId: string, type: types.LinkType, attributes?: types.Attributes) { if (this.links.length >= this.activeTraceParams.numberOfLinksPerSpan) { this.links.shift(); @@ -210,12 +210,13 @@ export abstract class SpanBase implements types.Span { * @param id An identifier for the message event. * @param timestamp A time in milliseconds. Defaults to Date.now() */ - addMessageEvent(type: string, id: string, timestamp = 0) { + addMessageEvent(type: types.MessageEventType, id: string, timestamp = 0) { if (this.messageEvents.length >= this.activeTraceParams.numberOfMessageEventsPerSpan) { this.messageEvents.shift(); this.droppedMessageEventsCount++; } + this.messageEvents.push({ 'type': type, 'id': id, diff --git a/packages/opencensus-core/src/trace/model/tracer.ts b/packages/opencensus-core/src/trace/model/tracer.ts index d36ea36d7..bca4741d6 100644 --- a/packages/opencensus-core/src/trace/model/tracer.ts +++ b/packages/opencensus-core/src/trace/model/tracer.ts @@ -236,16 +236,16 @@ export class CoreTracer implements types.Tracer { /** * Starts a span. * @param name The span name. - * @param type The span type. + * @param kind optional The span kind. * @param parentSpanId The parent span ID. */ - startChildSpan(name?: string, type?: string): types.Span { + startChildSpan(name?: string, kind?: types.SpanKind): types.Span { let newSpan: types.Span = null; if (!this.currentRootSpan) { this.logger.debug( 'no current trace found - must start a new root span first'); } else { - newSpan = this.currentRootSpan.startChildSpan(name, type); + newSpan = this.currentRootSpan.startChildSpan(name, kind); } return newSpan; } diff --git a/packages/opencensus-core/src/trace/model/types.ts b/packages/opencensus-core/src/trace/model/types.ts index 941c2211b..8f6792830 100644 --- a/packages/opencensus-core/src/trace/model/types.ts +++ b/packages/opencensus-core/src/trace/model/types.ts @@ -191,7 +191,7 @@ export interface MessageEvent { /** A timestamp for the event. */ timestamp: number; /** Indicates whether the message was sent or received. */ - type: string; + type: MessageEventType; /** An identifier for the MessageEvent's message. */ id: string; /** The number of uncompressed bytes sent or received. */ @@ -213,7 +213,7 @@ export interface Link { /** The span ID for a span within a trace. */ spanId: string; /** The relationship of the current span relative to the linked. */ - type: string; + type: LinkType; /** A set of attributes on the link. */ attributes: Attributes; } @@ -225,7 +225,7 @@ export interface TraceOptions { /** Trace context */ spanContext?: SpanContext; /** Span kind */ - kind?: string; + kind?: SpanKind; } export type TraceState = string; @@ -249,6 +249,51 @@ export interface SpanEventListener { onEndSpan(span: RootSpan): void; } +/** An event describing a message sent/received between Spans. */ +export enum MessageEventType { + /** Unknown event type. */ + UNSPECIFIED = 0, + /** Indicates a sent message. */ + SENT = 1, + /** Indicates a received message. */ + RECEIVED = 2 +} + +/** + * Type of span. Can be used to specify additional relationships between spans + * in addition to a parent/child relationship. + */ +export enum SpanKind { + /** Unspecified */ + UNSPECIFIED = 0, + /** + * Indicates that the span covers server-side handling of an RPC or other + * remote network request. + */ + SERVER = 1, + /** + * Indicates that the span covers the client-side wrapper around an RPC or + * other remote request. + */ + CLIENT = 2 +} + +/** + * Type of link. The relationship of the current span relative to the linked + * span. + */ +export enum LinkType { + /** + * The relationship of the two spans is unknown, or known but other + * than parent-child. + */ + UNSPECIFIED = 0, + /** The linked span is a child of the current span. */ + CHILD_LINKED_SPAN = 1, + /** The linked span is a parent of the current span. */ + PARENT_LINKED_SPAN = 2 +} + /** Interface for Span */ export interface Span { /** The Span ID of this span */ @@ -264,7 +309,7 @@ export interface Span { name: string; /** Kind of span. */ - kind: string; + kind: SpanKind; /** An object to log information to */ logger: loggerTypes.Logger; @@ -359,7 +404,7 @@ export interface Span { * @param attributes A set of attributes on the link. */ addLink( - traceId: string, spanId: string, type: string, + traceId: string, spanId: string, type: LinkType, attributes?: Attributes): void; /** @@ -368,7 +413,7 @@ export interface Span { * @param id An identifier for the message event. * @param timestamp A timestamp for this event. */ - addMessageEvent(type: string, id: string, timestamp?: number): void; + addMessageEvent(type: MessageEventType, id: string, timestamp?: number): void; /** * Sets a status to the span. @@ -393,7 +438,7 @@ export interface RootSpan extends Span { readonly spans: Span[]; /** Starts a new Span instance in the RootSpan instance */ - startChildSpan(name: string, type: string): Span; + startChildSpan(name: string, kind: SpanKind): Span; } @@ -460,7 +505,7 @@ export interface Tracer extends SpanEventListener { * @param parentSpanId Parent SpanId * @returns The new Span instance started */ - startChildSpan(name?: string, type?: string, parentSpanId?: string): Span; + startChildSpan(name?: string, type?: SpanKind, parentSpanId?: string): Span; /** * Binds the trace context to the given function. diff --git a/packages/opencensus-core/test/test-console-exporter.ts b/packages/opencensus-core/test/test-console-exporter.ts index 41bcd21c3..55dcb3b56 100644 --- a/packages/opencensus-core/test/test-console-exporter.ts +++ b/packages/opencensus-core/test/test-console-exporter.ts @@ -15,6 +15,7 @@ */ import * as assert from 'assert'; +import {SpanKind} from '../src'; import {ConsoleExporter, NoopExporter} from '../src/exporters/console-exporter'; import {RootSpan} from '../src/trace/model/root-span'; import {CoreTracer} from '../src/trace/model/tracer'; @@ -86,7 +87,7 @@ describe('ConsoleLogExporter', () => { const exporter = new ConsoleExporter(defaultBufferConfig); const rootSpan = new RootSpan(tracer); rootSpan.start(); - rootSpan.startChildSpan('name', 'type', rootSpan.traceId); + rootSpan.startChildSpan('name', SpanKind.UNSPECIFIED, rootSpan.traceId); const queue: RootSpan[] = [rootSpan]; return exporter.publish(queue).then(() => { @@ -98,4 +99,4 @@ describe('ConsoleLogExporter', () => { }); }); }); -}); \ No newline at end of file +}); diff --git a/packages/opencensus-core/test/test-exporter-buffer.ts b/packages/opencensus-core/test/test-exporter-buffer.ts index 8e504b7c7..cf15b6a76 100644 --- a/packages/opencensus-core/test/test-exporter-buffer.ts +++ b/packages/opencensus-core/test/test-exporter-buffer.ts @@ -15,6 +15,7 @@ */ import * as assert from 'assert'; +import {SpanKind} from '../src'; import * as logger from '../src/common/console-logger'; import {NoopExporter} from '../src/exporters/console-exporter'; import {ExporterBuffer} from '../src/exporters/exporter-buffer'; @@ -40,7 +41,7 @@ const createRootSpans = (num: number): RootSpan[] => { const rootSpan = new RootSpan(tracer, {name: `rootSpan.${i}`}); rootSpan.start(); for (let j = 0; j < 10; j++) { - rootSpan.startChildSpan(`childSpan.${i}.${j}`, 'client'); + rootSpan.startChildSpan(`childSpan.${i}.${j}`, SpanKind.CLIENT); } rootSpans.push(rootSpan); } diff --git a/packages/opencensus-core/test/test-root-span.ts b/packages/opencensus-core/test/test-root-span.ts index a6ac03c41..2b508fc19 100644 --- a/packages/opencensus-core/test/test-root-span.ts +++ b/packages/opencensus-core/test/test-root-span.ts @@ -56,9 +56,10 @@ describe('RootSpan', () => { // TODO: Suggetion: make sure that root.spans.length is 1, // and that it's the same as the earlier (shadowed) span object root.start(); - const span = root.startChildSpan('spanName', 'spanType'); + const span = root.startChildSpan('spanName', types.SpanKind.CLIENT); assert.strictEqual(root.spans.length, 1); assert.strictEqual(span, root.spans[0]); + assert.strictEqual(span.kind, types.SpanKind.CLIENT); assert.strictEqual(root.parentSpanId, null); for (const span of root.spans) { @@ -97,7 +98,7 @@ describe('RootSpan', () => { before(() => { root = new RootSpan(tracer); root.start(); - span = root.startChildSpan('spanName', 'spanType'); + span = root.startChildSpan('spanName', types.SpanKind.UNSPECIFIED); }); it('should create span instance', () => { @@ -115,7 +116,7 @@ describe('RootSpan', () => { describe('startSpan() before start rootspan', () => { it('should not create span', () => { const root = new RootSpan(tracer); - const span = root.startChildSpan('spanName', 'spanType'); + const span = root.startChildSpan('spanName', types.SpanKind.UNSPECIFIED); assert.strictEqual(span, null); }); }); @@ -128,7 +129,7 @@ describe('RootSpan', () => { const root = new RootSpan(tracer); root.start(); root.end(); - const span = root.startChildSpan('spanName', 'spanType'); + const span = root.startChildSpan('spanName', types.SpanKind.UNSPECIFIED); assert.strictEqual(span, null); }); }); @@ -163,7 +164,7 @@ describe('RootSpan', () => { it('should end all spans inside rootspan', () => { const root = new RootSpan(tracer); root.start(); - root.startChildSpan('spanName', 'spanType'); + root.startChildSpan('spanName', types.SpanKind.UNSPECIFIED); root.end(); for (const span of root.spans) { @@ -227,8 +228,8 @@ describe('RootSpan', () => { const span = new Span(rootSpan); span.start(); - const LINK_TYPE = 'CHILD_LINKED_SPAN'; - rootSpan.addLink(rootSpan.traceId, span.id, LINK_TYPE); + rootSpan.addLink( + rootSpan.traceId, span.id, types.LinkType.CHILD_LINKED_SPAN); assert.ok(rootSpan.links.length > 0); assert.equal(rootSpan.droppedLinksCount, 0); @@ -249,7 +250,8 @@ describe('RootSpan', () => { const rootSpan = new RootSpan(tracer); rootSpan.start(); - rootSpan.addMessageEvent('TYPE_UNSPECIFIED', 'message_event_test_id'); + rootSpan.addMessageEvent( + types.MessageEventType.UNSPECIFIED, 'message_event_test_id'); assert.ok(rootSpan.messageEvents.length > 0); assert.equal(rootSpan.droppedMessageEventsCount, 0); diff --git a/packages/opencensus-core/test/test-span.ts b/packages/opencensus-core/test/test-span.ts index e802baba6..6c92c202e 100644 --- a/packages/opencensus-core/test/test-span.ts +++ b/packages/opencensus-core/test/test-span.ts @@ -263,8 +263,8 @@ describe('Span', () => { const span = new Span(rootSpan); span.start(); - const LINK_TYPE = 'PARENT_LINKED_SPAN'; - span.addLink(span.traceId, rootSpan.id, LINK_TYPE); + span.addLink( + span.traceId, rootSpan.id, types.LinkType.PARENT_LINKED_SPAN); assert.ok(span.links.length > 0); assert.equal(span.droppedLinksCount, 0); @@ -277,9 +277,9 @@ describe('Span', () => { const span = new Span(rootSpan); span.start(); - const LINK_TYPE = 'PARENT_LINKED_SPAN'; for (let i = 0; i < 35; i++) { - span.addLink(span.traceId, rootSpan.id, LINK_TYPE); + span.addLink( + span.traceId, rootSpan.id, types.LinkType.PARENT_LINKED_SPAN); } assert.equal(span.links.length, 32); @@ -303,7 +303,8 @@ describe('Span', () => { const span = new Span(rootSpan); span.start(); - span.addMessageEvent('TYPE_UNSPECIFIED', 'message_event_test_id'); + span.addMessageEvent( + types.MessageEventType.UNSPECIFIED, 'message_event_test_id'); assert.ok(span.messageEvents.length > 0); assert.equal(span.droppedMessageEventsCount, 0); diff --git a/packages/opencensus-core/test/test-tracer.ts b/packages/opencensus-core/test/test-tracer.ts index a3176e051..2b43ef351 100644 --- a/packages/opencensus-core/test/test-tracer.ts +++ b/packages/opencensus-core/test/test-tracer.ts @@ -194,7 +194,7 @@ describe('Tracer', () => { }); describe('startRootSpan() with context propagation', () => { - const traceOptions = {name: 'rootName', kind: 'spanType'} as + const traceOptions = {name: 'rootName', kind: types.SpanKind.UNSPECIFIED} as types.TraceOptions; it('should create new RootSpan instance, no propagation', () => { @@ -295,7 +295,7 @@ describe('Tracer', () => { const tracer = new CoreTracer(); tracer.start(defaultConfig); tracer.startRootSpan(options, (rootSpan) => { - span = tracer.startChildSpan('spanName', 'spanType'); + span = tracer.startChildSpan('spanName', types.SpanKind.CLIENT); }); }); it('should create a Span instance', () => { @@ -304,7 +304,7 @@ describe('Tracer', () => { it('should start a span', () => { assert.ok(span.started); assert.strictEqual(span.name, 'spanName'); - assert.strictEqual(span.kind, 'spanType'); + assert.strictEqual(span.kind, types.SpanKind.CLIENT); }); }); @@ -313,7 +313,8 @@ describe('Tracer', () => { it('should not create a Span instance, without a rootspan', () => { const tracer = new CoreTracer(); tracer.start(defaultConfig); - const span = tracer.startChildSpan('spanName', 'spanType'); + const span = + tracer.startChildSpan('spanName', types.SpanKind.UNSPECIFIED); assert.equal(span, null); }); }); diff --git a/packages/opencensus-exporter-instana/src/instana.ts b/packages/opencensus-exporter-instana/src/instana.ts index 87772fcbe..88d088f27 100644 --- a/packages/opencensus-exporter-instana/src/instana.ts +++ b/packages/opencensus-exporter-instana/src/instana.ts @@ -14,14 +14,14 @@ * limitations under the License. */ -import {Exporter, ExporterBuffer, ExporterConfig, RootSpan, Span} from '@opencensus/core'; +import {Exporter, ExporterBuffer, ExporterConfig, RootSpan, Span, SpanKind} from '@opencensus/core'; import {logger, Logger} from '@opencensus/core'; import {request} from 'http'; const spanKindTranslation: {[k: string]: string} = { CLIENT: 'EXIT', SERVER: 'ENTRY', - LOCAL: 'INTERMEDIATE', + UNSPECIFIED: 'INTERMEDIATE', }; type InstanaSpan = { @@ -109,7 +109,7 @@ export class InstanaTraceExporter implements Exporter { timestamp: span.startTime.getTime(), duration: span.duration, name: span.name, - type: spanKindTranslation[span.kind] || span.kind, + type: spanKindTranslation[span.kind], error: span.status != null && span.status.code !== 0, data: Object.keys(span.attributes) .reduce( diff --git a/packages/opencensus-exporter-instana/test/test-instana.ts b/packages/opencensus-exporter-instana/test/test-instana.ts index 439f923cc..9dda2f7f2 100644 --- a/packages/opencensus-exporter-instana/test/test-instana.ts +++ b/packages/opencensus-exporter-instana/test/test-instana.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {CoreTracer, RootSpan, TracerConfig} from '@opencensus/core'; +import {CoreTracer, RootSpan, SpanKind, TracerConfig} from '@opencensus/core'; import * as assert from 'assert'; import * as http from 'http'; import * as mocha from 'mocha'; @@ -60,7 +60,8 @@ describe('Instana Exporter', function() { .startRootSpan( {name: 'root-test'}, async (rootSpan: RootSpan) => { - const span = rootSpan.startChildSpan('spanTest', 'spanType'); + const span = + rootSpan.startChildSpan('spanTest', SpanKind.CLIENT); span.end(); rootSpan.end(); return exporter.publish([rootSpan, rootSpan]); diff --git a/packages/opencensus-exporter-ocagent/src/adapters.ts b/packages/opencensus-exporter-ocagent/src/adapters.ts index 7a7c4a178..1220797e3 100644 --- a/packages/opencensus-exporter-ocagent/src/adapters.ts +++ b/packages/opencensus-exporter-ocagent/src/adapters.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {Annotation, Attributes, Link, MessageEvent, RootSpan, Span} from '@opencensus/core'; +import {Annotation, Attributes, Link, LinkType, MessageEvent, MessageEventType, RootSpan, Span, SpanKind} from '@opencensus/core'; import {google, opencensus} from './types'; /** @@ -65,12 +65,12 @@ const hexStringToUint8Array = (hex: string): Uint8Array|null => { * enum type. */ const spanKindToEnum = - (value: string): opencensus.proto.trace.v1.Span.SpanKind => { - switch (value) { - case 'SERVER': { + (kind: SpanKind): opencensus.proto.trace.v1.Span.SpanKind => { + switch (kind) { + case SpanKind.SERVER: { return opencensus.proto.trace.v1.Span.SpanKind.SERVER; } - case 'CLIENT': { + case SpanKind.CLIENT: { return opencensus.proto.trace.v1.Span.SpanKind.CLIENT; } default: { @@ -131,13 +131,13 @@ const adaptAttributes = (attributes: Attributes, * @param value * @return opencensus.proto.trace.v1.Span.TimeEvent.MessageEvent.Type */ -const adaptMessageEventType = (value: string): opencensus.proto.trace.v1.Span - .TimeEvent.MessageEvent.Type => { - switch (value) { - case 'MessageEventTypeSent': { +const adaptMessageEventType = (type: MessageEventType): opencensus.proto.trace + .v1.Span.TimeEvent.MessageEvent.Type => { + switch (type) { + case MessageEventType.SENT: { return opencensus.proto.trace.v1.Span.TimeEvent.MessageEvent.Type.SENT; } - case 'MessageEventTypeRecv': { + case MessageEventType.RECEIVED: { return opencensus.proto.trace.v1.Span.TimeEvent.MessageEvent.Type .RECEIVED; } @@ -223,11 +223,11 @@ const adaptLink = (link: Link): opencensus.proto.trace.v1.Span.Link => { let type; switch (link.type) { - case 'CHILD_LINKED_SPAN': { + case LinkType.CHILD_LINKED_SPAN: { type = opencensus.proto.trace.v1.Span.Link.Type.CHILD_LINKED_SPAN; break; } - case 'PARENT_LINKED_SPAN': { + case LinkType.PARENT_LINKED_SPAN: { type = opencensus.proto.trace.v1.Span.Link.Type.PARENT_LINKED_SPAN; break; } diff --git a/packages/opencensus-exporter-ocagent/test/test-ocagent.ts b/packages/opencensus-exporter-ocagent/test/test-ocagent.ts index 8386bd44e..2fbda751f 100644 --- a/packages/opencensus-exporter-ocagent/test/test-ocagent.ts +++ b/packages/opencensus-exporter-ocagent/test/test-ocagent.ts @@ -15,7 +15,7 @@ */ import * as protoLoader from '@grpc/proto-loader'; -import {CanonicalCode, RootSpan, TraceOptions, Tracing} from '@opencensus/core'; +import {CanonicalCode, LinkType, MessageEventType, RootSpan, SpanKind, TraceOptions, Tracing} from '@opencensus/core'; import * as nodeTracing from '@opencensus/nodejs'; import * as assert from 'assert'; import {EventEmitter} from 'events'; @@ -202,7 +202,8 @@ describe('OpenCensus Agent Exporter', () => { spanContext: {traceId: hexId(), spanId: hexId(), options: 0x1} }, (rootSpan: RootSpan) => { - const childSpan = rootSpan.startChildSpan(CHILD_SPAN_NAME, ''); + const childSpan = + rootSpan.startChildSpan(CHILD_SPAN_NAME, SpanKind.UNSPECIFIED); // When the stream is connected, we end both spans, which should // trigger the spans to be sent to the agent. @@ -325,7 +326,7 @@ describe('OpenCensus Agent Exporter', () => { it('should adapt a span correctly', (done) => { const rootSpanOptions: TraceOptions = { name: 'root', - kind: 'SERVER', + kind: SpanKind.SERVER, spanContext: { traceId: hexId(), spanId: hexId(), @@ -358,22 +359,22 @@ describe('OpenCensus Agent Exporter', () => { // Message Event const timeStamp = 123456789; - rootSpan.addMessageEvent('MessageEventTypeSent', 'aaaa', timeStamp); - rootSpan.addMessageEvent('MessageEventTypeSent', 'ffff', timeStamp); - rootSpan.addMessageEvent('MessageEventTypeRecv', 'ffff', timeStamp); + rootSpan.addMessageEvent(MessageEventType.SENT, 'aaaa', timeStamp); + rootSpan.addMessageEvent(MessageEventType.SENT, 'ffff', timeStamp); + rootSpan.addMessageEvent(MessageEventType.RECEIVED, 'ffff', timeStamp); // Use of `null` is to force a `TYPE_UNSPECIFIED` value // tslint:disable-next-line:no-any rootSpan.addMessageEvent(null as any, 'ffff', timeStamp); // Links - rootSpan.addLink('aaaaa', 'aaa', 'CHILD_LINKED_SPAN'); - rootSpan.addLink('bbbbb', 'bbbbb', 'CHILD_LINKED_SPAN'); - rootSpan.addLink('ffff', 'ffff', 'CHILD_LINKED_SPAN', { + rootSpan.addLink('aaaaa', 'aaa', LinkType.CHILD_LINKED_SPAN); + rootSpan.addLink('bbbbb', 'bbbbb', LinkType.CHILD_LINKED_SPAN); + rootSpan.addLink('ffff', 'ffff', LinkType.CHILD_LINKED_SPAN, { 'child_link_attribute_string': 'foo1', 'child_link_attribute_number': 123, 'child_link_attribute_boolean': true, }); - rootSpan.addLink('ffff', 'ffff', 'PARENT_LINKED_SPAN'); + rootSpan.addLink('ffff', 'ffff', LinkType.PARENT_LINKED_SPAN); // Use of `null` is to force a `TYPE_UNSPECIFIED` value // tslint:disable-next-line:no-any rootSpan.addLink('ffff', 'ffff', null as any); @@ -555,7 +556,7 @@ describe('OpenCensus Agent Exporter', () => { (done) => { const rootSpanOptions: TraceOptions = { name: 'root', - kind: 'SERVER', + kind: SpanKind.SERVER, spanContext: { traceId: hexId(), spanId: hexId(), @@ -579,16 +580,16 @@ describe('OpenCensus Agent Exporter', () => { // Message Event const timeStamp = 123456789; - rootSpan.addMessageEvent('MessageEventTypeSent', 'ffff', timeStamp); - rootSpan.addMessageEvent('MessageEventTypeRecv', 'ffff', timeStamp); + rootSpan.addMessageEvent(MessageEventType.SENT, 'ffff', timeStamp); + rootSpan.addMessageEvent(MessageEventType.RECEIVED, 'ffff', timeStamp); // Links - rootSpan.addLink('ffff', 'ffff', 'CHILD_LINKED_SPAN', { + rootSpan.addLink('ffff', 'ffff', LinkType.CHILD_LINKED_SPAN, { 'child_link_attribute_string': 'foo1', 'child_link_attribute_number': 123, 'child_link_attribute_boolean': true, }); - rootSpan.addLink('ffff', 'ffff', 'PARENT_LINKED_SPAN'); + rootSpan.addLink('ffff', 'ffff', LinkType.PARENT_LINKED_SPAN); server.on( MockAgentEvent.ExportStreamMessageReceived, diff --git a/packages/opencensus-exporter-zipkin/test/test-zipkin.ts b/packages/opencensus-exporter-zipkin/test/test-zipkin.ts index d094af1ce..2fc829c02 100644 --- a/packages/opencensus-exporter-zipkin/test/test-zipkin.ts +++ b/packages/opencensus-exporter-zipkin/test/test-zipkin.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {CoreTracer, RootSpan, TracerConfig} from '@opencensus/core'; +import {CoreTracer, RootSpan, SpanKind, TracerConfig} from '@opencensus/core'; import * as assert from 'assert'; import * as http from 'http'; import * as mocha from 'mocha'; @@ -82,7 +82,7 @@ describe('Zipkin Exporter', function() { tracer.start(defaultConfig); tracer.startRootSpan({name: 'root-test'}, (rootSpan: RootSpan) => { - const span = rootSpan.startChildSpan('spanTest', 'spanType'); + const span = rootSpan.startChildSpan('spanTest', SpanKind.CLIENT); span.end(); rootSpan.end(); assert.ok(exporter.buffer.getQueue().length > 0); @@ -99,7 +99,7 @@ describe('Zipkin Exporter', function() { return tracer.startRootSpan( {name: 'root-test'}, async (rootSpan: RootSpan) => { - const span = rootSpan.startChildSpan('spanTest', 'spanType'); + const span = rootSpan.startChildSpan('spanTest', SpanKind.CLIENT); span.end(); rootSpan.end(); return exporter.publish([rootSpan, rootSpan]).then((result) => { @@ -124,7 +124,8 @@ describe('Zipkin Exporter', function() { return tracer.startRootSpan( {name: 'root-test'}, async (rootSpan: RootSpan) => { - const span = rootSpan.startChildSpan('spanTest', 'spanType'); + const span = + rootSpan.startChildSpan('spanTest', SpanKind.CLIENT); span.end(); rootSpan.end(); return exporter.publish([rootSpan]).then((result) => { diff --git a/packages/opencensus-instrumentation-grpc/src/grpc.ts b/packages/opencensus-instrumentation-grpc/src/grpc.ts index fb1e76fbc..3866663b7 100644 --- a/packages/opencensus-instrumentation-grpc/src/grpc.ts +++ b/packages/opencensus-instrumentation-grpc/src/grpc.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {BasePlugin, CanonicalCode, HeaderGetter, HeaderSetter, PluginInternalFiles, RootSpan, Span} from '@opencensus/core'; +import {BasePlugin, CanonicalCode, HeaderGetter, HeaderSetter, PluginInternalFiles, RootSpan, Span, SpanKind} from '@opencensus/core'; import {EventEmitter} from 'events'; import * as grpcTypes from 'grpc'; import * as lodash from 'lodash'; @@ -172,7 +172,7 @@ export class GrpcPlugin extends BasePlugin { const traceOptions = { name: `grpc.${name.replace('/', '')}`, - kind: 'SERVER', + kind: SpanKind.SERVER, spanContext: propagation ? propagation.extract(getter) : null }; plugin.logger.debug('path func: %s', traceOptions.name); @@ -314,7 +314,7 @@ export class GrpcPlugin extends BasePlugin { ) { const traceOptions = { name: `grpc.${original.path.replace('/', '')}`, - kind: 'CLIENT', + kind: SpanKind.CLIENT, }; const args = Array.prototype.slice.call(arguments); // Checks if this remote function call is part of an operation by diff --git a/packages/opencensus-instrumentation-grpc/test/test-grpc.ts b/packages/opencensus-instrumentation-grpc/test/test-grpc.ts index 47060bcce..7a85fd643 100644 --- a/packages/opencensus-instrumentation-grpc/test/test-grpc.ts +++ b/packages/opencensus-instrumentation-grpc/test/test-grpc.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {CoreTracer, RootSpan, Span, SpanEventListener, TracerConfig} from '@opencensus/core'; +import {CoreTracer, RootSpan, Span, SpanEventListener, SpanKind} from '@opencensus/core'; import {logger} from '@opencensus/core'; import {B3Format} from '@opencensus/propagation-b3'; import * as assert from 'assert'; @@ -327,7 +327,7 @@ describe('GrpcPlugin() ', function() { false; function assertSpan( - span: Span, spanName: string, kind: string, status: grpcModule.status) { + span: Span, spanName: string, kind: SpanKind, status: grpcModule.status) { assert.strictEqual(span.name, spanName); assert.strictEqual(span.kind, kind); assert.strictEqual( @@ -373,10 +373,10 @@ describe('GrpcPlugin() ', function() { const serverRoot = rootSpanVerifier.endedRootSpans[0]; const clientRoot = rootSpanVerifier.endedRootSpans[1]; assertSpan( - serverRoot, spanName, 'SERVER', + serverRoot, spanName, SpanKind.SERVER, grpcModule.status.OK); assertSpan( - clientRoot, spanName, 'CLIENT', + clientRoot, spanName, SpanKind.CLIENT, grpcModule.status.OK); assertPropagation(clientRoot, serverRoot); @@ -403,7 +403,7 @@ describe('GrpcPlugin() ', function() { serverRoot = rootSpanVerifier.endedRootSpans[0]; assertSpan( - serverRoot, spanName, 'SERVER', + serverRoot, spanName, SpanKind.SERVER, grpcModule.status.OK); }); root.end(); @@ -411,7 +411,8 @@ describe('GrpcPlugin() ', function() { const clientChild = rootSpanVerifier.endedRootSpans[1].spans[0]; assertSpan( - clientChild, spanName, 'CLIENT', grpcModule.status.OK); + clientChild, spanName, SpanKind.CLIENT, + grpcModule.status.OK); // propagation assertPropagation(clientChild, serverRoot); }); @@ -451,8 +452,10 @@ describe('GrpcPlugin() ', function() { const serverRoot = rootSpanVerifier.endedRootSpans[0]; const clientRoot = rootSpanVerifier.endedRootSpans[1]; - assertSpan(serverRoot, spanName, 'SERVER', errorCode); - assertSpan(clientRoot, spanName, 'CLIENT', errorCode); + assertSpan( + serverRoot, spanName, SpanKind.SERVER, errorCode); + assertSpan( + clientRoot, spanName, SpanKind.CLIENT, errorCode); assertPropagation(clientRoot, serverRoot); }); }); @@ -476,13 +479,14 @@ describe('GrpcPlugin() ', function() { rootSpanVerifier.endedRootSpans.length, 1); serverRoot = rootSpanVerifier.endedRootSpans[0]; - assertSpan(serverRoot, spanName, 'SERVER', errorCode); + assertSpan( + serverRoot, spanName, SpanKind.SERVER, errorCode); }); root.end(); assert.strictEqual(rootSpanVerifier.endedRootSpans.length, 2); const clientChild = rootSpanVerifier.endedRootSpans[1].spans[0]; - assertSpan(clientChild, spanName, 'CLIENT', errorCode); + assertSpan(clientChild, spanName, SpanKind.CLIENT, errorCode); // propagation assertPropagation(clientChild, serverRoot); }); diff --git a/packages/opencensus-instrumentation-http/src/http.ts b/packages/opencensus-instrumentation-http/src/http.ts index e60acb4c8..dfbefd446 100644 --- a/packages/opencensus-instrumentation-http/src/http.ts +++ b/packages/opencensus-instrumentation-http/src/http.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {BasePlugin, CanonicalCode, Func, HeaderGetter, HeaderSetter, RootSpan, Span, Tracer} from '@opencensus/core'; +import {BasePlugin, CanonicalCode, Func, HeaderGetter, HeaderSetter, MessageEventType, RootSpan, Span, SpanKind, Tracer} from '@opencensus/core'; import {logger, Logger} from '@opencensus/core'; import * as httpModule from 'http'; import * as semver from 'semver'; @@ -174,7 +174,7 @@ export class HttpPlugin extends BasePlugin { const traceOptions = { name: path, - kind: 'SERVER', + kind: SpanKind.SERVER, spanContext: propagation ? propagation.extract(getter) : null }; @@ -221,7 +221,7 @@ export class HttpPlugin extends BasePlugin { // Message Event ID is not defined rootSpan.addMessageEvent( - 'MessageEventTypeRecv', uuid.v4().split('-').join('')); + MessageEventType.RECEIVED, uuid.v4().split('-').join('')); rootSpan.end(); return returned; @@ -290,7 +290,7 @@ export class HttpPlugin extends BasePlugin { plugin.logger.debug('%s plugin outgoingRequest', plugin.moduleName); const traceOptions = { name: `${method || 'GET'} ${pathname}`, - kind: 'CLIENT', + kind: SpanKind.CLIENT, }; @@ -370,7 +370,7 @@ export class HttpPlugin extends BasePlugin { // Message Event ID is not defined span.addMessageEvent( - 'MessageEventTypeSent', uuid.v4().split('-').join('')); + MessageEventType.SENT, uuid.v4().split('-').join('')); span.end(); }); diff --git a/packages/opencensus-instrumentation-http2/src/http2.ts b/packages/opencensus-instrumentation-http2/src/http2.ts index 695dbed80..3c272bfe8 100644 --- a/packages/opencensus-instrumentation-http2/src/http2.ts +++ b/packages/opencensus-instrumentation-http2/src/http2.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {Func, HeaderGetter, HeaderSetter, Span, TraceOptions, Tracer} from '@opencensus/core'; +import {Func, HeaderGetter, HeaderSetter, MessageEventType, Span, SpanKind, TraceOptions, Tracer} from '@opencensus/core'; import {HttpPlugin} from '@opencensus/instrumentation-http'; import * as http from 'http'; import * as http2 from 'http2'; @@ -98,7 +98,7 @@ export class Http2Plugin extends HttpPlugin { const traceOptions = { name: `${headers[':method'] || 'GET'} ${headers[':path']}`, - kind: 'CLIENT', + kind: SpanKind.CLIENT, }; // Checks if this outgoing request is part of an operation by checking @@ -163,7 +163,7 @@ export class Http2Plugin extends HttpPlugin { } span.addMessageEvent( - 'MessageEventTypeSent', uuid.v4().split('-').join('')); + MessageEventType.SENT, uuid.v4().split('-').join('')); span.end(); }); @@ -217,7 +217,7 @@ export class Http2Plugin extends HttpPlugin { const traceOptions = { name: headers[':path'], - kind: 'SERVER', + kind: SpanKind.SERVER, spanContext: propagation ? propagation.extract(getter) : null } as TraceOptions; @@ -261,7 +261,7 @@ export class Http2Plugin extends HttpPlugin { rootSpan.setStatus(Http2Plugin.parseResponseStatus(statusCode)); rootSpan.addMessageEvent( - 'MessageEventTypeRecv', uuid.v4().split('-').join('')); + MessageEventType.RECEIVED, uuid.v4().split('-').join('')); rootSpan.end(); return returned; diff --git a/packages/opencensus-instrumentation-mongodb/src/mongodb.ts b/packages/opencensus-instrumentation-mongodb/src/mongodb.ts index cd773a22a..e3cf05817 100644 --- a/packages/opencensus-instrumentation-mongodb/src/mongodb.ts +++ b/packages/opencensus-instrumentation-mongodb/src/mongodb.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {BasePlugin, Func, Span} from '@opencensus/core'; +import {BasePlugin, Func, Span, SpanKind} from '@opencensus/core'; import {logger, Logger} from '@opencensus/core'; import * as mongodb from 'mongodb'; import * as semver from 'semver'; @@ -96,8 +96,8 @@ export class MongoDBPlugin extends BasePlugin { type = 'command'; } - const span = plugin.tracer.startChildSpan( - ns + '.' + type, plugin.SPAN_MONGODB_QUERY_TYPE); + const span = + plugin.tracer.startChildSpan(ns + '.' + type, SpanKind.SERVER); resultHandler = plugin.patchEnd(span, resultHandler); } @@ -116,8 +116,8 @@ export class MongoDBPlugin extends BasePlugin { let resultHandler = args[args.length - 1]; if (plugin.tracer.currentRootSpan && arguments.length > 0 && typeof resultHandler === 'function') { - const span = plugin.tracer.startChildSpan( - ns + '.query', plugin.SPAN_MONGODB_QUERY_TYPE); + const span = + plugin.tracer.startChildSpan(ns + '.query', SpanKind.SERVER); resultHandler = plugin.patchEnd(span, resultHandler); } @@ -136,7 +136,7 @@ export class MongoDBPlugin extends BasePlugin { if (plugin.tracer.currentRootSpan && arguments.length > 0 && typeof resultHandler === 'function') { const span = plugin.tracer.startChildSpan( - this.ns + '.cursor', plugin.SPAN_MONGODB_QUERY_TYPE); + this.ns + '.cursor', SpanKind.SERVER); resultHandler = plugin.patchEnd(span, resultHandler); } From bc2791f9654cf2fde90410beedb9a0d65dc2aa09 Mon Sep 17 00:00:00 2001 From: Mayur Kale Date: Thu, 7 Feb 2019 15:38:09 -0800 Subject: [PATCH 2/2] fix build --- packages/opencensus-core/test/test-span.ts | 3 ++- .../test/test-mongodb.ts | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/opencensus-core/test/test-span.ts b/packages/opencensus-core/test/test-span.ts index 6c92c202e..6d9167dae 100644 --- a/packages/opencensus-core/test/test-span.ts +++ b/packages/opencensus-core/test/test-span.ts @@ -318,7 +318,8 @@ describe('Span', () => { const span = new Span(rootSpan); span.start(); for (let i = 0; i < 35; i++) { - span.addMessageEvent('TYPE_UNSPECIFIED', 'message_event_test_id'); + span.addMessageEvent( + types.MessageEventType.UNSPECIFIED, 'message_event_test_id'); } assert.equal(span.messageEvents.length, 32); diff --git a/packages/opencensus-instrumentation-mongodb/test/test-mongodb.ts b/packages/opencensus-instrumentation-mongodb/test/test-mongodb.ts index 5421a12ba..a18f30b5f 100644 --- a/packages/opencensus-instrumentation-mongodb/test/test-mongodb.ts +++ b/packages/opencensus-instrumentation-mongodb/test/test-mongodb.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import {CoreTracer, RootSpan, Span, SpanEventListener} from '@opencensus/core'; +import {CoreTracer, RootSpan, Span, SpanEventListener, SpanKind} from '@opencensus/core'; import {logger} from '@opencensus/core'; import * as assert from 'assert'; import {accessSync} from 'fs'; @@ -71,7 +71,7 @@ function accessCollection(url: string, dbName: string, collectionName: string): */ function assertSpan( rootSpanVerifier: RootSpanVerifier, expectedName: string, - expectedKind: string) { + expectedKind: SpanKind) { assert.strictEqual(rootSpanVerifier.endedRootSpans.length, 1); assert.strictEqual(rootSpanVerifier.endedRootSpans[0].spans.length, 1); assert.strictEqual( @@ -156,7 +156,7 @@ describe('MongoDBPlugin', () => { assert.ifError(err); assertSpan( rootSpanVerifier, `${DB_NAME}.${COLLECTION_NAME}.query`, - 'db.mongodb.query'); + SpanKind.SERVER); done(); }); }); @@ -170,7 +170,7 @@ describe('MongoDBPlugin', () => { assert.ifError(err); assertSpan( rootSpanVerifier, `${DB_NAME}.${COLLECTION_NAME}.query`, - 'db.mongodb.query'); + SpanKind.SERVER); done(); }); }); @@ -184,7 +184,7 @@ describe('MongoDBPlugin', () => { assert.ifError(err); assertSpan( rootSpanVerifier, `${DB_NAME}.${COLLECTION_NAME}.query`, - 'db.mongodb.query'); + SpanKind.SERVER); done(); }); }); @@ -201,7 +201,7 @@ describe('MongoDBPlugin', () => { assert.ifError(err); assertSpan( rootSpanVerifier, `${DB_NAME}.${COLLECTION_NAME}.cursor`, - 'db.mongodb.query'); + SpanKind.SERVER); done(); }); }); @@ -218,7 +218,7 @@ describe('MongoDBPlugin', () => { assert.ifError(err); assertSpan( rootSpanVerifier, `${DB_NAME}.$cmd.createIndexes`, - 'db.mongodb.query'); + SpanKind.SERVER); done(); }); }); @@ -231,7 +231,7 @@ describe('MongoDBPlugin', () => { rootSpan.end(); assert.ifError(err); assertSpan( - rootSpanVerifier, `${DB_NAME}.$cmd.count`, 'db.mongodb.query'); + rootSpanVerifier, `${DB_NAME}.$cmd.count`, SpanKind.SERVER); done(); }); });