Skip to content

Commit 3a426e8

Browse files
authored
fix(exporters): use parseHeaders() to ensure header-values are not 'undefined' (#4540)
* fix(exporters): use parseHeaders() to ensure header-values are not 'undefined' * chore: changelog * fixup! fix(exporters): use parseHeaders() to ensure header-values are not 'undefined'
1 parent 1b4999f commit 3a426e8

File tree

10 files changed

+27
-11
lines changed

10 files changed

+27
-11
lines changed

experimental/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ All notable changes to experimental packages in this project will be documented
1010

1111
### :bug: (Bug Fix)
1212

13+
* fix(exporter-*-otlp-*): use parseHeaders() to ensure header-values are not 'undefined' #4540
14+
* Fixes a bug where passing `undefined` as a header value would crash the end-user app after the export timeout elapsed.
15+
1316
### :books: (Refine Doc)
1417

1518
### :house: (Internal)

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

+5-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ import type {
2121
import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base';
2222
import type { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
2323
import { getEnv, baggageUtils } from '@opentelemetry/core';
24-
import { OTLPExporterNodeBase } from '@opentelemetry/otlp-exporter-base';
24+
import {
25+
OTLPExporterNodeBase,
26+
parseHeaders,
27+
} from '@opentelemetry/otlp-exporter-base';
2528
import { createExportLogsServiceRequest } from '@opentelemetry/otlp-transformer';
2629

2730
import { getDefaultUrl } from '../config';
@@ -50,7 +53,7 @@ export class OTLPLogExporter
5053
...baggageUtils.parseKeyPairsIntoRecord(
5154
getEnv().OTEL_EXPORTER_OTLP_LOGS_HEADERS
5255
),
53-
...config.headers,
56+
...parseHeaders(config?.headers),
5457
};
5558
}
5659

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
OTLPExporterConfigBase,
2020
appendResourcePathToUrl,
2121
appendRootPathToUrlIfNeeded,
22+
parseHeaders,
2223
} from '@opentelemetry/otlp-exporter-base';
2324
import {
2425
OTLPProtoExporterNodeBase,
@@ -57,7 +58,7 @@ export class OTLPLogExporter
5758
...baggageUtils.parseKeyPairsIntoRecord(
5859
getEnv().OTEL_EXPORTER_OTLP_LOGS_HEADERS
5960
),
60-
...config.headers,
61+
...parseHeaders(config?.headers),
6162
};
6263
}
6364
convert(logs: ReadableLogRecord[]): IExportLogsServiceRequest {

experimental/packages/exporter-trace-otlp-http/src/platform/node/OTLPTraceExporter.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
1818
import { getEnv, baggageUtils } from '@opentelemetry/core';
19-
import { OTLPExporterNodeBase } from '@opentelemetry/otlp-exporter-base';
19+
import {
20+
OTLPExporterNodeBase,
21+
parseHeaders,
22+
} from '@opentelemetry/otlp-exporter-base';
2023
import {
2124
OTLPExporterNodeConfigBase,
2225
appendResourcePathToUrl,
@@ -49,7 +52,7 @@ export class OTLPTraceExporter
4952
...baggageUtils.parseKeyPairsIntoRecord(
5053
getEnv().OTEL_EXPORTER_OTLP_TRACES_HEADERS
5154
),
52-
...config.headers,
55+
...parseHeaders(config?.headers),
5356
};
5457
}
5558

experimental/packages/exporter-trace-otlp-proto/src/platform/node/OTLPTraceExporter.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
OTLPExporterNodeConfigBase,
2121
appendResourcePathToUrl,
2222
appendRootPathToUrlIfNeeded,
23+
parseHeaders,
2324
} from '@opentelemetry/otlp-exporter-base';
2425
import {
2526
OTLPProtoExporterNodeBase,
@@ -52,7 +53,7 @@ export class OTLPTraceExporter
5253
...baggageUtils.parseKeyPairsIntoRecord(
5354
getEnv().OTEL_EXPORTER_OTLP_TRACES_HEADERS
5455
),
55-
...config.headers,
56+
...parseHeaders(config?.headers),
5657
};
5758
}
5859

experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/src/OTLPMetricExporter.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333
IExportMetricsServiceResponse,
3434
} from '@opentelemetry/otlp-transformer';
3535
import { VERSION } from './version';
36+
import { parseHeaders } from '@opentelemetry/otlp-exporter-base';
3637

3738
const USER_AGENT = {
3839
'User-Agent': `OTel-OTLP-Exporter-JavaScript/${VERSION}`,
@@ -49,7 +50,7 @@ class OTLPMetricExporterProxy extends OTLPGRPCExporterNodeBase<
4950
...baggageUtils.parseKeyPairsIntoRecord(
5051
getEnv().OTEL_EXPORTER_OTLP_METRICS_HEADERS
5152
),
52-
...config?.headers,
53+
...parseHeaders(config?.headers),
5354
};
5455
super(
5556
config,

experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/platform/node/OTLPMetricExporter.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
OTLPExporterNodeConfigBase,
2424
appendResourcePathToUrl,
2525
appendRootPathToUrlIfNeeded,
26+
parseHeaders,
2627
} from '@opentelemetry/otlp-exporter-base';
2728
import {
2829
createExportMetricsServiceRequest,
@@ -48,7 +49,7 @@ class OTLPExporterNodeProxy extends OTLPExporterNodeBase<
4849
...baggageUtils.parseKeyPairsIntoRecord(
4950
getEnv().OTEL_EXPORTER_OTLP_METRICS_HEADERS
5051
),
51-
...config?.headers,
52+
...parseHeaders(config?.headers),
5253
};
5354
}
5455

experimental/packages/opentelemetry-exporter-metrics-otlp-proto/src/OTLPMetricExporter.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
OTLPExporterNodeConfigBase,
2727
appendResourcePathToUrl,
2828
appendRootPathToUrlIfNeeded,
29+
parseHeaders,
2930
} from '@opentelemetry/otlp-exporter-base';
3031
import {
3132
createExportMetricsServiceRequest,
@@ -51,7 +52,7 @@ class OTLPMetricExporterNodeProxy extends OTLPProtoExporterNodeBase<
5152
...baggageUtils.parseKeyPairsIntoRecord(
5253
getEnv().OTEL_EXPORTER_OTLP_METRICS_HEADERS
5354
),
54-
...config?.headers,
55+
...parseHeaders(config?.headers),
5556
};
5657
}
5758

experimental/packages/otlp-exporter-base/src/util.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ export function parseHeaders(
3535
if (typeof value !== 'undefined') {
3636
headers[key] = String(value);
3737
} else {
38-
diag.warn(`Header "${key}" has wrong value and will be ignored`);
38+
diag.warn(
39+
`Header "${key}" has invalid value (${value}) and will be ignored`
40+
);
3941
}
4042
});
4143
return headers;

experimental/packages/otlp-exporter-base/test/common/util.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ describe('utils', () => {
4646
const args = spyWarn.args[0];
4747
assert.strictEqual(
4848
args[0],
49-
'Header "foo1" has wrong value and will be ignored'
49+
'Header "foo1" has invalid value (undefined) and will be ignored'
5050
);
5151
});
5252

0 commit comments

Comments
 (0)