UNPKG

3.72 kBJavaScriptView Raw
1/*
2 * Copyright The OpenTelemetry Authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16import { diag } from '@opentelemetry/api';
17import { AlwaysOffSampler, AlwaysOnSampler, getEnv, TracesSamplerValues, ParentBasedSampler, TraceIdRatioBasedSampler, } from '@opentelemetry/core';
18var env = getEnv();
19var FALLBACK_OTEL_TRACES_SAMPLER = TracesSamplerValues.AlwaysOn;
20/**
21 * Default configuration. For fields with primitive values, any user-provided
22 * value will override the corresponding default value. For fields with
23 * non-primitive values (like `spanLimits`), the user-provided value will be
24 * used to extend the default value.
25 */
26export var DEFAULT_CONFIG = {
27 sampler: buildSamplerFromEnv(env),
28 forceFlushTimeoutMillis: 30000,
29 spanLimits: {
30 attributeCountLimit: getEnv().OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
31 linkCountLimit: getEnv().OTEL_SPAN_LINK_COUNT_LIMIT,
32 eventCountLimit: getEnv().OTEL_SPAN_EVENT_COUNT_LIMIT,
33 },
34};
35/**
36 * Based on environment, builds a sampler, complies with specification.
37 * @param env optional, by default uses getEnv(), but allows passing a value to reuse parsed environment
38 */
39export function buildSamplerFromEnv(env) {
40 if (env === void 0) { env = getEnv(); }
41 switch (env.OTEL_TRACES_SAMPLER) {
42 case TracesSamplerValues.AlwaysOn:
43 return new AlwaysOnSampler();
44 case TracesSamplerValues.AlwaysOff:
45 return new AlwaysOffSampler();
46 case TracesSamplerValues.ParentBasedAlwaysOn:
47 return new ParentBasedSampler({
48 root: new AlwaysOnSampler(),
49 });
50 case TracesSamplerValues.ParentBasedAlwaysOff:
51 return new ParentBasedSampler({
52 root: new AlwaysOffSampler(),
53 });
54 case TracesSamplerValues.TraceIdRatio:
55 return new TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv(env));
56 case TracesSamplerValues.ParentBasedTraceIdRatio:
57 return new ParentBasedSampler({
58 root: new TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv(env)),
59 });
60 default:
61 diag.error("OTEL_TRACES_SAMPLER value \"" + env.OTEL_TRACES_SAMPLER + " invalid, defaulting to " + FALLBACK_OTEL_TRACES_SAMPLER + "\".");
62 return new AlwaysOnSampler();
63 }
64}
65var DEFAULT_RATIO = 1;
66function getSamplerProbabilityFromEnv(env) {
67 if (env.OTEL_TRACES_SAMPLER_ARG === undefined ||
68 env.OTEL_TRACES_SAMPLER_ARG === '') {
69 diag.error("OTEL_TRACES_SAMPLER_ARG is blank, defaulting to " + DEFAULT_RATIO + ".");
70 return DEFAULT_RATIO;
71 }
72 var probability = Number(env.OTEL_TRACES_SAMPLER_ARG);
73 if (isNaN(probability)) {
74 diag.error("OTEL_TRACES_SAMPLER_ARG=" + env.OTEL_TRACES_SAMPLER_ARG + " was given, but it is invalid, defaulting to " + DEFAULT_RATIO + ".");
75 return DEFAULT_RATIO;
76 }
77 if (probability < 0 || probability > 1) {
78 diag.error("OTEL_TRACES_SAMPLER_ARG=" + env.OTEL_TRACES_SAMPLER_ARG + " was given, but it is out of range ([0..1]), defaulting to " + DEFAULT_RATIO + ".");
79 return DEFAULT_RATIO;
80 }
81 return probability;
82}
83//# sourceMappingURL=config.js.map
\No newline at end of file