@nifrajs/otel 5.2.0 → 5.4.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/CHANGELOG.md +28 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +2 -4
- package/dist/cache.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lifecycle.d.ts +6 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +58 -29
- package/dist/lifecycle.js.map +1 -1
- package/dist/otlp.d.ts.map +1 -1
- package/dist/otlp.js +13 -9
- package/dist/otlp.js.map +1 -1
- package/package.json +2 -2
- package/src/cache.ts +5 -4
- package/src/index.ts +1 -0
- package/src/lifecycle.ts +75 -32
- package/src/otlp.ts +13 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @nifrajs/otel
|
|
2
2
|
|
|
3
|
+
## 5.4.0
|
|
4
|
+
|
|
5
|
+
No changes in this release.
|
|
6
|
+
|
|
7
|
+
## 5.3.0
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- 7ab9692: Add build-time schema compilation that emits typed static validators without runtime code generation. Generated modules preserve strict validation and structured issues while avoiding the schema builder and dynamic compiler in deployed bundles.
|
|
12
|
+
|
|
13
|
+
A schema whose property key, `format` name or custom kind holds a quote, backslash or line break, or whose literal holds a backslash or line break, now validates on the eval-free checker and is refused by build-time compilation. TypeBox splices that text into generated source unescaped, so a quote could end the string and run the rest as code.
|
|
14
|
+
|
|
15
|
+
Prepare immutable route modules and layout chains in production while executing authorization gates and loaders for every request. Mutable manifests can disable module preparation with `cacheRouteModules: false`.
|
|
16
|
+
|
|
17
|
+
Reduce output projection bookkeeping for uniform subtrees, reuse request-bound cache views, and record completed cache spans without allocating an active observation. Span parentage, sampling, redaction, exporter isolation, and capability enforcement remain intact.
|
|
18
|
+
|
|
19
|
+
Keep custom start-only `ObservationLifecycle` implementations compatible. The factory returns the extended `RecordingObservationLifecycle` interface with the new `record` method.
|
|
20
|
+
|
|
21
|
+
Mark the migration parser's TypeScript keyword-kind comparison as syntax, so the security check does not mistake it for a secret comparison.
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- 3553267: `otlpExporter`'s `flush()` and `shutdown()` no longer resolve while a span queued before the call is still exporting. Settlement counted spans sent, failed or dropped, so a later span dropped on queue overflow counted toward an earlier flush and resolved it before its batch had settled; a flush now waits until every span queued before it has left the queue and the export in flight.
|
|
26
|
+
|
|
27
|
+
## 5.2.1
|
|
28
|
+
|
|
29
|
+
No changes in this release.
|
|
30
|
+
|
|
3
31
|
## 5.2.0
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
package/dist/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAEnE,yGAAyG;AACzG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,CAAA;AAEzF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAA;CAC1C;AAED,2CAA2C;AAC3C,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;AAWrE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAEnE,yGAAyG;AACzG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,CAAA;AAEzF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAA;CAC1C;AAED,2CAA2C;AAC3C,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;AAWrE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,oBAAoB,CAsDpF"}
|
package/dist/cache.js
CHANGED
|
@@ -62,8 +62,7 @@ export function cacheTracing(options = {}) {
|
|
|
62
62
|
if (event.tag !== undefined)
|
|
63
63
|
keyAttributes(attributes, event.tag, "nifra.cache.tag_prefix", "nifra.cache.tag");
|
|
64
64
|
const revalidation = event.op === "revalidate";
|
|
65
|
-
lifecycle
|
|
66
|
-
.start({
|
|
65
|
+
lifecycle.record({
|
|
67
66
|
name: `cache ${event.op}`,
|
|
68
67
|
kind: "internal",
|
|
69
68
|
startTime: event.startedAt,
|
|
@@ -71,8 +70,7 @@ export function cacheTracing(options = {}) {
|
|
|
71
70
|
...(revalidation
|
|
72
71
|
? { parent: null, links: [{ traceId: trace.traceId, spanId: trace.spanId }] }
|
|
73
72
|
: { parent: trace }),
|
|
74
|
-
})
|
|
75
|
-
.end({ status: event.outcome === "error" ? "error" : "ok", durationMs: event.durationMs });
|
|
73
|
+
}, { status: event.outcome === "error" ? "error" : "ok", durationMs: event.durationMs });
|
|
76
74
|
};
|
|
77
75
|
}
|
|
78
76
|
//# sourceMappingURL=cache.js.map
|
package/dist/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAmC3D,MAAM,UAAU,GAAG,yBAAyB,CAAA;AAE5C,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,SAAS,CAAA;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChC,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,QAAQ,GAAG;QACf,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7D,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;KAC5B,CAAA;IACD,MAAM,SAAS,GAAG,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAA;IAErD,MAAM,aAAa,GAAG,CACpB,UAA0C,EAC1C,KAAa,EACb,UAAkB,EAClB,QAAgB,EACV,EAAE;QACR,IAAI,YAAY,KAAK,MAAM;YAAE,OAAM;QACnC,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;YAC/B,IAAI,MAAM,KAAK,SAAS;gBAAE,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM,CAAA;YACzD,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;YACpC,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC1B,MAAM,UAAU,GAAmC;YACjD,uBAAuB,EAAE,KAAK,CAAC,EAAE;YACjC,qBAAqB,EAAE,KAAK,CAAC,OAAO;YACpC,uBAAuB,EAAE,KAAK,CAAC,QAAQ;SACxC,CAAA;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YACzB,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,CAAA;QACnF,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YACzB,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,CAAA;QACnF,MAAM,YAAY,GAAG,KAAK,CAAC,EAAE,KAAK,YAAY,CAAA;QAC9C,SAAS
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export { causalitySpanLink } from "./causality.js";
|
|
12
12
|
export { type EffectTracingOptions, type EffectTracingPlugin, effectTracing, } from "./effects.js";
|
|
13
|
-
export { type ActiveObservation, createObservationLifecycle, type EndObservation, type ObservationClock, type ObservationContext, type ObservationLifecycle, type ObservationLifecycleOptions, type ObservationParent, type ObservationScope, type StartObservation, } from "./lifecycle.js";
|
|
13
|
+
export { type ActiveObservation, createObservationLifecycle, type EndObservation, type ObservationClock, type ObservationContext, type ObservationLifecycle, type ObservationLifecycleOptions, type ObservationParent, type ObservationScope, type RecordingObservationLifecycle, type StartObservation, } from "./lifecycle.js";
|
|
14
14
|
export { type OtlpExporter, type OtlpExporterOptions, otlpExporter } from "./otlp.js";
|
|
15
15
|
export { type AttributeValue, combineObservationAdapters, consoleSpanExporter, type NifraSpan, type ObservationAdapter, type ObservationLink, type SpanKind, type SpanStatus, } from "./span.js";
|
|
16
16
|
export { formatTraceparent, generateSpanId, generateTraceId, type ParsedTraceparent, parseTraceparent, } from "./traceparent.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,aAAa,GACd,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,KAAK,iBAAiB,EACtB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EACL,KAAK,cAAc,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,KAAK,iBAAiB,EACtB,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,aAAa,GACd,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,KAAK,iBAAiB,EACtB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EACL,KAAK,cAAc,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,KAAK,iBAAiB,EACtB,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAGL,aAAa,GACd,MAAM,cAAc,CAAA;AACrB,OAAO,EAEL,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAGL,aAAa,GACd,MAAM,cAAc,CAAA;AACrB,OAAO,EAEL,0BAA0B,GAU3B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAA+C,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EAEL,0BAA0B,EAC1B,mBAAmB,GAMpB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EAEf,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAA0C,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/lifecycle.d.ts
CHANGED
|
@@ -66,6 +66,11 @@ export interface ActiveObservation {
|
|
|
66
66
|
export interface ObservationLifecycle {
|
|
67
67
|
start(input: StartObservation, additionalAdapters?: readonly ObservationAdapter[]): ActiveObservation;
|
|
68
68
|
}
|
|
69
|
+
/** Factory lifecycles can record completed work; custom start-only implementations remain valid. */
|
|
70
|
+
export interface RecordingObservationLifecycle extends ObservationLifecycle {
|
|
71
|
+
/** Record already-completed work without allocating an active observation. */
|
|
72
|
+
record(input: StartObservation, end: EndObservation): NifraSpan;
|
|
73
|
+
}
|
|
69
74
|
export interface ObservationClock {
|
|
70
75
|
/** Epoch milliseconds for interoperable start/end timestamps. */
|
|
71
76
|
wallTime(): number;
|
|
@@ -80,5 +85,5 @@ export interface ObservationLifecycleOptions {
|
|
|
80
85
|
readonly generateSpanId?: () => string;
|
|
81
86
|
}
|
|
82
87
|
/** Creates an independent lifecycle factory. Adapters are always called fail-open. */
|
|
83
|
-
export declare function createObservationLifecycle(options?: ObservationLifecycleOptions):
|
|
88
|
+
export declare function createObservationLifecycle(options?: ObservationLifecycleOptions): RecordingObservationLifecycle;
|
|
84
89
|
//# sourceMappingURL=lifecycle.d.ts.map
|
package/dist/lifecycle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACX,MAAM,WAAW,CAAA;AAQlB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;AAEhF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;IACxB,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC1C,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IAC9D,+FAA+F;IAC/F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC3C,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IAC9D,0GAA0G;IAC1G,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,oFAAoF;IACpF,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC7C,qFAAqF;IACrF,UAAU,CACR,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,aAAa,CAAC,EACvD,kBAAkB,CAAC,EAAE,SAAS,kBAAkB,EAAE,GACjD,iBAAiB,CAAA;IACpB;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,GAAG,IAAI,CAAA;IACzE,8FAA8F;IAC9F,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACjC,oGAAoG;IACpG,GAAG,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CACH,KAAK,EAAE,gBAAgB,EACvB,kBAAkB,CAAC,EAAE,SAAS,kBAAkB,EAAE,GACjD,iBAAiB,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,IAAI,MAAM,CAAA;IAClB,4CAA4C;IAC5C,aAAa,IAAI,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACjD,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;CACvC;AAOD,sFAAsF;AACtF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,2BAAgC,GACxC,
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/lifecycle.js
CHANGED
|
@@ -11,6 +11,18 @@ const defaultClock = {
|
|
|
11
11
|
/** Creates an independent lifecycle factory. Adapters are always called fail-open. */
|
|
12
12
|
export function createObservationLifecycle(options = {}) {
|
|
13
13
|
const adapters = options.adapters ?? [];
|
|
14
|
+
let adapterSnapshot = [...adapters];
|
|
15
|
+
let recordedAdapters = [...new Set(adapterSnapshot)];
|
|
16
|
+
const adaptersForRecord = () => {
|
|
17
|
+
let changed = adapterSnapshot.length !== adapters.length;
|
|
18
|
+
for (let i = 0; !changed && i < adapters.length; i++)
|
|
19
|
+
changed = adapterSnapshot[i] !== adapters[i];
|
|
20
|
+
if (changed) {
|
|
21
|
+
adapterSnapshot = [...adapters];
|
|
22
|
+
recordedAdapters = [...new Set(adapterSnapshot)];
|
|
23
|
+
}
|
|
24
|
+
return recordedAdapters;
|
|
25
|
+
};
|
|
14
26
|
const clock = options.clock ?? defaultClock;
|
|
15
27
|
const newTraceId = options.generateTraceId ?? generateTraceId;
|
|
16
28
|
const newSpanId = options.generateSpanId ?? generateSpanId;
|
|
@@ -34,8 +46,7 @@ export function createObservationLifecycle(options = {}) {
|
|
|
34
46
|
}
|
|
35
47
|
}
|
|
36
48
|
};
|
|
37
|
-
const
|
|
38
|
-
const spanAdapters = new Set([...adapters, ...additionalAdapters]);
|
|
49
|
+
const makeSpan = (input) => {
|
|
39
50
|
const parent = input.parent === undefined ? parseTraceparent(input.traceparent ?? null) : input.parent;
|
|
40
51
|
const traceId = parent?.traceId ?? newTraceId();
|
|
41
52
|
const spanId = newSpanId();
|
|
@@ -43,8 +54,7 @@ export function createObservationLifecycle(options = {}) {
|
|
|
43
54
|
const startTime = input.startTime !== undefined && Number.isFinite(input.startTime)
|
|
44
55
|
? input.startTime
|
|
45
56
|
: clock.wallTime();
|
|
46
|
-
|
|
47
|
-
const span = {
|
|
57
|
+
return {
|
|
48
58
|
traceId,
|
|
49
59
|
spanId,
|
|
50
60
|
...(parent === null ? {} : { parentSpanId: parent.spanId }),
|
|
@@ -66,10 +76,38 @@ export function createObservationLifecycle(options = {}) {
|
|
|
66
76
|
}))),
|
|
67
77
|
}),
|
|
68
78
|
};
|
|
79
|
+
};
|
|
80
|
+
const finish = (span, endInput, monotonicStart, recordedError = false) => {
|
|
81
|
+
Object.assign(span.attributes, endInput.attributes);
|
|
82
|
+
if (endInput.durationMs !== undefined && Number.isFinite(endInput.durationMs)) {
|
|
83
|
+
span.durationMs = Math.max(0, endInput.durationMs);
|
|
84
|
+
span.endTime = span.startTime + span.durationMs;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
span.endTime = clock.wallTime();
|
|
88
|
+
span.durationMs = Math.max(0, clock.monotonicTime() - monotonicStart);
|
|
89
|
+
}
|
|
90
|
+
span.status =
|
|
91
|
+
endInput.status ??
|
|
92
|
+
(endInput.statusCode === undefined
|
|
93
|
+
? recordedError
|
|
94
|
+
? "error"
|
|
95
|
+
: "ok"
|
|
96
|
+
: endInput.statusCode >= 500
|
|
97
|
+
? "error"
|
|
98
|
+
: "ok");
|
|
99
|
+
Object.freeze(span.attributes);
|
|
100
|
+
return Object.freeze(span);
|
|
101
|
+
};
|
|
102
|
+
const start = (input, additionalAdapters = []) => {
|
|
103
|
+
const spanAdapters = new Set([...adapters, ...additionalAdapters]);
|
|
104
|
+
const span = makeSpan(input);
|
|
105
|
+
const { traceId, spanId, parentSpanId, sampled } = span;
|
|
106
|
+
const monotonicStart = clock.monotonicTime();
|
|
69
107
|
const context = {
|
|
70
108
|
traceId,
|
|
71
109
|
spanId,
|
|
72
|
-
...(
|
|
110
|
+
...(parentSpanId === undefined ? {} : { parentSpanId }),
|
|
73
111
|
sampled,
|
|
74
112
|
traceparent: formatTraceparent(traceId, spanId, sampled),
|
|
75
113
|
};
|
|
@@ -113,29 +151,7 @@ export function createObservationLifecycle(options = {}) {
|
|
|
113
151
|
if (ended)
|
|
114
152
|
return span;
|
|
115
153
|
ended = true;
|
|
116
|
-
|
|
117
|
-
if (endInput.durationMs !== undefined && Number.isFinite(endInput.durationMs)) {
|
|
118
|
-
span.durationMs = Math.max(0, endInput.durationMs);
|
|
119
|
-
span.endTime = span.startTime + span.durationMs;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
span.endTime = clock.wallTime();
|
|
123
|
-
span.durationMs = Math.max(0, clock.monotonicTime() - monotonicStart);
|
|
124
|
-
}
|
|
125
|
-
span.status =
|
|
126
|
-
endInput.status ??
|
|
127
|
-
(endInput.statusCode === undefined
|
|
128
|
-
? recordedError
|
|
129
|
-
? "error"
|
|
130
|
-
: "ok"
|
|
131
|
-
: endInput.statusCode >= 500
|
|
132
|
-
? "error"
|
|
133
|
-
: "ok");
|
|
134
|
-
// Publish an immutable completed span: a misbehaving adapter can no longer mutate the shared
|
|
135
|
-
// attributes bag and corrupt what other adapters (or the caller) observe. Adapters are fail-open,
|
|
136
|
-
// so a stray write throws into their own try/catch rather than changing request behavior.
|
|
137
|
-
Object.freeze(span.attributes);
|
|
138
|
-
Object.freeze(span);
|
|
154
|
+
finish(span, endInput, monotonicStart, recordedError);
|
|
139
155
|
notifyEnd(span, [...spanAdapters]);
|
|
140
156
|
return span;
|
|
141
157
|
},
|
|
@@ -143,6 +159,19 @@ export function createObservationLifecycle(options = {}) {
|
|
|
143
159
|
notifyStart(span, [...spanAdapters]);
|
|
144
160
|
return active;
|
|
145
161
|
};
|
|
146
|
-
return {
|
|
162
|
+
return {
|
|
163
|
+
start,
|
|
164
|
+
record(input, endInput) {
|
|
165
|
+
const spanAdapters = adaptersForRecord();
|
|
166
|
+
const span = makeSpan(input);
|
|
167
|
+
const monotonicStart = endInput.durationMs !== undefined && Number.isFinite(endInput.durationMs)
|
|
168
|
+
? 0
|
|
169
|
+
: clock.monotonicTime();
|
|
170
|
+
notifyStart(span, spanAdapters);
|
|
171
|
+
finish(span, endInput, monotonicStart);
|
|
172
|
+
notifyEnd(span, spanAdapters);
|
|
173
|
+
return span;
|
|
174
|
+
},
|
|
175
|
+
};
|
|
147
176
|
}
|
|
148
177
|
//# sourceMappingURL=lifecycle.js.map
|
package/dist/lifecycle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/otlp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otlp.d.ts","sourceRoot":"","sources":["../src/otlp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAA6B,kBAAkB,EAAwB,MAAM,WAAW,CAAA;AAEpG,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,sBAAsB;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,2FAA2F;QAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;QAC1B,oGAAoG;QACpG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;QAC1B,mFAAmF;QACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAClC,CAAA;IACD;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChG;AAED,MAAM,WAAW,YAAa,SAAQ,kBAAkB;IACtD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,0GAA0G;IAC1G,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAiED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"otlp.d.ts","sourceRoot":"","sources":["../src/otlp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAA6B,kBAAkB,EAAwB,MAAM,WAAW,CAAA;AAEpG,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,sBAAsB;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,2FAA2F;QAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;QAC1B,oGAAoG;QACpG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;QAC1B,mFAAmF;QACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAClC,CAAA;IACD;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChG;AAED,MAAM,WAAW,YAAa,SAAQ,kBAAkB;IACtD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,0GAA0G;IAC1G,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAiED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAuIvE"}
|
package/dist/otlp.js
CHANGED
|
@@ -77,10 +77,12 @@ export function otlpExporter(options) {
|
|
|
77
77
|
const resourceAttributes = keyValues({ "service.name": options.serviceName ?? "nifra" });
|
|
78
78
|
const queue = [];
|
|
79
79
|
let timer;
|
|
80
|
-
// Spans ever queued,
|
|
81
|
-
//
|
|
80
|
+
// Spans ever queued, numbered in order. The queue holds the newest `queue.length` of them and the
|
|
81
|
+
// batch in flight the run starting at `inFlightFrom`, so every span numbered below the older of the
|
|
82
|
+
// two has been sent, failed or dropped. A count of settled spans is not enough: a later span dropped
|
|
83
|
+
// on overflow would count toward an earlier flush whose batch is still exporting.
|
|
82
84
|
let queued = 0;
|
|
83
|
-
let
|
|
85
|
+
let inFlightFrom;
|
|
84
86
|
const waiters = [];
|
|
85
87
|
let pumping = false;
|
|
86
88
|
const report = (error) => {
|
|
@@ -133,11 +135,11 @@ export function otlpExporter(options) {
|
|
|
133
135
|
clearTimeout(deadline);
|
|
134
136
|
}
|
|
135
137
|
};
|
|
136
|
-
const settle = (
|
|
137
|
-
|
|
138
|
+
const settle = () => {
|
|
139
|
+
const unsettled = inFlightFrom ?? queued - queue.length;
|
|
138
140
|
for (let i = waiters.length - 1; i >= 0; i--) {
|
|
139
141
|
const waiter = waiters[i];
|
|
140
|
-
if (waiter === undefined || waiter.mark >
|
|
142
|
+
if (waiter === undefined || waiter.mark > unsettled)
|
|
141
143
|
continue;
|
|
142
144
|
waiters.splice(i, 1);
|
|
143
145
|
waiter.resolve();
|
|
@@ -146,9 +148,11 @@ export function otlpExporter(options) {
|
|
|
146
148
|
// One export in flight at a time; spans arriving meanwhile wait in the bounded queue.
|
|
147
149
|
const pump = async () => {
|
|
148
150
|
while (queue.length > 0) {
|
|
151
|
+
inFlightFrom = queued - queue.length;
|
|
149
152
|
const batch = queue.splice(0, maxBatch);
|
|
150
153
|
await send(batch);
|
|
151
|
-
|
|
154
|
+
inFlightFrom = undefined;
|
|
155
|
+
settle();
|
|
152
156
|
}
|
|
153
157
|
};
|
|
154
158
|
const kick = () => {
|
|
@@ -162,7 +166,7 @@ export function otlpExporter(options) {
|
|
|
162
166
|
});
|
|
163
167
|
};
|
|
164
168
|
const flush = () => {
|
|
165
|
-
if (
|
|
169
|
+
if (inFlightFrom === undefined && queue.length === 0)
|
|
166
170
|
return Promise.resolve();
|
|
167
171
|
const done = new Promise((resolve) => waiters.push({ mark: queued, resolve }));
|
|
168
172
|
kick();
|
|
@@ -180,7 +184,7 @@ export function otlpExporter(options) {
|
|
|
180
184
|
queued++;
|
|
181
185
|
if (queue.length > maxQueue) {
|
|
182
186
|
queue.shift(); // drop the oldest under sustained backpressure rather than grow unbounded
|
|
183
|
-
settle(
|
|
187
|
+
settle();
|
|
184
188
|
report(new Error("otlp_queue_overflow_span_dropped"));
|
|
185
189
|
}
|
|
186
190
|
if (queue.length >= maxBatch)
|
package/dist/otlp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otlp.js","sourceRoot":"","sources":["../src/otlp.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"otlp.js","sourceRoot":"","sources":["../src/otlp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/otel",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.0",
|
|
4
4
|
"description": "Distributed tracing for nifra - W3C traceparent/tracestate propagation + OpenTelemetry-semantic-convention spans via a pluggable exporter. Bridge to the OpenTelemetry SDK or log spans directly; no SDK bundled. Edge-safe.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"access": "public"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@nifrajs/core": "^5.
|
|
76
|
+
"@nifrajs/core": "^5.4.0"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
79
|
"@nifrajs/cache": "workspace:*",
|
package/src/cache.ts
CHANGED
|
@@ -100,8 +100,8 @@ export function cacheTracing(options: CacheTracingOptions = {}): CacheTracingObs
|
|
|
100
100
|
if (event.tag !== undefined)
|
|
101
101
|
keyAttributes(attributes, event.tag, "nifra.cache.tag_prefix", "nifra.cache.tag")
|
|
102
102
|
const revalidation = event.op === "revalidate"
|
|
103
|
-
lifecycle
|
|
104
|
-
|
|
103
|
+
lifecycle.record(
|
|
104
|
+
{
|
|
105
105
|
name: `cache ${event.op}`,
|
|
106
106
|
kind: "internal",
|
|
107
107
|
startTime: event.startedAt,
|
|
@@ -109,7 +109,8 @@ export function cacheTracing(options: CacheTracingOptions = {}): CacheTracingObs
|
|
|
109
109
|
...(revalidation
|
|
110
110
|
? { parent: null, links: [{ traceId: trace.traceId, spanId: trace.spanId }] }
|
|
111
111
|
: { parent: trace }),
|
|
112
|
-
}
|
|
113
|
-
|
|
112
|
+
},
|
|
113
|
+
{ status: event.outcome === "error" ? "error" : "ok", durationMs: event.durationMs },
|
|
114
|
+
)
|
|
114
115
|
}
|
|
115
116
|
}
|
package/src/index.ts
CHANGED
|
@@ -25,6 +25,7 @@ export {
|
|
|
25
25
|
type ObservationLifecycleOptions,
|
|
26
26
|
type ObservationParent,
|
|
27
27
|
type ObservationScope,
|
|
28
|
+
type RecordingObservationLifecycle,
|
|
28
29
|
type StartObservation,
|
|
29
30
|
} from "./lifecycle.ts"
|
|
30
31
|
export { type OtlpExporter, type OtlpExporterOptions, otlpExporter } from "./otlp.ts"
|
package/src/lifecycle.ts
CHANGED
|
@@ -94,6 +94,12 @@ export interface ObservationLifecycle {
|
|
|
94
94
|
): ActiveObservation
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
/** Factory lifecycles can record completed work; custom start-only implementations remain valid. */
|
|
98
|
+
export interface RecordingObservationLifecycle extends ObservationLifecycle {
|
|
99
|
+
/** Record already-completed work without allocating an active observation. */
|
|
100
|
+
record(input: StartObservation, end: EndObservation): NifraSpan
|
|
101
|
+
}
|
|
102
|
+
|
|
97
103
|
export interface ObservationClock {
|
|
98
104
|
/** Epoch milliseconds for interoperable start/end timestamps. */
|
|
99
105
|
wallTime(): number
|
|
@@ -117,8 +123,20 @@ const defaultClock: ObservationClock = {
|
|
|
117
123
|
/** Creates an independent lifecycle factory. Adapters are always called fail-open. */
|
|
118
124
|
export function createObservationLifecycle(
|
|
119
125
|
options: ObservationLifecycleOptions = {},
|
|
120
|
-
):
|
|
126
|
+
): RecordingObservationLifecycle {
|
|
121
127
|
const adapters = options.adapters ?? []
|
|
128
|
+
let adapterSnapshot = [...adapters]
|
|
129
|
+
let recordedAdapters = [...new Set(adapterSnapshot)]
|
|
130
|
+
const adaptersForRecord = (): readonly ObservationAdapter[] => {
|
|
131
|
+
let changed = adapterSnapshot.length !== adapters.length
|
|
132
|
+
for (let i = 0; !changed && i < adapters.length; i++)
|
|
133
|
+
changed = adapterSnapshot[i] !== adapters[i]
|
|
134
|
+
if (changed) {
|
|
135
|
+
adapterSnapshot = [...adapters]
|
|
136
|
+
recordedAdapters = [...new Set(adapterSnapshot)]
|
|
137
|
+
}
|
|
138
|
+
return recordedAdapters
|
|
139
|
+
}
|
|
122
140
|
const clock = options.clock ?? defaultClock
|
|
123
141
|
const newTraceId = options.generateTraceId ?? generateTraceId
|
|
124
142
|
const newSpanId = options.generateSpanId ?? generateSpanId
|
|
@@ -143,11 +161,7 @@ export function createObservationLifecycle(
|
|
|
143
161
|
}
|
|
144
162
|
}
|
|
145
163
|
|
|
146
|
-
const
|
|
147
|
-
input: StartObservation,
|
|
148
|
-
additionalAdapters: readonly ObservationAdapter[] = [],
|
|
149
|
-
): ActiveObservation => {
|
|
150
|
-
const spanAdapters = new Set([...adapters, ...additionalAdapters])
|
|
164
|
+
const makeSpan = (input: StartObservation): NifraSpan => {
|
|
151
165
|
const parent =
|
|
152
166
|
input.parent === undefined ? parseTraceparent(input.traceparent ?? null) : input.parent
|
|
153
167
|
const traceId = parent?.traceId ?? newTraceId()
|
|
@@ -157,8 +171,7 @@ export function createObservationLifecycle(
|
|
|
157
171
|
input.startTime !== undefined && Number.isFinite(input.startTime)
|
|
158
172
|
? input.startTime
|
|
159
173
|
: clock.wallTime()
|
|
160
|
-
|
|
161
|
-
const span: NifraSpan = {
|
|
174
|
+
return {
|
|
162
175
|
traceId,
|
|
163
176
|
spanId,
|
|
164
177
|
...(parent === null ? {} : { parentSpanId: parent.spanId }),
|
|
@@ -184,10 +197,47 @@ export function createObservationLifecycle(
|
|
|
184
197
|
),
|
|
185
198
|
}),
|
|
186
199
|
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const finish = (
|
|
203
|
+
span: NifraSpan,
|
|
204
|
+
endInput: EndObservation,
|
|
205
|
+
monotonicStart: number,
|
|
206
|
+
recordedError = false,
|
|
207
|
+
): NifraSpan => {
|
|
208
|
+
Object.assign(span.attributes, endInput.attributes)
|
|
209
|
+
if (endInput.durationMs !== undefined && Number.isFinite(endInput.durationMs)) {
|
|
210
|
+
span.durationMs = Math.max(0, endInput.durationMs)
|
|
211
|
+
span.endTime = span.startTime + span.durationMs
|
|
212
|
+
} else {
|
|
213
|
+
span.endTime = clock.wallTime()
|
|
214
|
+
span.durationMs = Math.max(0, clock.monotonicTime() - monotonicStart)
|
|
215
|
+
}
|
|
216
|
+
span.status =
|
|
217
|
+
endInput.status ??
|
|
218
|
+
(endInput.statusCode === undefined
|
|
219
|
+
? recordedError
|
|
220
|
+
? "error"
|
|
221
|
+
: "ok"
|
|
222
|
+
: endInput.statusCode >= 500
|
|
223
|
+
? "error"
|
|
224
|
+
: "ok")
|
|
225
|
+
Object.freeze(span.attributes)
|
|
226
|
+
return Object.freeze(span)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const start = (
|
|
230
|
+
input: StartObservation,
|
|
231
|
+
additionalAdapters: readonly ObservationAdapter[] = [],
|
|
232
|
+
): ActiveObservation => {
|
|
233
|
+
const spanAdapters = new Set([...adapters, ...additionalAdapters])
|
|
234
|
+
const span = makeSpan(input)
|
|
235
|
+
const { traceId, spanId, parentSpanId, sampled } = span
|
|
236
|
+
const monotonicStart = clock.monotonicTime()
|
|
187
237
|
const context: ObservationContext = {
|
|
188
238
|
traceId,
|
|
189
239
|
spanId,
|
|
190
|
-
...(
|
|
240
|
+
...(parentSpanId === undefined ? {} : { parentSpanId }),
|
|
191
241
|
sampled,
|
|
192
242
|
traceparent: formatTraceparent(traceId, spanId, sampled),
|
|
193
243
|
}
|
|
@@ -230,28 +280,7 @@ export function createObservationLifecycle(
|
|
|
230
280
|
end(endInput = {}) {
|
|
231
281
|
if (ended) return span
|
|
232
282
|
ended = true
|
|
233
|
-
|
|
234
|
-
if (endInput.durationMs !== undefined && Number.isFinite(endInput.durationMs)) {
|
|
235
|
-
span.durationMs = Math.max(0, endInput.durationMs)
|
|
236
|
-
span.endTime = span.startTime + span.durationMs
|
|
237
|
-
} else {
|
|
238
|
-
span.endTime = clock.wallTime()
|
|
239
|
-
span.durationMs = Math.max(0, clock.monotonicTime() - monotonicStart)
|
|
240
|
-
}
|
|
241
|
-
span.status =
|
|
242
|
-
endInput.status ??
|
|
243
|
-
(endInput.statusCode === undefined
|
|
244
|
-
? recordedError
|
|
245
|
-
? "error"
|
|
246
|
-
: "ok"
|
|
247
|
-
: endInput.statusCode >= 500
|
|
248
|
-
? "error"
|
|
249
|
-
: "ok")
|
|
250
|
-
// Publish an immutable completed span: a misbehaving adapter can no longer mutate the shared
|
|
251
|
-
// attributes bag and corrupt what other adapters (or the caller) observe. Adapters are fail-open,
|
|
252
|
-
// so a stray write throws into their own try/catch rather than changing request behavior.
|
|
253
|
-
Object.freeze(span.attributes)
|
|
254
|
-
Object.freeze(span)
|
|
283
|
+
finish(span, endInput, monotonicStart, recordedError)
|
|
255
284
|
notifyEnd(span, [...spanAdapters])
|
|
256
285
|
return span
|
|
257
286
|
},
|
|
@@ -261,5 +290,19 @@ export function createObservationLifecycle(
|
|
|
261
290
|
return active
|
|
262
291
|
}
|
|
263
292
|
|
|
264
|
-
return {
|
|
293
|
+
return {
|
|
294
|
+
start,
|
|
295
|
+
record(input, endInput) {
|
|
296
|
+
const spanAdapters = adaptersForRecord()
|
|
297
|
+
const span = makeSpan(input)
|
|
298
|
+
const monotonicStart =
|
|
299
|
+
endInput.durationMs !== undefined && Number.isFinite(endInput.durationMs)
|
|
300
|
+
? 0
|
|
301
|
+
: clock.monotonicTime()
|
|
302
|
+
notifyStart(span, spanAdapters)
|
|
303
|
+
finish(span, endInput, monotonicStart)
|
|
304
|
+
notifyEnd(span, spanAdapters)
|
|
305
|
+
return span
|
|
306
|
+
},
|
|
307
|
+
}
|
|
265
308
|
}
|
package/src/otlp.ts
CHANGED
|
@@ -125,10 +125,12 @@ export function otlpExporter(options: OtlpExporterOptions): OtlpExporter {
|
|
|
125
125
|
|
|
126
126
|
const queue: NifraSpan[] = []
|
|
127
127
|
let timer: ReturnType<typeof setInterval> | undefined
|
|
128
|
-
// Spans ever queued,
|
|
129
|
-
//
|
|
128
|
+
// Spans ever queued, numbered in order. The queue holds the newest `queue.length` of them and the
|
|
129
|
+
// batch in flight the run starting at `inFlightFrom`, so every span numbered below the older of the
|
|
130
|
+
// two has been sent, failed or dropped. A count of settled spans is not enough: a later span dropped
|
|
131
|
+
// on overflow would count toward an earlier flush whose batch is still exporting.
|
|
130
132
|
let queued = 0
|
|
131
|
-
let
|
|
133
|
+
let inFlightFrom: number | undefined
|
|
132
134
|
const waiters: Array<{ readonly mark: number; readonly resolve: () => void }> = []
|
|
133
135
|
let pumping = false
|
|
134
136
|
|
|
@@ -180,11 +182,11 @@ export function otlpExporter(options: OtlpExporterOptions): OtlpExporter {
|
|
|
180
182
|
}
|
|
181
183
|
}
|
|
182
184
|
|
|
183
|
-
const settle = (
|
|
184
|
-
|
|
185
|
+
const settle = (): void => {
|
|
186
|
+
const unsettled = inFlightFrom ?? queued - queue.length
|
|
185
187
|
for (let i = waiters.length - 1; i >= 0; i--) {
|
|
186
188
|
const waiter = waiters[i]
|
|
187
|
-
if (waiter === undefined || waiter.mark >
|
|
189
|
+
if (waiter === undefined || waiter.mark > unsettled) continue
|
|
188
190
|
waiters.splice(i, 1)
|
|
189
191
|
waiter.resolve()
|
|
190
192
|
}
|
|
@@ -193,9 +195,11 @@ export function otlpExporter(options: OtlpExporterOptions): OtlpExporter {
|
|
|
193
195
|
// One export in flight at a time; spans arriving meanwhile wait in the bounded queue.
|
|
194
196
|
const pump = async (): Promise<void> => {
|
|
195
197
|
while (queue.length > 0) {
|
|
198
|
+
inFlightFrom = queued - queue.length
|
|
196
199
|
const batch = queue.splice(0, maxBatch)
|
|
197
200
|
await send(batch)
|
|
198
|
-
|
|
201
|
+
inFlightFrom = undefined
|
|
202
|
+
settle()
|
|
199
203
|
}
|
|
200
204
|
}
|
|
201
205
|
|
|
@@ -209,7 +213,7 @@ export function otlpExporter(options: OtlpExporterOptions): OtlpExporter {
|
|
|
209
213
|
}
|
|
210
214
|
|
|
211
215
|
const flush = (): Promise<void> => {
|
|
212
|
-
if (
|
|
216
|
+
if (inFlightFrom === undefined && queue.length === 0) return Promise.resolve()
|
|
213
217
|
const done = new Promise<void>((resolve) => waiters.push({ mark: queued, resolve }))
|
|
214
218
|
kick()
|
|
215
219
|
return done
|
|
@@ -227,7 +231,7 @@ export function otlpExporter(options: OtlpExporterOptions): OtlpExporter {
|
|
|
227
231
|
queued++
|
|
228
232
|
if (queue.length > maxQueue) {
|
|
229
233
|
queue.shift() // drop the oldest under sustained backpressure rather than grow unbounded
|
|
230
|
-
settle(
|
|
234
|
+
settle()
|
|
231
235
|
report(new Error("otlp_queue_overflow_span_dropped"))
|
|
232
236
|
}
|
|
233
237
|
if (queue.length >= maxBatch) kick()
|