veryfront 0.1.925 → 0.1.926
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/esm/deno.js +1 -1
- package/esm/extensions/ext-observability-opentelemetry/src/index.d.ts +11 -8
- package/esm/extensions/ext-observability-opentelemetry/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-observability-opentelemetry/src/index.js +113 -49
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
package/esm/deno.js
CHANGED
|
@@ -7,6 +7,13 @@ import type { NodeTelemetryInitializeOptions, NodeTelemetryProvider, SpanData, T
|
|
|
7
7
|
interface ShimTracerProvider {
|
|
8
8
|
getTracer(name: string, version?: string): unknown;
|
|
9
9
|
}
|
|
10
|
+
type MetricsAPI = {
|
|
11
|
+
getMeter(name: string | undefined, version?: string): unknown;
|
|
12
|
+
};
|
|
13
|
+
type TraceAPI = {
|
|
14
|
+
getActiveSpan(): unknown;
|
|
15
|
+
getSpan(ctx: unknown): unknown;
|
|
16
|
+
};
|
|
10
17
|
type EnvReader = (name: string) => string | undefined;
|
|
11
18
|
export interface ResolvedOtlpExtensionConfig {
|
|
12
19
|
serviceName: string;
|
|
@@ -23,18 +30,14 @@ export declare function resolveOtlpExtensionConfig(read?: EnvReader): ResolvedOt
|
|
|
23
30
|
declare class OtlpTracingExporter implements TracingExporter {
|
|
24
31
|
private sdkProvider;
|
|
25
32
|
private meterProvider;
|
|
26
|
-
private
|
|
33
|
+
private metricsApi;
|
|
34
|
+
private traceApi;
|
|
27
35
|
start(_ctxConfig: Record<string, unknown>): Promise<void>;
|
|
28
36
|
export(_spans: SpanData[]): Promise<void>;
|
|
29
37
|
shutdown(): Promise<void>;
|
|
30
38
|
getProvider(): ShimTracerProvider;
|
|
31
|
-
getMetricsAPI():
|
|
32
|
-
|
|
33
|
-
} | null;
|
|
34
|
-
getTraceAPI(): {
|
|
35
|
-
getActiveSpan(): unknown;
|
|
36
|
-
getSpan(ctx: unknown): unknown;
|
|
37
|
-
} | null;
|
|
39
|
+
getMetricsAPI(): MetricsAPI | null;
|
|
40
|
+
getTraceAPI(): TraceAPI | null;
|
|
38
41
|
}
|
|
39
42
|
declare class OpenTelemetryNodeTelemetryProvider implements NodeTelemetryProvider {
|
|
40
43
|
private sdk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-observability-opentelemetry/src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EACV,8BAA8B,EAC9B,qBAAqB,EACrB,QAAQ,EACR,eAAe,EAChB,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-observability-opentelemetry/src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EACV,8BAA8B,EAC9B,qBAAqB,EACrB,QAAQ,EACR,eAAe,EAChB,MAAM,gDAAgD,CAAC;AAExD;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpD;AAsBD,KAAK,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AACpF,KAAK,QAAQ,GAAG;IAAE,aAAa,IAAI,OAAO,CAAC;IAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,CAAC;AAuG7E,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAgCD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAC3B,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,0BAA0B,CACxC,IAAI,GAAE,SAAmB,GACxB,2BAA2B,CAqB7B;AAED,cAAM,mBAAoB,YAAW,eAAe;IAClD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAAyB;IAEnC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EzD,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB/B,WAAW,IAAI,kBAAkB;IAKjC,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,WAAW,IAAI,QAAQ,GAAG,IAAI;CAG/B;AAED,cAAM,kCAAmC,YAAW,qBAAqB;IACvE,OAAO,CAAC,GAAG,CAA8C;IAEnD,UAAU,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,OAAO,CAAC;IA6CrE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAQhC;AAED;;;;;GAKG;AACH,QAAA,MAAM,gBAAgB,EAAE,gBAqCvB,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAChC,OAAO,EAAE,kCAAkC,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -14,17 +14,82 @@
|
|
|
14
14
|
* @module extensions/ext-observability-opentelemetry
|
|
15
15
|
*/
|
|
16
16
|
import * as dntShim from "../../../_dnt.shims.js";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
const NOOP_SPAN = {
|
|
18
|
+
setAttribute() {
|
|
19
|
+
return NOOP_SPAN;
|
|
20
|
+
},
|
|
21
|
+
setAttributes() {
|
|
22
|
+
return NOOP_SPAN;
|
|
23
|
+
},
|
|
24
|
+
setStatus() {
|
|
25
|
+
return NOOP_SPAN;
|
|
26
|
+
},
|
|
27
|
+
recordException() { },
|
|
28
|
+
addEvent() {
|
|
29
|
+
return NOOP_SPAN;
|
|
30
|
+
},
|
|
31
|
+
end() { },
|
|
32
|
+
spanContext() {
|
|
33
|
+
return {
|
|
34
|
+
traceId: "00000000000000000000000000000000",
|
|
35
|
+
spanId: "0000000000000000",
|
|
36
|
+
traceFlags: 0,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
updateName() { },
|
|
40
|
+
};
|
|
41
|
+
const NOOP_TRACER = {
|
|
42
|
+
startSpan() {
|
|
43
|
+
return NOOP_SPAN;
|
|
44
|
+
},
|
|
45
|
+
startActiveSpan(_name, optionsOrFn, contextOrFn, fn) {
|
|
46
|
+
const callback = typeof optionsOrFn === "function"
|
|
47
|
+
? optionsOrFn
|
|
48
|
+
: typeof contextOrFn === "function"
|
|
49
|
+
? contextOrFn
|
|
50
|
+
: fn;
|
|
51
|
+
return callback?.(NOOP_SPAN);
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
const NOOP_TRACER_PROVIDER = {
|
|
55
|
+
getTracer() {
|
|
56
|
+
return NOOP_TRACER;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
async function loadOpenTelemetryRuntime() {
|
|
60
|
+
try {
|
|
61
|
+
const [api, autoInstrumentations, core, contextAsyncHooks, sdkNode, metricsExporter, sdkMetrics, sdkTraceBase, traceExporter, resources, semanticConventions,] = await Promise.all([
|
|
62
|
+
import("@opentelemetry/api"),
|
|
63
|
+
import("@opentelemetry/auto-instrumentations-node"),
|
|
64
|
+
import("@opentelemetry/core"),
|
|
65
|
+
import("@opentelemetry/context-async-hooks"),
|
|
66
|
+
import("@opentelemetry/sdk-node"),
|
|
67
|
+
import("@opentelemetry/exporter-metrics-otlp-http"),
|
|
68
|
+
import("@opentelemetry/sdk-metrics"),
|
|
69
|
+
import("@opentelemetry/sdk-trace-base"),
|
|
70
|
+
import("@opentelemetry/exporter-trace-otlp-http"),
|
|
71
|
+
import("@opentelemetry/resources"),
|
|
72
|
+
import("@opentelemetry/semantic-conventions"),
|
|
73
|
+
]);
|
|
74
|
+
return {
|
|
75
|
+
api,
|
|
76
|
+
autoInstrumentations,
|
|
77
|
+
core,
|
|
78
|
+
contextAsyncHooks,
|
|
79
|
+
sdkNode,
|
|
80
|
+
metricsExporter,
|
|
81
|
+
sdkMetrics,
|
|
82
|
+
sdkTraceBase,
|
|
83
|
+
traceExporter,
|
|
84
|
+
resources,
|
|
85
|
+
semanticConventions,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
90
|
+
throw new Error(`OpenTelemetry observability requires the optional @opentelemetry packages to be installed. ${detail}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
28
93
|
function readEnv(name) {
|
|
29
94
|
try {
|
|
30
95
|
return dntShim.dntGlobalThis.Deno?.env
|
|
@@ -81,57 +146,62 @@ export function resolveOtlpExtensionConfig(read = readEnv) {
|
|
|
81
146
|
class OtlpTracingExporter {
|
|
82
147
|
sdkProvider = null;
|
|
83
148
|
meterProvider = null;
|
|
84
|
-
|
|
149
|
+
metricsApi = null;
|
|
150
|
+
traceApi = null;
|
|
85
151
|
async start(_ctxConfig) {
|
|
86
152
|
const cfg = resolveOtlpExtensionConfig(readEnv);
|
|
87
153
|
// Honor OTEL_TRACES_ENABLED: when unset/false, skip exporter wiring so
|
|
88
154
|
// deployments opting out never create OTLP traffic or set globals.
|
|
89
155
|
if (!cfg.tracesEnabled && !cfg.metricsEnabled)
|
|
90
156
|
return;
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
[
|
|
157
|
+
const otel = await loadOpenTelemetryRuntime();
|
|
158
|
+
const resource = otel.resources.resourceFromAttributes({
|
|
159
|
+
[otel.semanticConventions.ATTR_SERVICE_NAME]: cfg.serviceName,
|
|
160
|
+
[otel.semanticConventions.ATTR_SERVICE_VERSION]: cfg.serviceVersion,
|
|
94
161
|
});
|
|
95
162
|
if (cfg.tracesEnabled) {
|
|
96
163
|
if (!cfg.tracesUrl) {
|
|
97
164
|
throw new Error("OTEL_TRACES_ENABLED=true requires OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_TRACES_ENDPOINT");
|
|
98
165
|
}
|
|
99
|
-
const exporter = new OTLPTraceExporter({
|
|
166
|
+
const exporter = new otel.traceExporter.OTLPTraceExporter({
|
|
100
167
|
url: cfg.tracesUrl,
|
|
101
168
|
headers: cfg.headers,
|
|
102
169
|
});
|
|
103
|
-
const provider = new BasicTracerProvider({
|
|
170
|
+
const provider = new otel.sdkTraceBase.BasicTracerProvider({
|
|
104
171
|
resource,
|
|
105
|
-
spanProcessors: [new BatchSpanProcessor(exporter)],
|
|
172
|
+
spanProcessors: [new otel.sdkTraceBase.BatchSpanProcessor(exporter)],
|
|
106
173
|
});
|
|
107
174
|
// Wire OTel SDK globals so the real API delegates to this provider.
|
|
108
175
|
// The shim also gets wired separately in bootstrap.ts via getProvider().
|
|
109
|
-
trace.setGlobalTracerProvider(provider);
|
|
110
|
-
const contextManager = new AsyncLocalStorageContextManager();
|
|
176
|
+
otel.api.trace.setGlobalTracerProvider(provider);
|
|
177
|
+
const contextManager = new otel.contextAsyncHooks.AsyncLocalStorageContextManager();
|
|
111
178
|
contextManager.enable();
|
|
112
|
-
const propagator = new W3CTraceContextPropagator();
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
propagation.setGlobalPropagator(propagator);
|
|
116
|
-
otelContext.setGlobalContextManager(contextManager);
|
|
179
|
+
const propagator = new otel.core.W3CTraceContextPropagator();
|
|
180
|
+
otel.api.propagation.setGlobalPropagator(propagator);
|
|
181
|
+
otel.api.context.setGlobalContextManager(contextManager);
|
|
117
182
|
this.sdkProvider = provider;
|
|
183
|
+
this.traceApi = {
|
|
184
|
+
getActiveSpan: () => otel.api.trace.getActiveSpan(),
|
|
185
|
+
getSpan: (ctx) => otel.api.trace.getSpan(ctx),
|
|
186
|
+
};
|
|
118
187
|
}
|
|
119
188
|
if (cfg.metricsEnabled) {
|
|
120
189
|
if (!cfg.metricsUrl) {
|
|
121
190
|
throw new Error("OTEL_METRICS_ENABLED=true requires OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_METRICS_ENDPOINT");
|
|
122
191
|
}
|
|
123
|
-
|
|
124
|
-
exporter: new OTLPMetricExporter({
|
|
192
|
+
const metricReader = new otel.sdkMetrics.PeriodicExportingMetricReader({
|
|
193
|
+
exporter: new otel.metricsExporter.OTLPMetricExporter({
|
|
125
194
|
url: cfg.metricsUrl,
|
|
126
195
|
headers: cfg.headers,
|
|
127
196
|
}),
|
|
128
197
|
exportIntervalMillis: cfg.metricsExportIntervalMillis,
|
|
129
198
|
});
|
|
130
|
-
this.meterProvider = new MeterProvider({
|
|
199
|
+
this.meterProvider = new otel.sdkMetrics.MeterProvider({
|
|
131
200
|
resource,
|
|
132
|
-
readers: [
|
|
201
|
+
readers: [metricReader],
|
|
133
202
|
});
|
|
134
|
-
metrics.setGlobalMeterProvider(this.meterProvider);
|
|
203
|
+
otel.api.metrics.setGlobalMeterProvider(this.meterProvider);
|
|
204
|
+
this.metricsApi = otel.api.metrics;
|
|
135
205
|
}
|
|
136
206
|
}
|
|
137
207
|
// eslint-disable-next-line require-await
|
|
@@ -146,7 +216,6 @@ class OtlpTracingExporter {
|
|
|
146
216
|
}
|
|
147
217
|
finally {
|
|
148
218
|
this.meterProvider = null;
|
|
149
|
-
this.metricReader = null;
|
|
150
219
|
}
|
|
151
220
|
}
|
|
152
221
|
if (this.sdkProvider) {
|
|
@@ -161,43 +230,38 @@ class OtlpTracingExporter {
|
|
|
161
230
|
getProvider() {
|
|
162
231
|
if (this.sdkProvider)
|
|
163
232
|
return this.sdkProvider;
|
|
164
|
-
|
|
165
|
-
// called (e.g., test scaffolding without full setup).
|
|
166
|
-
return trace.getTracerProvider();
|
|
233
|
+
return NOOP_TRACER_PROVIDER;
|
|
167
234
|
}
|
|
168
235
|
getMetricsAPI() {
|
|
169
|
-
|
|
170
|
-
return metrics;
|
|
236
|
+
return this.metricsApi;
|
|
171
237
|
}
|
|
172
238
|
getTraceAPI() {
|
|
173
|
-
|
|
174
|
-
return null;
|
|
175
|
-
return {
|
|
176
|
-
getActiveSpan: () => trace.getActiveSpan(),
|
|
177
|
-
getSpan: (ctx) => trace.getSpan(ctx),
|
|
178
|
-
};
|
|
239
|
+
return this.traceApi;
|
|
179
240
|
}
|
|
180
241
|
}
|
|
181
242
|
class OpenTelemetryNodeTelemetryProvider {
|
|
182
243
|
sdk = null;
|
|
183
244
|
async initialize(options) {
|
|
184
|
-
const
|
|
245
|
+
const otel = await loadOpenTelemetryRuntime();
|
|
246
|
+
const resource = otel.resources.resourceFromAttributes({
|
|
185
247
|
"service.name": options.serviceName,
|
|
186
248
|
"service.version": options.serviceVersion,
|
|
187
249
|
"deployment.environment": options.deploymentEnvironment,
|
|
188
250
|
});
|
|
189
|
-
const traceExporter = new OTLPTraceExporter({
|
|
190
|
-
|
|
251
|
+
const traceExporter = new otel.traceExporter.OTLPTraceExporter({
|
|
252
|
+
headers: options.exporterHeaders,
|
|
253
|
+
});
|
|
254
|
+
const sdk = new otel.sdkNode.NodeSDK({
|
|
191
255
|
resource,
|
|
192
|
-
sampler: new ParentBasedSampler({
|
|
193
|
-
root: new TraceIdRatioBasedSampler(options.samplingRatio),
|
|
256
|
+
sampler: new otel.sdkTraceBase.ParentBasedSampler({
|
|
257
|
+
root: new otel.sdkTraceBase.TraceIdRatioBasedSampler(options.samplingRatio),
|
|
194
258
|
}),
|
|
195
|
-
spanProcessor: new BatchSpanProcessor(traceExporter, {
|
|
259
|
+
spanProcessor: new otel.sdkTraceBase.BatchSpanProcessor(traceExporter, {
|
|
196
260
|
maxExportBatchSize: 100,
|
|
197
261
|
scheduledDelayMillis: 500,
|
|
198
262
|
}),
|
|
199
263
|
instrumentations: [
|
|
200
|
-
getNodeAutoInstrumentations({
|
|
264
|
+
otel.autoInstrumentations.getNodeAutoInstrumentations({
|
|
201
265
|
"@opentelemetry/instrumentation-fs": { enabled: options.instrumentation.fs },
|
|
202
266
|
"@opentelemetry/instrumentation-http": { enabled: options.instrumentation.http },
|
|
203
267
|
"@opentelemetry/instrumentation-express": { enabled: options.instrumentation.express },
|