@pristine-ts/telemetry 2.0.1 → 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 +38 -39
  6. package/dist/lib/cjs/managers/tracing.manager.js.map +1 -1
  7. package/dist/lib/cjs/telemetry.configuration-keys.js +7 -0
  8. package/dist/lib/cjs/telemetry.configuration-keys.js.map +1 -1
  9. package/dist/lib/cjs/telemetry.module.js +89 -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 -1
  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 +38 -39
  29. package/dist/lib/esm/managers/tracing.manager.js.map +1 -1
  30. package/dist/lib/esm/telemetry.configuration-keys.js +7 -0
  31. package/dist/lib/esm/telemetry.configuration-keys.js.map +1 -1
  32. package/dist/lib/esm/telemetry.module.js +90 -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 -1
  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 +15 -0
  51. package/dist/types/telemetry.module.d.ts +1 -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
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.traceRenderer = exports.TraceRenderer = void 0;
4
+ /**
5
+ * Pure-function renderers for `Trace` objects. Used by both `ConsoleTracer` (writes to
6
+ * stdout) and `FileTracer` (writes to disk) so the visual output is identical regardless
7
+ * of destination. All methods are stateless — instantiate once and reuse, or use the
8
+ * exported singleton `traceRenderer` if you don't care.
9
+ */
10
+ class TraceRenderer {
11
+ /**
12
+ * Indented ASCII tree mirroring the span hierarchy. Right-aligned durations, slowest
13
+ * leaf span flagged as `← bottleneck`. Best for human readers.
14
+ *
15
+ * Internal/parent spans are skipped for bottleneck detection on purpose: a parent's
16
+ * duration is the sum of its children's work, so it would always dwarf any single
17
+ * leaf and the flag would never highlight where the actual time was spent.
18
+ */
19
+ renderTree(trace) {
20
+ const lines = [];
21
+ lines.push(`Trace ${trace.id} — ${trace.getDuration()}ms`);
22
+ if (trace.rootSpan === undefined) {
23
+ lines.push(" (no rootSpan)");
24
+ return lines.join("\n");
25
+ }
26
+ // Pre-walk to find the slowest leaf for the bottleneck flag.
27
+ let slowestSpan;
28
+ let slowestDuration = -1;
29
+ this.walkSpans(trace.rootSpan, (s) => {
30
+ if (s.children.length > 0)
31
+ return;
32
+ const d = s.getDuration();
33
+ if (d > slowestDuration) {
34
+ slowestDuration = d;
35
+ slowestSpan = s;
36
+ }
37
+ });
38
+ const rows = [];
39
+ const renderNode = (span, ancestorIsLast) => {
40
+ const prefix = ancestorIsLast.length === 0
41
+ ? ""
42
+ : ancestorIsLast.slice(0, -1).map(isLast => isLast ? " " : "│ ").join("")
43
+ + (ancestorIsLast[ancestorIsLast.length - 1] ? "└── " : "├── ");
44
+ rows.push({
45
+ prefix,
46
+ name: span.keyname,
47
+ duration: span.getDuration(),
48
+ isBottleneck: span === slowestSpan && slowestDuration > 0,
49
+ });
50
+ span.children.forEach((child, idx) => {
51
+ const isLast = idx === span.children.length - 1;
52
+ renderNode(child, [...ancestorIsLast, isLast]);
53
+ });
54
+ };
55
+ renderNode(trace.rootSpan, []);
56
+ // Pad name column so durations line up.
57
+ const nameColumnWidth = Math.max(...rows.map(r => r.prefix.length + r.name.length));
58
+ for (const row of rows) {
59
+ const padding = " ".repeat(Math.max(1, nameColumnWidth - row.prefix.length - row.name.length + 2));
60
+ const durationCell = `${row.duration}ms`.padStart(8);
61
+ const marker = row.isBottleneck ? " ← bottleneck" : "";
62
+ lines.push(`${row.prefix}${row.name}${padding}${durationCell}${marker}`);
63
+ }
64
+ return lines.join("\n");
65
+ }
66
+ /**
67
+ * One line per span sorted by start time, no indentation. Best for grep / log
68
+ * aggregation.
69
+ */
70
+ renderFlat(trace) {
71
+ const lines = [`Trace ${trace.id} — ${trace.getDuration()}ms`];
72
+ const all = [];
73
+ if (trace.rootSpan !== undefined) {
74
+ this.walkSpans(trace.rootSpan, (s) => all.push(s));
75
+ }
76
+ all.sort((a, b) => a.startDate - b.startDate);
77
+ for (const span of all) {
78
+ lines.push(` ${span.keyname.padEnd(48)} ${`${span.getDuration()}ms`.padStart(8)}`);
79
+ }
80
+ return lines.join("\n");
81
+ }
82
+ /**
83
+ * Pretty-printed JSON dump of the trace + every span. Best for piping into a downstream
84
+ * tool that wants structured access.
85
+ */
86
+ renderJson(trace) {
87
+ return JSON.stringify(this.serialize(trace), null, 2);
88
+ }
89
+ /**
90
+ * Serializes a trace to a plain JSON-friendly object. Exposed for callers that want to
91
+ * embed the structured form in a larger payload (e.g. a NDJSON line).
92
+ */
93
+ serialize(trace) {
94
+ return {
95
+ id: trace.id,
96
+ startDate: trace.startDate,
97
+ endDate: trace.endDate,
98
+ duration: trace.getDuration(),
99
+ context: trace.context,
100
+ rootSpan: trace.rootSpan ? this.serializeSpan(trace.rootSpan) : undefined,
101
+ };
102
+ }
103
+ serializeSpan(span) {
104
+ return {
105
+ id: span.id,
106
+ keyname: span.keyname,
107
+ startDate: span.startDate,
108
+ endDate: span.endDate,
109
+ duration: span.getDuration(),
110
+ context: span.context,
111
+ children: span.children.map(s => this.serializeSpan(s)),
112
+ };
113
+ }
114
+ /** Depth-first traversal helper. Visits the root and every descendant once. */
115
+ walkSpans(span, visit) {
116
+ visit(span);
117
+ for (const child of span.children) {
118
+ this.walkSpans(child, visit);
119
+ }
120
+ }
121
+ }
122
+ exports.TraceRenderer = TraceRenderer;
123
+ /**
124
+ * Default singleton. Use this from any caller that doesn't care to construct its own —
125
+ * the class is stateless so sharing is safe.
126
+ */
127
+ exports.traceRenderer = new TraceRenderer();
128
+ //# sourceMappingURL=trace-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-renderer.js","sourceRoot":"","sources":["../../../../src/utils/trace-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./span-runner"), exports);
18
+ __exportStar(require("./trace-renderer"), exports);
19
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,mDAAiC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * How `ConsoleTracer` renders a completed trace.
3
+ */
4
+ export var ConsoleTracerOutputModeEnum;
5
+ (function (ConsoleTracerOutputModeEnum) {
6
+ /** Indented ASCII tree mirroring the span hierarchy. Best for human readers. */
7
+ ConsoleTracerOutputModeEnum["Tree"] = "tree";
8
+ /** Pretty-printed JSON dump of the trace + every span. Best for piping into a tool. */
9
+ ConsoleTracerOutputModeEnum["Json"] = "json";
10
+ /** One span per line, no indentation, sorted by start time. Best for grep. */
11
+ ConsoleTracerOutputModeEnum["Flat"] = "flat";
12
+ })(ConsoleTracerOutputModeEnum || (ConsoleTracerOutputModeEnum = {}));
13
+ //# sourceMappingURL=console-tracer-output-mode.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-tracer-output-mode.enum.js","sourceRoot":"","sources":["../../../../src/enums/console-tracer-output-mode.enum.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,2BAOX;AAPD,WAAY,2BAA2B;IACrC,gFAAgF;IAChF,4CAAa,CAAA;IACb,uFAAuF;IACvF,4CAAa,CAAA;IACb,8EAA8E;IAC9E,4CAAa,CAAA;AACf,CAAC,EAPW,2BAA2B,KAA3B,2BAA2B,QAOtC"}
@@ -1,2 +1,3 @@
1
+ export * from "./console-tracer-output-mode.enum";
1
2
  export * from "./span-keyname.enum";
