@pristine-ts/telemetry 1.0.440 → 2.0.2

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.
Files changed (63) hide show
  1. package/dist/lib/cjs/enums/console-tracer-output-mode.enum.js +16 -0
  2. package/dist/lib/cjs/enums/console-tracer-output-mode.enum.js.map +1 -0
  3. package/dist/lib/cjs/enums/enums.js +1 -0
  4. package/dist/lib/cjs/enums/enums.js.map +1 -1
  5. package/dist/lib/cjs/managers/tracing.manager.js +41 -41
  6. package/dist/lib/cjs/managers/tracing.manager.js.map +1 -1
  7. package/dist/lib/cjs/telemetry.configuration-keys.js +26 -0
  8. package/dist/lib/cjs/telemetry.configuration-keys.js.map +1 -0
  9. package/dist/lib/cjs/telemetry.module.js +90 -0
  10. package/dist/lib/cjs/telemetry.module.js.map +1 -1
  11. package/dist/lib/cjs/tracers/console.tracer.js +106 -0
  12. package/dist/lib/cjs/tracers/console.tracer.js.map +1 -0
  13. package/dist/lib/cjs/tracers/file.tracer.js +161 -0
  14. package/dist/lib/cjs/tracers/file.tracer.js.map +1 -0
  15. package/dist/lib/cjs/tracers/tracers.js +2 -1
  16. package/dist/lib/cjs/tracers/tracers.js.map +1 -1
  17. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  18. package/dist/lib/cjs/utils/span-runner.js +81 -0
  19. package/dist/lib/cjs/utils/span-runner.js.map +1 -0
  20. package/dist/lib/cjs/utils/trace-renderer.js +128 -0
  21. package/dist/lib/cjs/utils/trace-renderer.js.map +1 -0
  22. package/dist/lib/cjs/utils/utils.js +19 -0
  23. package/dist/lib/cjs/utils/utils.js.map +1 -0
  24. package/dist/lib/esm/enums/console-tracer-output-mode.enum.js +13 -0
  25. package/dist/lib/esm/enums/console-tracer-output-mode.enum.js.map +1 -0
  26. package/dist/lib/esm/enums/enums.js +1 -0
  27. package/dist/lib/esm/enums/enums.js.map +1 -1
  28. package/dist/lib/esm/managers/tracing.manager.js +42 -42
  29. package/dist/lib/esm/managers/tracing.manager.js.map +1 -1
  30. package/dist/lib/esm/telemetry.configuration-keys.js +23 -0
  31. package/dist/lib/esm/telemetry.configuration-keys.js.map +1 -0
  32. package/dist/lib/esm/telemetry.module.js +91 -1
  33. package/dist/lib/esm/telemetry.module.js.map +1 -1
  34. package/dist/lib/esm/tracers/console.tracer.js +103 -0
  35. package/dist/lib/esm/tracers/console.tracer.js.map +1 -0
  36. package/dist/lib/esm/tracers/file.tracer.js +125 -0
  37. package/dist/lib/esm/tracers/file.tracer.js.map +1 -0
  38. package/dist/lib/esm/tracers/tracers.js +2 -1
  39. package/dist/lib/esm/tracers/tracers.js.map +1 -1
  40. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -0
  41. package/dist/lib/esm/utils/span-runner.js +77 -0
  42. package/dist/lib/esm/utils/span-runner.js.map +1 -0
  43. package/dist/lib/esm/utils/trace-renderer.js +124 -0
  44. package/dist/lib/esm/utils/trace-renderer.js.map +1 -0
  45. package/dist/lib/esm/utils/utils.js +3 -0
  46. package/dist/lib/esm/utils/utils.js.map +1 -0
  47. package/dist/types/enums/console-tracer-output-mode.enum.d.ts +11 -0
  48. package/dist/types/enums/enums.d.ts +1 -0
  49. package/dist/types/managers/tracing.manager.d.ts +3 -1
  50. package/dist/types/telemetry.configuration-keys.d.ts +48 -0
  51. package/dist/types/telemetry.module.d.ts +2 -0
  52. package/dist/types/tracers/console.tracer.d.ts +28 -0
  53. package/dist/types/tracers/file.tracer.d.ts +34 -0
  54. package/dist/types/tracers/tracers.d.ts +2 -1
  55. package/dist/types/utils/span-runner.d.ts +59 -0
  56. package/dist/types/utils/trace-renderer.d.ts +41 -0
  57. package/dist/types/utils/utils.d.ts +2 -0
  58. package/package.json +4 -4
  59. package/dist/lib/cjs/tracers/basic.tracer.js +0 -50
  60. package/dist/lib/cjs/tracers/basic.tracer.js.map +0 -1
  61. package/dist/lib/esm/tracers/basic.tracer.js +0 -47
  62. package/dist/lib/esm/tracers/basic.tracer.js.map +0 -1
  63. package/dist/types/tracers/basic.tracer.d.ts +0 -12
