@pristine-ts/observability 2.0.16 → 2.0.18

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 (68) hide show
  1. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  2. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
  3. package/package.json +6 -6
  4. package/dist/lib/cjs/models/run-metadata.model.js +0 -18
  5. package/dist/lib/cjs/models/run-metadata.model.js.map +0 -1
  6. package/dist/lib/cjs/observability-configuration.js +0 -49
  7. package/dist/lib/cjs/observability-configuration.js.map +0 -1
  8. package/dist/lib/cjs/serializers/serialized-span.interface.js +0 -3
  9. package/dist/lib/cjs/serializers/serialized-span.interface.js.map +0 -1
  10. package/dist/lib/cjs/serializers/serialized-trace.interface.js +0 -3
  11. package/dist/lib/cjs/serializers/serialized-trace.interface.js.map +0 -1
  12. package/dist/lib/cjs/store/log-tailer.js +0 -110
  13. package/dist/lib/cjs/store/log-tailer.js.map +0 -1
  14. package/dist/lib/cjs/store/observability-paths.js +0 -78
  15. package/dist/lib/cjs/store/observability-paths.js.map +0 -1
  16. package/dist/lib/cjs/store/observability-run-manager.js +0 -346
  17. package/dist/lib/cjs/store/observability-run-manager.js.map +0 -1
  18. package/dist/lib/cjs/store/observability-store-reader.js +0 -174
  19. package/dist/lib/cjs/store/observability-store-reader.js.map +0 -1
  20. package/dist/lib/cjs/store/serializers/serialized-span.interface.js +0 -3
  21. package/dist/lib/cjs/store/serializers/serialized-span.interface.js.map +0 -1
  22. package/dist/lib/cjs/store/serializers/serialized-trace.interface.js +0 -3
  23. package/dist/lib/cjs/store/serializers/serialized-trace.interface.js.map +0 -1
  24. package/dist/lib/cjs/store/serializers/span-deserializer.js +0 -26
  25. package/dist/lib/cjs/store/serializers/span-deserializer.js.map +0 -1
  26. package/dist/lib/cjs/store/serializers/trace-deserializer.js +0 -24
  27. package/dist/lib/cjs/store/serializers/trace-deserializer.js.map +0 -1
  28. package/dist/lib/cjs/store/trace-deserializer.js +0 -41
  29. package/dist/lib/cjs/store/trace-deserializer.js.map +0 -1
  30. package/dist/lib/esm/models/run-metadata.model.js +0 -14
  31. package/dist/lib/esm/models/run-metadata.model.js.map +0 -1
  32. package/dist/lib/esm/observability-configuration.js +0 -46
  33. package/dist/lib/esm/observability-configuration.js.map +0 -1
  34. package/dist/lib/esm/serializers/serialized-span.interface.js +0 -2
  35. package/dist/lib/esm/serializers/serialized-span.interface.js.map +0 -1
  36. package/dist/lib/esm/serializers/serialized-trace.interface.js +0 -2
  37. package/dist/lib/esm/serializers/serialized-trace.interface.js.map +0 -1
  38. package/dist/lib/esm/store/log-tailer.js +0 -73
  39. package/dist/lib/esm/store/log-tailer.js.map +0 -1
  40. package/dist/lib/esm/store/observability-paths.js +0 -41
  41. package/dist/lib/esm/store/observability-paths.js.map +0 -1
  42. package/dist/lib/esm/store/observability-run-manager.js +0 -310
  43. package/dist/lib/esm/store/observability-run-manager.js.map +0 -1
  44. package/dist/lib/esm/store/observability-store-reader.js +0 -138
  45. package/dist/lib/esm/store/observability-store-reader.js.map +0 -1
  46. package/dist/lib/esm/store/serializers/serialized-span.interface.js +0 -2
  47. package/dist/lib/esm/store/serializers/serialized-span.interface.js.map +0 -1
  48. package/dist/lib/esm/store/serializers/serialized-trace.interface.js +0 -2
  49. package/dist/lib/esm/store/serializers/serialized-trace.interface.js.map +0 -1
  50. package/dist/lib/esm/store/serializers/span-deserializer.js +0 -22
  51. package/dist/lib/esm/store/serializers/span-deserializer.js.map +0 -1
  52. package/dist/lib/esm/store/serializers/trace-deserializer.js +0 -20
  53. package/dist/lib/esm/store/serializers/trace-deserializer.js.map +0 -1
  54. package/dist/lib/esm/store/trace-deserializer.js +0 -37
  55. package/dist/lib/esm/store/trace-deserializer.js.map +0 -1
  56. package/dist/types/models/run-metadata.model.d.ts +0 -28
  57. package/dist/types/observability-configuration.d.ts +0 -32
  58. package/dist/types/serializers/serialized-span.interface.d.ts +0 -14
  59. package/dist/types/serializers/serialized-trace.interface.d.ts +0 -14
  60. package/dist/types/store/log-tailer.d.ts +0 -27
  61. package/dist/types/store/observability-paths.d.ts +0 -30
  62. package/dist/types/store/observability-run-manager.d.ts +0 -96
  63. package/dist/types/store/observability-store-reader.d.ts +0 -55
  64. package/dist/types/store/serializers/serialized-span.interface.d.ts +0 -14
  65. package/dist/types/store/serializers/serialized-trace.interface.d.ts +0 -14
  66. package/dist/types/store/serializers/span-deserializer.d.ts +0 -11
  67. package/dist/types/store/serializers/trace-deserializer.d.ts +0 -9
  68. package/dist/types/store/trace-deserializer.d.ts +0 -41
