From 3e7967509e918af9f93b86c1c34e6214a526d669 Mon Sep 17 00:00:00 2001 From: Brandon Gonzalez Date: Wed, 25 Sep 2019 14:52:38 -0400 Subject: [PATCH 1/3] feat(jaeger-exporter): adds flushing on an interval closes https://github.com/open-telemetry/opentelemetry-js/issues/340 --- .../opentelemetry-exporter-jaeger/src/jaeger.ts | 13 +++++++++++++ packages/opentelemetry-exporter-jaeger/src/types.ts | 1 + 2 files changed, 14 insertions(+) diff --git a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts index f7cc50092d6..c3ff32e5916 100644 --- a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts +++ b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts @@ -23,6 +23,7 @@ import * as jaegerTypes from './types'; import { NoopLogger } from '@opentelemetry/core'; import * as types from '@opentelemetry/types'; import { spanToThrift } from './transform'; +import { unrefTimer } from '@opentelemetry/core'; /** * Format and sends span information to Jaeger Exporter. @@ -33,6 +34,7 @@ export class JaegerExporter implements SpanExporter { private readonly _sender: typeof jaegerTypes.UDPSender; private readonly _forceFlush: boolean = true; private readonly _flushTimeout: number; + private _timer: NodeJS.Timeout; constructor(config: jaegerTypes.ExporterConfig) { this._logger = config.logger || new NoopLogger(); @@ -48,6 +50,16 @@ export class JaegerExporter implements SpanExporter { tags: jaegerTypes.ThriftUtils.getThriftTags(tags), }; this._sender.setProcess(this._process); + + const flushInterval = config.flushInterval || 5000; + this._timer = setInterval(() => { + this._sender.flush((numSpans: number, err?: string) => { + if (err) { + this._logger.error(`failed to flush ${numSpans} spans: ${err}`); + } + }); + }, flushInterval); + unrefTimer(this._timer); } /** Exports a list of spans to Jaeger. */ @@ -61,6 +73,7 @@ export class JaegerExporter implements SpanExporter { /** Shutdown exporter. */ shutdown(): void { + clearInterval(this._timer); if (!this._forceFlush) return; // Make an optimistic flush. this._sender.flush((numSpans: number, err?: string) => { diff --git a/packages/opentelemetry-exporter-jaeger/src/types.ts b/packages/opentelemetry-exporter-jaeger/src/types.ts index 89f39bf6a93..fb2f58968bd 100644 --- a/packages/opentelemetry-exporter-jaeger/src/types.ts +++ b/packages/opentelemetry-exporter-jaeger/src/types.ts @@ -28,6 +28,7 @@ export interface ExporterConfig { maxPacketSize?: number; // default: 65000 forceFlush?: boolean; // default: true flushTimeout?: number; // default: 2000 + flushInterval?: number; // default(ms): 5000 } // Below require is needed as jaeger-client types does not expose the thrift, From ee07dd6850085a957ec0ca70dac3294514a22443 Mon Sep 17 00:00:00 2001 From: Brandon Gonzalez Date: Thu, 26 Sep 2019 14:16:28 -0400 Subject: [PATCH 2/3] respond to comments --- .../src/jaeger.ts | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts index c3ff32e5916..f7dfd0447ab 100644 --- a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts +++ b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts @@ -52,13 +52,7 @@ export class JaegerExporter implements SpanExporter { this._sender.setProcess(this._process); const flushInterval = config.flushInterval || 5000; - this._timer = setInterval(() => { - this._sender.flush((numSpans: number, err?: string) => { - if (err) { - this._logger.error(`failed to flush ${numSpans} spans: ${err}`); - } - }); - }, flushInterval); + this._timer = setInterval(this._flush, flushInterval); unrefTimer(this._timer); } @@ -71,16 +65,12 @@ export class JaegerExporter implements SpanExporter { return this._sendSpans(spans, resultCallback); } + /** Shutdown exporter. */ shutdown(): void { - clearInterval(this._timer); if (!this._forceFlush) return; // Make an optimistic flush. - this._sender.flush((numSpans: number, err?: string) => { - if (err) { - this._logger.error(`failed to flush span: ${err}`); - } - }); + this._flush(); // Sleeping x seconds before closing the sender's connection to ensure // all spans are flushed. setTimeout(() => { @@ -108,4 +98,12 @@ export class JaegerExporter implements SpanExporter { this._logger.debug('successful append for : %s', thriftSpan.length); if (done) return done(ExportResult.SUCCESS); } + + private _flush(): void { + this._sender.flush((numSpans: number, err?: string) => { + if (err) { + this._logger.error(`failed to flush ${numSpans} spans: ${err}`); + } + }); + } } From c99aecb47bbb986791eb80d4dc31ff04536a5a38 Mon Sep 17 00:00:00 2001 From: Brandon Gonzalez Date: Thu, 26 Sep 2019 14:55:48 -0400 Subject: [PATCH 3/3] yarn fix --- packages/opentelemetry-exporter-jaeger/src/jaeger.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts index f7dfd0447ab..e14514e418c 100644 --- a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts +++ b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts @@ -65,7 +65,6 @@ export class JaegerExporter implements SpanExporter { return this._sendSpans(spans, resultCallback); } - /** Shutdown exporter. */ shutdown(): void { if (!this._forceFlush) return;