Skip to content

Commit 392c43f

Browse files
mweardyladan
andauthored
feat: batch span processor environment config (#1755)
Co-authored-by: Daniel Dyla <[email protected]>
1 parent d77a8b9 commit 392c43f

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

packages/opentelemetry-core/src/utils/environment.ts

+6
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,17 @@ export interface ENVIRONMENT {
2828
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT?: number;
2929
OTEL_SPAN_EVENT_COUNT_LIMIT?: number;
3030
OTEL_SPAN_LINK_COUNT_LIMIT?: number;
31+
OTEL_BSP_MAX_BATCH_SIZE?: number;
32+
OTEL_BSP_SCHEDULE_DELAY_MILLIS?: number;
3133
}
3234

3335
const ENVIRONMENT_NUMBERS: Partial<keyof ENVIRONMENT>[] = [
3436
'OTEL_SAMPLING_PROBABILITY',
3537
'OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT',
3638
'OTEL_SPAN_EVENT_COUNT_LIMIT',
3739
'OTEL_SPAN_LINK_COUNT_LIMIT',
40+
'OTEL_BSP_MAX_BATCH_SIZE',
41+
'OTEL_BSP_SCHEDULE_DELAY_MILLIS',
3842
];
3943

4044
/**
@@ -47,6 +51,8 @@ export const DEFAULT_ENVIRONMENT: Required<ENVIRONMENT> = {
4751
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: 1000,
4852
OTEL_SPAN_EVENT_COUNT_LIMIT: 1000,
4953
OTEL_SPAN_LINK_COUNT_LIMIT: 1000,
54+
OTEL_BSP_MAX_BATCH_SIZE: 512,
55+
OTEL_BSP_SCHEDULE_DELAY_MILLIS: 5000,
5056
};
5157

5258
/**

packages/opentelemetry-core/test/utils/environment.test.ts

+4
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ describe('environment', () => {
8080
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: 10,
8181
OTEL_SPAN_EVENT_COUNT_LIMIT: 20,
8282
OTEL_SPAN_LINK_COUNT_LIMIT: 30,
83+
OTEL_BSP_MAX_BATCH_SIZE: 40,
84+
OTEL_BSP_SCHEDULE_DELAY_MILLIS: 50,
8385
});
8486
const env = getEnv();
8587
assert.strictEqual(env.OTEL_NO_PATCH_MODULES, 'a,b,c');
@@ -88,6 +90,8 @@ describe('environment', () => {
8890
assert.strictEqual(env.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT, 10);
8991
assert.strictEqual(env.OTEL_SPAN_EVENT_COUNT_LIMIT, 20);
9092
assert.strictEqual(env.OTEL_SPAN_LINK_COUNT_LIMIT, 30);
93+
assert.strictEqual(env.OTEL_BSP_MAX_BATCH_SIZE, 40);
94+
assert.strictEqual(env.OTEL_BSP_SCHEDULE_DELAY_MILLIS, 50);
9195
});
9296

9397
it('should match invalid values to closest valid equivalent', () => {

packages/opentelemetry-tracing/src/export/BatchSpanProcessor.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,14 @@ import {
1919
ExportResultCode,
2020
globalErrorHandler,
2121
unrefTimer,
22+
getEnv,
2223
} from '@opentelemetry/core';
2324
import { Span } from '../Span';
2425
import { SpanProcessor } from '../SpanProcessor';
2526
import { BufferConfig } from '../types';
2627
import { ReadableSpan } from './ReadableSpan';
2728
import { SpanExporter } from './SpanExporter';
2829

29-
const DEFAULT_BUFFER_SIZE = 100;
30-
const DEFAULT_BUFFER_TIMEOUT_MS = 20_000;
31-
3230
/**
3331
* Implementation of the {@link SpanProcessor} that batches spans exported by
3432
* the SDK then pushes them to the exporter pipeline.
@@ -43,12 +41,15 @@ export class BatchSpanProcessor implements SpanProcessor {
4341
private _shuttingDownPromise: Promise<void> = Promise.resolve();
4442

4543
constructor(private readonly _exporter: SpanExporter, config?: BufferConfig) {
44+
const env = getEnv();
4645
this._bufferSize =
47-
config && config.bufferSize ? config.bufferSize : DEFAULT_BUFFER_SIZE;
46+
config && config.bufferSize
47+
? config.bufferSize
48+
: env.OTEL_BSP_MAX_BATCH_SIZE;
4849
this._bufferTimeout =
4950
config && typeof config.bufferTimeout === 'number'
5051
? config.bufferTimeout
51-
: DEFAULT_BUFFER_TIMEOUT_MS;
52+
: env.OTEL_BSP_SCHEDULE_DELAY_MILLIS;
5253
}
5354

5455
forceFlush(): Promise<void> {

packages/opentelemetry-tracing/test/export/BatchSpanProcessor.test.ts

+26
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,32 @@ describe('BatchSpanProcessor', () => {
7474
assert.ok(processor instanceof BatchSpanProcessor);
7575
processor.shutdown();
7676
});
77+
78+
it('should read defaults from environment', () => {
79+
const bspConfig = {
80+
OTEL_BSP_MAX_BATCH_SIZE: 256,
81+
OTEL_BSP_SCHEDULE_DELAY_MILLIS: 2500,
82+
};
83+
84+
let env: Record<string, any>;
85+
if (typeof process === 'undefined') {
86+
env = (window as unknown) as Record<string, any>;
87+
} else {
88+
env = process.env as Record<string, any>;
89+
}
90+
91+
Object.entries(bspConfig).forEach(([k, v]) => {
92+
env[k] = v;
93+
});
94+
95+
const processor = new BatchSpanProcessor(exporter);
96+
assert.ok(processor instanceof BatchSpanProcessor);
97+
assert.strictEqual(processor['_bufferSize'], 256);
98+
assert.strictEqual(processor['_bufferTimeout'], 2500);
99+
processor.shutdown();
100+
101+
Object.keys(bspConfig).forEach(k => delete env[k]);
102+
});
77103
});
78104

79105
describe('.onStart/.onEnd/.shutdown', () => {

0 commit comments

Comments
 (0)