@nifrajs/otel 2.10.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/metrics.d.ts +2 -2
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +0 -0
- package/dist/metrics.js.map +1 -1
- package/dist/tracing.d.ts +9 -2
- package/dist/tracing.d.ts.map +1 -1
- package/dist/tracing.js +91 -83
- package/dist/tracing.js.map +1 -1
- package/package.json +2 -2
- package/src/metrics.ts +0 -0
- package/src/tracing.ts +22 -6
package/dist/metrics.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* `c` is not touched; apps that want custom app metrics create their own registry and pass it in
|
|
12
12
|
* (`metrics({ registry })`), then register series on it - they render at the same `/metrics`.
|
|
13
13
|
*/
|
|
14
|
-
import { type
|
|
14
|
+
import { type IdentityPlugin } from "@nifrajs/core/server";
|
|
15
15
|
type Labels = Readonly<Record<string, string>>;
|
|
16
16
|
/** A monotonically increasing counter (requests, errors). */
|
|
17
17
|
export declare class Counter {
|
|
@@ -70,6 +70,6 @@ export interface MetricsOptions {
|
|
|
70
70
|
* `nifra_http_request_duration_seconds`, and `nifra_http_requests_in_flight`, labeled by method,
|
|
71
71
|
* matched route template, and status. Apply once (named-plugin dedupe).
|
|
72
72
|
*/
|
|
73
|
-
export declare function metrics(options?: MetricsOptions):
|
|
73
|
+
export declare function metrics(options?: MetricsOptions): IdentityPlugin;
|
|
74
74
|
export {};
|
|
75
75
|
//# sourceMappingURL=metrics.d.ts.map
|
package/dist/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAsB,KAAK,cAAc,EAAwB,MAAM,sBAAsB,CAAA;AAUpG,KAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AA8B9C,6DAA6D;AAC7D,qBAAa,OAAO;IAGhB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAHvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAE/C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM;IAIvB,GAAG,CAAC,MAAM,GAAE,MAAW,EAAE,EAAE,SAAI,GAAG,IAAI;IAMtC,MAAM,IAAI,MAAM;CAMjB;AAED,yEAAyE;AACzE,qBAAa,KAAK;IAGd,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAHvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAE/C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM;IAIvB,OAAO,CAAC,EAAE;IASV,GAAG,CAAC,MAAM,GAAE,MAAW,EAAE,EAAE,SAAI,GAAG,IAAI;IAGtC,GAAG,CAAC,MAAM,GAAE,MAAW,EAAE,EAAE,SAAI,GAAG,IAAI;IAGtC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAGxC,MAAM,IAAI,MAAM;CAMjB;AASD,sGAAsG;AACtG,qBAAa,SAAS;IAIlB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAJvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,MAAM,EAAE;IAK5B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI;IAajD,MAAM,IAAI,MAAM;CAcjB;AAED,+EAA+E;AAC/E,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAE1D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,OAAO;IAQ3C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,KAAK;IAQvC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,SAAO,GAAG,SAAS;IAQ3E,iEAAiE;IACjE,MAAM,IAAI,MAAM;CAOjB;AAED,2GAA2G;AAC3G,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAKD,MAAM,WAAW,cAAc;IAC7B,wGAAwG;IACxG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,sGAAsG;IACtG,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;IACnC,gGAAgG;IAChG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAOD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,cAAc,CAoEpE"}
|
package/dist/metrics.js
CHANGED
|
Binary file
|
package/dist/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAe,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAe,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAA6C,MAAM,sBAAsB,CAAA;AAEpG,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC,CAAA;AAID,MAAM,OAAO,GAAG,4BAA4B,CAAA;AAE5C,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC1F,CAAC;AAED,0FAA0F;AAC1F,SAAS,QAAQ,CAAC,MAAc;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAChF,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,KAAwC;IAC5E,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAChC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;AAC5F,CAAC;AAOD,6DAA6D;AAC7D,MAAM,OAAO,OAAO;IAGP;IACA;IAHM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC1D,YACW,IAAY,EACZ,IAAY;QADZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;QAErB,UAAU,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACD,GAAG,CAAC,SAAiB,EAAE,EAAE,EAAE,GAAG,CAAC;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;;YAClE,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAA;IAC3B,CAAC;IACD,MAAM;QACJ,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,IAAI,CAAC,IAAI,UAAU,CAAC,CAAA;QACjF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAChE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;CACF;AAED,yEAAyE;AACzE,MAAM,OAAO,KAAK;IAGL;IACA;IAHM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC1D,YACW,IAAY,EACZ,IAAY;QADZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;QAErB,UAAU,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACO,EAAE,CAAC,MAAc;QACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IACD,GAAG,CAAC,SAAiB,EAAE,EAAE,EAAE,GAAG,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA;IAC7B,CAAC;IACD,GAAG,CAAC,SAAiB,EAAE,EAAE,EAAE,GAAG,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA;IAC7B,CAAC;IACD,GAAG,CAAC,MAAc,EAAE,KAAa;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,CAAA;IAC/B,CAAC;IACD,MAAM;QACJ,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAA;QAC/E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAChE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;CACF;AASD,sGAAsG;AACtG,MAAM,OAAO,SAAS;IAIT;IACA;IAJM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAA;IAC3C,OAAO,CAAU;IAClC,YACW,IAAY,EACZ,IAAY,EACrB,OAA0B;QAFjB,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;QAGrB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,CAAC,KAAa,EAAE,SAAiB,EAAE;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;YAChF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,KAAK,IAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAY;gBAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAY,GAAG,CAAC,CAAA;QACrF,CAAC;QACD,CAAC,CAAC,GAAG,IAAI,KAAK,CAAA;QACd,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;IACd,CAAC;IACD,MAAM;QACJ,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,IAAI,CAAC,IAAI,YAAY,CAAC,CAAA;QACnF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CACR,GAAG,IAAI,CAAC,IAAI,UAAU,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC/F,CAAA;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,UAAU,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;YACrF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;YAChE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,SAAS,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QACtE,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,OAAO,eAAe;IACT,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAA;IACrC,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAA;IACjC,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAA;IAE1D,OAAO,CAAC,IAAY,EAAE,IAAI,GAAG,IAAI;QAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IACD,KAAK,CAAC,IAAY,EAAE,IAAI,GAAG,IAAI;QAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IACD,SAAS,CAAC,IAAY,EAAE,OAA0B,EAAE,IAAI,GAAG,IAAI;QAC7D,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;YACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IACD,iEAAiE;IACjE,MAAM;QACJ,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC/D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACjE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACjC,CAAC;CACF;AAED,2GAA2G;AAC3G,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,eAAe,EAAE,CAAA;AAC9B,CAAC;AAED,6DAA6D;AAC7D,MAAM,eAAe,GAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AAgBpG;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,UAA0B,EAAE;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAA;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,eAAe,EAAE,CAAA;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAA;IAElD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAC/B,2BAA2B,EAC3B,mDAAmD,CACpD,CAAA;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CACjC,qCAAqC,EACrC,OAAO,EACP,gEAAgE,CACjE,CAAA;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAC7B,+BAA+B,EAC/B,kDAAkD,CACnD,CAAA;IAED,MAAM,KAAK,GAAG,IAAI,OAAO,EAAwB,CAAA;IACjD,iGAAiG;IACjG,yFAAyF;IACzF,IAAI,OAAmC,CAAA;IACvC,MAAM,OAAO,GAAG,CACd,GAAiD,EACjD,MAAc,EACd,CAAS,EACT,EAAE;QACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,MAAM,EAAU,CAAA;YAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/F,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAA;IAClD,CAAC,CAAA;IAED,iGAAiG;IACjG,2EAA2E;IAC3E,OAAO,kBAAkB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QAC3C,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAA,CAAC,oCAAoC;YACvF,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YACpC,OAAO,SAAS,CAAA;QAClB,CAAC,CAAC,CAAA;QACF,GAAG,CAAC,GAAG,CACL,IAAI,EACJ,GAAG,EAAE,CACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;YAC9B,OAAO,EAAE,EAAE,cAAc,EAAE,0CAA0C,EAAE;SACxE,CAAC,CACL,CAAA;QACD,GAAG,CAAC,GAAG,CAAC;YACN,IAAI,EAAE,gBAAgB;YACtB,mBAAmB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACpC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC3B,IAAI,IAAI,KAAK,SAAS;oBAAE,OAAM;gBAC9B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACjB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;gBACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAC9C,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;gBACrD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACpB,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;YACnE,CAAC;SACF,CAAC,CAAA;QACF,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/tracing.d.ts
CHANGED
|
@@ -5,10 +5,17 @@
|
|
|
5
5
|
* your {@link ObservationAdapter} (bridge to the OTel SDK, or log via `consoleSpanExporter`).
|
|
6
6
|
*/
|
|
7
7
|
import { type CausalityContext, type CausalityRecorder } from "@nifrajs/core/causality";
|
|
8
|
-
import { type
|
|
8
|
+
import { type ContextPlugin } from "@nifrajs/core/server";
|
|
9
|
+
import { type ActiveObservation, type ObservationContext } from "./lifecycle.js";
|
|
9
10
|
import { type ObservationAdapter } from "./span.js";
|
|
10
11
|
/** The trace context exposed on the handler `c.trace` (typed, threaded via `derive`). */
|
|
11
12
|
export type TraceContext = ObservationContext;
|
|
13
|
+
/** What `tracing()` adds to every handler context downstream of `.use(tracing())`. */
|
|
14
|
+
export interface TracingContext {
|
|
15
|
+
readonly trace: TraceContext;
|
|
16
|
+
readonly observation: ActiveObservation;
|
|
17
|
+
readonly causality: CausalityContext;
|
|
18
|
+
}
|
|
12
19
|
export interface TracingOptions {
|
|
13
20
|
/** Where spans are sent. Default: {@link consoleSpanExporter}. */
|
|
14
21
|
readonly exporter?: ObservationAdapter;
|
|
@@ -50,5 +57,5 @@ export declare function traceHeaders(trace: TraceContext, causality?: CausalityC
|
|
|
50
57
|
* // in a handler: fetch(url, { headers: traceHeaders(c.trace) }) // continue the trace downstream
|
|
51
58
|
* ```
|
|
52
59
|
*/
|
|
53
|
-
export declare function tracing(options?: TracingOptions):
|
|
60
|
+
export declare function tracing(options?: TracingOptions): ContextPlugin<TracingContext>;
|
|
54
61
|
//# sourceMappingURL=tracing.d.ts.map
|
package/dist/tracing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAKvB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAKvB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,KAAK,aAAa,EAAuB,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAExE,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAAG,kBAAkB,CAAA;AAE7C,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IACtC,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACjD,uDAAuD;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;QACrC,sDAAsD;QACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;QAC3B;;;WAGG;QACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,gBAAgB,KACtB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAChC,CAAA;CACF;AAMD;uDACuD;AACvD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,EACnB,SAAS,CAAC,EAAE,gBAAgB,GAC3B;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAKrE;AAUD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAAC,cAAc,CAAC,CA0GnF"}
|
package/dist/tracing.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* your {@link ObservationAdapter} (bridge to the OTel SDK, or log via `consoleSpanExporter`).
|
|
6
6
|
*/
|
|
7
7
|
import { causalityHeaders, continueCausality, readCausalityHeaders, startCausality, } from "@nifrajs/core/causality";
|
|
8
|
-
import {
|
|
8
|
+
import { defineContextPlugin } from "@nifrajs/core/server";
|
|
9
9
|
import { createObservationLifecycle, } from "./lifecycle.js";
|
|
10
10
|
import { consoleSpanExporter } from "./span.js";
|
|
11
11
|
/** Spread into an outgoing `fetch`/`ctx.api` call's headers to continue the trace downstream:
|
|
@@ -43,93 +43,101 @@ export function tracing(options = {}) {
|
|
|
43
43
|
...(options.adapters ?? []),
|
|
44
44
|
];
|
|
45
45
|
const lifecycle = createObservationLifecycle({ adapters });
|
|
46
|
+
const stopHooks = [...new Set(adapters)].flatMap((adapter) => {
|
|
47
|
+
const shutdown = adapter.shutdown;
|
|
48
|
+
return typeof shutdown === "function" ? [() => Promise.resolve(shutdown.call(adapter))] : [];
|
|
49
|
+
});
|
|
46
50
|
const serviceName = options.serviceName;
|
|
47
51
|
// A WeakMap so an abandoned request cannot leak its active observation.
|
|
48
52
|
const inFlight = new WeakMap();
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
...(serviceName === undefined ? {} : { "service.name": serviceName }),
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
inFlight.set(c.req, observation);
|
|
62
|
-
const causalAt = options.causality?.now?.();
|
|
63
|
-
const derive = (parent) => {
|
|
64
|
-
const causal = parent === undefined
|
|
65
|
-
? startCausality("request", `req_${observation.context.spanId}`, {
|
|
66
|
-
// `traceparent` is untrusted. The server-generated span id keeps graph identity fresh.
|
|
67
|
-
executionId: `exec_${observation.context.traceId}_${observation.context.spanId}`,
|
|
68
|
-
...(causalAt === undefined ? {} : { at: causalAt }),
|
|
69
|
-
trace: {
|
|
70
|
-
traceId: observation.context.traceId,
|
|
71
|
-
spanId: observation.context.spanId,
|
|
72
|
-
},
|
|
73
|
-
})
|
|
74
|
-
: continueCausality(parent, "request", `req_${observation.context.spanId}`, {
|
|
75
|
-
relation: "called",
|
|
76
|
-
...(causalAt === undefined ? {} : { at: causalAt }),
|
|
77
|
-
trace: {
|
|
78
|
-
traceId: observation.context.traceId,
|
|
79
|
-
spanId: observation.context.spanId,
|
|
80
|
-
},
|
|
81
|
-
});
|
|
82
|
-
const derived = { trace: observation.context, observation, causality: causal.context };
|
|
83
|
-
if (options.responseHeader)
|
|
84
|
-
c.set.headers.traceparent = observation.context.traceparent;
|
|
85
|
-
const recorder = options.causality?.recorder;
|
|
86
|
-
return recorder === undefined
|
|
87
|
-
? derived
|
|
88
|
-
: recorder.record(causal.record).then(() => derived);
|
|
89
|
-
};
|
|
90
|
-
const inbound = readCausalityHeaders(c.req.headers);
|
|
91
|
-
const acceptInbound = options.causality?.acceptInbound;
|
|
92
|
-
if (!inbound.success || acceptInbound === undefined)
|
|
93
|
-
return derive();
|
|
94
|
-
let accepted;
|
|
95
|
-
try {
|
|
96
|
-
accepted = acceptInbound(c.req, inbound.context);
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return derive();
|
|
100
|
-
}
|
|
101
|
-
// Keep recorder execution outside the trust-gate catch. A synchronous recorder failure is a
|
|
102
|
-
// durability failure, not a rejected inbound parent, and must fail closed without retrying.
|
|
103
|
-
return typeof accepted === "boolean"
|
|
104
|
-
? derive(accepted ? inbound.context : undefined)
|
|
105
|
-
: Promise.resolve(accepted).then((allowed) => derive(allowed === true ? inbound.context : undefined), () => derive());
|
|
106
|
-
})
|
|
107
|
-
.use({
|
|
108
|
-
name: "tracing-end",
|
|
109
|
-
onError: (error, context) => {
|
|
110
|
-
inFlight.get(context.request)?.recordError(error);
|
|
111
|
-
return undefined;
|
|
112
|
-
},
|
|
113
|
-
onResponseFinalized: (outcome, req) => {
|
|
114
|
-
const observation = inFlight.get(req);
|
|
115
|
-
if (observation === undefined)
|
|
116
|
-
return;
|
|
117
|
-
inFlight.delete(req);
|
|
118
|
-
if (outcome.error !== undefined)
|
|
119
|
-
observation.recordError(outcome.error);
|
|
120
|
-
const res = outcome.response;
|
|
121
|
-
const bodySize = Number(res.headers.get("content-length") ?? "0") || 0;
|
|
122
|
-
const isrStatus = res.headers.get("x-nifra-isr");
|
|
123
|
-
observation.end({
|
|
124
|
-
statusCode: res.status,
|
|
125
|
-
...(outcome.error === undefined ? {} : { status: "error" }),
|
|
53
|
+
return defineContextPlugin("tracing", (app) => {
|
|
54
|
+
for (const stop of stopHooks)
|
|
55
|
+
app.onStop(stop);
|
|
56
|
+
return app
|
|
57
|
+
.derive((c) => {
|
|
58
|
+
const path = pathOf(c.req.url);
|
|
59
|
+
const observation = lifecycle.start({
|
|
60
|
+
name: `${c.req.method} ${path}`,
|
|
61
|
+
traceparent: c.req.headers.get("traceparent"),
|
|
126
62
|
attributes: {
|
|
127
|
-
"http.
|
|
128
|
-
"
|
|
129
|
-
...(
|
|
63
|
+
"http.request.method": c.req.method,
|
|
64
|
+
"url.path": path,
|
|
65
|
+
...(serviceName === undefined ? {} : { "service.name": serviceName }),
|
|
130
66
|
},
|
|
131
67
|
});
|
|
132
|
-
|
|
133
|
-
|
|
68
|
+
inFlight.set(c.req, observation);
|
|
69
|
+
const causalAt = options.causality?.now?.();
|
|
70
|
+
const derive = (parent) => {
|
|
71
|
+
const causal = parent === undefined
|
|
72
|
+
? startCausality("request", `req_${observation.context.spanId}`, {
|
|
73
|
+
// `traceparent` is untrusted. The server-generated span id keeps graph identity fresh.
|
|
74
|
+
executionId: `exec_${observation.context.traceId}_${observation.context.spanId}`,
|
|
75
|
+
...(causalAt === undefined ? {} : { at: causalAt }),
|
|
76
|
+
trace: {
|
|
77
|
+
traceId: observation.context.traceId,
|
|
78
|
+
spanId: observation.context.spanId,
|
|
79
|
+
},
|
|
80
|
+
})
|
|
81
|
+
: continueCausality(parent, "request", `req_${observation.context.spanId}`, {
|
|
82
|
+
relation: "called",
|
|
83
|
+
...(causalAt === undefined ? {} : { at: causalAt }),
|
|
84
|
+
trace: {
|
|
85
|
+
traceId: observation.context.traceId,
|
|
86
|
+
spanId: observation.context.spanId,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
const derived = { trace: observation.context, observation, causality: causal.context };
|
|
90
|
+
if (options.responseHeader)
|
|
91
|
+
c.set.headers.traceparent = observation.context.traceparent;
|
|
92
|
+
const recorder = options.causality?.recorder;
|
|
93
|
+
return recorder === undefined
|
|
94
|
+
? derived
|
|
95
|
+
: recorder.record(causal.record).then(() => derived);
|
|
96
|
+
};
|
|
97
|
+
const inbound = readCausalityHeaders(c.req.headers);
|
|
98
|
+
const acceptInbound = options.causality?.acceptInbound;
|
|
99
|
+
if (!inbound.success || acceptInbound === undefined)
|
|
100
|
+
return derive();
|
|
101
|
+
let accepted;
|
|
102
|
+
try {
|
|
103
|
+
accepted = acceptInbound(c.req, inbound.context);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return derive();
|
|
107
|
+
}
|
|
108
|
+
// Keep recorder execution outside the trust-gate catch. A synchronous recorder failure is a
|
|
109
|
+
// durability failure, not a rejected inbound parent, and must fail closed without retrying.
|
|
110
|
+
return typeof accepted === "boolean"
|
|
111
|
+
? derive(accepted ? inbound.context : undefined)
|
|
112
|
+
: Promise.resolve(accepted).then((allowed) => derive(allowed === true ? inbound.context : undefined), () => derive());
|
|
113
|
+
})
|
|
114
|
+
.use({
|
|
115
|
+
name: "tracing-end",
|
|
116
|
+
onError: (error, context) => {
|
|
117
|
+
inFlight.get(context.request)?.recordError(error);
|
|
118
|
+
return undefined;
|
|
119
|
+
},
|
|
120
|
+
onResponseFinalized: (outcome, req) => {
|
|
121
|
+
const observation = inFlight.get(req);
|
|
122
|
+
if (observation === undefined)
|
|
123
|
+
return;
|
|
124
|
+
inFlight.delete(req);
|
|
125
|
+
if (outcome.error !== undefined)
|
|
126
|
+
observation.recordError(outcome.error);
|
|
127
|
+
const res = outcome.response;
|
|
128
|
+
const bodySize = Number(res.headers.get("content-length") ?? "0") || 0;
|
|
129
|
+
const isrStatus = res.headers.get("x-nifra-isr");
|
|
130
|
+
observation.end({
|
|
131
|
+
statusCode: res.status,
|
|
132
|
+
...(outcome.error === undefined ? {} : { status: "error" }),
|
|
133
|
+
attributes: {
|
|
134
|
+
"http.response.status_code": res.status,
|
|
135
|
+
"http.response.body.size": bodySize,
|
|
136
|
+
...(isrStatus === null ? {} : { "nifra.isr.status": isrStatus }),
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
});
|
|
134
142
|
}
|
|
135
143
|
//# sourceMappingURL=tracing.js.map
|
package/dist/tracing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAGL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,yBAAyB,CAAA;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/otel",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.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",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"access": "public"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@nifrajs/core": "^2.
|
|
52
|
+
"@nifrajs/core": "^2.12.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@nifrajs/core": "workspace:*"
|
package/src/metrics.ts
CHANGED
|
Binary file
|
package/src/tracing.ts
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
readCausalityHeaders,
|
|
14
14
|
startCausality,
|
|
15
15
|
} from "@nifrajs/core/causality"
|
|
16
|
-
import {
|
|
16
|
+
import { type ContextPlugin, defineContextPlugin } from "@nifrajs/core/server"
|
|
17
17
|
import {
|
|
18
18
|
type ActiveObservation,
|
|
19
19
|
createObservationLifecycle,
|
|
@@ -24,6 +24,13 @@ import { consoleSpanExporter, type ObservationAdapter } from "./span.ts"
|
|
|
24
24
|
/** The trace context exposed on the handler `c.trace` (typed, threaded via `derive`). */
|
|
25
25
|
export type TraceContext = ObservationContext
|
|
26
26
|
|
|
27
|
+
/** What `tracing()` adds to every handler context downstream of `.use(tracing())`. */
|
|
28
|
+
export interface TracingContext {
|
|
29
|
+
readonly trace: TraceContext
|
|
30
|
+
readonly observation: ActiveObservation
|
|
31
|
+
readonly causality: CausalityContext
|
|
32
|
+
}
|
|
33
|
+
|
|
27
34
|
export interface TracingOptions {
|
|
28
35
|
/** Where spans are sent. Default: {@link consoleSpanExporter}. */
|
|
29
36
|
readonly exporter?: ObservationAdapter
|
|
@@ -55,6 +62,10 @@ export interface TracingOptions {
|
|
|
55
62
|
}
|
|
56
63
|
}
|
|
57
64
|
|
|
65
|
+
type ShutdownCapableAdapter = ObservationAdapter & {
|
|
66
|
+
readonly shutdown?: () => void | Promise<void>
|
|
67
|
+
}
|
|
68
|
+
|
|
58
69
|
/** Spread into an outgoing `fetch`/`ctx.api` call's headers to continue the trace downstream:
|
|
59
70
|
* `fetch(url, { headers: traceHeaders(c.trace) })`. */
|
|
60
71
|
export function traceHeaders(
|
|
@@ -84,7 +95,7 @@ const pathOf = (url: string): string => {
|
|
|
84
95
|
* // in a handler: fetch(url, { headers: traceHeaders(c.trace) }) // continue the trace downstream
|
|
85
96
|
* ```
|
|
86
97
|
*/
|
|
87
|
-
export function tracing(options: TracingOptions = {}) {
|
|
98
|
+
export function tracing(options: TracingOptions = {}): ContextPlugin<TracingContext> {
|
|
88
99
|
const adapters: ObservationAdapter[] = [
|
|
89
100
|
...(options.exporter === undefined && options.adapters === undefined
|
|
90
101
|
? [consoleSpanExporter()]
|
|
@@ -94,12 +105,17 @@ export function tracing(options: TracingOptions = {}) {
|
|
|
94
105
|
...(options.adapters ?? []),
|
|
95
106
|
]
|
|
96
107
|
const lifecycle = createObservationLifecycle({ adapters })
|
|
108
|
+
const stopHooks = [...new Set(adapters)].flatMap((adapter) => {
|
|
109
|
+
const shutdown = (adapter as ShutdownCapableAdapter).shutdown
|
|
110
|
+
return typeof shutdown === "function" ? [() => Promise.resolve(shutdown.call(adapter))] : []
|
|
111
|
+
})
|
|
97
112
|
const serviceName = options.serviceName
|
|
98
113
|
// A WeakMap so an abandoned request cannot leak its active observation.
|
|
99
114
|
const inFlight = new WeakMap<Request, ActiveObservation>()
|
|
100
115
|
|
|
101
|
-
return
|
|
102
|
-
app
|
|
116
|
+
return defineContextPlugin<TracingContext>("tracing", (app) => {
|
|
117
|
+
for (const stop of stopHooks) app.onStop(stop)
|
|
118
|
+
return app
|
|
103
119
|
.derive((c) => {
|
|
104
120
|
const path = pathOf(c.req.url)
|
|
105
121
|
const observation = lifecycle.start({
|
|
@@ -183,6 +199,6 @@ export function tracing(options: TracingOptions = {}) {
|
|
|
183
199
|
},
|
|
184
200
|
})
|
|
185
201
|
},
|
|
186
|
-
})
|
|
187
|
-
)
|
|
202
|
+
})
|
|
203
|
+
})
|
|
188
204
|
}
|