@@ -11,9 +11,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
13
  import { inject, injectable, injectAll, singleton } from "tsyringe";
14
+ import { TelemetryConfigurationKeys } from "../telemetry.configuration-keys";
14
15
  import { Trace } from "../models/trace.model";
15
16
  import { Span } from "../models/span.model";
16
- import { moduleScoped, ServiceDefinitionTagEnum, tag, TracingContext } from "@pristine-ts/common";
17
+ import { injectConfig, moduleScoped, ServiceDefinitionTagEnum, tag, TracingContext } from "@pristine-ts/common";
17
18
  import { SpanKeynameEnum } from "../enums/span-keyname.enum";
18
19
  import { TelemetryModuleKeyname } from "../telemetry.module.keyname";
19
20
  /**
@@ -89,43 +90,55 @@ let TracingManager = class TracingManager {
89
90
  */
90
91
  startSpan(keyname, parentKeyname, parentId, context) {
91
92
  var _a;
92
- // Check if there's an active trace. If not, start one.
93
+ // Make sure a trace exists. `startTracing` is the canonical entry point, but a direct
94
+ // `startSpan` call (e.g. from project code) should auto-start a trace rather than fail.
93
95
  if (this.trace === undefined) {
94
96
  this.startTracing(SpanKeynameEnum.RootExecution, undefined, context);
95
97
  }
96
- // Create the new span
97
- const span = new Span(keyname, context);
98
+ // Construct the span. NOTE the third constructor argument: `Span(keyname, id?, context?)`.
99
+ // A previous version of this code passed `context` in the `id` slot, which corrupted span
100
+ // identities and broke parent-by-id lookup at line 133 silently. Always pass `undefined`
101
+ // for the id so a fresh UUID is generated, and put context in the third slot.
102
+ const span = new Span(keyname, undefined, context);
103
+ // Defensive: tracing must never throw. If the trace is somehow still undefined here
104
+ // (an exception inside `startTracing` that we swallowed and logged), return the bare
105
+ // span so the caller can still call `.end()` on it without exploding.
98
106
  if (this.trace === undefined) {
99
- this.loghandler.error("The trace should not be undefined at this point.");
100
- return span; // Return because tracing should not throw.
107
+ this.loghandler.error("Trace is undefined after startTracing; returning unattached span.", { span });
108
+ return span;
101
109
  }
102
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
103
110
  span.trace = this.trace;
104
- // Retrieve the parent and add it to the span.
105
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
111
+ // Resolve the parent span. The default parent is the trace's rootSpan, but we may not
112
+ // have one if the trace was started via a path that didn't set it (programming error
113
+ // upstream, but we tolerate it). When no rootSpan exists, attach the new span as a
114
+ // top-level orphan and warn-log once instead of crashing.
106
115
  let parentSpan = this.trace.rootSpan;
107
- // Check to find the parentKeyname in our internal map of spans. If n ot, the rootSpan will be the parent since every span
108
- // needs at least one parent.
109
116
  if (parentKeyname) {
110
117
  const parentSpans = this.spans[parentKeyname];
111
- // If multiple spans have the same keyname we need an id to find the parent
112
118
  if (parentSpans) {
113
119
  if (parentSpans.length > 1) {
114
- if (!parentId) {
115
- //this.loghandler.error("Error finding the parent span, there are multiple spans with that keyname and no id is provided.", {parentKeyname});
116
- }
117
- else {
120
+ if (parentId) {
118
121
  parentSpan = (_a = parentSpans.find(span => span.id === parentId)) !== null && _a !== void 0 ? _a : parentSpan;
119
122
  }
123
+ // If multiple parents exist with the same keyname and no id was provided, fall back
124
+ // to the existing default (rootSpan or whatever parentSpan was) — silent rather
125
+ // than noisy because this is recoverable.
120
126
  }
121
127
  else if (parentSpans.length === 1) {
122
- // If only one span has the keyname we can use it
123
128
  parentSpan = parentSpans[0];
124
129
  }
125
130
  }
126
131
  }
127
- // Add the new span as a child of its parent.
128
- parentSpan.addChild(span);
132
+ if (parentSpan === undefined) {
133
+ this.loghandler.warning("startSpan: no parent span available (rootSpan is undefined). Attaching as orphan.", {
134
+ keyname,
135
+ parentKeyname,
136
+ traceId: this.trace.id,
137
+ });
138
+ }
139
+ else {
140
+ parentSpan.addChild(span);
141
+ }
129
142
  this.addSpan(span);
130
143
  return span;
131
144
  }
@@ -134,18 +147,14 @@ let TracingManager = class TracingManager {
134
147
  * @param span The span to add.
135
148
  */
136
149
  addSpan(span) {
137
- // Check if there's an active trace. If not, log an error and return;
150
+ // Tracing must never throw. If there's no active trace, log and return the span
151
+ // unchanged — caller can still call `.end()` on it because Span.end uses optional
152
+ // chaining on tracingManager.
138
153
  if (this.trace === undefined) {
139
154
  this.loghandler.error("You cannot call 'addSpan' without having an existing Trace.", { span });
140
155
  return span;
141
156
  }
142
- // Assign the tracing manager and the current trace to the span.
143
157
  span.tracingManager = this;
144
- if (this.trace === undefined) {
145
- this.loghandler.error("The trace should not be undefined at this point.");
146
- return span; // Return because tracing should not throw.
147
- }
148
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
149
158
  span.trace = this.trace;
150
159
  // Add it to the map of spans
151
160
  if (!this.spans[span.keyname]) {
@@ -240,23 +249,14 @@ let TracingManager = class TracingManager {
240
249
  if (this.isActive === false) {
241
250
  return;
242
251
  }
243
- // Notify the TraceListeners that the Trace was ended.
252
+ // Notify every registered tracer that the trace ended. The tracers handle their own
253
+ // formatting + transport (console pretty-print, file dump, X-Ray export, etc.). The
254
+ // manager itself no longer logs a summary here — `ConsoleTracer` produces a richer
255
+ // tree-formatted output when the user opts into it.
244
256
  this.tracers.forEach((tracer) => {
245
257
  var _a;
246
258
  (_a = tracer.traceEndedStream) === null || _a === void 0 ? void 0 : _a.push(this.trace);
247
259
  });
248
- // Trace time
249
- // Top 5 longest spans
250
- const longestSpans = Object.values(this.spans).flat(2).sort((a, b) => b.getDuration() - a.getDuration());
251
- longestSpans.splice(5);
252
- this.loghandler.debug("Ending the trace. \n" +
253
- "Trace duration: " + this.trace.getDuration() + " ms \n" +
254
- "Top 5 longest spans: \n" + longestSpans.map(span => "\t" + span.getDuration() + " ms - " + span.keyname).join("\n"), {
255
- extra: {
256
- trace: this.trace,
257
- },
258
- eventId: this.trace.id,
259
- });
260
260
  }
261
261
  };
262
262
  TracingManager = __decorate([
@@ -264,10 +264,10 @@ TracingManager = __decorate([
264
264
  tag("TracingManagerInterface"),
265
265
  singleton(),
266
266
  injectable(),
267
- __param(0, injectAll(ServiceDefinitionTagEnum.Tracer)),
267
+ __param(0, injectAll(ServiceDefinitionTagEnum.Tracer, { isOptional: true })),
268
268
  __param(1, inject("LogHandlerInterface")),
269
- __param(2, inject("%pristine.telemetry.active%")),
270
- __param(3, inject("%pristine.telemetry.debug%")),
269
+ __param(2, injectConfig(TelemetryConfigurationKeys.Active)),
270
+ __param(3, injectConfig(TelemetryConfigurationKeys.Debug)),
271
271
  __metadata("design:paramtypes", [Array, Object, Boolean, Boolean, TracingContext])
272
272
  ], TracingManager);
273
273
  export { TracingManager };
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.manager.js","sourceRoot":"","sources":["../../../../src/managers/tracing.manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracing.manager.js","sourceRoot":"","sources":["../../../../src/managers/tracing.manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Typed configuration keys for `@pristine-ts/telemetry`. Use these constants with `@injectConfig`
3
+ * for autocomplete + rename safety, instead of typing the parameter name as a string.
4
+ *
5
+ * ```ts
6
+ * import {injectConfig} from "@pristine-ts/common";
7
+ * import {TelemetryConfigurationKeys} from "@pristine-ts/telemetry";
8
+ *
9
+ * constructor(@injectConfig(TelemetryConfigurationKeys.Active) value: ...) {}
10
+ * ```
11
+ */
12
+ export const TelemetryConfigurationKeys = {
13
+ Active: "pristine.telemetry.active",
14
+ Debug: "pristine.telemetry.debug",
15
+ ConsoleTracerActivated: "pristine.telemetry.console-tracer.activated",
16
+ ConsoleTracerOutputMode: "pristine.telemetry.console-tracer.output-mode",
17
+ ConsoleTracerMinimumDurationMs: "pristine.telemetry.console-tracer.minimum-duration-ms",
18
+ FileTracerActivated: "pristine.telemetry.file-tracer.activated",
19
+ FileTracerOutputMode: "pristine.telemetry.file-tracer.output-mode",
20
+ FileTracerDirectory: "pristine.telemetry.file-tracer.directory",
21
+ FileTracerFilenamePattern: "pristine.telemetry.file-tracer.filename-pattern",
22
+ };
23
+ //# sourceMappingURL=telemetry.configuration-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.configuration-keys.js","sourceRoot":"","sources":["../../../src/telemetry.configuration-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,MAAM,EAAE,2BAA2B;IACnC,KAAK,EAAE,0BAA0B;IACjC,sBAAsB,EAAE,6CAA6C;IACrE,uBAAuB,EAAE,+CAA+C;IACxE,8BAA8B,EAAE,uDAAuD;IACvF,mBAAmB,EAAE,0CAA0C;IAC/D,oBAAoB,EAAE,4CAA4C;IAClE,mBAAmB,EAAE,0CAA0C;IAC/D,yBAAyB,EAAE,iDAAiD;CACpE,CAAC"}
@@ -1,12 +1,15 @@
1
1
  import { CommonModule } from "@pristine-ts/common";
2
2
  import { TelemetryModuleKeyname } from "./telemetry.module.keyname";
3
3
  import { LoggingModule } from "@pristine-ts/logging";
4
- import { BooleanResolver, EnvironmentVariableResolver } from "@pristine-ts/configuration";
4
+ import { BooleanResolver, EnumResolver, EnvironmentVariableResolver, NumberResolver } from "@pristine-ts/configuration";
5
+ import { ConsoleTracerOutputModeEnum } from "./enums/console-tracer-output-mode.enum";
5
6
  export * from "./enums/enums";
6
7
  export * from "./interfaces/interfaces";
7
8
  export * from "./managers/managers";
8
9
  export * from "./models/models";
9
10
  export * from "./tracers/tracers";
11
+ export * from "./utils/utils";
12
+ export * from "./telemetry.configuration-keys";
10
13
  export const TelemetryModule = {
11
14
  keyname: TelemetryModuleKeyname,
12
15
  importModules: [
@@ -37,6 +40,93 @@ export const TelemetryModule = {
37
40
  defaultResolvers: [
38
41
  new BooleanResolver(new EnvironmentVariableResolver("PRISTINE_TRACING_DEBUG")),
39
42
  ]
43
+ },
44
+ /**
45
+ * Whether `ConsoleTracer` should print completed traces to stdout. Off by default —
46
+ * when on, every trace whose duration exceeds `console-tracer.minimum-duration-ms`
47
+ * is rendered. Best for local development; in production prefer a real backend.
48
+ */
49
+ {
50
+ parameterName: TelemetryModuleKeyname + ".console-tracer.activated",
51
+ defaultValue: false,
52
+ isRequired: false,
53
+ defaultResolvers: [
54
+ new BooleanResolver(new EnvironmentVariableResolver("PRISTINE_TELEMETRY_CONSOLE_TRACER_ACTIVATED")),
55
+ ]
56
+ },
57
+ /**
58
+ * Output format for `ConsoleTracer`. See `ConsoleTracerOutputModeEnum`.
59
+ */
60
+ {
61
+ parameterName: TelemetryModuleKeyname + ".console-tracer.output-mode",
62
+ defaultValue: ConsoleTracerOutputModeEnum.Tree,
63
+ isRequired: false,
64
+ defaultResolvers: [
65
+ new EnumResolver(new EnvironmentVariableResolver("PRISTINE_TELEMETRY_CONSOLE_TRACER_OUTPUT_MODE"), ConsoleTracerOutputModeEnum),
66
+ ]
67
+ },
68
+ /**
69
+ * Skip rendering traces shorter than this many milliseconds. Useful when most requests
70
+ * are fast and you only want to see the slow outliers. `0` means render everything.
71
+ */
72
+ {
73
+ parameterName: TelemetryModuleKeyname + ".console-tracer.minimum-duration-ms",
74
+ defaultValue: 0,
75
+ isRequired: false,
76
+ defaultResolvers: [
77
+ new NumberResolver(new EnvironmentVariableResolver("PRISTINE_TELEMETRY_CONSOLE_TRACER_MINIMUM_DURATION_MS")),
78
+ ]
79
+ },
80
+ /**
81
+ * Whether `FileTracer` should write completed traces to disk. Off by default. When on,
82
+ * one file per trace is written to `directory` using `filename-pattern`.
83
+ */
84
+ {
85
+ parameterName: TelemetryModuleKeyname + ".file-tracer.activated",
86
+ defaultValue: false,
87
+ isRequired: false,
88
+ defaultResolvers: [
89
+ new BooleanResolver(new EnvironmentVariableResolver("PRISTINE_TELEMETRY_FILE_TRACER_ACTIVATED")),
90
+ ]
91
+ },
92
+ /**
93
+ * Output format for `FileTracer`. Reuses the same enum as `ConsoleTracer` — `json`
94
+ * is the practical default for files since it's machine-readable.
95
+ */
96
+ {
97
+ parameterName: TelemetryModuleKeyname + ".file-tracer.output-mode",
98
+ defaultValue: ConsoleTracerOutputModeEnum.Json,
99
+ isRequired: false,
100
+ defaultResolvers: [
101
+ new EnumResolver(new EnvironmentVariableResolver("PRISTINE_TELEMETRY_FILE_TRACER_OUTPUT_MODE"), ConsoleTracerOutputModeEnum),
102
+ ]
103
+ },
104
+ /**
105
+ * Directory where `FileTracer` writes trace files. Resolved relative to `process.cwd()`
106
+ * if not absolute. The directory is created on demand if it doesn't exist.
107
+ */
108
+ {
109
+ parameterName: TelemetryModuleKeyname + ".file-tracer.directory",
110
+ defaultValue: "./traces",
111
+ isRequired: false,
112
+ defaultResolvers: [
113
+ new EnvironmentVariableResolver("PRISTINE_TELEMETRY_FILE_TRACER_DIRECTORY"),
114
+ ]
115
+ },
116
+ /**
117
+ * Filename pattern for `FileTracer`. Supports the placeholders:
118
+ * - `<traceId>` — the trace's UUID (also used as the eventId throughout Pristine)
119
+ * - `<date>` — UTC date as `YYYY-MM-DD`
120
+ * - `<timestamp>` — milliseconds since epoch at the moment the trace ended
121
+ * Default: `<traceId>.json` (or `.txt` if you change the output mode away from json).
122
+ */
123
+ {
124
+ parameterName: TelemetryModuleKeyname + ".file-tracer.filename-pattern",
125
+ defaultValue: "<traceId>.json",
126
+ isRequired: false,
127
+ defaultResolvers: [
128
+ new EnvironmentVariableResolver("PRISTINE_TELEMETRY_FILE_TRACER_FILENAME_PATTERN"),
129
+ ]
40
130
  }
41
131
  ]
42
132
  };
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.module.js","sourceRoot":"","sources":["../../../src/telemetry.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAkB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,eAAe,EAAE,2BAA2B,EAAC,MAAM,4BAA4B,CAAC;AAExF,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,OAAO,EAAE,sBAAsB;IAC/B,aAAa,EAAE;QACb,YAAY;QACZ,aAAa;KACd;IACD,qBAAqB,EAAE,EAAE;IACzB,wBAAwB,EAAE;QACxB;;WAEG;QACH;YACE,aAAa,EAAE,sBAAsB,GAAG,SAAS;YACjD,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,eAAe,CAAC,IAAI,2BAA2B,CAAC,4BAA4B,CAAC,CAAC;aACnF;SACF;QACD;;;WAGG;QACH;YACE,aAAa,EAAE,sBAAsB,GAAG,QAAQ;YAChD,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,eAAe,CAAC,IAAI,2BAA2B,CAAC,wBAAwB,CAAC,CAAC;aAC/E;SACF;KACF;CACF,CAAA"}
1
+ {"version":3,"file":"telemetry.module.js","sourceRoot":"","sources":["../../../src/telemetry.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { inject, injectable, singleton } from "tsyringe";
14
+ import { Readable } from "stream";
15
+ import { injectConfig, moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
16
+ import { ConsoleTracerOutputModeEnum } from "../enums/console-tracer-output-mode.enum";
17
+ import { TelemetryConfigurationKeys } from "../telemetry.configuration-keys";
18
+ import { TelemetryModuleKeyname } from "../telemetry.module.keyname";
19
+ import { traceRenderer } from "../utils/trace-renderer";
20
+ /**
21
+ * `ConsoleTracer` prints a completed trace to stdout when the trace ends. Its main purpose
22
+ * is **developer-readable feedback during local development**: see what spans ran, in what
23
+ * order, and which one was the bottleneck — without wiring up an external tracing backend.
24
+ *
25
+ * Off by default. Enable via `pristine.telemetry.console-tracer.activated = true` (or
26
+ * `PRISTINE_TELEMETRY_CONSOLE_TRACER_ACTIVATED=true`). Three output modes:
27
+ * - `tree` (default): indented ASCII tree, durations right-aligned, slowest leaf flagged.
28
+ * - `json`: pretty-printed JSON dump.
29
+ * - `flat`: one line per span, no indentation, start-time-sorted.
30
+ *
31
+ * Crash-isolated: a throw inside the formatting code becomes a stderr line, never an
32
+ * unhandled error or process crash.
33
+ */
34
+ let ConsoleTracer = class ConsoleTracer {
35
+ constructor(activated, outputMode, minimumDurationMs, logHandler) {
36
+ this.activated = activated;
37
+ this.outputMode = outputMode;
38
+ this.minimumDurationMs = minimumDurationMs;
39
+ this.logHandler = logHandler;
40
+ this.traceEndedStream = new Readable({
41
+ objectMode: true,
42
+ read(_size) { return true; },
43
+ });
44
+ this.traceEndedStream.on("data", (trace) => {
45
+ try {
46
+ this.handleTraceEnded(trace);
47
+ }
48
+ catch (error) {
49
+ this.reportFailure(error);
50
+ }
51
+ });
52
+ this.traceEndedStream.on("error", (error) => {
53
+ this.reportFailure(error);
54
+ });
55
+ }
56
+ handleTraceEnded(trace) {
57
+ if (this.activated === false) {
58
+ return;
59
+ }
60
+ if (trace.getDuration() < this.minimumDurationMs) {
61
+ return;
62
+ }
63
+ let output;
64
+ switch (this.outputMode) {
65
+ case ConsoleTracerOutputModeEnum.Json:
66
+ output = traceRenderer.renderJson(trace);
67
+ break;
68
+ case ConsoleTracerOutputModeEnum.Flat:
69
+ output = traceRenderer.renderFlat(trace);
70
+ break;
71
+ case ConsoleTracerOutputModeEnum.Tree:
72
+ default:
73
+ output = traceRenderer.renderTree(trace);
74
+ break;
75
+ }
76
+ // Write directly to stdout. Going through the LogHandler would (a) tag every trace
77
+ // line with severity headers the reader doesn't want, and (b) require the user's log
78
+ // level to be Debug to see anything — defeating the point of opting in.
79
+ process.stdout.write(output + "\n");
80
+ }
81
+ reportFailure(error) {
82
+ const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
83
+ try {
84
+ process.stderr.write(`[pristine][tracer:ConsoleTracer] ${message}\n`);
85
+ }
86
+ catch (_a) {
87
+ // If stderr is unwritable too, there's nothing useful left to do.
88
+ }
89
+ }
90
+ };
91
+ ConsoleTracer = __decorate([
92
+ moduleScoped(TelemetryModuleKeyname),
93
+ singleton(),
94
+ tag(ServiceDefinitionTagEnum.Tracer),
95
+ injectable(),
96
+ __param(0, injectConfig(TelemetryConfigurationKeys.ConsoleTracerActivated)),
97
+ __param(1, injectConfig(TelemetryConfigurationKeys.ConsoleTracerOutputMode)),
98
+ __param(2, injectConfig(TelemetryConfigurationKeys.ConsoleTracerMinimumDurationMs)),
99
+ __param(3, inject("LogHandlerInterface")),
100
+ __metadata("design:paramtypes", [Boolean, String, Number, Object])
101
+ ], ConsoleTracer);
102
+ export { ConsoleTracer };
103
+ //# sourceMappingURL=console.tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.tracer.js","sourceRoot":"","sources":["../../../../src/tracers/console.tracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import * as fs from "fs";
14
+ import * as path from "path";
15
+ import { Readable } from "stream";
16
+ import { inject, injectable, singleton } from "tsyringe";
17
+ import { injectConfig, moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
18
+ import { ConsoleTracerOutputModeEnum } from "../enums/console-tracer-output-mode.enum";
19
+ import { TelemetryConfigurationKeys } from "../telemetry.configuration-keys";
20
+ import { TelemetryModuleKeyname } from "../telemetry.module.keyname";
21
+ import { traceRenderer } from "../utils/trace-renderer";
22
+ /**
23
+ * `FileTracer` writes one file per completed trace to a configured directory. Files are
24
+ * named after the trace's id (= eventId throughout Pristine), so locating a request's
25
+ * trace is `cat traces/<eventId>.json`.
26
+ *
27
+ * Off by default. Enable via `pristine.telemetry.file-tracer.activated = true`.
28
+ *
29
+ * Configuration:
30
+ * - `file-tracer.directory` — defaults to `./traces`
31
+ * - `file-tracer.filename-pattern` — defaults to `<traceId>.json`. Placeholders:
32
+ * `<traceId>`, `<date>` (UTC YYYY-MM-DD), `<timestamp>` (ms epoch).
33
+ * - `file-tracer.output-mode` — `json` (default), `tree`, or `flat`.
34
+ *
35
+ * Crash-isolated: a write failure (read-only fs, missing permissions, etc.) becomes a
36
+ * stderr line, never an unhandled error. The framework continues and the next trace is
37
+ * attempted independently.
38
+ */
39
+ let FileTracer = class FileTracer {
40
+ constructor(activated, outputMode, directory, filenamePattern, logHandler) {
41
+ this.activated = activated;
42
+ this.outputMode = outputMode;
43
+ this.directory = directory;
44
+ this.filenamePattern = filenamePattern;
45
+ this.logHandler = logHandler;
46
+ this.traceEndedStream = new Readable({
47
+ objectMode: true,
48
+ read(_size) { return true; },
49
+ });
50
+ this.traceEndedStream.on("data", (trace) => {
51
+ try {
52
+ this.handleTraceEnded(trace);
53
+ }
54
+ catch (error) {
55
+ this.reportFailure(error);
56
+ }
57
+ });
58
+ this.traceEndedStream.on("error", (error) => {
59
+ this.reportFailure(error);
60
+ });
61
+ }
62
+ handleTraceEnded(trace) {
63
+ if (this.activated === false) {
64
+ return;
65
+ }
66
+ const content = this.renderTrace(trace);
67
+ const filename = this.expandFilenamePattern(trace);
68
+ const absoluteDir = path.resolve(process.cwd(), this.directory);
69
+ const absoluteFile = path.join(absoluteDir, filename);
70
+ // Make sure the file's parent directory exists. We mkdir on the file's parent rather
71
+ // than just `absoluteDir` because filename-pattern can introduce subdirectories
72
+ // (e.g. `<date>/<traceId>.json` partitions traces into per-day folders). `recursive:
73
+ // true` is a no-op if the path already exists.
74
+ fs.mkdirSync(path.dirname(absoluteFile), { recursive: true });
75
+ // Write the file. We use `writeFileSync` rather than the async equivalent because the
76
+ // tracer pipeline is synchronous (the framework `.push()`es into the stream and moves
77
+ // on), and a write that returns a Promise would silently leak rejections. The write
78
+ // is small (one trace's worth of JSON, typically <50KB), so the sync cost is bounded.
79
+ fs.writeFileSync(absoluteFile, content);
80
+ }
81
+ renderTrace(trace) {
82
+ switch (this.outputMode) {
83
+ case ConsoleTracerOutputModeEnum.Tree:
84
+ return traceRenderer.renderTree(trace);
85
+ case ConsoleTracerOutputModeEnum.Flat:
86
+ return traceRenderer.renderFlat(trace);
87
+ case ConsoleTracerOutputModeEnum.Json:
88
+ default:
89
+ return traceRenderer.renderJson(trace);
90
+ }
91
+ }
92
+ expandFilenamePattern(trace) {
93
+ var _a, _b;
94
+ const date = new Date((_a = trace.endDate) !== null && _a !== void 0 ? _a : Date.now());
95
+ const isoDate = date.toISOString().slice(0, 10); // YYYY-MM-DD
96
+ const timestamp = String((_b = trace.endDate) !== null && _b !== void 0 ? _b : Date.now());
97
+ return this.filenamePattern
98
+ .replace(/<traceId>/g, trace.id)
99
+ .replace(/<date>/g, isoDate)
100
+ .replace(/<timestamp>/g, timestamp);
101
+ }
102
+ reportFailure(error) {
103
+ const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
104
+ try {
105
+ process.stderr.write(`[pristine][tracer:FileTracer] ${message}\n`);
106
+ }
107
+ catch (_a) {
108
+ // If stderr is unwritable too, there's nothing useful left to do.
109
+ }
110
+ }
111
+ };
112
+ FileTracer = __decorate([
113
+ moduleScoped(TelemetryModuleKeyname),
114
+ singleton(),
115
+ tag(ServiceDefinitionTagEnum.Tracer),
116
+ injectable(),
117
+ __param(0, injectConfig(TelemetryConfigurationKeys.FileTracerActivated)),
118
+ __param(1, injectConfig(TelemetryConfigurationKeys.FileTracerOutputMode)),
119
+ __param(2, injectConfig(TelemetryConfigurationKeys.FileTracerDirectory)),
120
+ __param(3, injectConfig(TelemetryConfigurationKeys.FileTracerFilenamePattern)),
121
+ __param(4, inject("LogHandlerInterface")),
122
+ __metadata("design:paramtypes", [Boolean, String, String, String, Object])
123
+ ], FileTracer);
124
+ export { FileTracer };
125
+ //# sourceMappingURL=file.tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.tracer.js","sourceRoot":"","sources":["../../../../src/tracers/file.tracer.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export * from "./basic.tracer";
1
+ export * from "./console.tracer";
2
+ export * from "./file.tracer";
2
3
  //# sourceMappingURL=tracers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracers.js","sourceRoot":"","sources":["../../../../src/tracers/tracers.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"tracers.js","sourceRoot":"","sources":["../../../../src/tracers/tracers.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}