@reactive-agents/observe 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +37 -0
- package/dist/index.js +812 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Layer } from 'effect';
|
|
2
|
+
import { EventBus } from '@reactive-agents/core';
|
|
3
|
+
|
|
4
|
+
declare const OpenInferenceTracerLayer: Layer.Layer<never, never, EventBus>;
|
|
5
|
+
|
|
6
|
+
interface OpenInferenceExporterConfig {
|
|
7
|
+
/** OTLP endpoint URL. Defaults to OTEL_EXPORTER_OTLP_ENDPOINT env var, then http://localhost:4318 */
|
|
8
|
+
endpoint?: string;
|
|
9
|
+
/** Additional HTTP headers (auth tokens, etc.) */
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
/** Service name reported to backend. Defaults to "reactive-agents" */
|
|
12
|
+
serviceName?: string;
|
|
13
|
+
}
|
|
14
|
+
interface ExporterHandle {
|
|
15
|
+
/** Flush pending spans and shut down the exporter. */
|
|
16
|
+
shutdown(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wire up an OTLP HTTP exporter that emits OpenInference-attributed spans.
|
|
20
|
+
*
|
|
21
|
+
* Call this once at process start, before running any agents.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const handle = setupOpenInferenceExporter({ serviceName: "my-agent" });
|
|
26
|
+
* // ... run agents ...
|
|
27
|
+
* await handle.shutdown();
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
declare function setupOpenInferenceExporter(config?: OpenInferenceExporterConfig): ExporterHandle;
|
|
31
|
+
/**
|
|
32
|
+
* Auto-configure OTLP export if OTEL_EXPORTER_OTLP_ENDPOINT is set.
|
|
33
|
+
* No-op otherwise. Returns handle (shutdown is safe to call even if no-op).
|
|
34
|
+
*/
|
|
35
|
+
declare function autoConfigureExporter(config?: Omit<OpenInferenceExporterConfig, "endpoint">): ExporterHandle;
|
|
36
|
+
|
|
37
|
+
export { type ExporterHandle, type OpenInferenceExporterConfig, OpenInferenceTracerLayer, autoConfigureExporter, setupOpenInferenceExporter };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,812 @@
|
|
|
1
|
+
// src/tracer.ts
|
|
2
|
+
import { Effect, Layer } from "effect";
|
|
3
|
+
import * as otelApi from "@opentelemetry/api";
|
|
4
|
+
import { EventBus } from "@reactive-agents/core";
|
|
5
|
+
var OI = {
|
|
6
|
+
SPAN_KIND: "openinference.span.kind",
|
|
7
|
+
INPUT_VALUE: "input.value",
|
|
8
|
+
OUTPUT_VALUE: "output.value",
|
|
9
|
+
LLM_MODEL_NAME: "llm.model_name",
|
|
10
|
+
LLM_PROVIDER: "llm.provider",
|
|
11
|
+
LLM_TOKEN_COUNT_PROMPT: "llm.token_count.prompt",
|
|
12
|
+
LLM_TOKEN_COUNT_COMPLETION: "llm.token_count.completion",
|
|
13
|
+
LLM_TOKEN_COUNT_TOTAL: "llm.token_count.total",
|
|
14
|
+
TOOL_NAME: "tool.name",
|
|
15
|
+
TOOL_PARAMETERS: "tool.parameters",
|
|
16
|
+
TOOL_OUTPUT: "tool.output"
|
|
17
|
+
};
|
|
18
|
+
var SpanKind2 = {
|
|
19
|
+
AGENT: "AGENT",
|
|
20
|
+
LLM: "LLM",
|
|
21
|
+
TOOL: "TOOL"
|
|
22
|
+
};
|
|
23
|
+
function createSpanMap() {
|
|
24
|
+
return {
|
|
25
|
+
workflows: /* @__PURE__ */ new Map(),
|
|
26
|
+
llmCalls: /* @__PURE__ */ new Map(),
|
|
27
|
+
toolCalls: /* @__PURE__ */ new Map()
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
var OpenInferenceTracerLayer = Layer.scopedDiscard(
|
|
31
|
+
Effect.gen(function* () {
|
|
32
|
+
const bus = yield* EventBus;
|
|
33
|
+
const tracer = otelApi.trace.getTracer("reactive-agents", "0.11.0");
|
|
34
|
+
const spans = createSpanMap();
|
|
35
|
+
const unsub = yield* bus.subscribe(
|
|
36
|
+
(event) => Effect.sync(() => {
|
|
37
|
+
switch (event._tag) {
|
|
38
|
+
case "AgentStarted": {
|
|
39
|
+
const span = tracer.startSpan(`agent:${event.agentId}`, {
|
|
40
|
+
kind: otelApi.SpanKind.INTERNAL,
|
|
41
|
+
attributes: {
|
|
42
|
+
[OI.SPAN_KIND]: SpanKind2.AGENT,
|
|
43
|
+
[OI.LLM_MODEL_NAME]: event.model,
|
|
44
|
+
[OI.LLM_PROVIDER]: event.provider,
|
|
45
|
+
"agent.id": event.agentId,
|
|
46
|
+
"task.id": event.taskId
|
|
47
|
+
},
|
|
48
|
+
startTime: event.timestamp
|
|
49
|
+
});
|
|
50
|
+
spans.workflows.set(event.taskId, span);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case "AgentCompleted": {
|
|
54
|
+
const span = spans.workflows.get(event.taskId);
|
|
55
|
+
if (!span) break;
|
|
56
|
+
span.setAttributes({
|
|
57
|
+
"agent.iterations": event.totalIterations,
|
|
58
|
+
[OI.LLM_TOKEN_COUNT_TOTAL]: event.totalTokens,
|
|
59
|
+
"agent.success": event.success
|
|
60
|
+
});
|
|
61
|
+
if (event.error) {
|
|
62
|
+
span.setStatus({
|
|
63
|
+
code: otelApi.SpanStatusCode.ERROR,
|
|
64
|
+
message: event.error
|
|
65
|
+
});
|
|
66
|
+
span.recordException(new Error(event.error));
|
|
67
|
+
} else {
|
|
68
|
+
span.setStatus({ code: otelApi.SpanStatusCode.OK });
|
|
69
|
+
}
|
|
70
|
+
span.end();
|
|
71
|
+
spans.workflows.delete(event.taskId);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case "LLMRequestStarted": {
|
|
75
|
+
const parentSpan = spans.workflows.get(event.taskId);
|
|
76
|
+
const ctx = parentSpan ? otelApi.trace.setSpan(otelApi.ROOT_CONTEXT, parentSpan) : otelApi.ROOT_CONTEXT;
|
|
77
|
+
const span = tracer.startSpan(
|
|
78
|
+
`llm:${event.provider}/${event.model}`,
|
|
79
|
+
{
|
|
80
|
+
kind: otelApi.SpanKind.CLIENT,
|
|
81
|
+
attributes: {
|
|
82
|
+
[OI.SPAN_KIND]: SpanKind2.LLM,
|
|
83
|
+
[OI.LLM_MODEL_NAME]: event.model,
|
|
84
|
+
[OI.LLM_PROVIDER]: event.provider,
|
|
85
|
+
[OI.LLM_TOKEN_COUNT_PROMPT]: event.contextSize,
|
|
86
|
+
"task.id": event.taskId,
|
|
87
|
+
"request.id": event.requestId
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
ctx
|
|
91
|
+
);
|
|
92
|
+
spans.llmCalls.set(event.requestId, span);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case "LLMRequestCompleted": {
|
|
96
|
+
const span = spans.llmCalls.get(event.requestId);
|
|
97
|
+
if (!span) break;
|
|
98
|
+
const tokensIn = event.tokensIn ?? Math.round(event.tokensUsed * 0.7);
|
|
99
|
+
const tokensOut = event.tokensOut ?? Math.round(event.tokensUsed * 0.3);
|
|
100
|
+
span.setAttributes({
|
|
101
|
+
[OI.LLM_TOKEN_COUNT_PROMPT]: tokensIn,
|
|
102
|
+
[OI.LLM_TOKEN_COUNT_COMPLETION]: tokensOut,
|
|
103
|
+
[OI.LLM_TOKEN_COUNT_TOTAL]: event.tokensUsed,
|
|
104
|
+
"llm.duration_ms": event.durationMs,
|
|
105
|
+
"llm.estimated_cost_usd": event.estimatedCost
|
|
106
|
+
});
|
|
107
|
+
if (event.cached) {
|
|
108
|
+
span.setAttribute("llm.cached", true);
|
|
109
|
+
}
|
|
110
|
+
span.setStatus({ code: otelApi.SpanStatusCode.OK });
|
|
111
|
+
span.end();
|
|
112
|
+
spans.llmCalls.delete(event.requestId);
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
case "ToolCallStarted": {
|
|
116
|
+
const parentSpan = spans.workflows.get(event.taskId);
|
|
117
|
+
const ctx = parentSpan ? otelApi.trace.setSpan(otelApi.ROOT_CONTEXT, parentSpan) : otelApi.ROOT_CONTEXT;
|
|
118
|
+
const span = tracer.startSpan(
|
|
119
|
+
`tool:${event.toolName}`,
|
|
120
|
+
{
|
|
121
|
+
kind: otelApi.SpanKind.INTERNAL,
|
|
122
|
+
attributes: {
|
|
123
|
+
[OI.SPAN_KIND]: SpanKind2.TOOL,
|
|
124
|
+
[OI.TOOL_NAME]: event.toolName,
|
|
125
|
+
"task.id": event.taskId,
|
|
126
|
+
"tool.call_id": event.callId
|
|
127
|
+
},
|
|
128
|
+
startTime: event.timestamp ?? Date.now()
|
|
129
|
+
},
|
|
130
|
+
ctx
|
|
131
|
+
);
|
|
132
|
+
if (event.iteration !== void 0) {
|
|
133
|
+
span.setAttribute("agent.iteration", event.iteration);
|
|
134
|
+
}
|
|
135
|
+
spans.toolCalls.set(event.callId, span);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case "ToolCallCompleted": {
|
|
139
|
+
const span = spans.toolCalls.get(event.callId);
|
|
140
|
+
if (!span) break;
|
|
141
|
+
span.setAttributes({
|
|
142
|
+
"tool.duration_ms": event.durationMs,
|
|
143
|
+
"tool.success": event.success
|
|
144
|
+
});
|
|
145
|
+
if (event.args !== void 0) {
|
|
146
|
+
span.setAttribute(
|
|
147
|
+
OI.TOOL_PARAMETERS,
|
|
148
|
+
JSON.stringify(event.args)
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
if (event.result !== void 0) {
|
|
152
|
+
span.setAttribute(OI.TOOL_OUTPUT, JSON.stringify(event.result));
|
|
153
|
+
}
|
|
154
|
+
if (!event.success && event.error) {
|
|
155
|
+
span.setStatus({
|
|
156
|
+
code: otelApi.SpanStatusCode.ERROR,
|
|
157
|
+
message: event.error
|
|
158
|
+
});
|
|
159
|
+
span.recordException(new Error(event.error));
|
|
160
|
+
} else {
|
|
161
|
+
span.setStatus({ code: otelApi.SpanStatusCode.OK });
|
|
162
|
+
}
|
|
163
|
+
span.end();
|
|
164
|
+
spans.toolCalls.delete(event.callId);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
default:
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
);
|
|
172
|
+
return yield* Effect.addFinalizer(
|
|
173
|
+
() => Effect.sync(() => {
|
|
174
|
+
unsub();
|
|
175
|
+
for (const span of spans.workflows.values()) span.end();
|
|
176
|
+
for (const span of spans.llmCalls.values()) span.end();
|
|
177
|
+
for (const span of spans.toolCalls.values()) span.end();
|
|
178
|
+
spans.workflows.clear();
|
|
179
|
+
spans.llmCalls.clear();
|
|
180
|
+
spans.toolCalls.clear();
|
|
181
|
+
})
|
|
182
|
+
);
|
|
183
|
+
})
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
// src/otlp.ts
|
|
187
|
+
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
|
|
188
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
189
|
+
|
|
190
|
+
// ../../node_modules/@opentelemetry/core/build/esm/trace/suppress-tracing.js
|
|
191
|
+
import { createContextKey } from "@opentelemetry/api";
|
|
192
|
+
var SUPPRESS_TRACING_KEY = createContextKey("OpenTelemetry SDK Context Key SUPPRESS_TRACING");
|
|
193
|
+
function suppressTracing(context2) {
|
|
194
|
+
return context2.setValue(SUPPRESS_TRACING_KEY, true);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// ../../node_modules/@opentelemetry/core/build/esm/common/logging-error-handler.js
|
|
198
|
+
import { diag } from "@opentelemetry/api";
|
|
199
|
+
function loggingErrorHandler() {
|
|
200
|
+
return function(ex) {
|
|
201
|
+
diag.error(stringifyException(ex));
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
function stringifyException(ex) {
|
|
205
|
+
if (typeof ex === "string") {
|
|
206
|
+
return ex;
|
|
207
|
+
} else {
|
|
208
|
+
return JSON.stringify(flattenException(ex));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function flattenException(ex) {
|
|
212
|
+
var result = {};
|
|
213
|
+
var current = ex;
|
|
214
|
+
while (current !== null) {
|
|
215
|
+
Object.getOwnPropertyNames(current).forEach(function(propertyName) {
|
|
216
|
+
if (result[propertyName])
|
|
217
|
+
return;
|
|
218
|
+
var value = current[propertyName];
|
|
219
|
+
if (value) {
|
|
220
|
+
result[propertyName] = String(value);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
current = Object.getPrototypeOf(current);
|
|
224
|
+
}
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// ../../node_modules/@opentelemetry/core/build/esm/common/global-error-handler.js
|
|
229
|
+
var delegateHandler = loggingErrorHandler();
|
|
230
|
+
function globalErrorHandler(ex) {
|
|
231
|
+
try {
|
|
232
|
+
delegateHandler(ex);
|
|
233
|
+
} catch (_a) {
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// ../../node_modules/@opentelemetry/core/build/esm/utils/environment.js
|
|
238
|
+
import { DiagLogLevel } from "@opentelemetry/api";
|
|
239
|
+
|
|
240
|
+
// ../../node_modules/@opentelemetry/core/build/esm/utils/sampling.js
|
|
241
|
+
var TracesSamplerValues;
|
|
242
|
+
(function(TracesSamplerValues2) {
|
|
243
|
+
TracesSamplerValues2["AlwaysOff"] = "always_off";
|
|
244
|
+
TracesSamplerValues2["AlwaysOn"] = "always_on";
|
|
245
|
+
TracesSamplerValues2["ParentBasedAlwaysOff"] = "parentbased_always_off";
|
|
246
|
+
TracesSamplerValues2["ParentBasedAlwaysOn"] = "parentbased_always_on";
|
|
247
|
+
TracesSamplerValues2["ParentBasedTraceIdRatio"] = "parentbased_traceidratio";
|
|
248
|
+
TracesSamplerValues2["TraceIdRatio"] = "traceidratio";
|
|
249
|
+
})(TracesSamplerValues || (TracesSamplerValues = {}));
|
|
250
|
+
|
|
251
|
+
// ../../node_modules/@opentelemetry/core/build/esm/utils/environment.js
|
|
252
|
+
var DEFAULT_LIST_SEPARATOR = ",";
|
|
253
|
+
var ENVIRONMENT_BOOLEAN_KEYS = ["OTEL_SDK_DISABLED"];
|
|
254
|
+
function isEnvVarABoolean(key) {
|
|
255
|
+
return ENVIRONMENT_BOOLEAN_KEYS.indexOf(key) > -1;
|
|
256
|
+
}
|
|
257
|
+
var ENVIRONMENT_NUMBERS_KEYS = [
|
|
258
|
+
"OTEL_BSP_EXPORT_TIMEOUT",
|
|
259
|
+
"OTEL_BSP_MAX_EXPORT_BATCH_SIZE",
|
|
260
|
+
"OTEL_BSP_MAX_QUEUE_SIZE",
|
|
261
|
+
"OTEL_BSP_SCHEDULE_DELAY",
|
|
262
|
+
"OTEL_BLRP_EXPORT_TIMEOUT",
|
|
263
|
+
"OTEL_BLRP_MAX_EXPORT_BATCH_SIZE",
|
|
264
|
+
"OTEL_BLRP_MAX_QUEUE_SIZE",
|
|
265
|
+
"OTEL_BLRP_SCHEDULE_DELAY",
|
|
266
|
+
"OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT",
|
|
267
|
+
"OTEL_ATTRIBUTE_COUNT_LIMIT",
|
|
268
|
+
"OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT",
|
|
269
|
+
"OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT",
|
|
270
|
+
"OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT",
|
|
271
|
+
"OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT",
|
|
272
|
+
"OTEL_SPAN_EVENT_COUNT_LIMIT",
|
|
273
|
+
"OTEL_SPAN_LINK_COUNT_LIMIT",
|
|
274
|
+
"OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT",
|
|
275
|
+
"OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT",
|
|
276
|
+
"OTEL_EXPORTER_OTLP_TIMEOUT",
|
|
277
|
+
"OTEL_EXPORTER_OTLP_TRACES_TIMEOUT",
|
|
278
|
+
"OTEL_EXPORTER_OTLP_METRICS_TIMEOUT",
|
|
279
|
+
"OTEL_EXPORTER_OTLP_LOGS_TIMEOUT",
|
|
280
|
+
"OTEL_EXPORTER_JAEGER_AGENT_PORT"
|
|
281
|
+
];
|
|
282
|
+
function isEnvVarANumber(key) {
|
|
283
|
+
return ENVIRONMENT_NUMBERS_KEYS.indexOf(key) > -1;
|
|
284
|
+
}
|
|
285
|
+
var ENVIRONMENT_LISTS_KEYS = [
|
|
286
|
+
"OTEL_NO_PATCH_MODULES",
|
|
287
|
+
"OTEL_PROPAGATORS",
|
|
288
|
+
"OTEL_SEMCONV_STABILITY_OPT_IN"
|
|
289
|
+
];
|
|
290
|
+
function isEnvVarAList(key) {
|
|
291
|
+
return ENVIRONMENT_LISTS_KEYS.indexOf(key) > -1;
|
|
292
|
+
}
|
|
293
|
+
var DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity;
|
|
294
|
+
var DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128;
|
|
295
|
+
var DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT = 128;
|
|
296
|
+
var DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT = 128;
|
|
297
|
+
var DEFAULT_ENVIRONMENT = {
|
|
298
|
+
OTEL_SDK_DISABLED: false,
|
|
299
|
+
CONTAINER_NAME: "",
|
|
300
|
+
ECS_CONTAINER_METADATA_URI_V4: "",
|
|
301
|
+
ECS_CONTAINER_METADATA_URI: "",
|
|
302
|
+
HOSTNAME: "",
|
|
303
|
+
KUBERNETES_SERVICE_HOST: "",
|
|
304
|
+
NAMESPACE: "",
|
|
305
|
+
OTEL_BSP_EXPORT_TIMEOUT: 3e4,
|
|
306
|
+
OTEL_BSP_MAX_EXPORT_BATCH_SIZE: 512,
|
|
307
|
+
OTEL_BSP_MAX_QUEUE_SIZE: 2048,
|
|
308
|
+
OTEL_BSP_SCHEDULE_DELAY: 5e3,
|
|
309
|
+
OTEL_BLRP_EXPORT_TIMEOUT: 3e4,
|
|
310
|
+
OTEL_BLRP_MAX_EXPORT_BATCH_SIZE: 512,
|
|
311
|
+
OTEL_BLRP_MAX_QUEUE_SIZE: 2048,
|
|
312
|
+
OTEL_BLRP_SCHEDULE_DELAY: 5e3,
|
|
313
|
+
OTEL_EXPORTER_JAEGER_AGENT_HOST: "",
|
|
314
|
+
OTEL_EXPORTER_JAEGER_AGENT_PORT: 6832,
|
|
315
|
+
OTEL_EXPORTER_JAEGER_ENDPOINT: "",
|
|
316
|
+
OTEL_EXPORTER_JAEGER_PASSWORD: "",
|
|
317
|
+
OTEL_EXPORTER_JAEGER_USER: "",
|
|
318
|
+
OTEL_EXPORTER_OTLP_ENDPOINT: "",
|
|
319
|
+
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "",
|
|
320
|
+
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: "",
|
|
321
|
+
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: "",
|
|
322
|
+
OTEL_EXPORTER_OTLP_HEADERS: "",
|
|
323
|
+
OTEL_EXPORTER_OTLP_TRACES_HEADERS: "",
|
|
324
|
+
OTEL_EXPORTER_OTLP_METRICS_HEADERS: "",
|
|
325
|
+
OTEL_EXPORTER_OTLP_LOGS_HEADERS: "",
|
|
326
|
+
OTEL_EXPORTER_OTLP_TIMEOUT: 1e4,
|
|
327
|
+
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: 1e4,
|
|
328
|
+
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: 1e4,
|
|
329
|
+
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT: 1e4,
|
|
330
|
+
OTEL_EXPORTER_ZIPKIN_ENDPOINT: "http://localhost:9411/api/v2/spans",
|
|
331
|
+
OTEL_LOG_LEVEL: DiagLogLevel.INFO,
|
|
332
|
+
OTEL_NO_PATCH_MODULES: [],
|
|
333
|
+
OTEL_PROPAGATORS: ["tracecontext", "baggage"],
|
|
334
|
+
OTEL_RESOURCE_ATTRIBUTES: "",
|
|
335
|
+
OTEL_SERVICE_NAME: "",
|
|
336
|
+
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT: DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
|
337
|
+
OTEL_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,
|
|
338
|
+
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
|
339
|
+
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,
|
|
340
|
+
OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT: DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
|
341
|
+
OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,
|
|
342
|
+
OTEL_SPAN_EVENT_COUNT_LIMIT: 128,
|
|
343
|
+
OTEL_SPAN_LINK_COUNT_LIMIT: 128,
|
|
344
|
+
OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT: DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
|
|
345
|
+
OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT: DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT,
|
|
346
|
+
OTEL_TRACES_EXPORTER: "",
|
|
347
|
+
OTEL_TRACES_SAMPLER: TracesSamplerValues.ParentBasedAlwaysOn,
|
|
348
|
+
OTEL_TRACES_SAMPLER_ARG: "",
|
|
349
|
+
OTEL_LOGS_EXPORTER: "",
|
|
350
|
+
OTEL_EXPORTER_OTLP_INSECURE: "",
|
|
351
|
+
OTEL_EXPORTER_OTLP_TRACES_INSECURE: "",
|
|
352
|
+
OTEL_EXPORTER_OTLP_METRICS_INSECURE: "",
|
|
353
|
+
OTEL_EXPORTER_OTLP_LOGS_INSECURE: "",
|
|
354
|
+
OTEL_EXPORTER_OTLP_CERTIFICATE: "",
|
|
355
|
+
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE: "",
|
|
356
|
+
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE: "",
|
|
357
|
+
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE: "",
|
|
358
|
+
OTEL_EXPORTER_OTLP_COMPRESSION: "",
|
|
359
|
+
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION: "",
|
|
360
|
+
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: "",
|
|
361
|
+
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION: "",
|
|
362
|
+
OTEL_EXPORTER_OTLP_CLIENT_KEY: "",
|
|
363
|
+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY: "",
|
|
364
|
+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY: "",
|
|
365
|
+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY: "",
|
|
366
|
+
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE: "",
|
|
367
|
+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE: "",
|
|
368
|
+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE: "",
|
|
369
|
+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE: "",
|
|
370
|
+
OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf",
|
|
371
|
+
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: "http/protobuf",
|
|
372
|
+
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL: "http/protobuf",
|
|
373
|
+
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL: "http/protobuf",
|
|
374
|
+
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: "cumulative",
|
|
375
|
+
OTEL_SEMCONV_STABILITY_OPT_IN: []
|
|
376
|
+
};
|
|
377
|
+
function parseBoolean(key, environment, values) {
|
|
378
|
+
if (typeof values[key] === "undefined") {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
var value = String(values[key]);
|
|
382
|
+
environment[key] = value.toLowerCase() === "true";
|
|
383
|
+
}
|
|
384
|
+
function parseNumber(name, environment, values, min, max) {
|
|
385
|
+
if (min === void 0) {
|
|
386
|
+
min = -Infinity;
|
|
387
|
+
}
|
|
388
|
+
if (max === void 0) {
|
|
389
|
+
max = Infinity;
|
|
390
|
+
}
|
|
391
|
+
if (typeof values[name] !== "undefined") {
|
|
392
|
+
var value = Number(values[name]);
|
|
393
|
+
if (!isNaN(value)) {
|
|
394
|
+
if (value < min) {
|
|
395
|
+
environment[name] = min;
|
|
396
|
+
} else if (value > max) {
|
|
397
|
+
environment[name] = max;
|
|
398
|
+
} else {
|
|
399
|
+
environment[name] = value;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
function parseStringList(name, output, input, separator) {
|
|
405
|
+
if (separator === void 0) {
|
|
406
|
+
separator = DEFAULT_LIST_SEPARATOR;
|
|
407
|
+
}
|
|
408
|
+
var givenValue = input[name];
|
|
409
|
+
if (typeof givenValue === "string") {
|
|
410
|
+
output[name] = givenValue.split(separator).map(function(v) {
|
|
411
|
+
return v.trim();
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
var logLevelMap = {
|
|
416
|
+
ALL: DiagLogLevel.ALL,
|
|
417
|
+
VERBOSE: DiagLogLevel.VERBOSE,
|
|
418
|
+
DEBUG: DiagLogLevel.DEBUG,
|
|
419
|
+
INFO: DiagLogLevel.INFO,
|
|
420
|
+
WARN: DiagLogLevel.WARN,
|
|
421
|
+
ERROR: DiagLogLevel.ERROR,
|
|
422
|
+
NONE: DiagLogLevel.NONE
|
|
423
|
+
};
|
|
424
|
+
function setLogLevelFromEnv(key, environment, values) {
|
|
425
|
+
var value = values[key];
|
|
426
|
+
if (typeof value === "string") {
|
|
427
|
+
var theLevel = logLevelMap[value.toUpperCase()];
|
|
428
|
+
if (theLevel != null) {
|
|
429
|
+
environment[key] = theLevel;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
function parseEnvironment(values) {
|
|
434
|
+
var environment = {};
|
|
435
|
+
for (var env in DEFAULT_ENVIRONMENT) {
|
|
436
|
+
var key = env;
|
|
437
|
+
switch (key) {
|
|
438
|
+
case "OTEL_LOG_LEVEL":
|
|
439
|
+
setLogLevelFromEnv(key, environment, values);
|
|
440
|
+
break;
|
|
441
|
+
default:
|
|
442
|
+
if (isEnvVarABoolean(key)) {
|
|
443
|
+
parseBoolean(key, environment, values);
|
|
444
|
+
} else if (isEnvVarANumber(key)) {
|
|
445
|
+
parseNumber(key, environment, values);
|
|
446
|
+
} else if (isEnvVarAList(key)) {
|
|
447
|
+
parseStringList(key, environment, values);
|
|
448
|
+
} else {
|
|
449
|
+
var value = values[key];
|
|
450
|
+
if (typeof value !== "undefined" && value !== null) {
|
|
451
|
+
environment[key] = String(value);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
return environment;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// ../../node_modules/@opentelemetry/core/build/esm/platform/node/environment.js
|
|
460
|
+
function getEnv() {
|
|
461
|
+
var processEnv = parseEnvironment(process.env);
|
|
462
|
+
return Object.assign({}, DEFAULT_ENVIRONMENT, processEnv);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// ../../node_modules/@opentelemetry/core/build/esm/platform/node/timer-util.js
|
|
466
|
+
function unrefTimer(timer) {
|
|
467
|
+
timer.unref();
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// ../../node_modules/@opentelemetry/core/build/esm/ExportResult.js
|
|
471
|
+
var ExportResultCode;
|
|
472
|
+
(function(ExportResultCode2) {
|
|
473
|
+
ExportResultCode2[ExportResultCode2["SUCCESS"] = 0] = "SUCCESS";
|
|
474
|
+
ExportResultCode2[ExportResultCode2["FAILED"] = 1] = "FAILED";
|
|
475
|
+
})(ExportResultCode || (ExportResultCode = {}));
|
|
476
|
+
|
|
477
|
+
// ../../node_modules/@opentelemetry/core/build/esm/utils/promise.js
|
|
478
|
+
var Deferred = (
|
|
479
|
+
/** @class */
|
|
480
|
+
(function() {
|
|
481
|
+
function Deferred2() {
|
|
482
|
+
var _this = this;
|
|
483
|
+
this._promise = new Promise(function(resolve, reject) {
|
|
484
|
+
_this._resolve = resolve;
|
|
485
|
+
_this._reject = reject;
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
Object.defineProperty(Deferred2.prototype, "promise", {
|
|
489
|
+
get: function() {
|
|
490
|
+
return this._promise;
|
|
491
|
+
},
|
|
492
|
+
enumerable: false,
|
|
493
|
+
configurable: true
|
|
494
|
+
});
|
|
495
|
+
Deferred2.prototype.resolve = function(val) {
|
|
496
|
+
this._resolve(val);
|
|
497
|
+
};
|
|
498
|
+
Deferred2.prototype.reject = function(err) {
|
|
499
|
+
this._reject(err);
|
|
500
|
+
};
|
|
501
|
+
return Deferred2;
|
|
502
|
+
})()
|
|
503
|
+
);
|
|
504
|
+
|
|
505
|
+
// ../../node_modules/@opentelemetry/core/build/esm/utils/callback.js
|
|
506
|
+
var __read = function(o, n) {
|
|
507
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
508
|
+
if (!m) return o;
|
|
509
|
+
var i = m.call(o), r, ar = [], e;
|
|
510
|
+
try {
|
|
511
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
512
|
+
} catch (error) {
|
|
513
|
+
e = { error };
|
|
514
|
+
} finally {
|
|
515
|
+
try {
|
|
516
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
517
|
+
} finally {
|
|
518
|
+
if (e) throw e.error;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return ar;
|
|
522
|
+
};
|
|
523
|
+
var __spreadArray = function(to, from, pack) {
|
|
524
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
525
|
+
if (ar || !(i in from)) {
|
|
526
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
527
|
+
ar[i] = from[i];
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
531
|
+
};
|
|
532
|
+
var BindOnceFuture = (
|
|
533
|
+
/** @class */
|
|
534
|
+
(function() {
|
|
535
|
+
function BindOnceFuture2(_callback, _that) {
|
|
536
|
+
this._callback = _callback;
|
|
537
|
+
this._that = _that;
|
|
538
|
+
this._isCalled = false;
|
|
539
|
+
this._deferred = new Deferred();
|
|
540
|
+
}
|
|
541
|
+
Object.defineProperty(BindOnceFuture2.prototype, "isCalled", {
|
|
542
|
+
get: function() {
|
|
543
|
+
return this._isCalled;
|
|
544
|
+
},
|
|
545
|
+
enumerable: false,
|
|
546
|
+
configurable: true
|
|
547
|
+
});
|
|
548
|
+
Object.defineProperty(BindOnceFuture2.prototype, "promise", {
|
|
549
|
+
get: function() {
|
|
550
|
+
return this._deferred.promise;
|
|
551
|
+
},
|
|
552
|
+
enumerable: false,
|
|
553
|
+
configurable: true
|
|
554
|
+
});
|
|
555
|
+
BindOnceFuture2.prototype.call = function() {
|
|
556
|
+
var _a;
|
|
557
|
+
var _this = this;
|
|
558
|
+
var args = [];
|
|
559
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
560
|
+
args[_i] = arguments[_i];
|
|
561
|
+
}
|
|
562
|
+
if (!this._isCalled) {
|
|
563
|
+
this._isCalled = true;
|
|
564
|
+
try {
|
|
565
|
+
Promise.resolve((_a = this._callback).call.apply(_a, __spreadArray([this._that], __read(args), false))).then(function(val) {
|
|
566
|
+
return _this._deferred.resolve(val);
|
|
567
|
+
}, function(err) {
|
|
568
|
+
return _this._deferred.reject(err);
|
|
569
|
+
});
|
|
570
|
+
} catch (err) {
|
|
571
|
+
this._deferred.reject(err);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
return this._deferred.promise;
|
|
575
|
+
};
|
|
576
|
+
return BindOnceFuture2;
|
|
577
|
+
})()
|
|
578
|
+
);
|
|
579
|
+
|
|
580
|
+
// node_modules/@opentelemetry/sdk-trace-base/build/esm/export/BatchSpanProcessorBase.js
|
|
581
|
+
import { context, diag as diag2, TraceFlags } from "@opentelemetry/api";
|
|
582
|
+
var BatchSpanProcessorBase = (
|
|
583
|
+
/** @class */
|
|
584
|
+
(function() {
|
|
585
|
+
function BatchSpanProcessorBase2(_exporter, config) {
|
|
586
|
+
this._exporter = _exporter;
|
|
587
|
+
this._isExporting = false;
|
|
588
|
+
this._finishedSpans = [];
|
|
589
|
+
this._droppedSpansCount = 0;
|
|
590
|
+
var env = getEnv();
|
|
591
|
+
this._maxExportBatchSize = typeof (config === null || config === void 0 ? void 0 : config.maxExportBatchSize) === "number" ? config.maxExportBatchSize : env.OTEL_BSP_MAX_EXPORT_BATCH_SIZE;
|
|
592
|
+
this._maxQueueSize = typeof (config === null || config === void 0 ? void 0 : config.maxQueueSize) === "number" ? config.maxQueueSize : env.OTEL_BSP_MAX_QUEUE_SIZE;
|
|
593
|
+
this._scheduledDelayMillis = typeof (config === null || config === void 0 ? void 0 : config.scheduledDelayMillis) === "number" ? config.scheduledDelayMillis : env.OTEL_BSP_SCHEDULE_DELAY;
|
|
594
|
+
this._exportTimeoutMillis = typeof (config === null || config === void 0 ? void 0 : config.exportTimeoutMillis) === "number" ? config.exportTimeoutMillis : env.OTEL_BSP_EXPORT_TIMEOUT;
|
|
595
|
+
this._shutdownOnce = new BindOnceFuture(this._shutdown, this);
|
|
596
|
+
if (this._maxExportBatchSize > this._maxQueueSize) {
|
|
597
|
+
diag2.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize");
|
|
598
|
+
this._maxExportBatchSize = this._maxQueueSize;
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
BatchSpanProcessorBase2.prototype.forceFlush = function() {
|
|
602
|
+
if (this._shutdownOnce.isCalled) {
|
|
603
|
+
return this._shutdownOnce.promise;
|
|
604
|
+
}
|
|
605
|
+
return this._flushAll();
|
|
606
|
+
};
|
|
607
|
+
BatchSpanProcessorBase2.prototype.onStart = function(_span, _parentContext) {
|
|
608
|
+
};
|
|
609
|
+
BatchSpanProcessorBase2.prototype.onEnd = function(span) {
|
|
610
|
+
if (this._shutdownOnce.isCalled) {
|
|
611
|
+
return;
|
|
612
|
+
}
|
|
613
|
+
if ((span.spanContext().traceFlags & TraceFlags.SAMPLED) === 0) {
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
this._addToBuffer(span);
|
|
617
|
+
};
|
|
618
|
+
BatchSpanProcessorBase2.prototype.shutdown = function() {
|
|
619
|
+
return this._shutdownOnce.call();
|
|
620
|
+
};
|
|
621
|
+
BatchSpanProcessorBase2.prototype._shutdown = function() {
|
|
622
|
+
var _this = this;
|
|
623
|
+
return Promise.resolve().then(function() {
|
|
624
|
+
return _this.onShutdown();
|
|
625
|
+
}).then(function() {
|
|
626
|
+
return _this._flushAll();
|
|
627
|
+
}).then(function() {
|
|
628
|
+
return _this._exporter.shutdown();
|
|
629
|
+
});
|
|
630
|
+
};
|
|
631
|
+
BatchSpanProcessorBase2.prototype._addToBuffer = function(span) {
|
|
632
|
+
if (this._finishedSpans.length >= this._maxQueueSize) {
|
|
633
|
+
if (this._droppedSpansCount === 0) {
|
|
634
|
+
diag2.debug("maxQueueSize reached, dropping spans");
|
|
635
|
+
}
|
|
636
|
+
this._droppedSpansCount++;
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
if (this._droppedSpansCount > 0) {
|
|
640
|
+
diag2.warn("Dropped " + this._droppedSpansCount + " spans because maxQueueSize reached");
|
|
641
|
+
this._droppedSpansCount = 0;
|
|
642
|
+
}
|
|
643
|
+
this._finishedSpans.push(span);
|
|
644
|
+
this._maybeStartTimer();
|
|
645
|
+
};
|
|
646
|
+
BatchSpanProcessorBase2.prototype._flushAll = function() {
|
|
647
|
+
var _this = this;
|
|
648
|
+
return new Promise(function(resolve, reject) {
|
|
649
|
+
var promises = [];
|
|
650
|
+
var count = Math.ceil(_this._finishedSpans.length / _this._maxExportBatchSize);
|
|
651
|
+
for (var i = 0, j = count; i < j; i++) {
|
|
652
|
+
promises.push(_this._flushOneBatch());
|
|
653
|
+
}
|
|
654
|
+
Promise.all(promises).then(function() {
|
|
655
|
+
resolve();
|
|
656
|
+
}).catch(reject);
|
|
657
|
+
});
|
|
658
|
+
};
|
|
659
|
+
BatchSpanProcessorBase2.prototype._flushOneBatch = function() {
|
|
660
|
+
var _this = this;
|
|
661
|
+
this._clearTimer();
|
|
662
|
+
if (this._finishedSpans.length === 0) {
|
|
663
|
+
return Promise.resolve();
|
|
664
|
+
}
|
|
665
|
+
return new Promise(function(resolve, reject) {
|
|
666
|
+
var timer = setTimeout(function() {
|
|
667
|
+
reject(new Error("Timeout"));
|
|
668
|
+
}, _this._exportTimeoutMillis);
|
|
669
|
+
context.with(suppressTracing(context.active()), function() {
|
|
670
|
+
var spans;
|
|
671
|
+
if (_this._finishedSpans.length <= _this._maxExportBatchSize) {
|
|
672
|
+
spans = _this._finishedSpans;
|
|
673
|
+
_this._finishedSpans = [];
|
|
674
|
+
} else {
|
|
675
|
+
spans = _this._finishedSpans.splice(0, _this._maxExportBatchSize);
|
|
676
|
+
}
|
|
677
|
+
var doExport = function() {
|
|
678
|
+
return _this._exporter.export(spans, function(result) {
|
|
679
|
+
var _a;
|
|
680
|
+
clearTimeout(timer);
|
|
681
|
+
if (result.code === ExportResultCode.SUCCESS) {
|
|
682
|
+
resolve();
|
|
683
|
+
} else {
|
|
684
|
+
reject((_a = result.error) !== null && _a !== void 0 ? _a : new Error("BatchSpanProcessor: span export failed"));
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
};
|
|
688
|
+
var pendingResources = null;
|
|
689
|
+
for (var i = 0, len = spans.length; i < len; i++) {
|
|
690
|
+
var span = spans[i];
|
|
691
|
+
if (span.resource.asyncAttributesPending && span.resource.waitForAsyncAttributes) {
|
|
692
|
+
pendingResources !== null && pendingResources !== void 0 ? pendingResources : pendingResources = [];
|
|
693
|
+
pendingResources.push(span.resource.waitForAsyncAttributes());
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
if (pendingResources === null) {
|
|
697
|
+
doExport();
|
|
698
|
+
} else {
|
|
699
|
+
Promise.all(pendingResources).then(doExport, function(err) {
|
|
700
|
+
globalErrorHandler(err);
|
|
701
|
+
reject(err);
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
});
|
|
705
|
+
});
|
|
706
|
+
};
|
|
707
|
+
BatchSpanProcessorBase2.prototype._maybeStartTimer = function() {
|
|
708
|
+
var _this = this;
|
|
709
|
+
if (this._isExporting)
|
|
710
|
+
return;
|
|
711
|
+
var flush = function() {
|
|
712
|
+
_this._isExporting = true;
|
|
713
|
+
_this._flushOneBatch().finally(function() {
|
|
714
|
+
_this._isExporting = false;
|
|
715
|
+
if (_this._finishedSpans.length > 0) {
|
|
716
|
+
_this._clearTimer();
|
|
717
|
+
_this._maybeStartTimer();
|
|
718
|
+
}
|
|
719
|
+
}).catch(function(e) {
|
|
720
|
+
_this._isExporting = false;
|
|
721
|
+
globalErrorHandler(e);
|
|
722
|
+
});
|
|
723
|
+
};
|
|
724
|
+
if (this._finishedSpans.length >= this._maxExportBatchSize) {
|
|
725
|
+
return flush();
|
|
726
|
+
}
|
|
727
|
+
if (this._timer !== void 0)
|
|
728
|
+
return;
|
|
729
|
+
this._timer = setTimeout(function() {
|
|
730
|
+
return flush();
|
|
731
|
+
}, this._scheduledDelayMillis);
|
|
732
|
+
unrefTimer(this._timer);
|
|
733
|
+
};
|
|
734
|
+
BatchSpanProcessorBase2.prototype._clearTimer = function() {
|
|
735
|
+
if (this._timer !== void 0) {
|
|
736
|
+
clearTimeout(this._timer);
|
|
737
|
+
this._timer = void 0;
|
|
738
|
+
}
|
|
739
|
+
};
|
|
740
|
+
return BatchSpanProcessorBase2;
|
|
741
|
+
})()
|
|
742
|
+
);
|
|
743
|
+
|
|
744
|
+
// node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/node/export/BatchSpanProcessor.js
|
|
745
|
+
var __extends = /* @__PURE__ */ (function() {
|
|
746
|
+
var extendStatics = function(d, b) {
|
|
747
|
+
extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
|
|
748
|
+
d2.__proto__ = b2;
|
|
749
|
+
} || function(d2, b2) {
|
|
750
|
+
for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
|
|
751
|
+
};
|
|
752
|
+
return extendStatics(d, b);
|
|
753
|
+
};
|
|
754
|
+
return function(d, b) {
|
|
755
|
+
if (typeof b !== "function" && b !== null)
|
|
756
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
757
|
+
extendStatics(d, b);
|
|
758
|
+
function __() {
|
|
759
|
+
this.constructor = d;
|
|
760
|
+
}
|
|
761
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
762
|
+
};
|
|
763
|
+
})();
|
|
764
|
+
var BatchSpanProcessor = (
|
|
765
|
+
/** @class */
|
|
766
|
+
(function(_super) {
|
|
767
|
+
__extends(BatchSpanProcessor2, _super);
|
|
768
|
+
function BatchSpanProcessor2() {
|
|
769
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
770
|
+
}
|
|
771
|
+
BatchSpanProcessor2.prototype.onShutdown = function() {
|
|
772
|
+
};
|
|
773
|
+
return BatchSpanProcessor2;
|
|
774
|
+
})(BatchSpanProcessorBase)
|
|
775
|
+
);
|
|
776
|
+
|
|
777
|
+
// src/otlp.ts
|
|
778
|
+
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
779
|
+
import * as otelApi2 from "@opentelemetry/api";
|
|
780
|
+
function setupOpenInferenceExporter(config = {}) {
|
|
781
|
+
const endpoint = config.endpoint ?? process.env["OTEL_EXPORTER_OTLP_ENDPOINT"] ?? "http://localhost:4318";
|
|
782
|
+
const exporter = new OTLPTraceExporter({
|
|
783
|
+
url: `${endpoint.replace(/\/$/, "")}/v1/traces`,
|
|
784
|
+
headers: config.headers
|
|
785
|
+
});
|
|
786
|
+
const provider = new NodeTracerProvider({
|
|
787
|
+
spanProcessors: [new BatchSpanProcessor(exporter)],
|
|
788
|
+
resource: resourceFromAttributes({
|
|
789
|
+
"service.name": config.serviceName ?? "reactive-agents"
|
|
790
|
+
})
|
|
791
|
+
});
|
|
792
|
+
provider.register();
|
|
793
|
+
otelApi2.trace.setGlobalTracerProvider(provider);
|
|
794
|
+
return {
|
|
795
|
+
async shutdown() {
|
|
796
|
+
await provider.shutdown();
|
|
797
|
+
}
|
|
798
|
+
};
|
|
799
|
+
}
|
|
800
|
+
function autoConfigureExporter(config) {
|
|
801
|
+
if (!process.env["OTEL_EXPORTER_OTLP_ENDPOINT"]) {
|
|
802
|
+
return { shutdown: async () => {
|
|
803
|
+
} };
|
|
804
|
+
}
|
|
805
|
+
return setupOpenInferenceExporter(config);
|
|
806
|
+
}
|
|
807
|
+
export {
|
|
808
|
+
OpenInferenceTracerLayer,
|
|
809
|
+
autoConfigureExporter,
|
|
810
|
+
setupOpenInferenceExporter
|
|
811
|
+
};
|
|
812
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tracer.ts","../src/otlp.ts","../../../node_modules/@opentelemetry/core/src/trace/suppress-tracing.ts","../../../node_modules/@opentelemetry/core/src/common/logging-error-handler.ts","../../../node_modules/@opentelemetry/core/src/common/global-error-handler.ts","../../../node_modules/@opentelemetry/core/src/utils/environment.ts","../../../node_modules/@opentelemetry/core/src/utils/sampling.ts","../../../node_modules/@opentelemetry/core/src/platform/node/environment.ts","../../../node_modules/@opentelemetry/core/src/platform/node/timer-util.ts","../../../node_modules/@opentelemetry/core/src/ExportResult.ts","../../../node_modules/@opentelemetry/core/src/utils/promise.ts","../../../node_modules/@opentelemetry/core/src/utils/callback.ts","../node_modules/@opentelemetry/sdk-trace-base/src/export/BatchSpanProcessorBase.ts","../node_modules/@opentelemetry/sdk-trace-base/src/platform/node/export/BatchSpanProcessor.ts"],"sourcesContent":["import { Effect, Layer } from \"effect\";\nimport * as otelApi from \"@opentelemetry/api\";\nimport { EventBus } from \"@reactive-agents/core\";\n\n// ─── OpenInference semantic attribute keys ───\n\nconst OI = {\n SPAN_KIND: \"openinference.span.kind\",\n INPUT_VALUE: \"input.value\",\n OUTPUT_VALUE: \"output.value\",\n LLM_MODEL_NAME: \"llm.model_name\",\n LLM_PROVIDER: \"llm.provider\",\n LLM_TOKEN_COUNT_PROMPT: \"llm.token_count.prompt\",\n LLM_TOKEN_COUNT_COMPLETION: \"llm.token_count.completion\",\n LLM_TOKEN_COUNT_TOTAL: \"llm.token_count.total\",\n TOOL_NAME: \"tool.name\",\n TOOL_PARAMETERS: \"tool.parameters\",\n TOOL_OUTPUT: \"tool.output\",\n} as const;\n\n// ─── Span kinds ───\n\nconst SpanKind = {\n AGENT: \"AGENT\",\n LLM: \"LLM\",\n TOOL: \"TOOL\",\n} as const;\n\n// ─── State ───\n\ninterface SpanMap {\n /** taskId → root workflow span */\n workflows: Map<string, otelApi.Span>;\n /** requestId → LLM child span */\n llmCalls: Map<string, otelApi.Span>;\n /** callId → tool child span */\n toolCalls: Map<string, otelApi.Span>;\n}\n\nfunction createSpanMap(): SpanMap {\n return {\n workflows: new Map(),\n llmCalls: new Map(),\n toolCalls: new Map(),\n };\n}\n\n// ─── Layer ───\n\nexport const OpenInferenceTracerLayer = Layer.scopedDiscard(\n Effect.gen(function* () {\n const bus = yield* EventBus;\n const tracer = otelApi.trace.getTracer(\"reactive-agents\", \"0.11.0\");\n const spans = createSpanMap();\n\n const unsub = yield* bus.subscribe((event) =>\n Effect.sync(() => {\n switch (event._tag) {\n case \"AgentStarted\": {\n const span = tracer.startSpan(`agent:${event.agentId}`, {\n kind: otelApi.SpanKind.INTERNAL,\n attributes: {\n [OI.SPAN_KIND]: SpanKind.AGENT,\n [OI.LLM_MODEL_NAME]: event.model,\n [OI.LLM_PROVIDER]: event.provider,\n \"agent.id\": event.agentId,\n \"task.id\": event.taskId,\n },\n startTime: event.timestamp,\n });\n spans.workflows.set(event.taskId, span);\n break;\n }\n\n case \"AgentCompleted\": {\n const span = spans.workflows.get(event.taskId);\n if (!span) break;\n span.setAttributes({\n \"agent.iterations\": event.totalIterations,\n [OI.LLM_TOKEN_COUNT_TOTAL]: event.totalTokens,\n \"agent.success\": event.success,\n });\n if (event.error) {\n span.setStatus({\n code: otelApi.SpanStatusCode.ERROR,\n message: event.error,\n });\n span.recordException(new Error(event.error));\n } else {\n span.setStatus({ code: otelApi.SpanStatusCode.OK });\n }\n span.end();\n spans.workflows.delete(event.taskId);\n break;\n }\n\n case \"LLMRequestStarted\": {\n const parentSpan = spans.workflows.get(event.taskId);\n const ctx = parentSpan\n ? otelApi.trace.setSpan(otelApi.ROOT_CONTEXT, parentSpan)\n : otelApi.ROOT_CONTEXT;\n const span = tracer.startSpan(\n `llm:${event.provider}/${event.model}`,\n {\n kind: otelApi.SpanKind.CLIENT,\n attributes: {\n [OI.SPAN_KIND]: SpanKind.LLM,\n [OI.LLM_MODEL_NAME]: event.model,\n [OI.LLM_PROVIDER]: event.provider,\n [OI.LLM_TOKEN_COUNT_PROMPT]: event.contextSize,\n \"task.id\": event.taskId,\n \"request.id\": event.requestId,\n },\n },\n ctx,\n );\n spans.llmCalls.set(event.requestId, span);\n break;\n }\n\n case \"LLMRequestCompleted\": {\n const span = spans.llmCalls.get(event.requestId);\n if (!span) break;\n const tokensIn =\n event.tokensIn ?? Math.round(event.tokensUsed * 0.7);\n const tokensOut =\n event.tokensOut ?? Math.round(event.tokensUsed * 0.3);\n span.setAttributes({\n [OI.LLM_TOKEN_COUNT_PROMPT]: tokensIn,\n [OI.LLM_TOKEN_COUNT_COMPLETION]: tokensOut,\n [OI.LLM_TOKEN_COUNT_TOTAL]: event.tokensUsed,\n \"llm.duration_ms\": event.durationMs,\n \"llm.estimated_cost_usd\": event.estimatedCost,\n });\n if (event.cached) {\n span.setAttribute(\"llm.cached\", true);\n }\n span.setStatus({ code: otelApi.SpanStatusCode.OK });\n span.end();\n spans.llmCalls.delete(event.requestId);\n break;\n }\n\n case \"ToolCallStarted\": {\n const parentSpan = spans.workflows.get(event.taskId);\n const ctx = parentSpan\n ? otelApi.trace.setSpan(otelApi.ROOT_CONTEXT, parentSpan)\n : otelApi.ROOT_CONTEXT;\n const span = tracer.startSpan(\n `tool:${event.toolName}`,\n {\n kind: otelApi.SpanKind.INTERNAL,\n attributes: {\n [OI.SPAN_KIND]: SpanKind.TOOL,\n [OI.TOOL_NAME]: event.toolName,\n \"task.id\": event.taskId,\n \"tool.call_id\": event.callId,\n },\n startTime: event.timestamp ?? Date.now(),\n },\n ctx,\n );\n if (event.iteration !== undefined) {\n span.setAttribute(\"agent.iteration\", event.iteration);\n }\n spans.toolCalls.set(event.callId, span);\n break;\n }\n\n case \"ToolCallCompleted\": {\n const span = spans.toolCalls.get(event.callId);\n if (!span) break;\n span.setAttributes({\n \"tool.duration_ms\": event.durationMs,\n \"tool.success\": event.success,\n });\n if (event.args !== undefined) {\n span.setAttribute(\n OI.TOOL_PARAMETERS,\n JSON.stringify(event.args),\n );\n }\n if (event.result !== undefined) {\n span.setAttribute(OI.TOOL_OUTPUT, JSON.stringify(event.result));\n }\n if (!event.success && event.error) {\n span.setStatus({\n code: otelApi.SpanStatusCode.ERROR,\n message: event.error,\n });\n span.recordException(new Error(event.error));\n } else {\n span.setStatus({ code: otelApi.SpanStatusCode.OK });\n }\n span.end();\n spans.toolCalls.delete(event.callId);\n break;\n }\n\n default:\n break;\n }\n }),\n );\n\n // Clean up subscription when layer is released\n return yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n unsub();\n // End any leaked spans\n for (const span of spans.workflows.values()) span.end();\n for (const span of spans.llmCalls.values()) span.end();\n for (const span of spans.toolCalls.values()) span.end();\n spans.workflows.clear();\n spans.llmCalls.clear();\n spans.toolCalls.clear();\n }),\n );\n }),\n);\n","import { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { BatchSpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport * as otelApi from \"@opentelemetry/api\";\n\nexport interface OpenInferenceExporterConfig {\n /** OTLP endpoint URL. Defaults to OTEL_EXPORTER_OTLP_ENDPOINT env var, then http://localhost:4318 */\n endpoint?: string;\n /** Additional HTTP headers (auth tokens, etc.) */\n headers?: Record<string, string>;\n /** Service name reported to backend. Defaults to \"reactive-agents\" */\n serviceName?: string;\n}\n\nexport interface ExporterHandle {\n /** Flush pending spans and shut down the exporter. */\n shutdown(): Promise<void>;\n}\n\n/**\n * Wire up an OTLP HTTP exporter that emits OpenInference-attributed spans.\n *\n * Call this once at process start, before running any agents.\n *\n * @example\n * ```typescript\n * const handle = setupOpenInferenceExporter({ serviceName: \"my-agent\" });\n * // ... run agents ...\n * await handle.shutdown();\n * ```\n */\nexport function setupOpenInferenceExporter(\n config: OpenInferenceExporterConfig = {},\n): ExporterHandle {\n const endpoint =\n config.endpoint ??\n process.env[\"OTEL_EXPORTER_OTLP_ENDPOINT\"] ??\n \"http://localhost:4318\";\n\n const exporter = new OTLPTraceExporter({\n url: `${endpoint.replace(/\\/$/, \"\")}/v1/traces`,\n headers: config.headers,\n });\n\n const provider = new NodeTracerProvider({\n spanProcessors: [new BatchSpanProcessor(exporter)],\n resource: resourceFromAttributes({\n \"service.name\": config.serviceName ?? \"reactive-agents\",\n }),\n });\n\n provider.register();\n otelApi.trace.setGlobalTracerProvider(provider);\n\n return {\n async shutdown() {\n await provider.shutdown();\n },\n };\n}\n\n/**\n * Auto-configure OTLP export if OTEL_EXPORTER_OTLP_ENDPOINT is set.\n * No-op otherwise. Returns handle (shutdown is safe to call even if no-op).\n */\nexport function autoConfigureExporter(\n config?: Omit<OpenInferenceExporterConfig, \"endpoint\">,\n): ExporterHandle {\n if (!process.env[\"OTEL_EXPORTER_OTLP_ENDPOINT\"]) {\n return { shutdown: async () => {} };\n }\n return setupOpenInferenceExporter(config);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context, createContextKey } from '@opentelemetry/api';\n\nconst SUPPRESS_TRACING_KEY = createContextKey(\n 'OpenTelemetry SDK Context Key SUPPRESS_TRACING'\n);\n\nexport function suppressTracing(context: Context): Context {\n return context.setValue(SUPPRESS_TRACING_KEY, true);\n}\n\nexport function unsuppressTracing(context: Context): Context {\n return context.deleteValue(SUPPRESS_TRACING_KEY);\n}\n\nexport function isTracingSuppressed(context: Context): boolean {\n return context.getValue(SUPPRESS_TRACING_KEY) === true;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { diag, Exception } from '@opentelemetry/api';\nimport { ErrorHandler } from './types';\n\n/**\n * Returns a function that logs an error using the provided logger, or a\n * console logger if one was not provided.\n */\nexport function loggingErrorHandler(): ErrorHandler {\n return (ex: Exception) => {\n diag.error(stringifyException(ex));\n };\n}\n\n/**\n * Converts an exception into a string representation\n * @param {Exception} ex\n */\nfunction stringifyException(ex: Exception | string): string {\n if (typeof ex === 'string') {\n return ex;\n } else {\n return JSON.stringify(flattenException(ex));\n }\n}\n\n/**\n * Flattens an exception into key-value pairs by traversing the prototype chain\n * and coercing values to strings. Duplicate properties will not be overwritten;\n * the first insert wins.\n */\nfunction flattenException(ex: Exception): Record<string, string> {\n const result = {} as Record<string, string>;\n let current = ex;\n\n while (current !== null) {\n Object.getOwnPropertyNames(current).forEach(propertyName => {\n if (result[propertyName]) return;\n const value = current[propertyName as keyof typeof current];\n if (value) {\n result[propertyName] = String(value);\n }\n });\n current = Object.getPrototypeOf(current);\n }\n\n return result;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Exception } from '@opentelemetry/api';\nimport { loggingErrorHandler } from './logging-error-handler';\nimport { ErrorHandler } from './types';\n\n/** The global error handler delegate */\nlet delegateHandler = loggingErrorHandler();\n\n/**\n * Set the global error handler\n * @param {ErrorHandler} handler\n */\nexport function setGlobalErrorHandler(handler: ErrorHandler): void {\n delegateHandler = handler;\n}\n\n/**\n * Return the global error handler\n * @param {Exception} ex\n */\nexport function globalErrorHandler(ex: Exception): void {\n try {\n delegateHandler(ex);\n } catch {} // eslint-disable-line no-empty\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagLogLevel } from '@opentelemetry/api';\nimport { TracesSamplerValues } from './sampling';\n\nconst DEFAULT_LIST_SEPARATOR = ',';\n\n/**\n * Environment interface to define all names\n */\n\nconst ENVIRONMENT_BOOLEAN_KEYS = ['OTEL_SDK_DISABLED'] as const;\n\ntype ENVIRONMENT_BOOLEANS = {\n [K in (typeof ENVIRONMENT_BOOLEAN_KEYS)[number]]?: boolean;\n};\n\nfunction isEnvVarABoolean(key: unknown): key is keyof ENVIRONMENT_BOOLEANS {\n return (\n ENVIRONMENT_BOOLEAN_KEYS.indexOf(key as keyof ENVIRONMENT_BOOLEANS) > -1\n );\n}\n\nconst ENVIRONMENT_NUMBERS_KEYS = [\n 'OTEL_BSP_EXPORT_TIMEOUT',\n 'OTEL_BSP_MAX_EXPORT_BATCH_SIZE',\n 'OTEL_BSP_MAX_QUEUE_SIZE',\n 'OTEL_BSP_SCHEDULE_DELAY',\n 'OTEL_BLRP_EXPORT_TIMEOUT',\n 'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE',\n 'OTEL_BLRP_MAX_QUEUE_SIZE',\n 'OTEL_BLRP_SCHEDULE_DELAY',\n 'OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT',\n 'OTEL_ATTRIBUTE_COUNT_LIMIT',\n 'OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT',\n 'OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT',\n 'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT',\n 'OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT',\n 'OTEL_SPAN_EVENT_COUNT_LIMIT',\n 'OTEL_SPAN_LINK_COUNT_LIMIT',\n 'OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT',\n 'OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT',\n 'OTEL_EXPORTER_OTLP_TIMEOUT',\n 'OTEL_EXPORTER_OTLP_TRACES_TIMEOUT',\n 'OTEL_EXPORTER_OTLP_METRICS_TIMEOUT',\n 'OTEL_EXPORTER_OTLP_LOGS_TIMEOUT',\n 'OTEL_EXPORTER_JAEGER_AGENT_PORT',\n] as const;\n\ntype ENVIRONMENT_NUMBERS = {\n [K in (typeof ENVIRONMENT_NUMBERS_KEYS)[number]]?: number;\n};\n\nfunction isEnvVarANumber(key: unknown): key is keyof ENVIRONMENT_NUMBERS {\n return (\n ENVIRONMENT_NUMBERS_KEYS.indexOf(key as keyof ENVIRONMENT_NUMBERS) > -1\n );\n}\n\nconst ENVIRONMENT_LISTS_KEYS = [\n 'OTEL_NO_PATCH_MODULES',\n 'OTEL_PROPAGATORS',\n 'OTEL_SEMCONV_STABILITY_OPT_IN',\n] as const;\n\ntype ENVIRONMENT_LISTS = {\n [K in (typeof ENVIRONMENT_LISTS_KEYS)[number]]?: string[];\n};\n\nfunction isEnvVarAList(key: unknown): key is keyof ENVIRONMENT_LISTS {\n return ENVIRONMENT_LISTS_KEYS.indexOf(key as keyof ENVIRONMENT_LISTS) > -1;\n}\n\nexport type ENVIRONMENT = {\n CONTAINER_NAME?: string;\n ECS_CONTAINER_METADATA_URI_V4?: string;\n ECS_CONTAINER_METADATA_URI?: string;\n HOSTNAME?: string;\n KUBERNETES_SERVICE_HOST?: string;\n NAMESPACE?: string;\n OTEL_EXPORTER_JAEGER_AGENT_HOST?: string;\n OTEL_EXPORTER_JAEGER_ENDPOINT?: string;\n OTEL_EXPORTER_JAEGER_PASSWORD?: string;\n OTEL_EXPORTER_JAEGER_USER?: string;\n OTEL_EXPORTER_OTLP_ENDPOINT?: string;\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT?: string;\n OTEL_EXPORTER_OTLP_METRICS_ENDPOINT?: string;\n OTEL_EXPORTER_OTLP_LOGS_ENDPOINT?: string;\n OTEL_EXPORTER_OTLP_HEADERS?: string;\n OTEL_EXPORTER_OTLP_TRACES_HEADERS?: string;\n OTEL_EXPORTER_OTLP_METRICS_HEADERS?: string;\n OTEL_EXPORTER_OTLP_LOGS_HEADERS?: string;\n OTEL_EXPORTER_ZIPKIN_ENDPOINT?: string;\n OTEL_LOG_LEVEL?: DiagLogLevel;\n OTEL_RESOURCE_ATTRIBUTES?: string;\n OTEL_SERVICE_NAME?: string;\n OTEL_TRACES_EXPORTER?: string;\n OTEL_TRACES_SAMPLER_ARG?: string;\n OTEL_TRACES_SAMPLER?: string;\n OTEL_LOGS_EXPORTER?: string;\n OTEL_EXPORTER_OTLP_INSECURE?: string;\n OTEL_EXPORTER_OTLP_TRACES_INSECURE?: string;\n OTEL_EXPORTER_OTLP_METRICS_INSECURE?: string;\n OTEL_EXPORTER_OTLP_LOGS_INSECURE?: string;\n OTEL_EXPORTER_OTLP_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_COMPRESSION?: string;\n OTEL_EXPORTER_OTLP_TRACES_COMPRESSION?: string;\n OTEL_EXPORTER_OTLP_METRICS_COMPRESSION?: string;\n OTEL_EXPORTER_OTLP_LOGS_COMPRESSION?: string;\n OTEL_EXPORTER_OTLP_CLIENT_KEY?: string;\n OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY?: string;\n OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY?: string;\n OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY?: string;\n OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE?: string;\n OTEL_EXPORTER_OTLP_PROTOCOL?: string;\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL?: string;\n OTEL_EXPORTER_OTLP_METRICS_PROTOCOL?: string;\n OTEL_EXPORTER_OTLP_LOGS_PROTOCOL?: string;\n OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE?: string;\n} & ENVIRONMENT_BOOLEANS &\n ENVIRONMENT_NUMBERS &\n ENVIRONMENT_LISTS;\n\nexport type RAW_ENVIRONMENT = {\n [key: string]: string | number | undefined | string[];\n};\n\nexport const DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity;\n\nexport const DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128;\n\nexport const DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT = 128;\nexport const DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT = 128;\n\n/**\n * Default environment variables\n */\nexport const DEFAULT_ENVIRONMENT: Required<ENVIRONMENT> = {\n OTEL_SDK_DISABLED: false,\n CONTAINER_NAME: '',\n ECS_CONTAINER_METADATA_URI_V4: '',\n ECS_CONTAINER_METADATA_URI: '',\n HOSTNAME: '',\n KUBERNETES_SERVICE_HOST: '',\n NAMESPACE: '',\n OTEL_BSP_EXPORT_TIMEOUT: 30000,\n OTEL_BSP_MAX_EXPORT_BATCH_SIZE: 512,\n OTEL_BSP_MAX_QUEUE_SIZE: 2048,\n OTEL_BSP_SCHEDULE_DELAY: 5000,\n OTEL_BLRP_EXPORT_TIMEOUT: 30000,\n OTEL_BLRP_MAX_EXPORT_BATCH_SIZE: 512,\n OTEL_BLRP_MAX_QUEUE_SIZE: 2048,\n OTEL_BLRP_SCHEDULE_DELAY: 5000,\n OTEL_EXPORTER_JAEGER_AGENT_HOST: '',\n OTEL_EXPORTER_JAEGER_AGENT_PORT: 6832,\n OTEL_EXPORTER_JAEGER_ENDPOINT: '',\n OTEL_EXPORTER_JAEGER_PASSWORD: '',\n OTEL_EXPORTER_JAEGER_USER: '',\n OTEL_EXPORTER_OTLP_ENDPOINT: '',\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: '',\n OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',\n OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: '',\n OTEL_EXPORTER_OTLP_HEADERS: '',\n OTEL_EXPORTER_OTLP_TRACES_HEADERS: '',\n OTEL_EXPORTER_OTLP_METRICS_HEADERS: '',\n OTEL_EXPORTER_OTLP_LOGS_HEADERS: '',\n OTEL_EXPORTER_OTLP_TIMEOUT: 10000,\n OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: 10000,\n OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: 10000,\n OTEL_EXPORTER_OTLP_LOGS_TIMEOUT: 10000,\n OTEL_EXPORTER_ZIPKIN_ENDPOINT: 'http://localhost:9411/api/v2/spans',\n OTEL_LOG_LEVEL: DiagLogLevel.INFO,\n OTEL_NO_PATCH_MODULES: [],\n OTEL_PROPAGATORS: ['tracecontext', 'baggage'],\n OTEL_RESOURCE_ATTRIBUTES: '',\n OTEL_SERVICE_NAME: '',\n OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT: DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n OTEL_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,\n OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,\n OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:\n DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,\n OTEL_SPAN_EVENT_COUNT_LIMIT: 128,\n OTEL_SPAN_LINK_COUNT_LIMIT: 128,\n OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:\n DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,\n OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:\n DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT,\n OTEL_TRACES_EXPORTER: '',\n OTEL_TRACES_SAMPLER: TracesSamplerValues.ParentBasedAlwaysOn,\n OTEL_TRACES_SAMPLER_ARG: '',\n OTEL_LOGS_EXPORTER: '',\n OTEL_EXPORTER_OTLP_INSECURE: '',\n OTEL_EXPORTER_OTLP_TRACES_INSECURE: '',\n OTEL_EXPORTER_OTLP_METRICS_INSECURE: '',\n OTEL_EXPORTER_OTLP_LOGS_INSECURE: '',\n OTEL_EXPORTER_OTLP_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_COMPRESSION: '',\n OTEL_EXPORTER_OTLP_TRACES_COMPRESSION: '',\n OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: '',\n OTEL_EXPORTER_OTLP_LOGS_COMPRESSION: '',\n OTEL_EXPORTER_OTLP_CLIENT_KEY: '',\n OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY: '',\n OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY: '',\n OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY: '',\n OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE: '',\n OTEL_EXPORTER_OTLP_PROTOCOL: 'http/protobuf',\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: 'http/protobuf',\n OTEL_EXPORTER_OTLP_METRICS_PROTOCOL: 'http/protobuf',\n OTEL_EXPORTER_OTLP_LOGS_PROTOCOL: 'http/protobuf',\n OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: 'cumulative',\n OTEL_SEMCONV_STABILITY_OPT_IN: [],\n};\n\n/**\n * @param key\n * @param environment\n * @param values\n */\nfunction parseBoolean(\n key: keyof ENVIRONMENT_BOOLEANS,\n environment: ENVIRONMENT,\n values: RAW_ENVIRONMENT\n) {\n if (typeof values[key] === 'undefined') {\n return;\n }\n\n const value = String(values[key]);\n // support case-insensitive \"true\"\n environment[key] = value.toLowerCase() === 'true';\n}\n\n/**\n * Parses a variable as number with number validation\n * @param name\n * @param environment\n * @param values\n * @param min\n * @param max\n */\nfunction parseNumber(\n name: keyof ENVIRONMENT_NUMBERS,\n environment: ENVIRONMENT,\n values: RAW_ENVIRONMENT,\n min = -Infinity,\n max = Infinity\n) {\n if (typeof values[name] !== 'undefined') {\n const value = Number(values[name] as string);\n if (!isNaN(value)) {\n if (value < min) {\n environment[name] = min;\n } else if (value > max) {\n environment[name] = max;\n } else {\n environment[name] = value;\n }\n }\n }\n}\n\n/**\n * Parses list-like strings from input into output.\n * @param name\n * @param environment\n * @param values\n * @param separator\n */\nfunction parseStringList(\n name: keyof ENVIRONMENT_LISTS,\n output: ENVIRONMENT,\n input: RAW_ENVIRONMENT,\n separator = DEFAULT_LIST_SEPARATOR\n) {\n const givenValue = input[name];\n if (typeof givenValue === 'string') {\n output[name] = givenValue.split(separator).map(v => v.trim());\n }\n}\n\n// The support string -> DiagLogLevel mappings\nconst logLevelMap: { [key: string]: DiagLogLevel } = {\n ALL: DiagLogLevel.ALL,\n VERBOSE: DiagLogLevel.VERBOSE,\n DEBUG: DiagLogLevel.DEBUG,\n INFO: DiagLogLevel.INFO,\n WARN: DiagLogLevel.WARN,\n ERROR: DiagLogLevel.ERROR,\n NONE: DiagLogLevel.NONE,\n};\n\n/**\n * Environmentally sets log level if valid log level string is provided\n * @param key\n * @param environment\n * @param values\n */\nfunction setLogLevelFromEnv(\n key: keyof ENVIRONMENT,\n environment: RAW_ENVIRONMENT | ENVIRONMENT,\n values: RAW_ENVIRONMENT\n) {\n const value = values[key];\n if (typeof value === 'string') {\n const theLevel = logLevelMap[value.toUpperCase()];\n if (theLevel != null) {\n environment[key] = theLevel;\n }\n }\n}\n\n/**\n * Parses environment values\n * @param values\n */\nexport function parseEnvironment(values: RAW_ENVIRONMENT): ENVIRONMENT {\n const environment: ENVIRONMENT = {};\n\n for (const env in DEFAULT_ENVIRONMENT) {\n const key = env as keyof ENVIRONMENT;\n\n switch (key) {\n case 'OTEL_LOG_LEVEL':\n setLogLevelFromEnv(key, environment, values);\n break;\n\n default:\n if (isEnvVarABoolean(key)) {\n parseBoolean(key, environment, values);\n } else if (isEnvVarANumber(key)) {\n parseNumber(key, environment, values);\n } else if (isEnvVarAList(key)) {\n parseStringList(key, environment, values);\n } else {\n const value = values[key];\n if (typeof value !== 'undefined' && value !== null) {\n environment[key] = String(value);\n }\n }\n }\n }\n\n return environment;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum TracesSamplerValues {\n AlwaysOff = 'always_off',\n AlwaysOn = 'always_on',\n ParentBasedAlwaysOff = 'parentbased_always_off',\n ParentBasedAlwaysOn = 'parentbased_always_on',\n ParentBasedTraceIdRatio = 'parentbased_traceidratio',\n TraceIdRatio = 'traceidratio',\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n DEFAULT_ENVIRONMENT,\n ENVIRONMENT,\n RAW_ENVIRONMENT,\n parseEnvironment,\n} from '../../utils/environment';\n\n/**\n * Gets the environment variables\n */\nexport function getEnv(): Required<ENVIRONMENT> {\n const processEnv = parseEnvironment(process.env as RAW_ENVIRONMENT);\n return Object.assign({}, DEFAULT_ENVIRONMENT, processEnv);\n}\n\nexport function getEnvWithoutDefaults(): ENVIRONMENT {\n return parseEnvironment(process.env as RAW_ENVIRONMENT);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function unrefTimer(timer: NodeJS.Timer): void {\n timer.unref();\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface ExportResult {\n code: ExportResultCode;\n error?: Error;\n}\n\nexport enum ExportResultCode {\n SUCCESS,\n FAILED,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class Deferred<T> {\n private _promise: Promise<T>;\n private _resolve!: (val: T) => void;\n private _reject!: (error: unknown) => void;\n constructor() {\n this._promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n get promise() {\n return this._promise;\n }\n\n resolve(val: T) {\n this._resolve(val);\n }\n\n reject(err: unknown) {\n this._reject(err);\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Deferred } from './promise';\n\n/**\n * Bind the callback and only invoke the callback once regardless how many times `BindOnceFuture.call` is invoked.\n */\nexport class BindOnceFuture<\n R,\n This = unknown,\n T extends (this: This, ...args: unknown[]) => R = () => R,\n> {\n private _isCalled = false;\n private _deferred = new Deferred<R>();\n constructor(\n private _callback: T,\n private _that: This\n ) {}\n\n get isCalled() {\n return this._isCalled;\n }\n\n get promise() {\n return this._deferred.promise;\n }\n\n call(...args: Parameters<T>): Promise<R> {\n if (!this._isCalled) {\n this._isCalled = true;\n try {\n Promise.resolve(this._callback.call(this._that, ...args)).then(\n val => this._deferred.resolve(val),\n err => this._deferred.reject(err)\n );\n } catch (err) {\n this._deferred.reject(err);\n }\n }\n return this._deferred.promise;\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { context, Context, diag, TraceFlags } from '@opentelemetry/api';\nimport {\n BindOnceFuture,\n ExportResultCode,\n getEnv,\n globalErrorHandler,\n suppressTracing,\n unrefTimer,\n} from '@opentelemetry/core';\nimport { Span } from '../Span';\nimport { SpanProcessor } from '../SpanProcessor';\nimport { BufferConfig } from '../types';\nimport { ReadableSpan } from './ReadableSpan';\nimport { SpanExporter } from './SpanExporter';\n\n/**\n * Implementation of the {@link SpanProcessor} that batches spans exported by\n * the SDK then pushes them to the exporter pipeline.\n */\nexport abstract class BatchSpanProcessorBase<T extends BufferConfig>\n implements SpanProcessor\n{\n private readonly _maxExportBatchSize: number;\n private readonly _maxQueueSize: number;\n private readonly _scheduledDelayMillis: number;\n private readonly _exportTimeoutMillis: number;\n\n private _isExporting = false;\n private _finishedSpans: ReadableSpan[] = [];\n private _timer: NodeJS.Timeout | undefined;\n private _shutdownOnce: BindOnceFuture<void>;\n private _droppedSpansCount: number = 0;\n\n constructor(\n private readonly _exporter: SpanExporter,\n config?: T\n ) {\n const env = getEnv();\n this._maxExportBatchSize =\n typeof config?.maxExportBatchSize === 'number'\n ? config.maxExportBatchSize\n : env.OTEL_BSP_MAX_EXPORT_BATCH_SIZE;\n this._maxQueueSize =\n typeof config?.maxQueueSize === 'number'\n ? config.maxQueueSize\n : env.OTEL_BSP_MAX_QUEUE_SIZE;\n this._scheduledDelayMillis =\n typeof config?.scheduledDelayMillis === 'number'\n ? config.scheduledDelayMillis\n : env.OTEL_BSP_SCHEDULE_DELAY;\n this._exportTimeoutMillis =\n typeof config?.exportTimeoutMillis === 'number'\n ? config.exportTimeoutMillis\n : env.OTEL_BSP_EXPORT_TIMEOUT;\n\n this._shutdownOnce = new BindOnceFuture(this._shutdown, this);\n\n if (this._maxExportBatchSize > this._maxQueueSize) {\n diag.warn(\n 'BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize'\n );\n this._maxExportBatchSize = this._maxQueueSize;\n }\n }\n\n forceFlush(): Promise<void> {\n if (this._shutdownOnce.isCalled) {\n return this._shutdownOnce.promise;\n }\n return this._flushAll();\n }\n\n // does nothing.\n onStart(_span: Span, _parentContext: Context): void {}\n\n onEnd(span: ReadableSpan): void {\n if (this._shutdownOnce.isCalled) {\n return;\n }\n\n if ((span.spanContext().traceFlags & TraceFlags.SAMPLED) === 0) {\n return;\n }\n\n this._addToBuffer(span);\n }\n\n shutdown(): Promise<void> {\n return this._shutdownOnce.call();\n }\n\n private _shutdown() {\n return Promise.resolve()\n .then(() => {\n return this.onShutdown();\n })\n .then(() => {\n return this._flushAll();\n })\n .then(() => {\n return this._exporter.shutdown();\n });\n }\n\n /** Add a span in the buffer. */\n private _addToBuffer(span: ReadableSpan) {\n if (this._finishedSpans.length >= this._maxQueueSize) {\n // limit reached, drop span\n\n if (this._droppedSpansCount === 0) {\n diag.debug('maxQueueSize reached, dropping spans');\n }\n this._droppedSpansCount++;\n\n return;\n }\n\n if (this._droppedSpansCount > 0) {\n // some spans were dropped, log once with count of spans dropped\n diag.warn(\n `Dropped ${this._droppedSpansCount} spans because maxQueueSize reached`\n );\n this._droppedSpansCount = 0;\n }\n\n this._finishedSpans.push(span);\n this._maybeStartTimer();\n }\n\n /**\n * Send all spans to the exporter respecting the batch size limit\n * This function is used only on forceFlush or shutdown,\n * for all other cases _flush should be used\n * */\n private _flushAll(): Promise<void> {\n return new Promise((resolve, reject) => {\n const promises = [];\n // calculate number of batches\n const count = Math.ceil(\n this._finishedSpans.length / this._maxExportBatchSize\n );\n for (let i = 0, j = count; i < j; i++) {\n promises.push(this._flushOneBatch());\n }\n Promise.all(promises)\n .then(() => {\n resolve();\n })\n .catch(reject);\n });\n }\n\n private _flushOneBatch(): Promise<void> {\n this._clearTimer();\n if (this._finishedSpans.length === 0) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n // don't wait anymore for export, this way the next batch can start\n reject(new Error('Timeout'));\n }, this._exportTimeoutMillis);\n // prevent downstream exporter calls from generating spans\n context.with(suppressTracing(context.active()), () => {\n // Reset the finished spans buffer here because the next invocations of the _flush method\n // could pass the same finished spans to the exporter if the buffer is cleared\n // outside the execution of this callback.\n let spans: ReadableSpan[];\n if (this._finishedSpans.length <= this._maxExportBatchSize) {\n spans = this._finishedSpans;\n this._finishedSpans = [];\n } else {\n spans = this._finishedSpans.splice(0, this._maxExportBatchSize);\n }\n\n const doExport = () =>\n this._exporter.export(spans, result => {\n clearTimeout(timer);\n if (result.code === ExportResultCode.SUCCESS) {\n resolve();\n } else {\n reject(\n result.error ??\n new Error('BatchSpanProcessor: span export failed')\n );\n }\n });\n\n let pendingResources: Array<Promise<void>> | null = null;\n for (let i = 0, len = spans.length; i < len; i++) {\n const span = spans[i];\n if (\n span.resource.asyncAttributesPending &&\n span.resource.waitForAsyncAttributes\n ) {\n pendingResources ??= [];\n pendingResources.push(span.resource.waitForAsyncAttributes());\n }\n }\n\n // Avoid scheduling a promise to make the behavior more predictable and easier to test\n if (pendingResources === null) {\n doExport();\n } else {\n Promise.all(pendingResources).then(doExport, err => {\n globalErrorHandler(err);\n reject(err);\n });\n }\n });\n });\n }\n\n private _maybeStartTimer() {\n if (this._isExporting) return;\n const flush = () => {\n this._isExporting = true;\n this._flushOneBatch()\n .finally(() => {\n this._isExporting = false;\n if (this._finishedSpans.length > 0) {\n this._clearTimer();\n this._maybeStartTimer();\n }\n })\n .catch(e => {\n this._isExporting = false;\n globalErrorHandler(e);\n });\n };\n // we only wait if the queue doesn't have enough elements yet\n if (this._finishedSpans.length >= this._maxExportBatchSize) {\n return flush();\n }\n if (this._timer !== undefined) return;\n this._timer = setTimeout(() => flush(), this._scheduledDelayMillis);\n unrefTimer(this._timer);\n }\n\n private _clearTimer() {\n if (this._timer !== undefined) {\n clearTimeout(this._timer);\n this._timer = undefined;\n }\n }\n\n protected abstract onShutdown(): void;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BatchSpanProcessorBase } from '../../../export/BatchSpanProcessorBase';\nimport { BufferConfig } from '../../../types';\n\nexport class BatchSpanProcessor extends BatchSpanProcessorBase<BufferConfig> {\n protected onShutdown(): void {}\n}\n"],"mappings":"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","names":["SpanKind","context","TracesSamplerValues","ExportResultCode","Deferred","BindOnceFuture","diag","BatchSpanProcessorBase","diag","BatchSpanProcessor","otelApi"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@reactive-agents/observe",
|
|
3
|
+
"version": "0.11.0",
|
|
4
|
+
"description": "OpenInference-compliant OpenTelemetry tracing for reactive-agents — maps AgentEvent stream to semantic spans",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "tsup --config ../../tsup.config.base.ts",
|
|
8
|
+
"typecheck": "tsc --noEmit",
|
|
9
|
+
"test": "bun test --reporter=dots",
|
|
10
|
+
"test:watch": "bun test --watch"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@opentelemetry/api": "^1.9.0",
|
|
14
|
+
"@opentelemetry/sdk-trace-node": "^1.30.1",
|
|
15
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.57.2",
|
|
16
|
+
"@opentelemetry/resources": "^2.6.0",
|
|
17
|
+
"@reactive-agents/core": "0.11.0",
|
|
18
|
+
"effect": "^3.10.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@opentelemetry/sdk-trace-base": "^1.30.1",
|
|
22
|
+
"typescript": "^6.0.3",
|
|
23
|
+
"bun-types": "latest"
|
|
24
|
+
},
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/tylerjrbuell/reactive-agents-ts.git",
|
|
29
|
+
"directory": "packages/observe"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"exports": {
|
|
40
|
+
".": {
|
|
41
|
+
"bun": "./dist/index.js",
|
|
42
|
+
"import": "./dist/index.js",
|
|
43
|
+
"types": "./dist/index.d.ts"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://docs.reactiveagents.dev/",
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/tylerjrbuell/reactive-agents-ts/issues"
|
|
49
|
+
}
|
|
50
|
+
}
|