2
3
  //# sourceMappingURL=enums.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../../src/enums/enums.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../../src/enums/enums.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC"}
@@ -90,43 +90,55 @@ let TracingManager = class TracingManager {
90
90
  */
91
91
  startSpan(keyname, parentKeyname, parentId, context) {
92
92
  var _a;
93
- // 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.
94
95
  if (this.trace === undefined) {
95
96
  this.startTracing(SpanKeynameEnum.RootExecution, undefined, context);
96
97
  }
97
- // Create the new span
98
- 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.
99
106
  if (this.trace === undefined) {
100
- this.loghandler.error("The trace should not be undefined at this point.");
101
- return span; // Return because tracing should not throw.
107
+ this.loghandler.error("Trace is undefined after startTracing; returning unattached span.", { span });
108
+ return span;
102
109
  }
103
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
104
110
  span.trace = this.trace;
105
- // Retrieve the parent and add it to the span.
106
- // 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.
107
115
  let parentSpan = this.trace.rootSpan;
108
- // Check to find the parentKeyname in our internal map of spans. If n ot, the rootSpan will be the parent since every span
109
- // needs at least one parent.
110
116
  if (parentKeyname) {
111
117
  const parentSpans = this.spans[parentKeyname];
112
- // If multiple spans have the same keyname we need an id to find the parent
113
118
  if (parentSpans) {
114
119
  if (parentSpans.length > 1) {
115
- if (!parentId) {
116
- //this.loghandler.error("Error finding the parent span, there are multiple spans with that keyname and no id is provided.", {parentKeyname});
117
- }
118
- else {
120
+ if (parentId) {
119
121
  parentSpan = (_a = parentSpans.find(span => span.id === parentId)) !== null && _a !== void 0 ? _a : parentSpan;
120
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.
121
126
  }
122
127
  else if (parentSpans.length === 1) {
123
- // If only one span has the keyname we can use it
124
128
  parentSpan = parentSpans[0];
125
129
  }
126
130
  }
127
131
  }
128
- // Add the new span as a child of its parent.
129
- 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
+ }
130
142
  this.addSpan(span);
131
143
  return span;
132
144
  }
@@ -135,18 +147,14 @@ let TracingManager = class TracingManager {
135
147
  * @param span The span to add.
136
148
  */
137
149
  addSpan(span) {
138
- // 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.
139
153
  if (this.trace === undefined) {
140
154
  this.loghandler.error("You cannot call 'addSpan' without having an existing Trace.", { span });
141
155
  return span;
142
156
  }
143
- // Assign the tracing manager and the current trace to the span.
144
157
  span.tracingManager = this;
145
- if (this.trace === undefined) {
146
- this.loghandler.error("The trace should not be undefined at this point.");
147
- return span; // Return because tracing should not throw.
148
- }
149
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
150
158
  span.trace = this.trace;
151
159
  // Add it to the map of spans
152
160
  if (!this.spans[span.keyname]) {
@@ -241,23 +249,14 @@ let TracingManager = class TracingManager {
241
249
  if (this.isActive === false) {
242
250
  return;
243
251
  }
244
- // 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.
245
256
  this.tracers.forEach((tracer) => {
246
257
  var _a;
247
258
  (_a = tracer.traceEndedStream) === null || _a === void 0 ? void 0 : _a.push(this.trace);
248
259
  });
249
- // Trace time
250
- // Top 5 longest spans
251
- const longestSpans = Object.values(this.spans).flat(2).sort((a, b) => b.getDuration() - a.getDuration());
252
- longestSpans.splice(5);
253
- this.loghandler.debug("Ending the trace. \n" +
254
- "Trace duration: " + this.trace.getDuration() + " ms \n" +
255
- "Top 5 longest spans: \n" + longestSpans.map(span => "\t" + span.getDuration() + " ms - " + span.keyname).join("\n"), {
256
- extra: {
257
- trace: this.trace,
258
- },
259
- eventId: this.trace.id,
260
- });
261
260
  }
262
261
  };
263
262
  TracingManager = __decorate([
@@ -265,7 +264,7 @@ TracingManager = __decorate([
265
264
  tag("TracingManagerInterface"),
266
265
  singleton(),
267
266
  injectable(),
268
- __param(0, injectAll(ServiceDefinitionTagEnum.Tracer)),
267
+ __param(0, injectAll(ServiceDefinitionTagEnum.Tracer, { isOptional: true })),
269
268
  __param(1, inject("LogHandlerInterface")),
270
269
  __param(2, injectConfig(TelemetryConfigurationKeys.Active)),
271
270
  __param(3, injectConfig(TelemetryConfigurationKeys.Debug)),
@@ -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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"}
@@ -12,5 +12,12 @@
12
12
  export const TelemetryConfigurationKeys = {
13
13
  Active: "pristine.telemetry.active",
14
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",
15
22
  };
16
23
  //# sourceMappingURL=telemetry.configuration-keys.js.map
@@ -1 +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;CACzB,CAAC"}
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,14 @@
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";
10
12
  export * from "./telemetry.configuration-keys";
11
13
  export const TelemetryModule = {
12
14
  keyname: TelemetryModuleKeyname,
@@ -38,6 +40,93 @@ export const TelemetryModule = {
38
40
  defaultResolvers: [
39
41
  new BooleanResolver(new EnvironmentVariableResolver("PRISTINE_TRACING_DEBUG")),
40
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
+ ]
41
130
  }
42
131
  ]
43
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,cAAc,gCAAgC,CAAC;AAC/C,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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"}