@powerlines/plugin-open-telemetry 0.1.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/LICENSE +201 -0
- package/README.md +304 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/components/index.cjs +1 -0
- package/dist/components/index.d.cts +2 -0
- package/dist/components/index.d.mts +2 -0
- package/dist/components/index.mjs +1 -0
- package/dist/components/trace-builtin.cjs +230 -0
- package/dist/components/trace-builtin.d.cts +12 -0
- package/dist/components/trace-builtin.d.cts.map +1 -0
- package/dist/components/trace-builtin.d.mts +12 -0
- package/dist/components/trace-builtin.d.mts.map +1 -0
- package/dist/components/trace-builtin.mjs +231 -0
- package/dist/components/trace-builtin.mjs.map +1 -0
- package/dist/helpers/automd-generator.cjs +1 -0
- package/dist/helpers/automd-generator.d.cts +14 -0
- package/dist/helpers/automd-generator.d.cts.map +1 -0
- package/dist/helpers/automd-generator.d.mts +14 -0
- package/dist/helpers/automd-generator.d.mts.map +1 -0
- package/dist/helpers/automd-generator.mjs +2 -0
- package/dist/helpers/automd-generator.mjs.map +1 -0
- package/dist/helpers/index.cjs +1 -0
- package/dist/helpers/index.d.cts +2 -0
- package/dist/helpers/index.d.mts +2 -0
- package/dist/helpers/index.mjs +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +17 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +17 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types/env.cjs +0 -0
- package/dist/types/env.d.cts +77 -0
- package/dist/types/env.d.cts.map +1 -0
- package/dist/types/env.d.mts +77 -0
- package/dist/types/env.d.mts.map +1 -0
- package/dist/types/env.mjs +2 -0
- package/dist/types/env.mjs.map +1 -0
- package/dist/types/index.cjs +0 -0
- package/dist/types/index.d.cts +3 -0
- package/dist/types/index.d.mts +3 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/plugin.cjs +0 -0
- package/dist/types/plugin.d.cts +139 -0
- package/dist/types/plugin.d.cts.map +1 -0
- package/dist/types/plugin.d.mts +139 -0
- package/dist/types/plugin.d.mts.map +1 -0
- package/dist/types/plugin.mjs +1 -0
- package/package.json +210 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`@alloy-js/core/jsx-runtime`),n=require(`@alloy-js/core`),r=require(`@alloy-js/typescript`),i=require(`@powerlines/plugin-alloy/core`),a=require(`@powerlines/plugin-alloy/core/components/spacing`),o=require(`@powerlines/plugin-alloy/typescript/components/builtin-file`),s=require(`@powerlines/plugin-alloy/typescript/components/tsdoc`),c=require(`defu`);c=e.__toESM(c);function l(e){let[{children:l,imports:u},d]=(0,n.splitProps)(e,[`children`,`imports`]),f=(0,i.usePowerlines)();return(0,t.createComponent)(o.BuiltinFile,(0,t.mergeProps)({id:`trace`,description:`The runtime OpenTelemetry trace module provides registerOTel and getTracer helpers that mirror the @vercel/otel API.`},d,{get imports(){return(0,c.default)({"@opentelemetry/api":[{name:`trace`},{name:`diag`},{name:`propagation`},{name:`context`},{name:`metrics`},{name:`DiagConsoleLogger`},{name:`DiagLogLevel`},{name:`ContextManager`,type:!0},{name:`TextMapPropagator`,type:!0},{name:`Attributes`,type:!0}],"@opentelemetry/api-logs":[{name:`logs`}],"@opentelemetry/context-async-hooks":[{name:`AsyncLocalStorageContextManager`}],"@opentelemetry/core":[{name:`CompositePropagator`},{name:`ExportResult`,type:!0},{name:`W3CBaggagePropagator`},{name:`W3CTraceContextPropagator`},{name:`parseKeyPairsIntoRecord`}],"@opentelemetry/instrumentation":[{name:`registerInstrumentations`},{name:`Instrumentation`,type:!0}],"@opentelemetry/resources":[{name:`resourceFromAttributes`},{name:`detectResources`},{name:`envDetector`}],"@opentelemetry/sdk-logs":[{name:`LoggerProvider`}],"@opentelemetry/sdk-metrics":[{name:`MeterProvider`}],"@opentelemetry/sdk-trace-base":[{name:`BasicTracerProvider`},{name:`BatchSpanProcessor`},{name:`RandomIdGenerator`},{name:`AlwaysOnSampler`},{name:`AlwaysOffSampler`},{name:`ParentBasedSampler`},{name:`TraceIdRatioBasedSampler`},{name:`ReadableSpan`,type:!0},{name:`Sampler`,type:!0},{name:`SpanExporter`,type:!0},{name:`SpanProcessor`,type:!0}],"@powerlines/plugin-open-telemetry":[{name:`Configuration`,type:!0}],"@opentelemetry/exporter-trace-otlp-http":[{name:`OTLPTraceExporter`}]},u??{})},builtinImports:{env:[`env`]},get children(){return[(0,t.createComponent)(s.TSDoc,{heading:`Configuration for the OTLP HTTP trace exporters.`,get children(){return[(0,t.createComponent)(s.TSDocParam,{name:`url`,children:`The URL of the OTLP collector endpoint. Defaults to http://localhost:4318/v1/traces.`}),(0,t.createComponent)(s.TSDocParam,{name:`headers`,children:`Additional HTTP headers to send with each export request.`})]}}),(0,t.createComponent)(a.Spacing,{}),(0,t.createComponent)(s.TSDoc,{heading:"OTLP trace exporter using the `http/json` protocol. Compatible with the Edge runtime. Mirrors `OTLPHttpJsonTraceExporter` from `@vercel/otel`.",get children(){return(0,t.createComponent)(s.TSDocParam,{name:`config`,children:`Optional exporter configuration (url, headers).`})}}),n.code`
|
|
2
|
+
export class OTLPHttpJsonTraceExporter implements SpanExporter {
|
|
3
|
+
private readonly impl: OTLPTraceExporter;
|
|
4
|
+
|
|
5
|
+
constructor(config: OTLPExporterConfig = {}) {
|
|
6
|
+
this.impl = new OTLPTraceExporter({
|
|
7
|
+
url: config.url ?? (env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ?? "http://localhost:4318/v1/traces"),
|
|
8
|
+
headers: (config.headers as Record<string, string>) ?? {},
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {
|
|
13
|
+
this.impl.export(spans, resultCallback);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
shutdown(): Promise<void> {
|
|
17
|
+
return this.impl.shutdown();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
forceFlush(): Promise<void> {
|
|
21
|
+
return this.impl.forceFlush?.() ?? Promise.resolve();
|
|
22
|
+
}
|
|
23
|
+
}`,(0,t.createComponent)(a.Spacing,{}),(0,t.createComponent)(s.TSDoc,{heading:"OTLP trace exporter using the `http/protobuf` protocol. Compatible with the Edge runtime. Mirrors `OTLPHttpProtoTraceExporter` from `@vercel/otel`.",get children(){return(0,t.createComponent)(s.TSDocParam,{name:`config`,children:`Optional exporter configuration (url, headers). The OTLP collector must support the protobuf encoding.`})}}),n.code`
|
|
24
|
+
export class OTLPHttpProtoTraceExporter implements SpanExporter {
|
|
25
|
+
private readonly impl: OTLPTraceExporter;
|
|
26
|
+
|
|
27
|
+
constructor(config: OTLPExporterConfig = {}) {
|
|
28
|
+
this.impl = new OTLPTraceExporter({
|
|
29
|
+
url: config.url ?? env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
|
|
30
|
+
headers: {
|
|
31
|
+
"Content-Type": "application/x-protobuf",
|
|
32
|
+
...((config.headers as Record<string, string>) ?? {}),
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {
|
|
38
|
+
this.impl.export(spans, resultCallback);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
shutdown(): Promise<void> {
|
|
42
|
+
return this.impl.shutdown();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
forceFlush(): Promise<void> {
|
|
46
|
+
return this.impl.forceFlush?.() ?? Promise.resolve();
|
|
47
|
+
}
|
|
48
|
+
}`,(0,t.createComponent)(a.Spacing,{}),(0,t.createComponent)(s.TSDoc,{heading:"OpenTelemetry SDK configuration. Mirrors the `@vercel/otel` `Configuration` interface.",get children(){return[(0,t.createComponent)(s.TSDocParam,{name:`serviceName`,children:`The name of your service. Can be overridden by the OTEL_SERVICE_NAME environment variable.`}),(0,t.createComponent)(s.TSDocParam,{name:`attributes`,children:`Additional resource attributes to apply to all spans.`}),(0,t.createComponent)(s.TSDocParam,{name:`propagators`,children:`Propagators for extending inbound and outbound contexts. Defaults to W3C Trace Context + Baggage.`}),(0,t.createComponent)(s.TSDocParam,{name:`traceSampler`,children:`Sampler to decide which requests to trace. Defaults to "always_on".`}),(0,t.createComponent)(s.TSDocParam,{name:`spanProcessors`,children:`Span processors to use. Defaults to "auto" which auto-configures based on environment variables.`}),(0,t.createComponent)(s.TSDocParam,{name:`traceExporter`,children:`Custom trace exporter. Defaults to "auto" which selects the best exporter for the environment.`})]}}),(0,t.createComponent)(s.TSDoc,{heading:"Registers the OpenTelemetry SDK with the specified service name or configuration object. Should be called in `instrumentation.ts` before any other code.",get children(){return(0,t.createComponent)(s.TSDocParam,{name:`optionsOrServiceName`,children:`Either a service name string or a full Configuration object.`})}}),(0,t.createComponent)(r.FunctionDeclaration,{name:`registerOTel`,export:!0,parameters:[{name:`optionsOrServiceName?`,type:`Configuration | string`}],returnType:`void`,get children(){return n.code`
|
|
49
|
+
let options: Configuration;
|
|
50
|
+
if (!optionsOrServiceName) {
|
|
51
|
+
options = {};
|
|
52
|
+
} else if (typeof optionsOrServiceName === "string") {
|
|
53
|
+
options = { serviceName: optionsOrServiceName };
|
|
54
|
+
} else {
|
|
55
|
+
options = optionsOrServiceName;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (env.OTEL_SDK_DISABLED) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Optional diagnostic logging via OTEL_LOG_LEVEL.
|
|
63
|
+
if (env.OTEL_LOG_LEVEL || env.LOG_LEVEL !== undefined) {
|
|
64
|
+
const logLevelMap: Record<string, DiagLogLevel> = {
|
|
65
|
+
ALL: DiagLogLevel.ALL,
|
|
66
|
+
VERBOSE: DiagLogLevel.VERBOSE,
|
|
67
|
+
DEBUG: DiagLogLevel.DEBUG,
|
|
68
|
+
INFO: DiagLogLevel.INFO,
|
|
69
|
+
WARN: DiagLogLevel.WARN,
|
|
70
|
+
ERROR: DiagLogLevel.ERROR,
|
|
71
|
+
NONE: DiagLogLevel.NONE,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
let level: DiagLogLevel | undefined = undefined;
|
|
75
|
+
if (env.OTEL_LOG_LEVEL) {
|
|
76
|
+
level = logLevelMap[env.OTEL_LOG_LEVEL.toUpperCase()];
|
|
77
|
+
} else if (env.LOG_LEVEL !== undefined) {
|
|
78
|
+
level = env.LOG_LEVEL === null ? DiagLogLevel.NONE : logLevelMap[env.LOG_LEVEL.toUpperCase()];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (level !== undefined) {
|
|
82
|
+
diag.setLogger(new DiagConsoleLogger(), { logLevel: level });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const idGenerator = options.idGenerator ?? new RandomIdGenerator();
|
|
87
|
+
const serviceName = env.OTEL_SERVICE_NAME || options.serviceName || "${f.config.name}";
|
|
88
|
+
|
|
89
|
+
const contextManager: ContextManager =
|
|
90
|
+
options.contextManager ?? new AsyncLocalStorageContextManager();
|
|
91
|
+
contextManager.enable();
|
|
92
|
+
context.setGlobalContextManager(contextManager);
|
|
93
|
+
|
|
94
|
+
let resource = resourceFromAttributes({
|
|
95
|
+
"service.name": serviceName,
|
|
96
|
+
"process.runtime.name": env.RUNTIME,
|
|
97
|
+
...(options.attributes ?? {}),
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const autoDetectResources = options.autoDetectResources ?? true;
|
|
101
|
+
if (autoDetectResources) {
|
|
102
|
+
const detectedResource = detectResources({
|
|
103
|
+
detectors: options.resourceDetectors ?? [envDetector],
|
|
104
|
+
});
|
|
105
|
+
resource = resource.merge(detectedResource);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const envPropagators = process.env.OTEL_PROPAGATORS
|
|
109
|
+
? process.env.OTEL_PROPAGATORS.split(",").map((s) => s.trim())
|
|
110
|
+
: undefined;
|
|
111
|
+
const propagatorArgs: Array<TextMapPropagator | string> =
|
|
112
|
+
options.propagators ?? envPropagators ?? ["auto"];
|
|
113
|
+
const resolvedPropagators: TextMapPropagator[] = propagatorArgs
|
|
114
|
+
.flatMap((p) => {
|
|
115
|
+
if (p === "none") return [];
|
|
116
|
+
if (p === "auto" || p === "tracecontext") {
|
|
117
|
+
const list: TextMapPropagator[] = [new W3CTraceContextPropagator()];
|
|
118
|
+
if (p === "auto") list.push(new W3CBaggagePropagator());
|
|
119
|
+
return list;
|
|
120
|
+
}
|
|
121
|
+
if (p === "baggage") return [new W3CBaggagePropagator()];
|
|
122
|
+
if (typeof p !== "string") return [p as TextMapPropagator];
|
|
123
|
+
throw new Error(\`@powerlines/plugin-open-telemetry: Unknown propagator "\${p}"\`);
|
|
124
|
+
});
|
|
125
|
+
propagation.setGlobalPropagator(
|
|
126
|
+
new CompositePropagator({ propagators: resolvedPropagators })
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const samplerName = !options.traceSampler || options.traceSampler === "auto"
|
|
130
|
+
? env.OTEL_TRACES_SAMPLER
|
|
131
|
+
: typeof options.traceSampler === "string"
|
|
132
|
+
? options.traceSampler
|
|
133
|
+
: undefined;
|
|
134
|
+
|
|
135
|
+
let sampler: Sampler;
|
|
136
|
+
if (options.traceSampler && typeof options.traceSampler !== "string") {
|
|
137
|
+
sampler = options.traceSampler as Sampler;
|
|
138
|
+
} else {
|
|
139
|
+
const probability = isNaN(env.OTEL_TRACES_SAMPLER_ARG) || env.OTEL_TRACES_SAMPLER_ARG < 0 || env.OTEL_TRACES_SAMPLER_ARG > 1 ? 1 : env.OTEL_TRACES_SAMPLER_ARG;
|
|
140
|
+
switch (samplerName) {
|
|
141
|
+
case "always_off":
|
|
142
|
+
sampler = new AlwaysOffSampler();
|
|
143
|
+
break;
|
|
144
|
+
case "parentbased_always_on":
|
|
145
|
+
sampler = new ParentBasedSampler({ root: new AlwaysOnSampler() });
|
|
146
|
+
break;
|
|
147
|
+
case "parentbased_always_off":
|
|
148
|
+
sampler = new ParentBasedSampler({ root: new AlwaysOffSampler() });
|
|
149
|
+
break;
|
|
150
|
+
case "traceidratio":
|
|
151
|
+
sampler = new TraceIdRatioBasedSampler(probability);
|
|
152
|
+
break;
|
|
153
|
+
case "parentbased_traceidratio":
|
|
154
|
+
sampler = new ParentBasedSampler({
|
|
155
|
+
root: new TraceIdRatioBasedSampler(probability),
|
|
156
|
+
});
|
|
157
|
+
break;
|
|
158
|
+
case "always_on":
|
|
159
|
+
default:
|
|
160
|
+
sampler = new AlwaysOnSampler();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const spanProcessors: SpanProcessor[] = (options.spanProcessors ?? ["auto"]).flatMap((sp) => {
|
|
165
|
+
if (sp !== "auto") {
|
|
166
|
+
return [sp as SpanProcessor];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const processors: SpanProcessor[] = [];
|
|
170
|
+
if (
|
|
171
|
+
!options.traceExporter ||
|
|
172
|
+
options.traceExporter === "auto" ||
|
|
173
|
+
env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
174
|
+
) {
|
|
175
|
+
// Dynamic import keeps the exporter optional at runtime.
|
|
176
|
+
diag.debug(
|
|
177
|
+
"@powerlines/plugin-open-telemetry: Auto-configuring OTLP trace exporter",
|
|
178
|
+
env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
return processors;
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// If a custom traceExporter was provided, wrap it in a BatchSpanProcessor.
|
|
185
|
+
if (options.traceExporter && options.traceExporter !== "auto") {
|
|
186
|
+
spanProcessors.push(
|
|
187
|
+
new BatchSpanProcessor(options.traceExporter as SpanExporter)
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const tracerProvider = new BasicTracerProvider({
|
|
192
|
+
resource,
|
|
193
|
+
idGenerator,
|
|
194
|
+
sampler,
|
|
195
|
+
spanLimits: options.spanLimits,
|
|
196
|
+
spanProcessors,
|
|
197
|
+
});
|
|
198
|
+
trace.setGlobalTracerProvider(tracerProvider);
|
|
199
|
+
|
|
200
|
+
if (options.logRecordProcessors) {
|
|
201
|
+
const loggerProvider = new LoggerProvider({
|
|
202
|
+
resource,
|
|
203
|
+
processors: options.logRecordProcessors,
|
|
204
|
+
});
|
|
205
|
+
logs.setGlobalLoggerProvider(loggerProvider);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (options.metricReaders || options.views) {
|
|
209
|
+
const meterProvider = new MeterProvider({
|
|
210
|
+
resource,
|
|
211
|
+
views: options.views ?? [],
|
|
212
|
+
readers: options.metricReaders ?? [],
|
|
213
|
+
});
|
|
214
|
+
metrics.setGlobalMeterProvider(meterProvider);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const instrumentationArgs: Array<Instrumentation | string> = options.instrumentations ?? ["auto"];
|
|
218
|
+
const instrumentations: Instrumentation[] = instrumentationArgs.flatMap(
|
|
219
|
+
(inst) => {
|
|
220
|
+
if (typeof inst !== "string") {
|
|
221
|
+
return [inst as Instrumentation];
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// "auto" and "fetch" are resolved by the consumer via their own imports.
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
registerInstrumentations({ instrumentations });
|
|
229
|
+
|
|
230
|
+
diag.info("@powerlines/plugin-open-telemetry: started", serviceName, env.RUNTIME);`}}),(0,t.createComponent)(a.Spacing,{}),(0,t.createComponent)(s.TSDoc,{heading:"Returns a named tracer from the global OpenTelemetry TracerProvider. Wraps `trace.getTracer()` for convenience.",get children(){return[(0,t.createComponent)(s.TSDocParam,{name:`name`,children:`The name of the tracer (typically the instrumentation library name or component name).`}),(0,t.createComponent)(s.TSDocParam,{name:`version`,children:`Optional version of the instrumentation library.`})]}}),(0,t.createComponent)(r.FunctionDeclaration,{name:`getTracer`,export:!0,parameters:[{name:`name`,type:`string`},{name:`version`,type:`string`,optional:!0}],returnType:`ReturnType<typeof trace.getTracer>`,children:n.code`return trace.getTracer(name, version);`}),(0,t.createComponent)(a.Spacing,{}),(0,t.createComponent)(n.Show,{get when(){return!!l},children:l})]}}))}exports.TraceBuiltin=l;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as _$_alloy_js_core0 from "@alloy-js/core";
|
|
2
|
+
import { BuiltinFileProps } from "@powerlines/plugin-alloy/typescript/components/builtin-file";
|
|
3
|
+
|
|
4
|
+
//#region src/components/trace-builtin.d.ts
|
|
5
|
+
type TraceBuiltinProps = Omit<BuiltinFileProps, "id">;
|
|
6
|
+
/**
|
|
7
|
+
* Generates the trace module for the Powerlines project.
|
|
8
|
+
*/
|
|
9
|
+
declare function TraceBuiltin(props: TraceBuiltinProps): _$_alloy_js_core0.Children;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { TraceBuiltin, TraceBuiltinProps };
|
|
12
|
+
//# sourceMappingURL=trace-builtin.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-builtin.d.cts","names":[],"sources":["../../src/components/trace-builtin.tsx"],"mappings":";;;;KAiCY,iBAAA,GAAoB,IAAA,CAAK,gBAAA;;;AAArC;iBAKgB,YAAA,CAAa,KAAA,EAAO,iBAAA,GAAiB,iBAAA,CAAA,QAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as _$_alloy_js_core0 from "@alloy-js/core";
|
|
2
|
+
import { BuiltinFileProps } from "@powerlines/plugin-alloy/typescript/components/builtin-file";
|
|
3
|
+
|
|
4
|
+
//#region src/components/trace-builtin.d.ts
|
|
5
|
+
type TraceBuiltinProps = Omit<BuiltinFileProps, "id">;
|
|
6
|
+
/**
|
|
7
|
+
* Generates the trace module for the Powerlines project.
|
|
8
|
+
*/
|
|
9
|
+
declare function TraceBuiltin(props: TraceBuiltinProps): _$_alloy_js_core0.Children;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { TraceBuiltin, TraceBuiltinProps };
|
|
12
|
+
//# sourceMappingURL=trace-builtin.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-builtin.d.mts","names":[],"sources":["../../src/components/trace-builtin.tsx"],"mappings":";;;;KAiCY,iBAAA,GAAoB,IAAA,CAAK,gBAAA;;;AAArC;iBAKgB,YAAA,CAAa,KAAA,EAAO,iBAAA,GAAiB,iBAAA,CAAA,QAAA"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import{createComponent as e,mergeProps as t}from"@alloy-js/core/jsx-runtime";import{Show as n,code as r,splitProps as i}from"@alloy-js/core";import{FunctionDeclaration as a}from"@alloy-js/typescript";import{usePowerlines as o}from"@powerlines/plugin-alloy/core";import{Spacing as s}from"@powerlines/plugin-alloy/core/components/spacing";import{BuiltinFile as c}from"@powerlines/plugin-alloy/typescript/components/builtin-file";import{TSDoc as l,TSDocParam as u}from"@powerlines/plugin-alloy/typescript/components/tsdoc";import d from"defu";function f(f){let[{children:p,imports:m},h]=i(f,[`children`,`imports`]),g=o();return e(c,t({id:`trace`,description:`The runtime OpenTelemetry trace module provides registerOTel and getTracer helpers that mirror the @vercel/otel API.`},h,{get imports(){return d({"@opentelemetry/api":[{name:`trace`},{name:`diag`},{name:`propagation`},{name:`context`},{name:`metrics`},{name:`DiagConsoleLogger`},{name:`DiagLogLevel`},{name:`ContextManager`,type:!0},{name:`TextMapPropagator`,type:!0},{name:`Attributes`,type:!0}],"@opentelemetry/api-logs":[{name:`logs`}],"@opentelemetry/context-async-hooks":[{name:`AsyncLocalStorageContextManager`}],"@opentelemetry/core":[{name:`CompositePropagator`},{name:`ExportResult`,type:!0},{name:`W3CBaggagePropagator`},{name:`W3CTraceContextPropagator`},{name:`parseKeyPairsIntoRecord`}],"@opentelemetry/instrumentation":[{name:`registerInstrumentations`},{name:`Instrumentation`,type:!0}],"@opentelemetry/resources":[{name:`resourceFromAttributes`},{name:`detectResources`},{name:`envDetector`}],"@opentelemetry/sdk-logs":[{name:`LoggerProvider`}],"@opentelemetry/sdk-metrics":[{name:`MeterProvider`}],"@opentelemetry/sdk-trace-base":[{name:`BasicTracerProvider`},{name:`BatchSpanProcessor`},{name:`RandomIdGenerator`},{name:`AlwaysOnSampler`},{name:`AlwaysOffSampler`},{name:`ParentBasedSampler`},{name:`TraceIdRatioBasedSampler`},{name:`ReadableSpan`,type:!0},{name:`Sampler`,type:!0},{name:`SpanExporter`,type:!0},{name:`SpanProcessor`,type:!0}],"@powerlines/plugin-open-telemetry":[{name:`Configuration`,type:!0}],"@opentelemetry/exporter-trace-otlp-http":[{name:`OTLPTraceExporter`}]},m??{})},builtinImports:{env:[`env`]},get children(){return[e(l,{heading:`Configuration for the OTLP HTTP trace exporters.`,get children(){return[e(u,{name:`url`,children:`The URL of the OTLP collector endpoint. Defaults to http://localhost:4318/v1/traces.`}),e(u,{name:`headers`,children:`Additional HTTP headers to send with each export request.`})]}}),e(s,{}),e(l,{heading:"OTLP trace exporter using the `http/json` protocol. Compatible with the Edge runtime. Mirrors `OTLPHttpJsonTraceExporter` from `@vercel/otel`.",get children(){return e(u,{name:`config`,children:`Optional exporter configuration (url, headers).`})}}),r`
|
|
2
|
+
export class OTLPHttpJsonTraceExporter implements SpanExporter {
|
|
3
|
+
private readonly impl: OTLPTraceExporter;
|
|
4
|
+
|
|
5
|
+
constructor(config: OTLPExporterConfig = {}) {
|
|
6
|
+
this.impl = new OTLPTraceExporter({
|
|
7
|
+
url: config.url ?? (env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ?? "http://localhost:4318/v1/traces"),
|
|
8
|
+
headers: (config.headers as Record<string, string>) ?? {},
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {
|
|
13
|
+
this.impl.export(spans, resultCallback);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
shutdown(): Promise<void> {
|
|
17
|
+
return this.impl.shutdown();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
forceFlush(): Promise<void> {
|
|
21
|
+
return this.impl.forceFlush?.() ?? Promise.resolve();
|
|
22
|
+
}
|
|
23
|
+
}`,e(s,{}),e(l,{heading:"OTLP trace exporter using the `http/protobuf` protocol. Compatible with the Edge runtime. Mirrors `OTLPHttpProtoTraceExporter` from `@vercel/otel`.",get children(){return e(u,{name:`config`,children:`Optional exporter configuration (url, headers). The OTLP collector must support the protobuf encoding.`})}}),r`
|
|
24
|
+
export class OTLPHttpProtoTraceExporter implements SpanExporter {
|
|
25
|
+
private readonly impl: OTLPTraceExporter;
|
|
26
|
+
|
|
27
|
+
constructor(config: OTLPExporterConfig = {}) {
|
|
28
|
+
this.impl = new OTLPTraceExporter({
|
|
29
|
+
url: config.url ?? env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
|
|
30
|
+
headers: {
|
|
31
|
+
"Content-Type": "application/x-protobuf",
|
|
32
|
+
...((config.headers as Record<string, string>) ?? {}),
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {
|
|
38
|
+
this.impl.export(spans, resultCallback);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
shutdown(): Promise<void> {
|
|
42
|
+
return this.impl.shutdown();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
forceFlush(): Promise<void> {
|
|
46
|
+
return this.impl.forceFlush?.() ?? Promise.resolve();
|
|
47
|
+
}
|
|
48
|
+
}`,e(s,{}),e(l,{heading:"OpenTelemetry SDK configuration. Mirrors the `@vercel/otel` `Configuration` interface.",get children(){return[e(u,{name:`serviceName`,children:`The name of your service. Can be overridden by the OTEL_SERVICE_NAME environment variable.`}),e(u,{name:`attributes`,children:`Additional resource attributes to apply to all spans.`}),e(u,{name:`propagators`,children:`Propagators for extending inbound and outbound contexts. Defaults to W3C Trace Context + Baggage.`}),e(u,{name:`traceSampler`,children:`Sampler to decide which requests to trace. Defaults to "always_on".`}),e(u,{name:`spanProcessors`,children:`Span processors to use. Defaults to "auto" which auto-configures based on environment variables.`}),e(u,{name:`traceExporter`,children:`Custom trace exporter. Defaults to "auto" which selects the best exporter for the environment.`})]}}),e(l,{heading:"Registers the OpenTelemetry SDK with the specified service name or configuration object. Should be called in `instrumentation.ts` before any other code.",get children(){return e(u,{name:`optionsOrServiceName`,children:`Either a service name string or a full Configuration object.`})}}),e(a,{name:`registerOTel`,export:!0,parameters:[{name:`optionsOrServiceName?`,type:`Configuration | string`}],returnType:`void`,get children(){return r`
|
|
49
|
+
let options: Configuration;
|
|
50
|
+
if (!optionsOrServiceName) {
|
|
51
|
+
options = {};
|
|
52
|
+
} else if (typeof optionsOrServiceName === "string") {
|
|
53
|
+
options = { serviceName: optionsOrServiceName };
|
|
54
|
+
} else {
|
|
55
|
+
options = optionsOrServiceName;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (env.OTEL_SDK_DISABLED) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Optional diagnostic logging via OTEL_LOG_LEVEL.
|
|
63
|
+
if (env.OTEL_LOG_LEVEL || env.LOG_LEVEL !== undefined) {
|
|
64
|
+
const logLevelMap: Record<string, DiagLogLevel> = {
|
|
65
|
+
ALL: DiagLogLevel.ALL,
|
|
66
|
+
VERBOSE: DiagLogLevel.VERBOSE,
|
|
67
|
+
DEBUG: DiagLogLevel.DEBUG,
|
|
68
|
+
INFO: DiagLogLevel.INFO,
|
|
69
|
+
WARN: DiagLogLevel.WARN,
|
|
70
|
+
ERROR: DiagLogLevel.ERROR,
|
|
71
|
+
NONE: DiagLogLevel.NONE,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
let level: DiagLogLevel | undefined = undefined;
|
|
75
|
+
if (env.OTEL_LOG_LEVEL) {
|
|
76
|
+
level = logLevelMap[env.OTEL_LOG_LEVEL.toUpperCase()];
|
|
77
|
+
} else if (env.LOG_LEVEL !== undefined) {
|
|
78
|
+
level = env.LOG_LEVEL === null ? DiagLogLevel.NONE : logLevelMap[env.LOG_LEVEL.toUpperCase()];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (level !== undefined) {
|
|
82
|
+
diag.setLogger(new DiagConsoleLogger(), { logLevel: level });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const idGenerator = options.idGenerator ?? new RandomIdGenerator();
|
|
87
|
+
const serviceName = env.OTEL_SERVICE_NAME || options.serviceName || "${g.config.name}";
|
|
88
|
+
|
|
89
|
+
const contextManager: ContextManager =
|
|
90
|
+
options.contextManager ?? new AsyncLocalStorageContextManager();
|
|
91
|
+
contextManager.enable();
|
|
92
|
+
context.setGlobalContextManager(contextManager);
|
|
93
|
+
|
|
94
|
+
let resource = resourceFromAttributes({
|
|
95
|
+
"service.name": serviceName,
|
|
96
|
+
"process.runtime.name": env.RUNTIME,
|
|
97
|
+
...(options.attributes ?? {}),
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const autoDetectResources = options.autoDetectResources ?? true;
|
|
101
|
+
if (autoDetectResources) {
|
|
102
|
+
const detectedResource = detectResources({
|
|
103
|
+
detectors: options.resourceDetectors ?? [envDetector],
|
|
104
|
+
});
|
|
105
|
+
resource = resource.merge(detectedResource);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const envPropagators = process.env.OTEL_PROPAGATORS
|
|
109
|
+
? process.env.OTEL_PROPAGATORS.split(",").map((s) => s.trim())
|
|
110
|
+
: undefined;
|
|
111
|
+
const propagatorArgs: Array<TextMapPropagator | string> =
|
|
112
|
+
options.propagators ?? envPropagators ?? ["auto"];
|
|
113
|
+
const resolvedPropagators: TextMapPropagator[] = propagatorArgs
|
|
114
|
+
.flatMap((p) => {
|
|
115
|
+
if (p === "none") return [];
|
|
116
|
+
if (p === "auto" || p === "tracecontext") {
|
|
117
|
+
const list: TextMapPropagator[] = [new W3CTraceContextPropagator()];
|
|
118
|
+
if (p === "auto") list.push(new W3CBaggagePropagator());
|
|
119
|
+
return list;
|
|
120
|
+
}
|
|
121
|
+
if (p === "baggage") return [new W3CBaggagePropagator()];
|
|
122
|
+
if (typeof p !== "string") return [p as TextMapPropagator];
|
|
123
|
+
throw new Error(\`@powerlines/plugin-open-telemetry: Unknown propagator "\${p}"\`);
|
|
124
|
+
});
|
|
125
|
+
propagation.setGlobalPropagator(
|
|
126
|
+
new CompositePropagator({ propagators: resolvedPropagators })
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const samplerName = !options.traceSampler || options.traceSampler === "auto"
|
|
130
|
+
? env.OTEL_TRACES_SAMPLER
|
|
131
|
+
: typeof options.traceSampler === "string"
|
|
132
|
+
? options.traceSampler
|
|
133
|
+
: undefined;
|
|
134
|
+
|
|
135
|
+
let sampler: Sampler;
|
|
136
|
+
if (options.traceSampler && typeof options.traceSampler !== "string") {
|
|
137
|
+
sampler = options.traceSampler as Sampler;
|
|
138
|
+
} else {
|
|
139
|
+
const probability = isNaN(env.OTEL_TRACES_SAMPLER_ARG) || env.OTEL_TRACES_SAMPLER_ARG < 0 || env.OTEL_TRACES_SAMPLER_ARG > 1 ? 1 : env.OTEL_TRACES_SAMPLER_ARG;
|
|
140
|
+
switch (samplerName) {
|
|
141
|
+
case "always_off":
|
|
142
|
+
sampler = new AlwaysOffSampler();
|
|
143
|
+
break;
|
|
144
|
+
case "parentbased_always_on":
|
|
145
|
+
sampler = new ParentBasedSampler({ root: new AlwaysOnSampler() });
|
|
146
|
+
break;
|
|
147
|
+
case "parentbased_always_off":
|
|
148
|
+
sampler = new ParentBasedSampler({ root: new AlwaysOffSampler() });
|
|
149
|
+
break;
|
|
150
|
+
case "traceidratio":
|
|
151
|
+
sampler = new TraceIdRatioBasedSampler(probability);
|
|
152
|
+
break;
|
|
153
|
+
case "parentbased_traceidratio":
|
|
154
|
+
sampler = new ParentBasedSampler({
|
|
155
|
+
root: new TraceIdRatioBasedSampler(probability),
|
|
156
|
+
});
|
|
157
|
+
break;
|
|
158
|
+
case "always_on":
|
|
159
|
+
default:
|
|
160
|
+
sampler = new AlwaysOnSampler();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const spanProcessors: SpanProcessor[] = (options.spanProcessors ?? ["auto"]).flatMap((sp) => {
|
|
165
|
+
if (sp !== "auto") {
|
|
166
|
+
return [sp as SpanProcessor];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const processors: SpanProcessor[] = [];
|
|
170
|
+
if (
|
|
171
|
+
!options.traceExporter ||
|
|
172
|
+
options.traceExporter === "auto" ||
|
|
173
|
+
env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
174
|
+
) {
|
|
175
|
+
// Dynamic import keeps the exporter optional at runtime.
|
|
176
|
+
diag.debug(
|
|
177
|
+
"@powerlines/plugin-open-telemetry: Auto-configuring OTLP trace exporter",
|
|
178
|
+
env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
return processors;
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// If a custom traceExporter was provided, wrap it in a BatchSpanProcessor.
|
|
185
|
+
if (options.traceExporter && options.traceExporter !== "auto") {
|
|
186
|
+
spanProcessors.push(
|
|
187
|
+
new BatchSpanProcessor(options.traceExporter as SpanExporter)
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const tracerProvider = new BasicTracerProvider({
|
|
192
|
+
resource,
|
|
193
|
+
idGenerator,
|
|
194
|
+
sampler,
|
|
195
|
+
spanLimits: options.spanLimits,
|
|
196
|
+
spanProcessors,
|
|
197
|
+
});
|
|
198
|
+
trace.setGlobalTracerProvider(tracerProvider);
|
|
199
|
+
|
|
200
|
+
if (options.logRecordProcessors) {
|
|
201
|
+
const loggerProvider = new LoggerProvider({
|
|
202
|
+
resource,
|
|
203
|
+
processors: options.logRecordProcessors,
|
|
204
|
+
});
|
|
205
|
+
logs.setGlobalLoggerProvider(loggerProvider);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (options.metricReaders || options.views) {
|
|
209
|
+
const meterProvider = new MeterProvider({
|
|
210
|
+
resource,
|
|
211
|
+
views: options.views ?? [],
|
|
212
|
+
readers: options.metricReaders ?? [],
|
|
213
|
+
});
|
|
214
|
+
metrics.setGlobalMeterProvider(meterProvider);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const instrumentationArgs: Array<Instrumentation | string> = options.instrumentations ?? ["auto"];
|
|
218
|
+
const instrumentations: Instrumentation[] = instrumentationArgs.flatMap(
|
|
219
|
+
(inst) => {
|
|
220
|
+
if (typeof inst !== "string") {
|
|
221
|
+
return [inst as Instrumentation];
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// "auto" and "fetch" are resolved by the consumer via their own imports.
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
registerInstrumentations({ instrumentations });
|
|
229
|
+
|
|
230
|
+
diag.info("@powerlines/plugin-open-telemetry: started", serviceName, env.RUNTIME);`}}),e(s,{}),e(l,{heading:"Returns a named tracer from the global OpenTelemetry TracerProvider. Wraps `trace.getTracer()` for convenience.",get children(){return[e(u,{name:`name`,children:`The name of the tracer (typically the instrumentation library name or component name).`}),e(u,{name:`version`,children:`Optional version of the instrumentation library.`})]}}),e(a,{name:`getTracer`,export:!0,parameters:[{name:`name`,type:`string`},{name:`version`,type:`string`,optional:!0}],returnType:`ReturnType<typeof trace.getTracer>`,children:r`return trace.getTracer(name, version);`}),e(s,{}),e(n,{get when(){return!!p},children:p})]}}))}export{f as TraceBuiltin};
|
|
231
|
+
//# sourceMappingURL=trace-builtin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-builtin.mjs","names":[],"sources":["../../src/components/trace-builtin.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, Show, splitProps } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport {\n BuiltinFile,\n BuiltinFileProps\n} from \"@powerlines/plugin-alloy/typescript/components/builtin-file\";\nimport {\n TSDoc,\n TSDocParam\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport defu from \"defu\";\nimport { OpenTelemetryPluginContext } from \"../types\";\n\nexport type TraceBuiltinProps = Omit<BuiltinFileProps, \"id\">;\n\n/**\n * Generates the trace module for the Powerlines project.\n */\nexport function TraceBuiltin(props: TraceBuiltinProps) {\n const [{ children, imports }, rest] = splitProps(props, [\n \"children\",\n \"imports\"\n ]);\n\n const context = usePowerlines<OpenTelemetryPluginContext>();\n\n return (\n <BuiltinFile\n id=\"trace\"\n description=\"The runtime OpenTelemetry trace module provides registerOTel and getTracer helpers that mirror the @vercel/otel API.\"\n {...rest}\n imports={defu(\n {\n \"@opentelemetry/api\": [\n { name: \"trace\" },\n { name: \"diag\" },\n { name: \"propagation\" },\n { name: \"context\" },\n { name: \"metrics\" },\n { name: \"DiagConsoleLogger\" },\n { name: \"DiagLogLevel\" },\n { name: \"ContextManager\", type: true },\n { name: \"TextMapPropagator\", type: true },\n { name: \"Attributes\", type: true }\n ],\n \"@opentelemetry/api-logs\": [{ name: \"logs\" }],\n \"@opentelemetry/context-async-hooks\": [\n { name: \"AsyncLocalStorageContextManager\" }\n ],\n \"@opentelemetry/core\": [\n { name: \"CompositePropagator\" },\n { name: \"ExportResult\", type: true },\n { name: \"W3CBaggagePropagator\" },\n { name: \"W3CTraceContextPropagator\" },\n { name: \"parseKeyPairsIntoRecord\" }\n ],\n \"@opentelemetry/instrumentation\": [\n { name: \"registerInstrumentations\" },\n { name: \"Instrumentation\", type: true }\n ],\n \"@opentelemetry/resources\": [\n { name: \"resourceFromAttributes\" },\n { name: \"detectResources\" },\n { name: \"envDetector\" }\n ],\n \"@opentelemetry/sdk-logs\": [{ name: \"LoggerProvider\" }],\n \"@opentelemetry/sdk-metrics\": [{ name: \"MeterProvider\" }],\n \"@opentelemetry/sdk-trace-base\": [\n { name: \"BasicTracerProvider\" },\n { name: \"BatchSpanProcessor\" },\n { name: \"RandomIdGenerator\" },\n { name: \"AlwaysOnSampler\" },\n { name: \"AlwaysOffSampler\" },\n { name: \"ParentBasedSampler\" },\n { name: \"TraceIdRatioBasedSampler\" },\n { name: \"ReadableSpan\", type: true },\n { name: \"Sampler\", type: true },\n { name: \"SpanExporter\", type: true },\n { name: \"SpanProcessor\", type: true }\n ],\n \"@powerlines/plugin-open-telemetry\": [\n { name: \"Configuration\", type: true }\n ],\n \"@opentelemetry/exporter-trace-otlp-http\": [\n { name: \"OTLPTraceExporter\" }\n ]\n },\n imports ?? {}\n )}\n builtinImports={{\n env: [\"env\"]\n }}>\n <TSDoc heading=\"Configuration for the OTLP HTTP trace exporters.\">\n <TSDocParam name=\"url\">\n {`The URL of the OTLP collector endpoint. Defaults to http://localhost:4318/v1/traces.`}\n </TSDocParam>\n <TSDocParam name=\"headers\">\n {`Additional HTTP headers to send with each export request.`}\n </TSDocParam>\n </TSDoc>\n <Spacing />\n <TSDoc heading=\"OTLP trace exporter using the `http/json` protocol. Compatible with the Edge runtime. Mirrors `OTLPHttpJsonTraceExporter` from `@vercel/otel`.\">\n <TSDocParam name=\"config\">\n {`Optional exporter configuration (url, headers).`}\n </TSDocParam>\n </TSDoc>\n {code`\nexport class OTLPHttpJsonTraceExporter implements SpanExporter {\n private readonly impl: OTLPTraceExporter;\n\n constructor(config: OTLPExporterConfig = {}) {\n this.impl = new OTLPTraceExporter({\n url: config.url ?? (env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ?? \"http://localhost:4318/v1/traces\"),\n headers: (config.headers as Record<string, string>) ?? {},\n });\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n this.impl.export(spans, resultCallback);\n }\n\n shutdown(): Promise<void> {\n return this.impl.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this.impl.forceFlush?.() ?? Promise.resolve();\n }\n}`}\n <Spacing />\n <TSDoc heading=\"OTLP trace exporter using the `http/protobuf` protocol. Compatible with the Edge runtime. Mirrors `OTLPHttpProtoTraceExporter` from `@vercel/otel`.\">\n <TSDocParam name=\"config\">\n {`Optional exporter configuration (url, headers). The OTLP collector must support the protobuf encoding.`}\n </TSDocParam>\n </TSDoc>\n {code`\nexport class OTLPHttpProtoTraceExporter implements SpanExporter {\n private readonly impl: OTLPTraceExporter;\n\n constructor(config: OTLPExporterConfig = {}) {\n this.impl = new OTLPTraceExporter({\n url: config.url ?? env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,\n headers: {\n \"Content-Type\": \"application/x-protobuf\",\n ...((config.headers as Record<string, string>) ?? {}),\n },\n });\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n this.impl.export(spans, resultCallback);\n }\n\n shutdown(): Promise<void> {\n return this.impl.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this.impl.forceFlush?.() ?? Promise.resolve();\n }\n}`}\n <Spacing />\n\n <TSDoc heading=\"OpenTelemetry SDK configuration. Mirrors the `@vercel/otel` `Configuration` interface.\">\n <TSDocParam name=\"serviceName\">\n {`The name of your service. Can be overridden by the OTEL_SERVICE_NAME environment variable.`}\n </TSDocParam>\n <TSDocParam name=\"attributes\">\n {`Additional resource attributes to apply to all spans.`}\n </TSDocParam>\n <TSDocParam name=\"propagators\">\n {`Propagators for extending inbound and outbound contexts. Defaults to W3C Trace Context + Baggage.`}\n </TSDocParam>\n <TSDocParam name=\"traceSampler\">\n {`Sampler to decide which requests to trace. Defaults to \"always_on\".`}\n </TSDocParam>\n <TSDocParam name=\"spanProcessors\">\n {`Span processors to use. Defaults to \"auto\" which auto-configures based on environment variables.`}\n </TSDocParam>\n <TSDocParam name=\"traceExporter\">\n {`Custom trace exporter. Defaults to \"auto\" which selects the best exporter for the environment.`}\n </TSDocParam>\n </TSDoc>\n <TSDoc heading=\"Registers the OpenTelemetry SDK with the specified service name or configuration object. Should be called in `instrumentation.ts` before any other code.\">\n <TSDocParam name=\"optionsOrServiceName\">\n {`Either a service name string or a full Configuration object.`}\n </TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n name=\"registerOTel\"\n export\n parameters={[\n {\n name: \"optionsOrServiceName?\",\n type: \"Configuration | string\"\n }\n ]}\n returnType=\"void\">\n {code`\n let options: Configuration;\n if (!optionsOrServiceName) {\n options = {};\n } else if (typeof optionsOrServiceName === \"string\") {\n options = { serviceName: optionsOrServiceName };\n } else {\n options = optionsOrServiceName;\n }\n\n if (env.OTEL_SDK_DISABLED) {\n return;\n }\n\n // Optional diagnostic logging via OTEL_LOG_LEVEL.\n if (env.OTEL_LOG_LEVEL || env.LOG_LEVEL !== undefined) {\n const logLevelMap: Record<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 let level: DiagLogLevel | undefined = undefined;\n if (env.OTEL_LOG_LEVEL) {\n level = logLevelMap[env.OTEL_LOG_LEVEL.toUpperCase()];\n } else if (env.LOG_LEVEL !== undefined) {\n level = env.LOG_LEVEL === null ? DiagLogLevel.NONE : logLevelMap[env.LOG_LEVEL.toUpperCase()];\n }\n\n if (level !== undefined) {\n diag.setLogger(new DiagConsoleLogger(), { logLevel: level });\n }\n }\n\n const idGenerator = options.idGenerator ?? new RandomIdGenerator();\n const serviceName = env.OTEL_SERVICE_NAME || options.serviceName || \"${context.config.name}\";\n\n const contextManager: ContextManager =\n options.contextManager ?? new AsyncLocalStorageContextManager();\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n\n let resource = resourceFromAttributes({\n \"service.name\": serviceName,\n \"process.runtime.name\": env.RUNTIME,\n ...(options.attributes ?? {}),\n });\n\n const autoDetectResources = options.autoDetectResources ?? true;\n if (autoDetectResources) {\n const detectedResource = detectResources({\n detectors: options.resourceDetectors ?? [envDetector],\n });\n resource = resource.merge(detectedResource);\n }\n\n const envPropagators = process.env.OTEL_PROPAGATORS\n ? process.env.OTEL_PROPAGATORS.split(\",\").map((s) => s.trim())\n : undefined;\n const propagatorArgs: Array<TextMapPropagator | string> =\n options.propagators ?? envPropagators ?? [\"auto\"];\n const resolvedPropagators: TextMapPropagator[] = propagatorArgs\n .flatMap((p) => {\n if (p === \"none\") return [];\n if (p === \"auto\" || p === \"tracecontext\") {\n const list: TextMapPropagator[] = [new W3CTraceContextPropagator()];\n if (p === \"auto\") list.push(new W3CBaggagePropagator());\n return list;\n }\n if (p === \"baggage\") return [new W3CBaggagePropagator()];\n if (typeof p !== \"string\") return [p as TextMapPropagator];\n throw new Error(\\`@powerlines/plugin-open-telemetry: Unknown propagator \"\\${p}\"\\`);\n });\n propagation.setGlobalPropagator(\n new CompositePropagator({ propagators: resolvedPropagators })\n );\n\n const samplerName = !options.traceSampler || options.traceSampler === \"auto\"\n ? env.OTEL_TRACES_SAMPLER\n : typeof options.traceSampler === \"string\"\n ? options.traceSampler\n : undefined;\n\n let sampler: Sampler;\n if (options.traceSampler && typeof options.traceSampler !== \"string\") {\n sampler = options.traceSampler as Sampler;\n } else {\n const probability = isNaN(env.OTEL_TRACES_SAMPLER_ARG) || env.OTEL_TRACES_SAMPLER_ARG < 0 || env.OTEL_TRACES_SAMPLER_ARG > 1 ? 1 : env.OTEL_TRACES_SAMPLER_ARG;\n switch (samplerName) {\n case \"always_off\":\n sampler = new AlwaysOffSampler();\n break;\n case \"parentbased_always_on\":\n sampler = new ParentBasedSampler({ root: new AlwaysOnSampler() });\n break;\n case \"parentbased_always_off\":\n sampler = new ParentBasedSampler({ root: new AlwaysOffSampler() });\n break;\n case \"traceidratio\":\n sampler = new TraceIdRatioBasedSampler(probability);\n break;\n case \"parentbased_traceidratio\":\n sampler = new ParentBasedSampler({\n root: new TraceIdRatioBasedSampler(probability),\n });\n break;\n case \"always_on\":\n default:\n sampler = new AlwaysOnSampler();\n }\n }\n\n const spanProcessors: SpanProcessor[] = (options.spanProcessors ?? [\"auto\"]).flatMap((sp) => {\n if (sp !== \"auto\") {\n return [sp as SpanProcessor];\n }\n\n const processors: SpanProcessor[] = [];\n if (\n !options.traceExporter ||\n options.traceExporter === \"auto\" ||\n env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT\n ) {\n // Dynamic import keeps the exporter optional at runtime.\n diag.debug(\n \"@powerlines/plugin-open-telemetry: Auto-configuring OTLP trace exporter\",\n env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT\n );\n }\n return processors;\n });\n\n // If a custom traceExporter was provided, wrap it in a BatchSpanProcessor.\n if (options.traceExporter && options.traceExporter !== \"auto\") {\n spanProcessors.push(\n new BatchSpanProcessor(options.traceExporter as SpanExporter)\n );\n }\n\n const tracerProvider = new BasicTracerProvider({\n resource,\n idGenerator,\n sampler,\n spanLimits: options.spanLimits,\n spanProcessors,\n });\n trace.setGlobalTracerProvider(tracerProvider);\n\n if (options.logRecordProcessors) {\n const loggerProvider = new LoggerProvider({\n resource,\n processors: options.logRecordProcessors,\n });\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n\n if (options.metricReaders || options.views) {\n const meterProvider = new MeterProvider({\n resource,\n views: options.views ?? [],\n readers: options.metricReaders ?? [],\n });\n metrics.setGlobalMeterProvider(meterProvider);\n }\n\n const instrumentationArgs: Array<Instrumentation | string> = options.instrumentations ?? [\"auto\"];\n const instrumentations: Instrumentation[] = instrumentationArgs.flatMap(\n (inst) => {\n if (typeof inst !== \"string\") {\n return [inst as Instrumentation];\n }\n\n // \"auto\" and \"fetch\" are resolved by the consumer via their own imports.\n return [];\n }\n );\n registerInstrumentations({ instrumentations });\n\n diag.info(\"@powerlines/plugin-open-telemetry: started\", serviceName, env.RUNTIME);`}\n </FunctionDeclaration>\n <Spacing />\n <TSDoc heading=\"Returns a named tracer from the global OpenTelemetry TracerProvider. Wraps `trace.getTracer()` for convenience.\">\n <TSDocParam name=\"name\">\n {`The name of the tracer (typically the instrumentation library name or component name).`}\n </TSDocParam>\n <TSDocParam name=\"version\">\n {`Optional version of the instrumentation library.`}\n </TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n name=\"getTracer\"\n export\n parameters={[\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\", optional: true }\n ]}\n returnType=\"ReturnType<typeof trace.getTracer>\">\n {code`return trace.getTracer(name, version);`}\n </FunctionDeclaration>\n <Spacing />\n <Show when={Boolean(children)}>{children}</Show>\n </BuiltinFile>\n );\n}\n"],"mappings":"4hBA8BA,SAAgB,EAAO,EAAA,CACvB,GAAQ,CAAC,CAAA,WAET,WAAA,GAAA,EAAA,EAAA,CAAA,WAAA,UAAA,CAAA,CAEE,EAAA,GAAA,CACA,OAAC,EAAoB,EAAe,EAAW,CAC/C,GAAA,QACF,YAAgB,uHACd,CAAA,EAAS,CACP,IAAC,SAAS,CACT,OAAO,EAAA,CACR,qBAAA,CAAA,CAAA,KAAA,QAEI,CAAA,CAAA,KAAA,OAEC,CAAA,CACJ,KAAA,cACI,CAAC,CACJ,KAAA,UACG,CAAC,CACJ,KAAS,UACP,CAAA,CACE,KAAE,oBACH,CAAE,CACD,KAAI,eACL,CAAE,CACD,KAAI,iBACJ,KAAI,GACL,CAAE,CACD,KAAI,oBACJ,KAAI,GACL,CAAE,CACD,KAAI,aACJ,KAAC,GACF,CAAC,CACF,0BAA0B,CAAA,CACxB,KAAI,OACL,CAAC,CACF,qCAAyB,CAAA,CACvB,KAAI,kCACL,CAAC,CACF,sBAAa,CAAA,CACX,KAAI,sBACL,CAAE,CACD,KAAC,eACD,KAAE,GACH,CAAE,CACD,KAAI,uBACL,CAAE,CACD,KAAE,4BACH,CAAE,CACD,KAAI,0BACL,CAAC,CACF,iCAAG,CAAA,CACD,KAAE,2BACH,CAAE,CACD,KAAE,kBACF,KAAI,GACL,CAAC,CACF,2BAAa,CAAA,CACX,KAAI,yBACL,CAAE,CACD,KAAI,kBACL,CAAE,CACD,KAAI,cACL,CAAC,CACF,0BAA2B,CAAC,CAC1B,KAAI,iBACL,CAAC,CACF,6BAA2B,CAAA,CACzB,KAAI,gBACL,CAAC,CACF,gCAAiC,CAAA,CAC/B,KAAI,sBACL,CAAC,CACD,KAAA,qBACD,CAAA,CACD,KAAA,oBACD,CAAA,CACE,KAAO,kBACP,CAAA,CACD,KAAM,mBACJ,CAAA,CACC,KAAM,qBACP,CAAC,CACD,KAAA,2BACA,CAAE,CACD,KAAA,eACF,KAAK,GACN,CAAA,CACA,KAAM,UACJ,KAAA,GACA,CAAE,CACD,KAAA,eACF,KAAK,GACN,CAAI,CACJ,KAAM,gBACH,KAAA,KAER,oCAA2C,CAAC,CACrC,KAAO,gBACN,KAAC,GACL,CAAA,CACA,0CAAA,CAAA,CACJ,KAAA,oBAAA,CAAA,CAEA,CAAO,GAAO,EAAA,CAAA,EAEd,eAAA,CAAA,IAAA,CAAA,MAAA,CAEA,CACE,IAAA,UAAY,CACd,MAAA,CAAA,EAAA,EAAA,4DAEA,IAAU,UAAW,CACb,MAAM,CAAA,EAAoB,EAAW,CAC7C,KAAA,MACA,SAAA,uFACK,CAAA,CAAO,EAAE,EAAA,CACJ,KAAC,UACJ,SAAW,4DACT,CAAC,CAAA,EAEL,CAAC,CAAA,EAAK,EAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CACN,QAAI,iJACJ,IAAK,UAAC,CACH,OAAA,EAAe,EAAiB,eAExC,SAAoB,kDACb,CAAA,EAEH,CAAA,CAAA,CAAQ;;;;;;;;;;;;;;;;;;;;;;GAsBV,EAAgB,EAAM,EAAA,CAAA,CAAA,EAAY,EAAA,CAC9B,QAAQ,sJACR,IAAE,UAAU,CACX,OAAA,EAAiB,EAAW,CACzB,KAAA,SACF,SAAU,yGACX,CAAA,EAEF,CAAC,CAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBN,EAAgB,EAAK,EAAA,CAAA,CAAA,EAAA,EAAA,CACjB,QAAK,yFACP,IAAA,UAAS,CACR,MAAA,CAAA,EAAsB,EAAA,CACjB,KAAI,cACJ,SAAQ,6FACT,CAAC,CAAE,EAAe,EAAA,CACpB,KAAA,aACG,SAAE,wDACZ,CAAA,CAAA,EAAA,EAAA,oBAEQ,SAAA,oGACA,CAAA,CAAA,EAAA,EAAA,CACR,KAAA,8FAEG,CAAA,CAAS,EAAkB,EAAK,CAC3B,KAAA,iBACA,SAAY,mGACX,CAAA,CAAA,EAAgB,EAAA,CACrB,KAAS,gBACH,SAAC,iGACF,CAAC,CAAA,EAEN,CAAA,CAAA,EAAoB,EAAK,CACzB,QAAM,2JACP,IAAA,UAAA,aAEG,KAAO,uBACH,SAAA,+DACD,CAAC,EAEN,CAAA,CAAA,EAAsB,EAAW,CACnC,KAAA,yBAEI,WAAU,CAAA,CACR,KAAC,wBACP,KAAA,yBACF,CAAA,mBAEM,IAAA,UAAc,CACd,MAAA,EAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yEAuC2C,EAAA,OAAA,KAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`@stryke/path/join-paths`),t=require(`automd`),n=require(`powerlines/plugin-utils`);const r=r=>(0,t.defineGenerator)({name:`trace`,async generate(){let t=(0,e.joinPaths)((0,n.getDocsOutputPath)(r.config.root),`trace.md`);return r.fs.existsSync(t)?{contents:await r.fs.read(t)||``}:{contents:``}}});exports.trace=r;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as _$automd from "automd";
|
|
2
|
+
import { UnresolvedContext } from "powerlines";
|
|
3
|
+
|
|
4
|
+
//#region src/helpers/automd-generator.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* AutoMD generator to generate feature flags documentation
|
|
7
|
+
*
|
|
8
|
+
* @param context - The generator context.
|
|
9
|
+
* @returns The generated documentation content.
|
|
10
|
+
*/
|
|
11
|
+
declare const trace: (context: UnresolvedContext) => _$automd.Generator;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { trace };
|
|
14
|
+
//# sourceMappingURL=automd-generator.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automd-generator.d.cts","names":[],"sources":["../../src/helpers/automd-generator.ts"],"mappings":";;;;;;;AA6BA;;;cAAa,KAAA,GAAS,OAAA,EAAS,iBAAA,KAAiB,QAAA,CAAA,SAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as _$automd from "automd";
|
|
2
|
+
import { UnresolvedContext } from "powerlines";
|
|
3
|
+
|
|
4
|
+
//#region src/helpers/automd-generator.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* AutoMD generator to generate feature flags documentation
|
|
7
|
+
*
|
|
8
|
+
* @param context - The generator context.
|
|
9
|
+
* @returns The generated documentation content.
|
|
10
|
+
*/
|
|
11
|
+
declare const trace: (context: UnresolvedContext) => _$automd.Generator;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { trace };
|
|
14
|
+
//# sourceMappingURL=automd-generator.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automd-generator.d.mts","names":[],"sources":["../../src/helpers/automd-generator.ts"],"mappings":";;;;;;;AA6BA;;;cAAa,KAAA,GAAS,OAAA,EAAS,iBAAA,KAAiB,QAAA,CAAA,SAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{joinPaths as e}from"@stryke/path/join-paths";import{defineGenerator as t}from"automd";import{getDocsOutputPath as n}from"powerlines/plugin-utils";const r=r=>t({name:`trace`,async generate(){let t=e(n(r.config.root),`trace.md`);return r.fs.existsSync(t)?{contents:await r.fs.read(t)||``}:{contents:``}}});export{r as trace};
|
|
2
|
+
//# sourceMappingURL=automd-generator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automd-generator.mjs","names":[],"sources":["../../src/helpers/automd-generator.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { defineGenerator } from \"automd\";\nimport { UnresolvedContext } from \"powerlines\";\nimport { getDocsOutputPath } from \"powerlines/plugin-utils\";\n\n/**\n * AutoMD generator to generate feature flags documentation\n *\n * @param context - The generator context.\n * @returns The generated documentation content.\n */\nexport const trace = (context: UnresolvedContext) =>\n defineGenerator({\n name: \"trace\",\n async generate() {\n const traceDocFile = joinPaths(\n getDocsOutputPath(context.config.root),\n \"trace.md\"\n );\n\n if (!context.fs.existsSync(traceDocFile)) {\n return {\n contents: \"\"\n };\n }\n\n const contents = await context.fs.read(traceDocFile);\n\n return {\n contents: contents || \"\"\n };\n }\n });\n"],"mappings":"yJA6BA,MAAa,EAAQ,GAAU,EAAiB,CAC9C,KAAA,QACA,MAAM,UAAS,CACb,IAAM,EAAW,EAAA,EAAA,EAAA,OAAA,KAAA,CAAA,WAAA,CAOjB,OANE,EAAM,GAAA,WAAe,EAAS,CAM5B,CACF,SAAI,MAFY,EAAW,GAAA,KAAA,EAAe,EAE3B,GAChB,CAPG,CACA,SAAS,GACV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./automd-generator.cjs`);exports.trace=e.trace;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{trace as e}from"./automd-generator.mjs";export{e as trace};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./_virtual/_rolldown/runtime.cjs`),t=require(`./helpers/automd-generator.cjs`),n=require(`./components/trace-builtin.cjs`);let r=require(`@alloy-js/core/jsx-runtime`),i=require(`defu`);i=e.__toESM(i);let a=require(`@powerlines/plugin-alloy/render`),o=require(`@powerlines/plugin-automd`);o=e.__toESM(o);let s=require(`@powerlines/plugin-env`);s=e.__toESM(s);const c=(e={})=>[(0,s.default)(e.env),{name:`open-telemetry`,async prepare(){return this.debug(`Preparing the OpenTelemetry runtime artifacts for the Powerlines project.`),(0,a.render)(this,(0,r.createComponent)(n.TraceBuiltin,{}))}},{name:`open-telemetry:automd-generator`,config(){return{automd:(0,i.default)(e.automd??{},{generators:{trace:t.trace(this)}})}}},(0,o.default)(e.automd)];exports.default=c,exports.plugin=c;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AttributesFromHeaderFunc, AttributesFromHeaders, Configuration, FetchInstrumentationConfig, InstrumentationConfiguration, InstrumentationOptionOrName, OTLPExporterConfig, OpenTelemetryPluginContext, OpenTelemetryPluginOptions, OpenTelemetryPluginResolvedConfig, OpenTelemetryPluginUserConfig, PropagatorOrName, SampleOrName, SpanExporterOrName, SpanProcessorOrName } from "./types/plugin.cjs";
|
|
2
|
+
import { OpenTelemetryEnv } from "./types/env.cjs";
|
|
3
|
+
import { Plugin } from "powerlines";
|
|
4
|
+
|
|
5
|
+
//#region src/index.d.ts
|
|
6
|
+
declare module "powerlines" {
|
|
7
|
+
interface Config {
|
|
8
|
+
openTelemetry?: OpenTelemetryPluginOptions;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A Powerlines plugin to inject environment variables into the source code.
|
|
13
|
+
*/
|
|
14
|
+
declare const plugin: <TContext extends OpenTelemetryPluginContext = OpenTelemetryPluginContext>(options?: OpenTelemetryPluginOptions) => Plugin<TContext>[];
|
|
15
|
+
//#endregion
|
|
16
|
+
export { AttributesFromHeaderFunc, AttributesFromHeaders, Configuration, FetchInstrumentationConfig, InstrumentationConfiguration, InstrumentationOptionOrName, OTLPExporterConfig, OpenTelemetryEnv, OpenTelemetryPluginContext, OpenTelemetryPluginOptions, OpenTelemetryPluginResolvedConfig, OpenTelemetryPluginUserConfig, PropagatorOrName, SampleOrName, SpanExporterOrName, SpanProcessorOrName, plugin as default, plugin };
|
|
17
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.tsx"],"mappings":";;;;;;YAiCY,MAAA;IACR,aAAA,GAAgB,0BAAA;EAAA;AAAA;;;;cAOP,MAAA,oBACM,0BAAA,GAA6B,0BAAA,EAE9C,OAAA,GAAS,0BAAA,KA2BJ,MAAA,CAAO,QAAA"}
|