@@ -1,49 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ObservabilityConfiguration = void 0;
16
- const tsyringe_1 = require("tsyringe");
17
- const common_1 = require("@pristine-ts/common");
18
- const observability_module_keyname_1 = require("./observability.module.keyname");
19
- const observability_configuration_keys_1 = require("./observability.configuration-keys");
20
- /**
21
- * Resolved settings for the observability store. Populated through the framework
22
- * configuration system (`@injectConfig`) — the keys are declared by
23
- * `ObservabilityModule.configurationDefinitions`, each with an `EnvironmentVariableResolver`
24
- * so they can also be overridden by env var or `pristine.config.ts`.
25
- *
26
- * The writers and the query commands all depend on this single typed object rather than
27
- * injecting individual config keys, so there is exactly one place that knows the keys.
28
- */
29
- let ObservabilityConfiguration = class ObservabilityConfiguration {
30
- constructor(enabled, directory, retainedRuns, autoBegin, maxRunSizeBytes) {
31
- this.enabled = enabled;
32
- this.directory = directory;
33
- this.retainedRuns = retainedRuns;
34
- this.autoBegin = autoBegin;
35
- this.maxRunSizeBytes = maxRunSizeBytes;
36
- }
37
- };
38
- exports.ObservabilityConfiguration = ObservabilityConfiguration;
39
- exports.ObservabilityConfiguration = ObservabilityConfiguration = __decorate([
40
- (0, tsyringe_1.injectable)(),
41
- (0, common_1.moduleScoped)(observability_module_keyname_1.ObservabilityModuleKeyname),
42
- __param(0, (0, common_1.injectConfig)(observability_configuration_keys_1.ObservabilityConfigurationKeys.Enabled)),
43
- __param(1, (0, common_1.injectConfig)(observability_configuration_keys_1.ObservabilityConfigurationKeys.Directory)),
44
- __param(2, (0, common_1.injectConfig)(observability_configuration_keys_1.ObservabilityConfigurationKeys.RetainedRuns)),
45
- __param(3, (0, common_1.injectConfig)(observability_configuration_keys_1.ObservabilityConfigurationKeys.AutoBegin)),
46
- __param(4, (0, common_1.injectConfig)(observability_configuration_keys_1.ObservabilityConfigurationKeys.MaxRunSizeBytes)),
47
- __metadata("design:paramtypes", [Boolean, String, Number, Boolean, Number])
48
- ], ObservabilityConfiguration);
49
- //# sourceMappingURL=observability-configuration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"observability-configuration.js","sourceRoot":"","sources":["../../../src/observability-configuration.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uCAAoC;AACpC,gDAA+D;AAC/D,iFAA0E;AAC1E,yFAAkF;AAElF;;;;;;;;GAQG;AAGI,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IACrC,YAEwE,OAAgB,EAEd,SAAiB,EAEd,YAAoB,EAEvB,SAAkB,EAEZ,eAAuB;QAR/B,YAAO,GAAP,OAAO,CAAS;QAEd,cAAS,GAAT,SAAS,CAAQ;QAEd,iBAAY,GAAZ,YAAY,CAAQ;QAEvB,cAAS,GAAT,SAAS,CAAS;QAEZ,oBAAe,GAAf,eAAe,CAAQ;IAEvG,CAAC;CACF,CAAA;AAdY,gEAA0B;qCAA1B,0BAA0B;IAFtC,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,yDAA0B,CAAC;IAIpC,WAAA,IAAA,qBAAY,EAAC,iEAA8B,CAAC,OAAO,CAAC,CAAA;IAEpD,WAAA,IAAA,qBAAY,EAAC,iEAA8B,CAAC,SAAS,CAAC,CAAA;IAEtD,WAAA,IAAA,qBAAY,EAAC,iEAA8B,CAAC,YAAY,CAAC,CAAA;IAEzD,WAAA,IAAA,qBAAY,EAAC,iEAA8B,CAAC,SAAS,CAAC,CAAA;IAEtD,WAAA,IAAA,qBAAY,EAAC,iEAA8B,CAAC,eAAe,CAAC,CAAA;;GAXpD,0BAA0B,CActC"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=serialized-span.interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialized-span.interface.js","sourceRoot":"","sources":["../../../../src/serializers/serialized-span.interface.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=serialized-trace.interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialized-trace.interface.js","sourceRoot":"","sources":["../../../../src/serializers/serialized-trace.interface.ts"],"names":[],"mappings":""}
@@ -1,110 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.LogTailer = void 0;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- /**
40
- * Follows a growing `.jsonl` file and emits each newly-appended complete line. The
41
- * `logs --follow` command and the REPL use this for a `tail -f`-style live view.
42
- *
43
- * Watches the file's parent directory (watching a not-yet-created file directly is
44
- * unreliable across platforms) and reads the byte delta on each change. Partial trailing
45
- * lines are buffered until their terminating newline arrives.
46
- *
47
- * Not a DI service — a plain utility. Instantiate, `follow()`, and `stop()` when done.
48
- */
49
- class LogTailer {
50
- constructor(filePath) {
51
- this.filePath = filePath;
52
- this.offset = 0;
53
- this.buffer = "";
54
- }
55
- /**
56
- * Starts following. Existing content is skipped — only lines appended after this call
57
- * are emitted. Call `stop()` to release the watch.
58
- */
59
- follow(onLine) {
60
- this.offset = fs.existsSync(this.filePath) ? fs.statSync(this.filePath).size : 0;
61
- const directory = path.dirname(this.filePath);
62
- const filename = path.basename(this.filePath);
63
- this.watcher = fs.watch(directory, (_eventType, changed) => {
64
- if (changed !== null && changed !== filename) {
65
- return;
66
- }
67
- this.drain(onLine);
68
- });
69
- }
70
- /**
71
- * Stops following and releases the filesystem watch.
72
- */
73
- stop() {
74
- var _a;
75
- (_a = this.watcher) === null || _a === void 0 ? void 0 : _a.close();
76
- this.watcher = undefined;
77
- }
78
- drain(onLine) {
79
- var _a;
80
- if (fs.existsSync(this.filePath) === false) {
81
- return;
82
- }
83
- const size = fs.statSync(this.filePath).size;
84
- if (size <= this.offset) {
85
- // Truncated or unchanged — reset to the new end so we don't replay stale bytes.
86
- this.offset = size;
87
- return;
88
- }
89
- const fd = fs.openSync(this.filePath, "r");
90
- try {
91
- const length = size - this.offset;
92
- const chunk = Buffer.alloc(length);
93
- fs.readSync(fd, chunk, 0, length, this.offset);
94
- this.offset = size;
95
- this.buffer += chunk.toString("utf8");
96
- }
97
- finally {
98
- fs.closeSync(fd);
99
- }
100
- const lines = this.buffer.split("\n");
101
- this.buffer = (_a = lines.pop()) !== null && _a !== void 0 ? _a : "";
102
- for (const line of lines) {
103
- if (line.length > 0) {
104
- onLine(line);
105
- }
106
- }
107
- }
108
- }
109
- exports.LogTailer = LogTailer;
110
- //# sourceMappingURL=log-tailer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-tailer.js","sourceRoot":"","sources":["../../../../src/store/log-tailer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B;;;;;;;;;GASG;AACH,MAAa,SAAS;IAKpB,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAHrC,WAAM,GAAG,CAAC,CAAC;QACX,WAAM,GAAG,EAAE,CAAC;IAGpB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAA8B;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE;YACzD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI;;QACF,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,MAA8B;;QAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;QAC7C,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,gFAAgF;YAChF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;YAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAA,KAAK,CAAC,GAAG,EAAE,mCAAI,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAjED,8BAiEC"}
@@ -1,78 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ObservabilityPaths = void 0;
37
- const path = __importStar(require("path"));
38
- /**
39
- * Resolves every path inside the observability store from the configured store directory.
40
- * Pure and stateless past construction — instantiate once with the configured directory
41
- * and reuse.
42
- *
43
- * Layout:
44
- * ```
45
- * <root>/
46
- * <instanceId>/logs.jsonl
47
- * <instanceId>/requests.jsonl
48
- * <instanceId>/traces/<traceId>.json
49
- * ```
50
- *
51
- * Each `<instanceId>` is one pristine process lifetime (= the kernel instantiation id).
52
- * No metadata sidecars, no `latest.json` pointer — directory `mtime` answers "which is
53
- * most recent."
54
- */
55
- class ObservabilityPaths {
56
- constructor(configuredDirectory) {
57
- this.root = path.isAbsolute(configuredDirectory)
58
- ? configuredDirectory
59
- : path.resolve(process.cwd(), configuredDirectory);
60
- }
61
- instanceDirectory(instanceId) {
62
- return path.join(this.root, instanceId);
63
- }
64
- logsFile(instanceId) {
65
- return path.join(this.instanceDirectory(instanceId), "logs.jsonl");
66
- }
67
- requestsFile(instanceId) {
68
- return path.join(this.instanceDirectory(instanceId), "requests.jsonl");
69
- }
70
- tracesDirectory(instanceId) {
71
- return path.join(this.instanceDirectory(instanceId), "traces");
72
- }
73
- traceFile(instanceId, traceId) {
74
- return path.join(this.tracesDirectory(instanceId), `${traceId}.json`);
75
- }
76
- }
77
- exports.ObservabilityPaths = ObservabilityPaths;
78
- //# sourceMappingURL=observability-paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"observability-paths.js","sourceRoot":"","sources":["../../../../src/store/observability-paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,kBAAkB;IAO7B,YAAY,mBAA2B;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAC9C,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACvD,CAAC;IAED,iBAAiB,CAAC,UAAkB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;IAED,YAAY,CAAC,UAAkB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACzE,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED,SAAS,CAAC,UAAkB,EAAE,OAAe;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;IACxE,CAAC;CACF;AAhCD,gDAgCC"}
@@ -1,346 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- 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;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- var __metadata = (this && this.__metadata) || function (k, v) {
42
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
- };
44
- var __param = (this && this.__param) || function (paramIndex, decorator) {
45
- return function (target, key) { decorator(target, key, paramIndex); }
46
- };
47
- var ObservabilityRunManager_1;
48
- Object.defineProperty(exports, "__esModule", { value: true });
49
- exports.ObservabilityRunManager = void 0;
50
- const fs = __importStar(require("fs"));
51
- const path = __importStar(require("path"));
52
- const tsyringe_1 = require("tsyringe");
53
- const common_1 = require("@pristine-ts/common");
54
- const observability_module_keyname_1 = require("../observability.module.keyname");
55
- const observability_configuration_1 = require("../observability-configuration");
56
- const observability_paths_1 = require("./observability-paths");
57
- const run_metadata_model_1 = require("../models/run-metadata.model");
58
- /**
59
- * Owns the lifecycle of an observability run. A "run" is one `pristine start` lifetime;
60
- * the run directory is keyed by the kernel instantiation id.
61
- *
62
- * The observability writers (`ObservabilityLogger`, `ObservabilityTracer`) stay dormant
63
- * until `beginRun()` is called — so one-shot CLI commands (`build`, `logs`, `trace`) and
64
- * the REPL never pollute the store. `StartCommand` is the only caller of `beginRun()`.
65
- *
66
- * A singleton so the logger, the tracer, and `StartCommand` all share the same run state.
67
- */
68
- let ObservabilityRunManager = ObservabilityRunManager_1 = class ObservabilityRunManager {
69
- constructor(configuration, runId) {
70
- this.configuration = configuration;
71
- this.runId = runId;
72
- /**
73
- * Approximate running total of bytes written to the active run. Incremented cheaply by
74
- * the writers via `recordBytesWritten`; resynced to the real on-disk total after each
75
- * reclaim. Used to decide when to enforce the per-run size budget without stat-ing the
76
- * whole run directory on every write.
77
- */
78
- this.runBytes = 0;
79
- this.paths = new observability_paths_1.ObservabilityPaths(configuration.directory);
80
- }
81
- /**
82
- * Begins a run: creates the run directory, writes `run.json`, repoints `latest.json`,
83
- * and prunes old runs. No-op when observability is disabled. Safe to call once per
84
- * process.
85
- */
86
- beginRun(command) {
87
- if (this.configuration.enabled === false || this.activeRunDirectory !== undefined) {
88
- return;
89
- }
90
- const runDirectory = this.paths.runDirectory(this.runId);
91
- fs.mkdirSync(this.paths.tracesDirectory(this.runId), { recursive: true });
92
- const metadata = new run_metadata_model_1.RunMetadata(this.runId, new Date().toISOString(), process.pid, command);
93
- fs.writeFileSync(this.paths.runMetadataFile(this.runId), JSON.stringify(metadata, null, 2));
94
- fs.writeFileSync(this.paths.latestPointerFile(), JSON.stringify({ runId: this.runId }, null, 2));
95
- this.activeRunDirectory = runDirectory;
96
- this.runBytes = 0;
97
- this.pruneOldRuns();
98
- }
99
- /**
100
- * Reports bytes just written to the run by a writer. Cheap — an add and a compare. When
101
- * the running total crosses the configured `maxRunSizeBytes`, triggers a reclaim that
102
- * drops the run's oldest data. No-op when no run is active or the cap is disabled.
103
- */
104
- recordBytesWritten(bytes) {
105
- if (this.activeRunDirectory === undefined || this.configuration.maxRunSizeBytes <= 0) {
106
- return;
107
- }
108
- this.runBytes += bytes;
109
- if (this.runBytes > this.configuration.maxRunSizeBytes) {
110
- this.reclaim();
111
- }
112
- }
113
- /**
114
- * Ends the active run by stamping `endedAt` into `run.json`. No-op when no run is active.
115
- */
116
- endRun() {
117
- if (this.activeRunDirectory === undefined) {
118
- return;
119
- }
120
- try {
121
- const file = this.paths.runMetadataFile(this.runId);
122
- const metadata = JSON.parse(fs.readFileSync(file, "utf8"));
123
- metadata.endedAt = new Date().toISOString();
124
- fs.writeFileSync(file, JSON.stringify(metadata, null, 2));
125
- }
126
- catch (_a) {
127
- // The run directory may have been pruned/removed out from under us — nothing to do.
128
- }
129
- this.activeRunDirectory = undefined;
130
- }
131
- /**
132
- * Whether a run is currently active. The writers consult this on every write.
133
- */
134
- isRunActive() {
135
- return this.configuration.enabled && this.activeRunDirectory !== undefined;
136
- }
137
- /**
138
- * The absolute logs file for the active run, or undefined when no run is active.
139
- */
140
- logsFile() {
141
- this.ensureAutoBegun();
142
- return this.activeRunDirectory === undefined ? undefined : this.paths.logsFile(this.runId);
143
- }
144
- /**
145
- * The absolute requests-index file for the active run, or undefined when no run is active.
146
- */
147
- requestsFile() {
148
- this.ensureAutoBegun();
149
- return this.activeRunDirectory === undefined ? undefined : this.paths.requestsFile(this.runId);
150
- }
151
- /**
152
- * The absolute path of the trace file for a given trace id in the active run, or
153
- * undefined when no run is active.
154
- */
155
- traceFile(traceId) {
156
- this.ensureAutoBegun();
157
- return this.activeRunDirectory === undefined ? undefined : this.paths.traceFile(this.runId, traceId);
158
- }
159
- /**
160
- * Lazily begins a run when `autoBegin` is configured and none is active yet — so a
161
- * server started outside the `pristine` CLI captures its logs/traces on the first
162
- * write, with nothing calling `beginRun()` explicitly.
163
- */
164
- ensureAutoBegun() {
165
- if (this.activeRunDirectory === undefined && this.configuration.autoBegin) {
166
- this.beginRun("auto");
167
- }
168
- }
169
- /**
170
- * Drops the run's oldest data until it is back under the budget's low-water mark:
171
- * oldest trace files first, then the head of `logs.jsonl` (keeping the newest tail).
172
- * The `requests.jsonl` index is rewritten to drop entries for deleted traces.
173
- *
174
- * Best-effort and fully guarded — budget enforcement must never break or lose a write.
175
- */
176
- reclaim() {
177
- if (this.activeRunDirectory === undefined) {
178
- return;
179
- }
180
- try {
181
- const lowWater = Math.floor(this.configuration.maxRunSizeBytes * ObservabilityRunManager_1.LOW_WATER_FRACTION);
182
- const logsFile = this.paths.logsFile(this.runId);
183
- const requestsFile = this.paths.requestsFile(this.runId);
184
- const tracesDirectory = this.paths.tracesDirectory(this.runId);
185
- const sizeOf = (file) => {
186
- try {
187
- return fs.statSync(file).size;
188
- }
189
- catch (_a) {
190
- return 0;
191
- }
192
- };
193
- let traceFiles = [];
194
- try {
195
- traceFiles = fs.readdirSync(tracesDirectory).map(name => {
196
- const filePath = path.join(tracesDirectory, name);
197
- const stats = fs.statSync(filePath);
198
- return { path: filePath, size: stats.size, mtime: stats.mtimeMs };
199
- }).sort((a, b) => a.mtime - b.mtime);
200
- }
201
- catch (_a) {
202
- // No traces directory yet — nothing to drop on that side.
203
- }
204
- let total = sizeOf(logsFile) + sizeOf(requestsFile) + traceFiles.reduce((sum, file) => sum + file.size, 0);
205
- // Drop oldest trace files until under the low-water mark (or none remain).
206
- let tracesDeleted = false;
207
- while (total > lowWater && traceFiles.length > 0) {
208
- const oldest = traceFiles.shift();
209
- try {
210
- fs.rmSync(oldest.path, { force: true });
211
- total -= oldest.size;
212
- tracesDeleted = true;
213
- }
214
- catch (_b) {
215
- break;
216
- }
217
- }
218
- // Still over — trim the head of logs.jsonl, keeping the newest tail.
219
- if (total > lowWater) {
220
- const logsSize = sizeOf(logsFile);
221
- const keep = Math.max(0, lowWater - (total - logsSize));
222
- if (logsSize > keep) {
223
- this.trimFileHead(logsFile, keep);
224
- total = total - logsSize + sizeOf(logsFile);
225
- }
226
- }
227
- if (tracesDeleted) {
228
- this.pruneRequestsIndex();
229
- total = sizeOf(logsFile) + sizeOf(requestsFile)
230
- + this.directoryTotalSize(tracesDirectory);
231
- }
232
- this.runBytes = total;
233
- }
234
- catch (_c) {
235
- // Best-effort — never let budget enforcement break a write.
236
- }
237
- }
238
- /**
239
- * Rewrites a file in place keeping only its last `keepBytes` bytes, aligned forward to
240
- * the next newline so no partial line survives.
241
- */
242
- trimFileHead(file, keepBytes) {
243
- const size = fs.statSync(file).size;
244
- if (size <= keepBytes) {
245
- return;
246
- }
247
- const buffer = Buffer.alloc(keepBytes);
248
- const fd = fs.openSync(file, "r");
249
- try {
250
- fs.readSync(fd, buffer, 0, keepBytes, size - keepBytes);
251
- }
252
- finally {
253
- fs.closeSync(fd);
254
- }
255
- const newlineIndex = buffer.indexOf(0x0a);
256
- const content = newlineIndex === -1 ? Buffer.alloc(0) : buffer.subarray(newlineIndex + 1);
257
- fs.writeFileSync(file, content);
258
- }
259
- /**
260
- * Rewrites `requests.jsonl` keeping only entries whose trace file still exists — so the
261
- * request index stays consistent after trace files are reclaimed.
262
- */
263
- pruneRequestsIndex() {
264
- const requestsFile = this.paths.requestsFile(this.runId);
265
- try {
266
- const kept = fs.readFileSync(requestsFile, "utf8")
267
- .split("\n")
268
- .filter(line => line.trim().length > 0)
269
- .filter(line => {
270
- try {
271
- const traceId = JSON.parse(line).traceId;
272
- return typeof traceId === "string" && fs.existsSync(this.paths.traceFile(this.runId, traceId));
273
- }
274
- catch (_a) {
275
- return false;
276
- }
277
- });
278
- fs.writeFileSync(requestsFile, kept.length > 0 ? kept.join("\n") + "\n" : "");
279
- }
280
- catch (_a) {
281
- // Best-effort.
282
- }
283
- }
284
- /**
285
- * Sum of the sizes of every file directly inside `directory`.
286
- */
287
- directoryTotalSize(directory) {
288
- try {
289
- return fs.readdirSync(directory).reduce((sum, name) => {
290
- try {
291
- return sum + fs.statSync(path.join(directory, name)).size;
292
- }
293
- catch (_a) {
294
- return sum;
295
- }
296
- }, 0);
297
- }
298
- catch (_a) {
299
- return 0;
300
- }
301
- }
302
- /**
303
- * Removes run directories beyond the retained limit, ordered by their
304
- * `run.json:startedAt`. Best-effort — a failure to prune never blocks a run.
305
- */
306
- pruneOldRuns() {
307
- try {
308
- const runsDirectory = this.paths.runsDirectory();
309
- const entries = fs.readdirSync(runsDirectory, { withFileTypes: true })
310
- .filter(entry => entry.isDirectory())
311
- .map(entry => {
312
- let startedAt = 0;
313
- try {
314
- const metadataPath = this.paths.runMetadataFile(entry.name);
315
- const metadata = JSON.parse(fs.readFileSync(metadataPath, "utf8"));
316
- startedAt = Date.parse(metadata.startedAt);
317
- }
318
- catch (_a) {
319
- // Missing/corrupt run.json — treat as oldest so it's pruned first.
320
- }
321
- return { name: entry.name, startedAt };
322
- })
323
- .sort((a, b) => b.startedAt - a.startedAt);
324
- for (const stale of entries.slice(Math.max(this.configuration.retainedRuns, 1))) {
325
- fs.rmSync(this.paths.runDirectory(stale.name), { recursive: true, force: true });
326
- }
327
- }
328
- catch (_a) {
329
- // Best-effort retention; never block the run on a cleanup failure.
330
- }
331
- }
332
- };
333
- exports.ObservabilityRunManager = ObservabilityRunManager;
334
- /**
335
- * Once the reclaimed run exceeds the budget we trim back to this fraction of it, so the
336
- * (relatively expensive) reclaim isn't re-triggered on the very next write.
337
- */
338
- ObservabilityRunManager.LOW_WATER_FRACTION = 0.8;
339
- exports.ObservabilityRunManager = ObservabilityRunManager = ObservabilityRunManager_1 = __decorate([
340
- (0, common_1.moduleScoped)(observability_module_keyname_1.ObservabilityModuleKeyname),
341
- (0, tsyringe_1.singleton)(),
342
- (0, tsyringe_1.injectable)(),
343
- __param(1, (0, tsyringe_1.inject)(common_1.InternalContainerParameterEnum.KernelInstantiationId)),
344
- __metadata("design:paramtypes", [observability_configuration_1.ObservabilityConfiguration, String])
345
- ], ObservabilityRunManager);
346
- //# sourceMappingURL=observability-run-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"observability-run-manager.js","sourceRoot":"","sources":["../../../../src/store/observability-run-manager.ts"],"names":[],"mappings":"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"}