Skip to content

Commit acd1e42

Browse files
authored
Merge branch 'main' into prometheus
2 parents 27ca563 + df63272 commit acd1e42

File tree

7 files changed

+60
-13
lines changed

7 files changed

+60
-13
lines changed

experimental/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ All notable changes to experimental packages in this project will be documented
1717
### :bug: (Bug Fix)
1818

1919
* fix(exporter-prometheus): avoid invoking callback synchronously [#4431](https://github.com/open-telemetry/opentelemetry-js/pull/4431) @legendecas
20+
* fix(exporter-logs-otlp-grpc): set User-Agent header [#4398](https://github.com/open-telemetry/opentelemetry-js/pull/4398) @Vunovati
21+
* fix(exporter-logs-otlp-http): set User-Agent header [#4398](https://github.com/open-telemetry/opentelemetry-js/pull/4398) @Vunovati
22+
* fix(exporter-logs-otlp-proto): set User-Agent header [#4398](https://github.com/open-telemetry/opentelemetry-js/pull/4398) @Vunovati
2023

2124
### :books: (Refine Doc)
2225

experimental/packages/exporter-logs-otlp-grpc/src/OTLPLogExporter.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ import {
2828
createExportLogsServiceRequest,
2929
IExportLogsServiceRequest,
3030
} from '@opentelemetry/otlp-transformer';
31+
import { VERSION } from './version';
32+
33+
const USER_AGENT = {
34+
'User-Agent': `OTel-OTLP-Exporter-JavaScript/${VERSION}`,
35+
};
3136

3237
/**
3338
* OTLP Logs Exporter for Node
@@ -38,9 +43,12 @@ export class OTLPLogExporter
3843
{
3944
constructor(config: OTLPGRPCExporterConfigNode = {}) {
4045
super(config);
41-
const headers = baggageUtils.parseKeyPairsIntoRecord(
42-
getEnv().OTEL_EXPORTER_OTLP_LOGS_HEADERS
43-
);
46+
const headers = {
47+
...USER_AGENT,
48+
...baggageUtils.parseKeyPairsIntoRecord(
49+
getEnv().OTEL_EXPORTER_OTLP_LOGS_HEADERS
50+
),
51+
};
4452
this.metadata ||= new Metadata();
4553
for (const [k, v] of Object.entries(headers)) {
4654
this.metadata.set(k, v);

experimental/packages/exporter-logs-otlp-grpc/test/OTLPLogExporter.test.ts

+7
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
IExportLogsServiceRequest,
3838
IResourceLogs,
3939
} from '@opentelemetry/otlp-transformer';
40+
import { VERSION } from '../src/version';
4041

4142
const logsServiceProtoPath =
4243
'opentelemetry/proto/collector/logs/v1/logs_service.proto';
@@ -333,6 +334,12 @@ describe('when configuring via environment', () => {
333334
envSource.OTEL_EXPORTER_OTLP_ENDPOINT = '';
334335
envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = '';
335336
});
337+
it('should include user-agent header by default', () => {
338+
const collectorExporter = new OTLPLogExporter();
339+
assert.deepStrictEqual(collectorExporter.metadata?.get('User-Agent'), [
340+
`OTel-OTLP-Exporter-JavaScript/${VERSION}`,
341+
]);
342+
});
336343
it('should use headers defined via env', () => {
337344
envSource.OTEL_EXPORTER_OTLP_HEADERS = 'foo=bar';
338345
const collectorExporter = new OTLPLogExporter();

experimental/packages/exporter-logs-otlp-http/src/platform/node/OTLPLogExporter.ts

+11-5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ import { OTLPExporterNodeBase } from '@opentelemetry/otlp-exporter-base';
2525
import { createExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
2626

2727
import { getDefaultUrl } from '../config';
28+
import { VERSION } from '../../version';
29+
30+
const USER_AGENT = {
31+
'User-Agent': `OTel-OTLP-Exporter-JavaScript/${VERSION}`,
32+
};
2833

2934
/**
3035
* Collector Logs Exporter for Node
@@ -39,13 +44,14 @@ export class OTLPLogExporter
3944
timeoutMillis: getEnv().OTEL_EXPORTER_OTLP_LOGS_TIMEOUT,
4045
...config,
4146
});
42-
this.headers = Object.assign(
43-
this.headers,
44-
baggageUtils.parseKeyPairsIntoRecord(
47+
this.headers = {
48+
...this.headers,
49+
...USER_AGENT,
50+
...baggageUtils.parseKeyPairsIntoRecord(
4551
getEnv().OTEL_EXPORTER_OTLP_LOGS_HEADERS
4652
),
47-
config.headers
48-
);
53+
...config.headers,
54+
};
4955
}
5056

5157
convert(logRecords: ReadableLogRecord[]): IExportLogsServiceRequest {

experimental/packages/exporter-logs-otlp-http/test/node/OTLPLogExporter.test.ts

+9
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
import { PassThrough, Stream } from 'stream';
3232
import { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
3333
import { ExportResultCode } from '@opentelemetry/core';
34+
import { VERSION } from '../../src/version';
3435

3536
let fakeRequest: PassThrough;
3637

@@ -79,6 +80,14 @@ describe('OTLPLogExporter', () => {
7980
assert.ok(exporter instanceof OTLPLogExporter);
8081
});
8182

83+
it('should include user-agent header by default', () => {
84+
const exporter = new OTLPLogExporter();
85+
assert.strictEqual(
86+
exporter.headers['User-Agent'],
87+
`OTel-OTLP-Exporter-JavaScript/${VERSION}`
88+
);
89+
});
90+
8291
it('should use headers defined via env', () => {
8392
envSource.OTEL_EXPORTER_OTLP_LOGS_HEADERS = 'foo=bar';
8493
const exporter = new OTLPLogExporter();

experimental/packages/exporter-logs-otlp-proto/src/platform/node/OTLPLogExporter.ts

+11-5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ import {
3030
} from '@opentelemetry/otlp-transformer';
3131

3232
import { ReadableLogRecord, LogRecordExporter } from '@opentelemetry/sdk-logs';
33+
import { VERSION } from '../../version';
34+
35+
const USER_AGENT = {
36+
'User-Agent': `OTel-OTLP-Exporter-JavaScript/${VERSION}`,
37+
};
3338

3439
const DEFAULT_COLLECTOR_RESOURCE_PATH = 'v1/logs';
3540
const DEFAULT_COLLECTOR_URL = `http://localhost:4318/${DEFAULT_COLLECTOR_RESOURCE_PATH}`;
@@ -46,13 +51,14 @@ export class OTLPLogExporter
4651
{
4752
constructor(config: OTLPExporterConfigBase = {}) {
4853
super(config);
49-
this.headers = Object.assign(
50-
this.headers,
51-
baggageUtils.parseKeyPairsIntoRecord(
54+
this.headers = {
55+
...this.headers,
56+
...USER_AGENT,
57+
...baggageUtils.parseKeyPairsIntoRecord(
5258
getEnv().OTEL_EXPORTER_OTLP_LOGS_HEADERS
5359
),
54-
config.headers
55-
);
60+
...config.headers,
61+
};
5662
}
5763
convert(logs: ReadableLogRecord[]): IExportLogsServiceRequest {
5864
return createExportLogsServiceRequest(logs);

experimental/packages/exporter-logs-otlp-proto/test/node/OTLPLogExporter.test.ts

+8
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import {
3939
} from '@opentelemetry/otlp-proto-exporter-base';
4040
import { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
4141
import { ReadableLogRecord } from '@opentelemetry/sdk-logs';
42+
import { VERSION } from '../../src/version';
4243

4344
let fakeRequest: PassThrough;
4445

@@ -137,6 +138,13 @@ describe('OTLPLogExporter - node with proto over http', () => {
137138
);
138139
envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = '';
139140
});
141+
it('should include user-agent header by default', () => {
142+
const exporter = new OTLPLogExporter();
143+
assert.strictEqual(
144+
exporter.headers['User-Agent'],
145+
`OTel-OTLP-Exporter-JavaScript/${VERSION}`
146+
);
147+
});
140148
it('should use headers defined via env', () => {
141149
envSource.OTEL_EXPORTER_OTLP_LOGS_HEADERS = 'foo=bar';
142150
const collectorExporter = new OTLPLogExporter();

0 commit comments

Comments
 (0)