15
15
*/
16
16
17
17
import { diag } from '@opentelemetry/api' ;
18
- import { getEnv , ENVIRONMENT } from '@opentelemetry/core' ;
18
+ import { getNumberFromEnv , getStringFromEnv } from '@opentelemetry/core' ;
19
19
import { Sampler } from './Sampler' ;
20
20
import { AlwaysOffSampler } from './sampler/AlwaysOffSampler' ;
21
21
import { AlwaysOnSampler } from './sampler/AlwaysOnSampler' ;
@@ -44,35 +44,38 @@ const DEFAULT_RATIO = 1;
44
44
// object needs to be wrapped in this function and called when needed otherwise
45
45
// envs are parsed before tests are ran - causes tests using these envs to fail
46
46
export function loadDefaultConfig ( ) {
47
- const env = getEnv ( ) ;
48
-
49
47
return {
50
- sampler : buildSamplerFromEnv ( env ) ,
48
+ sampler : buildSamplerFromEnv ( ) ,
51
49
forceFlushTimeoutMillis : 30000 ,
52
50
generalLimits : {
53
- attributeValueLengthLimit : env . OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT ,
54
- attributeCountLimit : env . OTEL_ATTRIBUTE_COUNT_LIMIT ,
51
+ attributeValueLengthLimit :
52
+ getNumberFromEnv ( 'OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT' ) ?? Infinity ,
53
+ attributeCountLimit :
54
+ getNumberFromEnv ( 'OTEL_ATTRIBUTE_COUNT_LIMIT' ) ?? 128 ,
55
55
} ,
56
56
spanLimits : {
57
- attributeValueLengthLimit : env . OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT ,
58
- attributeCountLimit : env . OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT ,
59
- linkCountLimit : env . OTEL_SPAN_LINK_COUNT_LIMIT ,
60
- eventCountLimit : env . OTEL_SPAN_EVENT_COUNT_LIMIT ,
57
+ attributeValueLengthLimit :
58
+ getNumberFromEnv ( 'OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT' ) ?? Infinity ,
59
+ attributeCountLimit :
60
+ getNumberFromEnv ( 'OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT' ) ?? 128 ,
61
+ linkCountLimit : getNumberFromEnv ( 'OTEL_SPAN_LINK_COUNT_LIMIT' ) ?? 128 ,
62
+ eventCountLimit : getNumberFromEnv ( 'OTEL_SPAN_EVENT_COUNT_LIMIT' ) ?? 128 ,
61
63
attributePerEventCountLimit :
62
- env . OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT ,
63
- attributePerLinkCountLimit : env . OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT ,
64
+ getNumberFromEnv ( 'OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT' ) ?? 128 ,
65
+ attributePerLinkCountLimit :
66
+ getNumberFromEnv ( 'OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT' ) ?? 128 ,
64
67
} ,
65
68
} ;
66
69
}
67
70
68
71
/**
69
72
* Based on environment, builds a sampler, complies with specification.
70
- * @param environment optional, by default uses getEnv(), but allows passing a value to reuse parsed environment
71
73
*/
72
- export function buildSamplerFromEnv (
73
- environment : Required < ENVIRONMENT > = getEnv ( )
74
- ) : Sampler {
75
- switch ( environment . OTEL_TRACES_SAMPLER ) {
74
+ export function buildSamplerFromEnv ( ) : Sampler {
75
+ const sampler =
76
+ getStringFromEnv ( 'OTEL_TRACES_SAMPLER' ) ??
77
+ TracesSamplerValues . ParentBasedAlwaysOn ;
78
+ switch ( sampler ) {
76
79
case TracesSamplerValues . AlwaysOn :
77
80
return new AlwaysOnSampler ( ) ;
78
81
case TracesSamplerValues . AlwaysOff :
@@ -86,48 +89,31 @@ export function buildSamplerFromEnv(
86
89
root : new AlwaysOffSampler ( ) ,
87
90
} ) ;
88
91
case TracesSamplerValues . TraceIdRatio :
89
- return new TraceIdRatioBasedSampler (
90
- getSamplerProbabilityFromEnv ( environment )
91
- ) ;
92
+ return new TraceIdRatioBasedSampler ( getSamplerProbabilityFromEnv ( ) ) ;
92
93
case TracesSamplerValues . ParentBasedTraceIdRatio :
93
94
return new ParentBasedSampler ( {
94
- root : new TraceIdRatioBasedSampler (
95
- getSamplerProbabilityFromEnv ( environment )
96
- ) ,
95
+ root : new TraceIdRatioBasedSampler ( getSamplerProbabilityFromEnv ( ) ) ,
97
96
} ) ;
98
97
default :
99
98
diag . error (
100
- `OTEL_TRACES_SAMPLER value "${ environment . OTEL_TRACES_SAMPLER } invalid, defaulting to ${ FALLBACK_OTEL_TRACES_SAMPLER } ".`
99
+ `OTEL_TRACES_SAMPLER value "${ sampler } invalid, defaulting to ${ FALLBACK_OTEL_TRACES_SAMPLER } ".`
101
100
) ;
102
101
return new AlwaysOnSampler ( ) ;
103
102
}
104
103
}
105
104
106
- function getSamplerProbabilityFromEnv (
107
- environment : Required < ENVIRONMENT >
108
- ) : number | undefined {
109
- if (
110
- environment . OTEL_TRACES_SAMPLER_ARG === undefined ||
111
- environment . OTEL_TRACES_SAMPLER_ARG === ''
112
- ) {
105
+ function getSamplerProbabilityFromEnv ( ) : number | undefined {
106
+ const probability = getNumberFromEnv ( 'OTEL_TRACES_SAMPLER_ARG' ) ;
107
+ if ( probability == null ) {
113
108
diag . error (
114
109
`OTEL_TRACES_SAMPLER_ARG is blank, defaulting to ${ DEFAULT_RATIO } .`
115
110
) ;
116
111
return DEFAULT_RATIO ;
117
112
}
118
113
119
- const probability = Number ( environment . OTEL_TRACES_SAMPLER_ARG ) ;
120
-
121
- if ( isNaN ( probability ) ) {
122
- diag . error (
123
- `OTEL_TRACES_SAMPLER_ARG=${ environment . OTEL_TRACES_SAMPLER_ARG } was given, but it is invalid, defaulting to ${ DEFAULT_RATIO } .`
124
- ) ;
125
- return DEFAULT_RATIO ;
126
- }
127
-
128
114
if ( probability < 0 || probability > 1 ) {
129
115
diag . error (
130
- `OTEL_TRACES_SAMPLER_ARG=${ environment . OTEL_TRACES_SAMPLER_ARG } was given, but it is out of range ([0..1]), defaulting to ${ DEFAULT_RATIO } .`
116
+ `OTEL_TRACES_SAMPLER_ARG=${ probability } was given, but it is out of range ([0..1]), defaulting to ${ DEFAULT_RATIO } .`
131
117
) ;
132
118
return DEFAULT_RATIO ;
133
119
}
0 commit comments