@pristine-ts/observability 2.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/lib/cjs/interfaces/interfaces.js +19 -0
- package/dist/lib/cjs/interfaces/interfaces.js.map +1 -0
- package/dist/lib/cjs/interfaces/serialized-span.interface.js +3 -0
- package/dist/lib/cjs/interfaces/serialized-span.interface.js.map +1 -0
- package/dist/lib/cjs/interfaces/serialized-trace.interface.js +3 -0
- package/dist/lib/cjs/interfaces/serialized-trace.interface.js.map +1 -0
- package/dist/lib/cjs/loggers/loggers.js +18 -0
- package/dist/lib/cjs/loggers/loggers.js.map +1 -0
- package/dist/lib/cjs/loggers/observability.logger.js +73 -0
- package/dist/lib/cjs/loggers/observability.logger.js.map +1 -0
- package/dist/lib/cjs/models/models.js +18 -0
- package/dist/lib/cjs/models/models.js.map +1 -0
- package/dist/lib/cjs/models/request-summary.model.js +19 -0
- package/dist/lib/cjs/models/request-summary.model.js.map +1 -0
- package/dist/lib/cjs/models/run-metadata.model.js +18 -0
- package/dist/lib/cjs/models/run-metadata.model.js.map +1 -0
- package/dist/lib/cjs/observability-configuration.js +49 -0
- package/dist/lib/cjs/observability-configuration.js.map +1 -0
- package/dist/lib/cjs/observability.configuration-keys.js +21 -0
- package/dist/lib/cjs/observability.configuration-keys.js.map +1 -0
- package/dist/lib/cjs/observability.module.js +98 -0
- package/dist/lib/cjs/observability.module.js.map +1 -0
- package/dist/lib/cjs/observability.module.keyname.js +5 -0
- package/dist/lib/cjs/observability.module.keyname.js.map +1 -0
- package/dist/lib/cjs/paths/observability-paths.js +78 -0
- package/dist/lib/cjs/paths/observability-paths.js.map +1 -0
- package/dist/lib/cjs/paths/paths.js +18 -0
- package/dist/lib/cjs/paths/paths.js.map +1 -0
- package/dist/lib/cjs/serializers/serialized-span.interface.js +3 -0
- package/dist/lib/cjs/serializers/serialized-span.interface.js.map +1 -0
- package/dist/lib/cjs/serializers/serialized-trace.interface.js +3 -0
- package/dist/lib/cjs/serializers/serialized-trace.interface.js.map +1 -0
- package/dist/lib/cjs/serializers/serializers.js +19 -0
- package/dist/lib/cjs/serializers/serializers.js.map +1 -0
- package/dist/lib/cjs/serializers/span-deserializer.js +26 -0
- package/dist/lib/cjs/serializers/span-deserializer.js.map +1 -0
- package/dist/lib/cjs/serializers/trace-deserializer.js +24 -0
- package/dist/lib/cjs/serializers/trace-deserializer.js.map +1 -0
- package/dist/lib/cjs/store/log-store.js +249 -0
- package/dist/lib/cjs/store/log-store.js.map +1 -0
- package/dist/lib/cjs/store/log-tailer.js +110 -0
- package/dist/lib/cjs/store/log-tailer.js.map +1 -0
- package/dist/lib/cjs/store/observability-paths.js +78 -0
- package/dist/lib/cjs/store/observability-paths.js.map +1 -0
- package/dist/lib/cjs/store/observability-run-manager.js +346 -0
- package/dist/lib/cjs/store/observability-run-manager.js.map +1 -0
- package/dist/lib/cjs/store/observability-store-reader.js +174 -0
- package/dist/lib/cjs/store/observability-store-reader.js.map +1 -0
- package/dist/lib/cjs/store/serializers/serialized-span.interface.js +3 -0
- package/dist/lib/cjs/store/serializers/serialized-span.interface.js.map +1 -0
- package/dist/lib/cjs/store/serializers/serialized-trace.interface.js +3 -0
- package/dist/lib/cjs/store/serializers/serialized-trace.interface.js.map +1 -0
- package/dist/lib/cjs/store/serializers/span-deserializer.js +26 -0
- package/dist/lib/cjs/store/serializers/span-deserializer.js.map +1 -0
- package/dist/lib/cjs/store/serializers/trace-deserializer.js +24 -0
- package/dist/lib/cjs/store/serializers/trace-deserializer.js.map +1 -0
- package/dist/lib/cjs/store/store.js +19 -0
- package/dist/lib/cjs/store/store.js.map +1 -0
- package/dist/lib/cjs/store/trace-deserializer.js +41 -0
- package/dist/lib/cjs/store/trace-deserializer.js.map +1 -0
- package/dist/lib/cjs/store/trace-store.js +281 -0
- package/dist/lib/cjs/store/trace-store.js.map +1 -0
- package/dist/lib/cjs/tailers/log-tailer.js +110 -0
- package/dist/lib/cjs/tailers/log-tailer.js.map +1 -0
- package/dist/lib/cjs/tailers/tailers.js +18 -0
- package/dist/lib/cjs/tailers/tailers.js.map +1 -0
- package/dist/lib/cjs/tracers/observability.tracer.js +65 -0
- package/dist/lib/cjs/tracers/observability.tracer.js.map +1 -0
- package/dist/lib/cjs/tracers/tracers.js +18 -0
- package/dist/lib/cjs/tracers/tracers.js.map +1 -0
- package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/lib/esm/interfaces/interfaces.js +3 -0
- package/dist/lib/esm/interfaces/interfaces.js.map +1 -0
- package/dist/lib/esm/interfaces/serialized-span.interface.js +2 -0
- package/dist/lib/esm/interfaces/serialized-span.interface.js.map +1 -0
- package/dist/lib/esm/interfaces/serialized-trace.interface.js +2 -0
- package/dist/lib/esm/interfaces/serialized-trace.interface.js.map +1 -0
- package/dist/lib/esm/loggers/loggers.js +2 -0
- package/dist/lib/esm/loggers/loggers.js.map +1 -0
- package/dist/lib/esm/loggers/observability.logger.js +70 -0
- package/dist/lib/esm/loggers/observability.logger.js.map +1 -0
- package/dist/lib/esm/models/models.js +2 -0
- package/dist/lib/esm/models/models.js.map +1 -0
- package/dist/lib/esm/models/request-summary.model.js +15 -0
- package/dist/lib/esm/models/request-summary.model.js.map +1 -0
- package/dist/lib/esm/models/run-metadata.model.js +14 -0
- package/dist/lib/esm/models/run-metadata.model.js.map +1 -0
- package/dist/lib/esm/observability-configuration.js +46 -0
- package/dist/lib/esm/observability-configuration.js.map +1 -0
- package/dist/lib/esm/observability.configuration-keys.js +18 -0
- package/dist/lib/esm/observability.configuration-keys.js.map +1 -0
- package/dist/lib/esm/observability.module.js +81 -0
- package/dist/lib/esm/observability.module.js.map +1 -0
- package/dist/lib/esm/observability.module.keyname.js +2 -0
- package/dist/lib/esm/observability.module.keyname.js.map +1 -0
- package/dist/lib/esm/paths/observability-paths.js +41 -0
- package/dist/lib/esm/paths/observability-paths.js.map +1 -0
- package/dist/lib/esm/paths/paths.js +2 -0
- package/dist/lib/esm/paths/paths.js.map +1 -0
- package/dist/lib/esm/serializers/serialized-span.interface.js +2 -0
- package/dist/lib/esm/serializers/serialized-span.interface.js.map +1 -0
- package/dist/lib/esm/serializers/serialized-trace.interface.js +2 -0
- package/dist/lib/esm/serializers/serialized-trace.interface.js.map +1 -0
- package/dist/lib/esm/serializers/serializers.js +3 -0
- package/dist/lib/esm/serializers/serializers.js.map +1 -0
- package/dist/lib/esm/serializers/span-deserializer.js +22 -0
- package/dist/lib/esm/serializers/span-deserializer.js.map +1 -0
- package/dist/lib/esm/serializers/trace-deserializer.js +20 -0
- package/dist/lib/esm/serializers/trace-deserializer.js.map +1 -0
- package/dist/lib/esm/store/log-store.js +213 -0
- package/dist/lib/esm/store/log-store.js.map +1 -0
- package/dist/lib/esm/store/log-tailer.js +73 -0
- package/dist/lib/esm/store/log-tailer.js.map +1 -0
- package/dist/lib/esm/store/observability-paths.js +41 -0
- package/dist/lib/esm/store/observability-paths.js.map +1 -0
- package/dist/lib/esm/store/observability-run-manager.js +310 -0
- package/dist/lib/esm/store/observability-run-manager.js.map +1 -0
- package/dist/lib/esm/store/observability-store-reader.js +138 -0
- package/dist/lib/esm/store/observability-store-reader.js.map +1 -0
- package/dist/lib/esm/store/serializers/serialized-span.interface.js +2 -0
- package/dist/lib/esm/store/serializers/serialized-span.interface.js.map +1 -0
- package/dist/lib/esm/store/serializers/serialized-trace.interface.js +2 -0
- package/dist/lib/esm/store/serializers/serialized-trace.interface.js.map +1 -0
- package/dist/lib/esm/store/serializers/span-deserializer.js +22 -0
- package/dist/lib/esm/store/serializers/span-deserializer.js.map +1 -0
- package/dist/lib/esm/store/serializers/trace-deserializer.js +20 -0
- package/dist/lib/esm/store/serializers/trace-deserializer.js.map +1 -0
- package/dist/lib/esm/store/store.js +3 -0
- package/dist/lib/esm/store/store.js.map +1 -0
- package/dist/lib/esm/store/trace-deserializer.js +37 -0
- package/dist/lib/esm/store/trace-deserializer.js.map +1 -0
- package/dist/lib/esm/store/trace-store.js +245 -0
- package/dist/lib/esm/store/trace-store.js.map +1 -0
- package/dist/lib/esm/tailers/log-tailer.js +73 -0
- package/dist/lib/esm/tailers/log-tailer.js.map +1 -0
- package/dist/lib/esm/tailers/tailers.js +2 -0
- package/dist/lib/esm/tailers/tailers.js.map +1 -0
- package/dist/lib/esm/tracers/observability.tracer.js +62 -0
- package/dist/lib/esm/tracers/observability.tracer.js.map +1 -0
- package/dist/lib/esm/tracers/tracers.js +2 -0
- package/dist/lib/esm/tracers/tracers.js.map +1 -0
- package/dist/lib/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/types/interfaces/interfaces.d.ts +2 -0
- package/dist/types/interfaces/serialized-span.interface.d.ts +14 -0
- package/dist/types/interfaces/serialized-trace.interface.d.ts +14 -0
- package/dist/types/loggers/loggers.d.ts +1 -0
- package/dist/types/loggers/observability.logger.d.ts +20 -0
- package/dist/types/models/models.d.ts +1 -0
- package/dist/types/models/request-summary.model.d.ts +52 -0
- package/dist/types/models/run-metadata.model.d.ts +28 -0
- package/dist/types/observability-configuration.d.ts +32 -0
- package/dist/types/observability.configuration-keys.d.ts +32 -0
- package/dist/types/observability.module.d.ts +28 -0
- package/dist/types/observability.module.keyname.d.ts +1 -0
- package/dist/types/paths/observability-paths.d.ts +30 -0
- package/dist/types/paths/paths.d.ts +1 -0
- package/dist/types/serializers/serialized-span.interface.d.ts +14 -0
- package/dist/types/serializers/serialized-trace.interface.d.ts +14 -0
- package/dist/types/serializers/serializers.d.ts +2 -0
- package/dist/types/serializers/span-deserializer.d.ts +11 -0
- package/dist/types/serializers/trace-deserializer.d.ts +9 -0
- package/dist/types/store/log-store.d.ts +79 -0
- package/dist/types/store/log-tailer.d.ts +27 -0
- package/dist/types/store/observability-paths.d.ts +30 -0
- package/dist/types/store/observability-run-manager.d.ts +96 -0
- package/dist/types/store/observability-store-reader.d.ts +55 -0
- package/dist/types/store/serializers/serialized-span.interface.d.ts +14 -0
- package/dist/types/store/serializers/serialized-trace.interface.d.ts +14 -0
- package/dist/types/store/serializers/span-deserializer.d.ts +11 -0
- package/dist/types/store/serializers/trace-deserializer.d.ts +9 -0
- package/dist/types/store/store.d.ts +2 -0
- package/dist/types/store/trace-deserializer.d.ts +41 -0
- package/dist/types/store/trace-store.d.ts +88 -0
- package/dist/types/tailers/log-tailer.d.ts +27 -0
- package/dist/types/tailers/tailers.d.ts +1 -0
- package/dist/types/tracers/observability.tracer.d.ts +16 -0
- package/dist/types/tracers/tracers.d.ts +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,346 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability-run-manager.js","sourceRoot":"","sources":["../../../../src/store/observability-run-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.ObservabilityStoreReader = void 0;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const tsyringe_1 = require("tsyringe");
|
|
48
|
+
const common_1 = require("@pristine-ts/common");
|
|
49
|
+
const observability_module_keyname_1 = require("../observability.module.keyname");
|
|
50
|
+
const observability_configuration_1 = require("../observability-configuration");
|
|
51
|
+
const observability_paths_1 = require("./observability-paths");
|
|
52
|
+
/**
|
|
53
|
+
* Read-only access to the observability store. Used by the `logs`, `trace` and `requests`
|
|
54
|
+
* CLI commands. Pure filesystem reads — no kernel, no running app required; it reads what
|
|
55
|
+
* a separate `pristine start` process wrote.
|
|
56
|
+
*/
|
|
57
|
+
let ObservabilityStoreReader = class ObservabilityStoreReader {
|
|
58
|
+
constructor(configuration) {
|
|
59
|
+
this.paths = new observability_paths_1.ObservabilityPaths(configuration.directory);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The run id the `latest.json` pointer references, or undefined when the store is empty.
|
|
63
|
+
*/
|
|
64
|
+
latestRunId() {
|
|
65
|
+
try {
|
|
66
|
+
const pointer = JSON.parse(fs.readFileSync(this.paths.latestPointerFile(), "utf8"));
|
|
67
|
+
return typeof (pointer === null || pointer === void 0 ? void 0 : pointer.runId) === "string" ? pointer.runId : undefined;
|
|
68
|
+
}
|
|
69
|
+
catch (_a) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolves an explicit run id, or falls back to the latest run.
|
|
75
|
+
*/
|
|
76
|
+
resolveRunId(explicit) {
|
|
77
|
+
return explicit !== null && explicit !== void 0 ? explicit : this.latestRunId();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Every run's metadata, most-recent first.
|
|
81
|
+
*/
|
|
82
|
+
listRuns() {
|
|
83
|
+
try {
|
|
84
|
+
return fs.readdirSync(this.paths.runsDirectory(), { withFileTypes: true })
|
|
85
|
+
.filter(entry => entry.isDirectory())
|
|
86
|
+
.map(entry => this.readRunMetadata(entry.name))
|
|
87
|
+
.filter((metadata) => metadata !== undefined)
|
|
88
|
+
.sort((a, b) => Date.parse(b.startedAt) - Date.parse(a.startedAt));
|
|
89
|
+
}
|
|
90
|
+
catch (_a) {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Reads a run's `run.json`, or undefined when absent/corrupt.
|
|
96
|
+
*/
|
|
97
|
+
readRunMetadata(runId) {
|
|
98
|
+
try {
|
|
99
|
+
return JSON.parse(fs.readFileSync(this.paths.runMetadataFile(runId), "utf8"));
|
|
100
|
+
}
|
|
101
|
+
catch (_a) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The request summaries for a run, most-recent first, optionally capped to `limit`.
|
|
107
|
+
*/
|
|
108
|
+
readRequests(runId, limit) {
|
|
109
|
+
const summaries = this.readJsonl(this.paths.requestsFile(runId))
|
|
110
|
+
.sort((a, b) => b.startedAt - a.startedAt);
|
|
111
|
+
return limit === undefined ? summaries : summaries.slice(0, limit);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The raw log entries for a run, in write order. Each is a parsed `logs.jsonl` line.
|
|
115
|
+
*/
|
|
116
|
+
readLogs(runId) {
|
|
117
|
+
return this.readJsonl(this.paths.logsFile(runId));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The absolute `logs.jsonl` path for a run — handed to `LogTailer` for `--follow`.
|
|
121
|
+
*/
|
|
122
|
+
logsFilePath(runId) {
|
|
123
|
+
return this.paths.logsFile(runId);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Finds and reads a trace by id. Searches the preferred run first (when given), then
|
|
127
|
+
* every other run most-recent first. Returns the parsed trace and the run it was found
|
|
128
|
+
* in, or undefined when no run contains it.
|
|
129
|
+
*/
|
|
130
|
+
findTrace(traceId, preferredRunId) {
|
|
131
|
+
const runIds = this.listRuns().map(run => run.runId);
|
|
132
|
+
const ordered = preferredRunId === undefined
|
|
133
|
+
? runIds
|
|
134
|
+
: [preferredRunId, ...runIds.filter(id => id !== preferredRunId)];
|
|
135
|
+
for (const runId of ordered) {
|
|
136
|
+
try {
|
|
137
|
+
const trace = JSON.parse(fs.readFileSync(this.paths.traceFile(runId, traceId), "utf8"));
|
|
138
|
+
return { trace, runId };
|
|
139
|
+
}
|
|
140
|
+
catch (_a) {
|
|
141
|
+
// Not in this run — keep looking.
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The most recently seen trace ids across the latest run — used by the REPL completer.
|
|
148
|
+
*/
|
|
149
|
+
recentTraceIds(limit) {
|
|
150
|
+
const runId = this.latestRunId();
|
|
151
|
+
if (runId === undefined) {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
return this.readRequests(runId, limit).map(summary => summary.traceId);
|
|
155
|
+
}
|
|
156
|
+
readJsonl(filePath) {
|
|
157
|
+
try {
|
|
158
|
+
return fs.readFileSync(filePath, "utf8")
|
|
159
|
+
.split("\n")
|
|
160
|
+
.filter(line => line.trim().length > 0)
|
|
161
|
+
.map(line => JSON.parse(line));
|
|
162
|
+
}
|
|
163
|
+
catch (_a) {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
exports.ObservabilityStoreReader = ObservabilityStoreReader;
|
|
169
|
+
exports.ObservabilityStoreReader = ObservabilityStoreReader = __decorate([
|
|
170
|
+
(0, common_1.moduleScoped)(observability_module_keyname_1.ObservabilityModuleKeyname),
|
|
171
|
+
(0, tsyringe_1.injectable)(),
|
|
172
|
+
__metadata("design:paramtypes", [observability_configuration_1.ObservabilityConfiguration])
|
|
173
|
+
], ObservabilityStoreReader);
|
|
174
|
+
//# sourceMappingURL=observability-store-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability-store-reader.js","sourceRoot":"","sources":["../../../../src/store/observability-store-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialized-span.interface.js","sourceRoot":"","sources":["../../../../../src/store/serializers/serialized-span.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialized-trace.interface.js","sourceRoot":"","sources":["../../../../../src/store/serializers/serialized-trace.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpanDeserializer = void 0;
|
|
4
|
+
const common_1 = require("@pristine-ts/common");
|
|
5
|
+
/**
|
|
6
|
+
* Rebuilds a `Span` (with its full child tree) from the stored plain object. Used by
|
|
7
|
+
* `TraceDeserializer` for the trace's root span and recursively for every descendant —
|
|
8
|
+
* so `traceRenderer.renderTree`/`renderFlat`, which call instance methods like
|
|
9
|
+
* `getDuration()`, work unchanged on stored traces.
|
|
10
|
+
*/
|
|
11
|
+
class SpanDeserializer {
|
|
12
|
+
static deserialize(serialized, trace) {
|
|
13
|
+
var _a, _b;
|
|
14
|
+
const span = new common_1.Span(serialized.keyname, serialized.id, (_a = serialized.context) !== null && _a !== void 0 ? _a : {});
|
|
15
|
+
span.trace = trace;
|
|
16
|
+
span.startDate = serialized.startDate;
|
|
17
|
+
span.endDate = serialized.endDate;
|
|
18
|
+
span.inProgress = serialized.endDate === undefined;
|
|
19
|
+
for (const child of (_b = serialized.children) !== null && _b !== void 0 ? _b : []) {
|
|
20
|
+
span.addChild(SpanDeserializer.deserialize(child, trace));
|
|
21
|
+
}
|
|
22
|
+
return span;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.SpanDeserializer = SpanDeserializer;
|
|
26
|
+
//# sourceMappingURL=span-deserializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-deserializer.js","sourceRoot":"","sources":["../../../../../src/store/serializers/span-deserializer.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAGhD;;;;;GAKG;AACH,MAAa,gBAAgB;IAC3B,MAAM,CAAC,WAAW,CAAC,UAA0B,EAAE,KAAY;;QACzD,MAAM,IAAI,GAAG,IAAI,aAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,MAAA,UAAU,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC;QAEnD,KAAK,MAAM,KAAK,IAAI,MAAA,UAAU,CAAC,QAAQ,mCAAI,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAdD,4CAcC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TraceDeserializer = void 0;
|
|
4
|
+
const common_1 = require("@pristine-ts/common");
|
|
5
|
+
const span_deserializer_1 = require("./span-deserializer");
|
|
6
|
+
/**
|
|
7
|
+
* Rehydrates a stored trace JSON (the shape written by `ObservabilityTracer`) back into
|
|
8
|
+
* a `Trace` instance, with its full span tree rebuilt via `SpanDeserializer`.
|
|
9
|
+
*/
|
|
10
|
+
class TraceDeserializer {
|
|
11
|
+
static deserialize(serialized) {
|
|
12
|
+
var _a;
|
|
13
|
+
const trace = new common_1.Trace(serialized.id, (_a = serialized.context) !== null && _a !== void 0 ? _a : {});
|
|
14
|
+
trace.startDate = serialized.startDate;
|
|
15
|
+
trace.endDate = serialized.endDate;
|
|
16
|
+
trace.hasEnded = serialized.endDate !== undefined;
|
|
17
|
+
if (serialized.rootSpan !== undefined) {
|
|
18
|
+
trace.rootSpan = span_deserializer_1.SpanDeserializer.deserialize(serialized.rootSpan, trace);
|
|
19
|
+
}
|
|
20
|
+
return trace;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.TraceDeserializer = TraceDeserializer;
|
|
24
|
+
//# sourceMappingURL=trace-deserializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-deserializer.js","sourceRoot":"","sources":["../../../../../src/store/serializers/trace-deserializer.ts"],"names":[],"mappings":";;;AAAA,gDAA0C;AAE1C,2DAAqD;AAErD;;;GAGG;AACH,MAAa,iBAAiB;IAC5B,MAAM,CAAC,WAAW,CAAC,UAA2B;;QAC5C,MAAM,KAAK,GAAG,IAAI,cAAK,CAAC,UAAU,CAAC,EAAE,EAAE,MAAA,UAAU,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC;QACjE,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC;QAElD,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACtC,KAAK,CAAC,QAAQ,GAAG,oCAAgB,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAbD,8CAaC"}
|
|
@@ -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("./log-store"), exports);
|
|
18
|
+
__exportStar(require("./trace-store"), exports);
|
|
19
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/store/store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B"}
|