From a56e670ce7b0461ec4b7a12a7733bd3db3d84dc3 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Wed, 11 Aug 2021 14:26:04 +0800 Subject: [PATCH] Add an API to access the trace id. Closes https://github.com/apache/skywalking/issues/7328 --- src/trace/context/Context.ts | 8 +++++++- src/trace/context/DummyContext.ts | 9 ++++++++- src/trace/context/SpanContext.ts | 17 +++++++++++++---- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/trace/context/Context.ts b/src/trace/context/Context.ts index 9928895..c8ab2d4 100644 --- a/src/trace/context/Context.ts +++ b/src/trace/context/Context.ts @@ -19,7 +19,7 @@ import Span from '../../trace/span/Span'; import Segment from '../../trace/context/Segment'; -import { Component } from '../../trace/Component'; +import { Component } from '../Component'; import { ContextCarrier } from './ContextCarrier'; export default interface Context { @@ -51,4 +51,10 @@ export default interface Context { /* This should be called upon entering the new async context for a span that has previously executed .async(), it should be the first thing the callback function belonging to the span does. */ resync(span: Span): void; + + /** + * Returns the global trace id of the current trace, if there is no trace when invoking this method, + * "N/A" is returned. + */ + traceId(): string; } diff --git a/src/trace/context/DummyContext.ts b/src/trace/context/DummyContext.ts index 2acf661..509d3e2 100644 --- a/src/trace/context/DummyContext.ts +++ b/src/trace/context/DummyContext.ts @@ -21,7 +21,7 @@ import Context from '../../trace/context/Context'; import Span from '../../trace/span/Span'; import DummySpan from '../../trace/span/DummySpan'; import Segment from '../../trace/context/Segment'; -import { Component } from '../../trace/Component'; +import { Component } from '../Component'; import { ContextCarrier } from './ContextCarrier'; import ContextManager from './ContextManager'; @@ -71,4 +71,11 @@ export default class DummyContext implements Context { resync(span: DummySpan) { ContextManager.restore(span); } + + traceId(): string { + if (!this.segment.relatedTraces) { + return 'N/A'; + } + return this.segment.relatedTraces[0].toString(); + } } diff --git a/src/trace/context/SpanContext.ts b/src/trace/context/SpanContext.ts index 79d39e0..a02a699 100644 --- a/src/trace/context/SpanContext.ts +++ b/src/trace/context/SpanContext.ts @@ -28,7 +28,7 @@ import LocalSpan from '../../trace/span/LocalSpan'; import SegmentRef from './SegmentRef'; import ContextManager from './ContextManager'; import Tag from '../../Tag'; -import { Component } from '../../trace/Component'; +import { Component } from '../Component'; import { createLogger } from '../../logging'; import { ContextCarrier } from './ContextCarrier'; import { SpanType } from '../../proto/language-agent/Tracing_pb'; @@ -55,7 +55,7 @@ export default class SpanContext implements Context { } spanCheck(spanType: SpanType, operation: string, carrier?: ContextCarrier): [Span | null, Span?] { - let span = this.ignoreCheck(operation, SpanType.ENTRY, carrier); + const span = this.ignoreCheck(operation, SpanType.ENTRY, carrier); if (span) return [span]; @@ -75,7 +75,7 @@ export default class SpanContext implements Context { const span = new spanClass({ id: context.spanId++, parentId: this.finished ? -1 : parent?.id ?? -1, - context: context, + context, operation, }); @@ -101,6 +101,7 @@ export default class SpanContext implements Context { } newEntrySpan(operation: string, carrier?: ContextCarrier, inherit?: Component): Span { + // tslint:disable-next-line:prefer-const let [span, parent] = this.spanCheck(SpanType.ENTRY, operation, carrier); if (span) @@ -127,6 +128,7 @@ export default class SpanContext implements Context { } newExitSpan(operation: string, component: Component, inherit?: Component): Span { + // tslint:disable-next-line:prefer-const let [span, parent] = this.spanCheck(SpanType.EXIT, operation); if (span) @@ -151,7 +153,7 @@ export default class SpanContext implements Context { } newLocalSpan(operation: string): Span { - let [span, parent] = this.spanCheck(SpanType.LOCAL, operation); + const [span, parent] = this.spanCheck(SpanType.LOCAL, operation); if (span) return span; @@ -228,4 +230,11 @@ export default class SpanContext implements Context { ContextManager.restore(span); } + + traceId(): string { + if (!this.segment.relatedTraces) { + return 'N/A'; + } + return this.segment.relatedTraces[0].toString(); + } }