diff --git a/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts b/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts index ed68464f263..3f2e4c53bcd 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorExporterNodeBase.ts @@ -19,12 +19,13 @@ import { CollectorExporterNodeBase as CollectorExporterBaseMain, collectorTypes, CollectorExporterNodeConfigBase, + CompressionAlgorithm, } from '@opentelemetry/exporter-collector'; import { ServiceClientType } from './types'; type SendFn = (collector: CollectorExporterNodeBase, objects: ExportItem[], - compress: boolean, + compression: CompressionAlgorithm, onSuccess: () => void, onError: (error: collectorTypes.CollectorExporterError) => void) => void; @@ -61,7 +62,7 @@ export abstract class CollectorExporterNodeBase< this._sendingPromises.splice(index, 1); }; - this._send(this, objects, this.compress, _onSuccess, _onError); + this._send(this, objects, this.compression, _onSuccess, _onError); }); this._sendingPromises.push(promise); diff --git a/packages/opentelemetry-exporter-collector-proto/src/util.ts b/packages/opentelemetry-exporter-collector-proto/src/util.ts index 248bbba2380..73e3caf5183 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/util.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/util.ts @@ -18,6 +18,7 @@ import { collectorTypes, sendWithHttp, CollectorExporterNodeConfigBase, + CompressionAlgorithm, } from '@opentelemetry/exporter-collector'; import * as path from 'path'; @@ -63,7 +64,7 @@ export function onInit( export function send( collector: CollectorExporterNodeBase, objects: ExportItem[], - compress: boolean, + compression: CompressionAlgorithm, onSuccess: () => void, onError: (error: collectorTypes.CollectorExporterError) => void ): void { @@ -77,7 +78,7 @@ export function send( collector, Buffer.from(body), 'application/x-protobuf', - compress, + compression, onSuccess, onError ); diff --git a/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts index a8c83aac24d..44bc9d25c77 100644 --- a/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts @@ -19,6 +19,7 @@ import { ExportResultCode } from '@opentelemetry/core'; import { CollectorExporterNodeConfigBase, collectorTypes, + CompressionAlgorithm, } from '@opentelemetry/exporter-collector'; import { ReadableSpan } from '@opentelemetry/tracing'; import * as assert from 'assert'; @@ -211,7 +212,7 @@ describe('CollectorTraceExporter - node with proto over http', () => { attributes: {}, url: 'http://foo.bar.com', keepAlive: true, - compress: true, + compression: CompressionAlgorithm.GZIP, httpAgentOptions: { keepAliveMsecs: 2000 }, }; collectorExporter = new CollectorTraceExporter(collectorExporterConfig); diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts index 3b245a3dbf1..178e82c782f 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorExporterNodeBase.ts @@ -18,7 +18,7 @@ import type * as http from 'http'; import type * as https from 'https'; import { CollectorExporterBase } from '../../CollectorExporterBase'; -import { CollectorExporterNodeConfigBase } from './types'; +import { CollectorExporterNodeConfigBase, CompressionAlgorithm } from './types'; import * as collectorTypes from '../../types'; import { parseHeaders } from '../../util'; import { createHttpAgent, sendWithHttp } from './util'; @@ -39,7 +39,7 @@ export abstract class CollectorExporterNodeBase< DEFAULT_HEADERS: Record = {}; headers: Record; agent: http.Agent | https.Agent | undefined; - compress: boolean; + compression: CompressionAlgorithm; constructor(config: CollectorExporterNodeConfigBase = {}) { super(config); @@ -52,7 +52,7 @@ export abstract class CollectorExporterNodeBase< baggageUtils.parseKeyPairsIntoRecord(getEnv().OTEL_EXPORTER_OTLP_HEADERS) ); this.agent = createHttpAgent(config); - this.compress = config.compress || false; + this.compression = config.compression || CompressionAlgorithm.NONE; } onInit(_config: CollectorExporterNodeConfigBase): void { @@ -88,7 +88,7 @@ export abstract class CollectorExporterNodeBase< this, JSON.stringify(serviceRequest), 'application/json', - this.compress, + this.compression, _onSuccess, _onError ); diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/types.ts b/packages/opentelemetry-exporter-collector/src/platform/node/types.ts index df42ea72c5b..4ee5167e793 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/types.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/types.ts @@ -24,6 +24,11 @@ import { CollectorExporterConfigBase } from '../../types'; export interface CollectorExporterNodeConfigBase extends CollectorExporterConfigBase { keepAlive?: boolean; - compress?: boolean; + compression?: CompressionAlgorithm; httpAgentOptions?: http.AgentOptions | https.AgentOptions; } + +export enum CompressionAlgorithm { + NONE = 'none', + GZIP = 'gzip' +} diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/util.ts b/packages/opentelemetry-exporter-collector/src/platform/node/util.ts index 4070f6abd65..3318908b83a 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/util.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/util.ts @@ -22,6 +22,7 @@ import * as collectorTypes from '../../types'; import { CollectorExporterNodeBase } from './CollectorExporterNodeBase'; import { CollectorExporterNodeConfigBase } from '.'; import { diag } from '@opentelemetry/api'; +import { CompressionAlgorithm } from './types'; const gzip = zlib.createGzip(); @@ -37,7 +38,7 @@ export function sendWithHttp( collector: CollectorExporterNodeBase, data: string | Buffer, contentType: string, - compress: boolean, + compression: CompressionAlgorithm, onSuccess: () => void, onError: (error: collectorTypes.CollectorExporterError) => void ): void { @@ -82,14 +83,20 @@ export function sendWithHttp( onError(error); }); - if (compress) { - const dataStream = readableFromBuffer(data); - dataStream.on('error', onError) - .pipe(gzip).on('error', onError) - .pipe(req); - } else { - req.write(data); - req.end(); + switch (compression) { + case CompressionAlgorithm.GZIP: { + const dataStream = readableFromBuffer(data); + dataStream.on('error', onError) + .pipe(gzip).on('error', onError) + .pipe(req); + + break; + } + default: + req.write(data); + req.end(); + + break; } } @@ -97,7 +104,7 @@ function readableFromBuffer(buff: string | Buffer): Readable { const readable = new Readable(); readable.push(buff); readable.push(null); - + return readable; } diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts index 43b17d426d0..4b55620ec64 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts @@ -25,6 +25,7 @@ import * as zlib from 'zlib'; import { CollectorTraceExporter, CollectorExporterNodeConfigBase, + CompressionAlgorithm, } from '../../src/platform/node'; import * as collectorTypes from '../../src/types'; import { MockedResponse } from './nodeHelpers'; @@ -258,7 +259,7 @@ describe('CollectorTraceExporter - node with json over http', () => { attributes: {}, url: 'http://foo.bar.com', keepAlive: true, - compress: true, + compression: CompressionAlgorithm.GZIP, httpAgentOptions: { keepAliveMsecs: 2000 }, }; collectorExporter = new CollectorTraceExporter(collectorExporterConfig);