Skip to content

Commit

Permalink
feat!: use serializer in browser exporters
Browse files Browse the repository at this point in the history
  • Loading branch information
pichlermarc committed Apr 26, 2024
1 parent 8c12dd5 commit b19b0b8
Show file tree
Hide file tree
Showing 49 changed files with 137 additions and 758 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,37 @@ import type {
LogRecordExporter,
} from '@opentelemetry/sdk-logs';
import type { OTLPExporterConfigBase } from '@opentelemetry/otlp-exporter-base';
import type { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
import type {
IExportLogsServiceRequest,
IExportLogsServiceResponse,
} from '@opentelemetry/otlp-transformer';
import { OTLPExporterBrowserBase } from '@opentelemetry/otlp-exporter-base';
import { baggageUtils, getEnv } from '@opentelemetry/core';
import { createExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
import { JsonLogsSerializer } from '@opentelemetry/otlp-transformer';

import { getDefaultUrl } from '../config';

/**
* Collector Logs Exporter for Web
*/
export class OTLPLogExporter
extends OTLPExporterBrowserBase<ReadableLogRecord, IExportLogsServiceRequest>
extends OTLPExporterBrowserBase<
ReadableLogRecord,
IExportLogsServiceRequest,
IExportLogsServiceResponse
>
implements LogRecordExporter
{
constructor(config: OTLPExporterConfigBase = {}) {
// load OTEL_EXPORTER_OTLP_LOGS_TIMEOUT env var
super({
timeoutMillis: getEnv().OTEL_EXPORTER_OTLP_LOGS_TIMEOUT,
...config,
});
super(
{
timeoutMillis: getEnv().OTEL_EXPORTER_OTLP_LOGS_TIMEOUT,
...config,
},
JsonLogsSerializer,
'application/json'
);
this._headers = {
...this._headers,
...baggageUtils.parseKeyPairsIntoRecord(
Expand All @@ -47,13 +58,6 @@ export class OTLPLogExporter
};
}

convert(logRecords: ReadableLogRecord[]): IExportLogsServiceRequest {
return createExportLogsServiceRequest(logRecords, {
useHex: true,
useLongBits: false,
});
}

getDefaultUrl(config: OTLPExporterConfigBase): string {
return getDefaultUrl(config);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@
"@opentelemetry/api-logs": "0.51.0",
"@opentelemetry/core": "1.24.0",
"@opentelemetry/otlp-exporter-base": "0.51.0",
"@opentelemetry/otlp-proto-exporter-base": "0.51.0",
"@opentelemetry/otlp-transformer": "0.51.0",
"@opentelemetry/resources": "1.24.0",
"@opentelemetry/sdk-logs": "0.51.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,12 @@ import {
OTLPExporterConfigBase,
appendResourcePathToUrl,
appendRootPathToUrlIfNeeded,
OTLPExporterBrowserBase,
} from '@opentelemetry/otlp-exporter-base';
import {
OTLPProtoExporterBrowserBase,
ServiceClientType,
} from '@opentelemetry/otlp-proto-exporter-base';
import {
createExportLogsServiceRequest,
IExportLogsServiceRequest,
IExportLogsServiceResponse,
ProtobufLogsSerializer,
} from '@opentelemetry/otlp-transformer';

import { ReadableLogRecord, LogRecordExporter } from '@opentelemetry/sdk-logs';
Expand All @@ -38,24 +36,22 @@ const DEFAULT_COLLECTOR_URL = `http://localhost:4318/${DEFAULT_COLLECTOR_RESOURC
* Collector Trace Exporter for Web
*/
export class OTLPLogExporter
extends OTLPProtoExporterBrowserBase<
extends OTLPExporterBrowserBase<
ReadableLogRecord,
IExportLogsServiceRequest
IExportLogsServiceRequest,
IExportLogsServiceResponse
>
implements LogRecordExporter
{
constructor(config: OTLPExporterConfigBase = {}) {
super(config);
super(config, ProtobufLogsSerializer, 'x-application/protobuf');
this._headers = Object.assign(
this._headers,
baggageUtils.parseKeyPairsIntoRecord(
getEnv().OTEL_EXPORTER_OTLP_LOGS_HEADERS
)
);
}
convert(logs: ReadableLogRecord[]): IExportLogsServiceRequest {
return createExportLogsServiceRequest(logs);
}

getDefaultUrl(config: OTLPExporterConfigBase): string {
return typeof config.url === 'string'
Expand All @@ -69,8 +65,4 @@ export class OTLPLogExporter
)
: DEFAULT_COLLECTOR_URL;
}

getServiceClientType() {
return ServiceClientType.LOGS;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
OTLPExporterNodeBase,
parseHeaders,
} from '@opentelemetry/otlp-exporter-base';
import { ServiceClientType } from '@opentelemetry/otlp-proto-exporter-base';
import {
IExportLogsServiceRequest,
IExportLogsServiceResponse,
Expand Down Expand Up @@ -74,8 +73,4 @@ export class OTLPLogExporter
)
: DEFAULT_COLLECTOR_URL;
}

getServiceClientType() {
return ServiceClientType.LOGS;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,27 @@ import {
OTLPExporterNodeConfigBase,
OTLPExporterError,
} from '@opentelemetry/otlp-exporter-base';
import {
getExportRequestProto,
ServiceClientType,
} from '@opentelemetry/otlp-proto-exporter-base';
import { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
import { ReadableLogRecord } from '@opentelemetry/sdk-logs';
import { VERSION } from '../../src/version';
import { Root } from 'protobufjs';
import * as path from 'path';

let fakeRequest: PassThrough;

const dir = path.resolve(__dirname, '../../../otlp-transformer/protos');
const root = new Root();
root.resolvePath = function (origin, target) {
return `${dir}/${target}`;
};
const proto = root.loadSync([
'opentelemetry/proto/common/v1/common.proto',
'opentelemetry/proto/resource/v1/resource.proto',
'opentelemetry/proto/logs/v1/logs.proto',
'opentelemetry/proto/collector/logs/v1/logs_service.proto',
]);
const exportRequestServiceProto = proto?.lookupType('ExportLogsServiceRequest');

describe('OTLPLogExporter - node with proto over http', () => {
let collectorExporter: OTLPLogExporter;
let collectorExporterConfig: OTLPExporterNodeConfigBase;
Expand Down Expand Up @@ -240,10 +251,7 @@ describe('OTLPLogExporter - node with proto over http', () => {

let buff = Buffer.from('');
fakeRequest.on('end', () => {
const ExportLogsServiceRequestProto = getExportRequestProto(
ServiceClientType.LOGS
);
const data = ExportLogsServiceRequestProto.decode(buff);
const data = exportRequestServiceProto.decode(buff);
const json = data?.toJSON() as IExportLogsServiceRequest;
const log1 = json.resourceLogs?.[0].scopeLogs?.[0].logRecords?.[0];
assert.ok(typeof log1 !== 'undefined', "log doesn't exist");
Expand Down Expand Up @@ -328,10 +336,7 @@ describe('OTLPLogExporter - node with proto over http', () => {
let buff = Buffer.from('');
fakeRequest.on('end', () => {
const unzippedBuff = zlib.gunzipSync(buff);
const ExportLogsServiceRequestProto = getExportRequestProto(
ServiceClientType.LOGS
);
const data = ExportLogsServiceRequestProto.decode(unzippedBuff);
const data = exportRequestServiceProto.decode(unzippedBuff);
const json = data?.toJSON() as IExportLogsServiceRequest;
const log1 = json.resourceLogs?.[0].scopeLogs?.[0].logRecords?.[0];
assert.ok(typeof log1 !== 'undefined', "log doesn't exist");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@
{
"path": "../otlp-exporter-base"
},
{
"path": "../otlp-proto-exporter-base"
},
{
"path": "../otlp-transformer"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@
{
"path": "../otlp-exporter-base"
},
{
"path": "../otlp-proto-exporter-base"
},
{
"path": "../otlp-transformer"
},
Expand Down
3 changes: 0 additions & 3 deletions experimental/packages/exporter-logs-otlp-proto/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@
{
"path": "../otlp-exporter-base"
},
{
"path": "../otlp-proto-exporter-base"
},
{
"path": "../otlp-transformer"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ import {
OTLPExporterBrowserBase,
} from '@opentelemetry/otlp-exporter-base';
import {
createExportTraceServiceRequest,
IExportTraceServiceRequest,
IExportTraceServiceResponse,
JsonTraceSerializer,
} from '@opentelemetry/otlp-transformer';

const DEFAULT_COLLECTOR_RESOURCE_PATH = 'v1/traces';
Expand All @@ -34,24 +35,22 @@ const DEFAULT_COLLECTOR_URL = `http://localhost:4318/${DEFAULT_COLLECTOR_RESOURC
* Collector Trace Exporter for Web
*/
export class OTLPTraceExporter
extends OTLPExporterBrowserBase<ReadableSpan, IExportTraceServiceRequest>
extends OTLPExporterBrowserBase<
ReadableSpan,
IExportTraceServiceRequest,
IExportTraceServiceResponse
>
implements SpanExporter
{
constructor(config: OTLPExporterConfigBase = {}) {
super(config);
super(config, JsonTraceSerializer, 'application/json');
this._headers = Object.assign(
this._headers,
baggageUtils.parseKeyPairsIntoRecord(
getEnv().OTEL_EXPORTER_OTLP_TRACES_HEADERS
)
);
}
convert(spans: ReadableSpan[]): IExportTraceServiceRequest {
return createExportTraceServiceRequest(spans, {
useHex: true,
useLongBits: false,
});
}

getDefaultUrl(config: OTLPExporterConfigBase): string {
return typeof config.url === 'string'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,10 @@ describe('OTLPTraceExporter - web', () => {
assert.strictEqual(request.url, 'http://foo.bar.com');

const body = request.requestBody;
const json = JSON.parse(body) as IExportTraceServiceRequest;
const decoder = new TextDecoder();
const json = JSON.parse(
decoder.decode(body)
) as IExportTraceServiceRequest;
const span1 = json.resourceSpans?.[0].scopeSpans?.[0].spans?.[0];

assert.ok(typeof span1 !== 'undefined', "span doesn't exist");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@
"dependencies": {
"@opentelemetry/core": "1.24.0",
"@opentelemetry/otlp-exporter-base": "0.51.0",
"@opentelemetry/otlp-proto-exporter-base": "0.51.0",
"@opentelemetry/otlp-transformer": "0.51.0",
"@opentelemetry/resources": "1.24.0",
"@opentelemetry/sdk-trace-base": "1.24.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,12 @@ import {
OTLPExporterConfigBase,
appendResourcePathToUrl,
appendRootPathToUrlIfNeeded,
OTLPExporterBrowserBase,
} from '@opentelemetry/otlp-exporter-base';
import {
OTLPProtoExporterBrowserBase,
ServiceClientType,
} from '@opentelemetry/otlp-proto-exporter-base';
import {
createExportTraceServiceRequest,
IExportTraceServiceRequest,
IExportTraceServiceResponse,
ProtobufTraceSerializer,
} from '@opentelemetry/otlp-transformer';

const DEFAULT_COLLECTOR_RESOURCE_PATH = 'v1/traces';
Expand All @@ -37,21 +35,22 @@ const DEFAULT_COLLECTOR_URL = `http://localhost:4318/${DEFAULT_COLLECTOR_RESOURC
* Collector Trace Exporter for Web
*/
export class OTLPTraceExporter
extends OTLPProtoExporterBrowserBase<ReadableSpan, IExportTraceServiceRequest>
extends OTLPExporterBrowserBase<
ReadableSpan,
IExportTraceServiceRequest,
IExportTraceServiceResponse
>
implements SpanExporter
{
constructor(config: OTLPExporterConfigBase = {}) {
super(config);
super(config, ProtobufTraceSerializer, 'application/x-protobuf');
this._headers = Object.assign(
this._headers,
baggageUtils.parseKeyPairsIntoRecord(
getEnv().OTEL_EXPORTER_OTLP_TRACES_HEADERS
)
);
}
convert(spans: ReadableSpan[]): IExportTraceServiceRequest {
return createExportTraceServiceRequest(spans);
}

getDefaultUrl(config: OTLPExporterConfigBase): string {
return typeof config.url === 'string'
Expand All @@ -65,8 +64,4 @@ export class OTLPTraceExporter
)
: DEFAULT_COLLECTOR_URL;
}

getServiceClientType() {
return ServiceClientType.SPANS;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import {
OTLPExporterNodeBase,
parseHeaders,
} from '@opentelemetry/otlp-exporter-base';
import { ServiceClientType } from '@opentelemetry/otlp-proto-exporter-base';
import {
IExportTraceServiceRequest,
IExportTraceServiceResponse,
Expand Down Expand Up @@ -72,8 +71,4 @@ export class OTLPTraceExporter
)
: DEFAULT_COLLECTOR_URL;
}

getServiceClientType() {
return ServiceClientType.SPANS;
}
}
Loading

0 comments on commit b19b0b8

Please sign in to comment.