@oas-tools/oas-telemetry 0.7.1 → 0.8.0-alpha.1
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/.env.example +17 -3
- package/README.md +1 -2
- package/dist/cjs/config/bootConfig.cjs +16 -14
- package/dist/cjs/config/config.cjs +120 -125
- package/dist/cjs/config/config.types.cjs +1 -4
- package/dist/cjs/docs/openapi.yaml +158 -4
- package/dist/cjs/index.cjs +27 -30
- package/dist/cjs/routesManager.cjs +62 -70
- package/dist/cjs/telemetry/custom-implementations/exporters/DiskLogExporter.cjs +121 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/DiskMetricExporter.cjs +101 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/DiskTraceExporter.cjs +103 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.cjs +194 -190
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.cjs +147 -99
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.cjs +143 -116
- package/dist/cjs/telemetry/custom-implementations/exporters/MultiMetricExporter.cjs +57 -0
- package/dist/cjs/telemetry/custom-implementations/instrumentations/logsInstrumentation.cjs +92 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Chunk.cjs +159 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Series.cjs +168 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.cjs +392 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/types.cjs +2 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/utils.cjs +77 -0
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.cjs +65 -63
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.cjs +63 -62
- package/dist/cjs/telemetry/custom-implementations/utils/circular.cjs +47 -47
- package/dist/cjs/telemetry/custom-implementations/wrappers.cjs +209 -138
- package/dist/cjs/telemetry/initializeTelemetry.cjs +35 -91
- package/dist/cjs/telemetry/persistence/DiskImporter.cjs +85 -0
- package/dist/cjs/telemetry/persistence/DiskUtils.cjs +61 -0
- package/dist/cjs/telemetry/persistence/DiskWriter.cjs +66 -0
- package/dist/cjs/telemetry/telemetryConfigurator.cjs +139 -72
- package/dist/cjs/telemetry/telemetryRegistry.cjs +45 -31
- package/dist/cjs/tlm-ai/agent.cjs +49 -64
- package/dist/cjs/tlm-ai/aiController.cjs +54 -76
- package/dist/cjs/tlm-ai/aiRoutes.cjs +17 -20
- package/dist/cjs/tlm-ai/aiService.cjs +91 -95
- package/dist/cjs/tlm-ai/tools.cjs +177 -174
- package/dist/cjs/tlm-auth/authController.cjs +80 -123
- package/dist/cjs/tlm-auth/authMiddleware.cjs +25 -30
- package/dist/cjs/tlm-auth/authRoutes.cjs +11 -14
- package/dist/cjs/tlm-log/logController.cjs +135 -116
- package/dist/cjs/tlm-log/logRoutes.cjs +19 -20
- package/dist/cjs/tlm-log/logService.cjs +29 -0
- package/dist/cjs/tlm-metric/metricsController.cjs +154 -122
- package/dist/cjs/tlm-metric/metricsRoutes.cjs +22 -20
- package/dist/cjs/tlm-metric/metricsService.cjs +26 -0
- package/dist/cjs/tlm-plugin/pluginController.cjs +128 -140
- package/dist/cjs/tlm-plugin/pluginProcess.cjs +89 -94
- package/dist/cjs/tlm-plugin/pluginRoutes.cjs +11 -14
- package/dist/cjs/tlm-plugin/pluginService.cjs +73 -74
- package/dist/cjs/tlm-trace/traceController.cjs +140 -123
- package/dist/cjs/tlm-trace/traceRoutes.cjs +19 -20
- package/dist/cjs/tlm-trace/traceService.cjs +29 -0
- package/dist/cjs/tlm-ui/uiRoutes.cjs +63 -32
- package/dist/cjs/tlm-util/utilController.cjs +68 -70
- package/dist/cjs/tlm-util/utilRoutes.cjs +51 -63
- package/dist/cjs/types/index.cjs +2 -5
- package/dist/cjs/utils/logger.cjs +38 -43
- package/dist/cjs/utils/regexUtils.cjs +22 -22
- package/dist/esm/config/bootConfig.js +5 -2
- package/dist/esm/config/config.js +9 -2
- package/dist/esm/docs/openapi.yaml +158 -4
- package/dist/esm/index.js +9 -8
- package/dist/esm/routesManager.js +6 -10
- package/dist/esm/telemetry/custom-implementations/exporters/DiskLogExporter.js +114 -0
- package/dist/esm/telemetry/custom-implementations/exporters/DiskMetricExporter.js +94 -0
- package/dist/esm/telemetry/custom-implementations/exporters/DiskTraceExporter.js +96 -0
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.js +38 -7
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.js +107 -48
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.js +60 -29
- package/dist/esm/telemetry/custom-implementations/exporters/MultiMetricExporter.js +53 -0
- package/dist/esm/telemetry/custom-implementations/instrumentations/logsInstrumentation.js +85 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Chunk.js +155 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Series.js +164 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.js +385 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/types.js +1 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/utils.js +74 -0
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.js +2 -1
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.js +1 -1
- package/dist/esm/telemetry/custom-implementations/wrappers.js +77 -6
- package/dist/esm/telemetry/initializeTelemetry.js +27 -69
- package/dist/esm/telemetry/persistence/DiskImporter.js +78 -0
- package/dist/esm/telemetry/persistence/DiskUtils.js +51 -0
- package/dist/esm/telemetry/persistence/DiskWriter.js +59 -0
- package/dist/esm/telemetry/telemetryConfigurator.js +110 -39
- package/dist/esm/telemetry/telemetryRegistry.js +12 -1
- package/dist/esm/tlm-ai/agent.js +5 -3
- package/dist/esm/tlm-ai/aiController.js +3 -3
- package/dist/esm/tlm-ai/aiService.js +6 -2
- package/dist/esm/tlm-ai/tools.js +5 -9
- package/dist/esm/tlm-auth/authController.js +3 -2
- package/dist/esm/tlm-log/logController.js +62 -18
- package/dist/esm/tlm-log/logRoutes.js +3 -1
- package/dist/esm/tlm-log/logService.js +25 -0
- package/dist/esm/tlm-metric/metricsController.js +116 -50
- package/dist/esm/tlm-metric/metricsRoutes.js +8 -3
- package/dist/esm/tlm-metric/metricsService.js +22 -0
- package/dist/esm/tlm-plugin/pluginController.js +6 -11
- package/dist/esm/tlm-plugin/pluginService.js +2 -4
- package/dist/esm/tlm-trace/traceController.js +87 -36
- package/dist/esm/tlm-trace/traceRoutes.js +3 -1
- package/dist/esm/tlm-trace/traceService.js +25 -0
- package/dist/esm/tlm-ui/uiRoutes.js +5 -5
- package/dist/esm/tlm-util/utilController.js +3 -9
- package/dist/esm/tlm-util/utilRoutes.js +2 -2
- package/dist/types/config/bootConfig.d.ts +3 -0
- package/dist/types/config/config.d.ts +48 -7
- package/dist/types/config/config.types.d.ts +7 -0
- package/dist/types/index.d.ts +2 -3
- package/dist/types/telemetry/custom-implementations/exporters/DiskLogExporter.d.ts +24 -0
- package/dist/types/telemetry/custom-implementations/exporters/DiskMetricExporter.d.ts +23 -0
- package/dist/types/telemetry/custom-implementations/exporters/DiskTraceExporter.d.ts +23 -0
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.d.ts +3 -1
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.d.ts +56 -15
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.d.ts +8 -4
- package/dist/types/telemetry/custom-implementations/exporters/MultiMetricExporter.d.ts +9 -0
- package/dist/types/telemetry/custom-implementations/instrumentations/logsInstrumentation.d.ts +23 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/Chunk.d.ts +49 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/Series.d.ts +67 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.d.ts +69 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/types.d.ts +68 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/utils.d.ts +21 -0
- package/dist/types/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.d.ts +2 -2
- package/dist/types/telemetry/custom-implementations/wrappers.d.ts +2 -1
- package/dist/types/telemetry/persistence/DiskImporter.d.ts +17 -0
- package/dist/types/telemetry/persistence/DiskUtils.d.ts +11 -0
- package/dist/types/telemetry/persistence/DiskWriter.d.ts +21 -0
- package/dist/types/telemetry/telemetryConfigurator.d.ts +1 -1
- package/dist/types/telemetry/telemetryRegistry.d.ts +8 -0
- package/dist/types/tlm-ai/agent.d.ts +1 -1
- package/dist/types/tlm-ai/aiService.d.ts +1 -1
- package/dist/types/tlm-log/logController.d.ts +2 -0
- package/dist/types/tlm-log/logService.d.ts +4 -0
- package/dist/types/tlm-metric/metricsController.d.ts +11 -2
- package/dist/types/tlm-metric/metricsService.d.ts +6 -0
- package/dist/types/tlm-trace/traceController.d.ts +9 -7
- package/dist/types/tlm-trace/traceService.d.ts +4 -0
- package/dist/types/types/index.d.ts +2 -2
- package/dist/ui/assets/{ApiDocsPage-C_VVPPHa.js → ApiDocsPage-DTCgVbW2.js} +2 -2
- package/dist/ui/assets/CollapsibleCard-lWgfsaAn.js +1 -0
- package/dist/ui/assets/DevToolsPage-DEhf8CBy.js +1 -0
- package/dist/ui/assets/LandingPage-CfEHCDxY.js +6 -0
- package/dist/ui/assets/LogsPage-DFDKRuGH.js +1 -0
- package/dist/ui/assets/{NotFoundPage-B3quk3P1.js → NotFoundPage-DCy0DcV7.js} +1 -1
- package/dist/ui/assets/PluginCreatePage-BawZ5_-h.js +50 -0
- package/dist/ui/assets/PluginPage-D3FmgU7d.js +27 -0
- package/dist/ui/assets/TraceSpansPage-D0_L45Rb.js +6 -0
- package/dist/ui/assets/VirtualizedListPanel-q605n9He.js +16 -0
- package/dist/ui/assets/alert-DBAFshSi.js +1133 -0
- package/dist/ui/assets/badge-DGNBtnxU.js +1 -0
- package/dist/ui/assets/{chevron-down-CPsvsmqj.js → chevron-down-CFEqYzGC.js} +1 -1
- package/dist/ui/assets/{chevron-up-Df9jMo1X.js → chevron-up-lDnFwAJq.js} +1 -1
- package/dist/ui/assets/{circle-alert-DOPQPvU8.js → circle-alert-BpYUuRs7.js} +1 -1
- package/dist/ui/assets/dialog-1dRyI6SC.js +15 -0
- package/dist/ui/assets/index-C7RfU6hR.js +1 -0
- package/dist/ui/assets/index-C9dDYIpd.js +305 -0
- package/dist/ui/assets/index-D6f1KjWV.css +1 -0
- package/dist/ui/assets/info-CuJQWoBU.js +6 -0
- package/dist/ui/assets/{input-Dzvg_ZEZ.js → input-BLXaar0X.js} +1 -1
- package/dist/ui/assets/label-DfAcltsl.js +1 -0
- package/dist/ui/assets/{loader-circle-CrvlRy5o.js → loader-circle-B7oLyPsi.js} +1 -1
- package/dist/ui/assets/{loginPage-qa4V-B70.js → loginPage-DswZvOJ-.js} +1 -1
- package/dist/ui/assets/metrics-page-BhtXrfUW.js +31 -0
- package/dist/ui/assets/metrics-page-D1GxaB_c.css +1 -0
- package/dist/ui/assets/popover-IDker85U.js +11 -0
- package/dist/ui/assets/select-B8y5IidE.js +6 -0
- package/dist/ui/assets/separator-B6EzrxYY.js +6 -0
- package/dist/ui/assets/severityOptions-DtCsaAZK.js +11 -0
- package/dist/ui/assets/square-pen-D_oecB1x.js +6 -0
- package/dist/ui/assets/switch-Dqo0XkRD.js +1 -0
- package/dist/ui/assets/trace-DJq1miYa.js +1 -0
- package/dist/ui/assets/upload-prIohEdY.js +11 -0
- package/dist/ui/assets/{utilService-DNyqzwj0.js → utilService-C8TJKLqs.js} +1 -1
- package/dist/ui/assets/wand-sparkles-OgXuzsSx.js +6 -0
- package/dist/ui/index.html +2 -2
- package/package.json +44 -49
- package/dist/ui/assets/CollapsibleCard-B3KR_8mL.js +0 -1
- package/dist/ui/assets/DevToolsPage-OyZcDcmw.js +0 -1
- package/dist/ui/assets/LandingPage-CppFBA6K.js +0 -6
- package/dist/ui/assets/LogsPage-9Fq8GArS.js +0 -26
- package/dist/ui/assets/PluginCreatePage-X_aCH4t4.js +0 -50
- package/dist/ui/assets/PluginPage-DMDSihrZ.js +0 -27
- package/dist/ui/assets/alert-jQ9HCPIf.js +0 -1133
- package/dist/ui/assets/badge-CNq0-mH5.js +0 -1
- package/dist/ui/assets/card-DFAwwhN3.js +0 -1
- package/dist/ui/assets/index-BkD6DijD.js +0 -15
- package/dist/ui/assets/index-CERGVYZK.js +0 -292
- package/dist/ui/assets/index-CSIPf9qw.css +0 -1
- package/dist/ui/assets/label-DuVnkZ4q.js +0 -1
- package/dist/ui/assets/select-DhS8YUtJ.js +0 -1
- package/dist/ui/assets/separator-isK4chBP.js +0 -6
- package/dist/ui/assets/severityOptions-O38dSOfk.js +0 -11
- package/dist/ui/assets/switch-Z3mImG9n.js +0 -1
- package/dist/ui/assets/tabs-_77MUUQe.js +0 -16
- package/dist/ui/assets/upload-C1LT4Gkb.js +0 -16
|
@@ -1,82 +1,81 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.pluginService = void 0;
|
|
7
|
-
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
const logger_js_1 = __importDefault(require("../utils/logger.cjs"));
|
|
9
8
|
class PluginService {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
getPlugins() {
|
|
15
|
-
return this.plugins;
|
|
16
|
-
}
|
|
17
|
-
pushPlugin(plugin) {
|
|
18
|
-
this.plugins.push(plugin);
|
|
19
|
-
}
|
|
20
|
-
activatePlugin(pluginId) {
|
|
21
|
-
const plugin = this.plugins.find(p => p.id === pluginId);
|
|
22
|
-
if (plugin) {
|
|
23
|
-
plugin.active = true;
|
|
9
|
+
plugins = [];
|
|
10
|
+
enabled = false;
|
|
11
|
+
getPlugins() {
|
|
12
|
+
return this.plugins;
|
|
24
13
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const plugin = this.plugins.find(p => p.id === pluginId);
|
|
28
|
-
if (plugin) {
|
|
29
|
-
plugin.active = false;
|
|
14
|
+
pushPlugin(plugin) {
|
|
15
|
+
this.plugins.push(plugin);
|
|
30
16
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
17
|
+
activatePlugin(pluginId) {
|
|
18
|
+
const plugin = this.plugins.find((p) => p.id === pluginId);
|
|
19
|
+
if (plugin) {
|
|
20
|
+
plugin.active = true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
deactivatePlugin(pluginId) {
|
|
24
|
+
const plugin = this.plugins.find((p) => p.id === pluginId);
|
|
25
|
+
if (plugin) {
|
|
26
|
+
plugin.active = false;
|
|
27
|
+
}
|
|
36
28
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.plugins.forEach((plugin, i) => {
|
|
42
|
-
if (!plugin.active) return;
|
|
43
|
-
if (plugin.process) {
|
|
44
|
-
if (plugin.process.connected) {
|
|
45
|
-
try {
|
|
46
|
-
plugin.process.send({
|
|
47
|
-
type,
|
|
48
|
-
payload
|
|
49
|
-
});
|
|
50
|
-
_logger.default.debug(`Sent ${type} to child-process plugin <${plugin.name}> (#${i})`);
|
|
51
|
-
} catch (err) {
|
|
52
|
-
_logger.default.error(`Failed to send ${type} to plugin <${plugin.name}> (#${i}):`, err);
|
|
53
|
-
}
|
|
54
|
-
} else {
|
|
55
|
-
_logger.default.warn(`Plugin <${plugin.name}> (#${i}) is not connected. Skipping ${type}.`);
|
|
29
|
+
deletePlugin(pluginId) {
|
|
30
|
+
const plugin = this.plugins.find((p) => p.id === pluginId);
|
|
31
|
+
if (plugin?.process && !plugin.process.killed) {
|
|
32
|
+
plugin.process.kill(1);
|
|
56
33
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
34
|
+
this.plugins = this.plugins.filter((p) => p.id !== pluginId);
|
|
35
|
+
}
|
|
36
|
+
broadcastToPlugins(type, payload) {
|
|
37
|
+
if (!this.enabled)
|
|
38
|
+
return;
|
|
39
|
+
this.plugins.forEach((plugin, i) => {
|
|
40
|
+
if (!plugin.active)
|
|
41
|
+
return;
|
|
42
|
+
if (plugin.process) {
|
|
43
|
+
if (plugin.process.connected) {
|
|
44
|
+
try {
|
|
45
|
+
plugin.process.send({ type, payload });
|
|
46
|
+
logger_js_1.default.debug(`Sent ${type} to child-process plugin <${plugin.name}> (#${i})`);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
logger_js_1.default.error(`Failed to send ${type} to plugin <${plugin.name}> (#${i}):`, err);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
logger_js_1.default.warn(`Plugin <${plugin.name}> (#${i}) is not connected. Skipping ${type}.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
logger_js_1.default.debug(`Plugin <${plugin.name}> does not implement ${type}. Skipping.`);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Broadcast a new metric to all active plugins
|
|
63
|
+
*/
|
|
64
|
+
broadcastMetric(metric) {
|
|
65
|
+
this.broadcastToPlugins("newMetric", metric);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Broadcast a new log to all active plugins
|
|
69
|
+
*/
|
|
70
|
+
broadcastLog(log) {
|
|
71
|
+
this.broadcastToPlugins("newLog", log);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Broadcast a new trace to all active plugins
|
|
75
|
+
* TODO: rename to span (trace is the whole trace, span is a single unit of work within a trace)
|
|
76
|
+
*/
|
|
77
|
+
broadcastTrace(trace) {
|
|
78
|
+
this.broadcastToPlugins("newTrace", trace);
|
|
79
|
+
}
|
|
81
80
|
}
|
|
82
|
-
|
|
81
|
+
exports.pluginService = new PluginService();
|
|
@@ -1,146 +1,163 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
12
|
-
const startTraces = (req, res) => {
|
|
13
|
-
_telemetryRegistry.inMemoryDbSpanExporter.enable();
|
|
14
|
-
res.send('Traces started');
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exportTraces = exports.getTraceRetentionTime = exports.setTraceRetentionTime = exports.importTraces = exports.insertTracesToDb = exports.findTraces = exports.listTraces = exports.resetTraces = exports.statusTraces = exports.stopTraces = exports.startTraces = void 0;
|
|
4
|
+
const telemetryRegistry_js_1 = require("../telemetry/telemetryRegistry.cjs");
|
|
5
|
+
const regexUtils_js_1 = require("../utils/regexUtils.cjs");
|
|
6
|
+
const traceService_js_1 = require("./traceService.cjs");
|
|
7
|
+
const zlib_1 = require("zlib");
|
|
8
|
+
const startTraces = (_req, res) => {
|
|
9
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.enable();
|
|
10
|
+
res.send('Traces started');
|
|
15
11
|
};
|
|
16
12
|
exports.startTraces = startTraces;
|
|
17
|
-
const stopTraces = (
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const stopTraces = (_req, res) => {
|
|
14
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.disable();
|
|
15
|
+
res.send('Traces stopped');
|
|
20
16
|
};
|
|
21
17
|
exports.stopTraces = stopTraces;
|
|
22
|
-
const statusTraces = (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
active: isRunning
|
|
26
|
-
});
|
|
18
|
+
const statusTraces = (_req, res) => {
|
|
19
|
+
const isRunning = telemetryRegistry_js_1.inMemoryDbSpanExporter.isEnabled() || false;
|
|
20
|
+
res.send({ active: isRunning });
|
|
27
21
|
};
|
|
28
22
|
exports.statusTraces = statusTraces;
|
|
29
|
-
const resetTraces = (
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
const resetTraces = (_req, res) => {
|
|
24
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.reset();
|
|
25
|
+
res.send('Traces reset');
|
|
32
26
|
};
|
|
33
27
|
exports.resetTraces = resetTraces;
|
|
34
|
-
const listTraces = async (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
res.status(500).send({
|
|
44
|
-
error: 'Failed to list traces data'
|
|
45
|
-
});
|
|
46
|
-
}
|
|
28
|
+
const listTraces = async (_req, res) => {
|
|
29
|
+
try {
|
|
30
|
+
const spans = telemetryRegistry_js_1.inMemoryDbSpanExporter.getFinishedSpans();
|
|
31
|
+
res.send({ spansCount: spans.length, spans: spans });
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
console.error(err);
|
|
35
|
+
res.status(500).send({ error: 'Failed to list traces data' });
|
|
36
|
+
}
|
|
47
37
|
};
|
|
48
38
|
exports.listTraces = listTraces;
|
|
49
|
-
const findTraces = (req, res) => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
processedQuery
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
39
|
+
const findTraces = async (req, res) => {
|
|
40
|
+
const body = req.body || {};
|
|
41
|
+
const findQuery = body.query || {};
|
|
42
|
+
const limit = parseInt(body.limit) || 50;
|
|
43
|
+
const sortOrder = body.sort || null;
|
|
44
|
+
let processedQuery;
|
|
45
|
+
try {
|
|
46
|
+
processedQuery = (0, regexUtils_js_1.convertRegexRecursively)(findQuery);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(error.message);
|
|
50
|
+
res.status(400).send({ error: error.message });
|
|
51
|
+
return; // Exit if invalid regex was encountered
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const findConfig = {
|
|
55
|
+
query: processedQuery,
|
|
56
|
+
limit,
|
|
57
|
+
sortOrder
|
|
58
|
+
};
|
|
59
|
+
const docs = await telemetryRegistry_js_1.inMemoryDbSpanExporter.find(findConfig);
|
|
60
|
+
res.send({
|
|
61
|
+
spansCount: docs.length,
|
|
62
|
+
spans: docs,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.error(err);
|
|
67
|
+
res.status(500).send({ spansCount: 0, spans: [], error: err.message });
|
|
71
68
|
}
|
|
72
|
-
const spans = docs;
|
|
73
|
-
res.send({
|
|
74
|
-
spansCount: spans.length,
|
|
75
|
-
spans: spans
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
69
|
};
|
|
79
70
|
exports.findTraces = findTraces;
|
|
80
71
|
const insertTracesToDb = async (req, res) => {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const cleanedTraces = jsonContent.map(trace => {
|
|
90
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
91
|
-
const {
|
|
92
|
-
_id
|
|
93
|
-
} = trace,
|
|
94
|
-
rest = _objectWithoutProperties(trace, _excluded); // Remove _id if it exists
|
|
95
|
-
return rest; // Return the cleaned trace object
|
|
96
|
-
});
|
|
97
|
-
try {
|
|
98
|
-
let message = '';
|
|
99
|
-
if (resetData) {
|
|
100
|
-
_telemetryRegistry.inMemoryDbSpanExporter.reset();
|
|
101
|
-
message += 'Traces Database reset. ';
|
|
72
|
+
const jsonContent = (req.body || {}).spans;
|
|
73
|
+
const resetData = req.query.reset === 'true';
|
|
74
|
+
if (!Array.isArray(jsonContent)) {
|
|
75
|
+
res.status(400).send({ error: 'Invalid data format.' });
|
|
76
|
+
return;
|
|
102
77
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
78
|
+
const cleanedTraces = (0, traceService_js_1.sanitizeTraceRecords)(jsonContent);
|
|
79
|
+
try {
|
|
80
|
+
let message = '';
|
|
81
|
+
await (0, traceService_js_1.importTracesToMemory)(cleanedTraces, { reset: resetData });
|
|
82
|
+
if (resetData) {
|
|
83
|
+
message += 'Traces Database reset. ';
|
|
108
84
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
});
|
|
117
|
-
} catch (err) {
|
|
118
|
-
console.error(err);
|
|
119
|
-
res.status(500).send({
|
|
120
|
-
error: 'Failed to reset and insert data',
|
|
121
|
-
details: err.message
|
|
122
|
-
});
|
|
123
|
-
}
|
|
85
|
+
message += `Inserted ${cleanedTraces.length} traces.`;
|
|
86
|
+
res.send({ message, InsertedTracesCount: cleanedTraces.length });
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
console.error(err);
|
|
90
|
+
res.status(500).send({ error: 'Failed to reset and insert data', details: err.message });
|
|
91
|
+
}
|
|
124
92
|
};
|
|
125
93
|
exports.insertTracesToDb = insertTracesToDb;
|
|
94
|
+
const importTraces = async (req, res) => {
|
|
95
|
+
const resetData = req.query.reset === 'true';
|
|
96
|
+
const body = req.body || {};
|
|
97
|
+
const importedSpans = Array.isArray(body) ? body : body.spans;
|
|
98
|
+
try {
|
|
99
|
+
if (!Array.isArray(importedSpans)) {
|
|
100
|
+
res.status(400).send({ error: 'Invalid data format. Expected an array in request body or body.spans.' });
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const cleanedTraces = (0, traceService_js_1.sanitizeTraceRecords)(importedSpans);
|
|
104
|
+
let message = '';
|
|
105
|
+
await (0, traceService_js_1.importTracesToMemory)(cleanedTraces, { reset: resetData });
|
|
106
|
+
if (resetData) {
|
|
107
|
+
message += 'Traces Database reset. ';
|
|
108
|
+
}
|
|
109
|
+
message += `Imported ${cleanedTraces.length} traces.`;
|
|
110
|
+
res.send({ message, ImportedTracesCount: cleanedTraces.length });
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
console.error('Import failed:', err);
|
|
114
|
+
res.status(400).send({ error: 'Failed to import traces', details: err.message });
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
exports.importTraces = importTraces;
|
|
126
118
|
const setTraceRetentionTime = (req, res) => {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
_telemetryRegistry.inMemoryDbSpanExporter.retentionTimeInSeconds = retentionTimeInSeconds;
|
|
135
|
-
res.send({
|
|
136
|
-
message: `Retention time set to ${retentionTimeInSeconds} seconds.`
|
|
137
|
-
});
|
|
119
|
+
const retentionTimeInSeconds = (req.body || {}).retentionTimeInSeconds;
|
|
120
|
+
if (typeof retentionTimeInSeconds !== 'number' || retentionTimeInSeconds <= 0) {
|
|
121
|
+
res.status(400).send({ error: 'Invalid retention time. Must be a positive number.' });
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.retentionTimeInSeconds = retentionTimeInSeconds;
|
|
125
|
+
res.send({ message: `Retention time set to ${retentionTimeInSeconds} seconds.` });
|
|
138
126
|
};
|
|
139
127
|
exports.setTraceRetentionTime = setTraceRetentionTime;
|
|
140
|
-
const getTraceRetentionTime = (
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
128
|
+
const getTraceRetentionTime = (_req, res) => {
|
|
129
|
+
const retentionTimeInSeconds = telemetryRegistry_js_1.inMemoryDbSpanExporter.retentionTimeInSeconds || 0;
|
|
130
|
+
res.send({ retentionTimeInSeconds: retentionTimeInSeconds });
|
|
131
|
+
};
|
|
132
|
+
exports.getTraceRetentionTime = getTraceRetentionTime;
|
|
133
|
+
const exportTraces = async (req, res) => {
|
|
134
|
+
try {
|
|
135
|
+
const findConfig = {
|
|
136
|
+
query: {},
|
|
137
|
+
sortOrder: { startTime: -1 }
|
|
138
|
+
};
|
|
139
|
+
const docs = await telemetryRegistry_js_1.inMemoryDbSpanExporter.find(findConfig);
|
|
140
|
+
const responseBody = { spansCount: docs.length, spans: docs };
|
|
141
|
+
const payload = JSON.stringify(responseBody);
|
|
142
|
+
const payloadSize = Buffer.byteLength(payload, 'utf-8');
|
|
143
|
+
const acceptsGzip = String(req.headers['accept-encoding'] || '').includes('gzip');
|
|
144
|
+
const timestamp = new Date().toISOString().slice(0, 19).replace(/[-T:]/g, '');
|
|
145
|
+
res.setHeader('Content-Type', 'application/json');
|
|
146
|
+
res.setHeader('Content-Disposition', `attachment; filename="traces-${timestamp}.json"`);
|
|
147
|
+
res.setHeader('Vary', 'Accept-Encoding');
|
|
148
|
+
if (acceptsGzip && payloadSize > 64 * 1024) {
|
|
149
|
+
const compressed = (0, zlib_1.gzipSync)(payload);
|
|
150
|
+
res.setHeader('Content-Encoding', 'gzip');
|
|
151
|
+
res.setHeader('Content-Length', compressed.length.toString());
|
|
152
|
+
res.end(compressed);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
res.setHeader('Content-Length', payloadSize.toString());
|
|
156
|
+
res.end(payload);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
console.error('Failed to export traces:', err);
|
|
160
|
+
res.status(500).send({ error: 'Failed to export traces', details: err.message });
|
|
161
|
+
}
|
|
145
162
|
};
|
|
146
|
-
exports.
|
|
163
|
+
exports.exportTraces = exportTraces;
|
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.getTraceRoutes = exports.default = void 0;
|
|
7
|
-
var _express = require("express");
|
|
8
|
-
var _traceController = require("./traceController.cjs");
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTraceRoutes = void 0;
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const traceController_js_1 = require("./traceController.cjs");
|
|
9
6
|
const getTraceRoutes = () => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
const router = (0, express_1.Router)();
|
|
8
|
+
// Telemetry Control
|
|
9
|
+
router.post('/start', traceController_js_1.startTraces);
|
|
10
|
+
router.post('/stop', traceController_js_1.stopTraces);
|
|
11
|
+
router.get('/status', traceController_js_1.statusTraces);
|
|
12
|
+
router.post('/reset', traceController_js_1.resetTraces);
|
|
13
|
+
router.get('/export', traceController_js_1.exportTraces);
|
|
14
|
+
router.post('/import', traceController_js_1.importTraces);
|
|
15
|
+
router.get('/', traceController_js_1.listTraces);
|
|
16
|
+
router.post('/', traceController_js_1.insertTracesToDb);
|
|
17
|
+
router.post('/find', traceController_js_1.findTraces);
|
|
18
|
+
router.post('/retention-time', traceController_js_1.setTraceRetentionTime);
|
|
19
|
+
router.get('/retention-time', traceController_js_1.getTraceRetentionTime);
|
|
20
|
+
return router;
|
|
22
21
|
};
|
|
23
22
|
exports.getTraceRoutes = getTraceRoutes;
|
|
24
|
-
|
|
23
|
+
exports.default = exports.getTraceRoutes;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeTraceRecords = sanitizeTraceRecords;
|
|
4
|
+
exports.importTracesToMemory = importTracesToMemory;
|
|
5
|
+
const telemetryRegistry_js_1 = require("../telemetry/telemetryRegistry.cjs");
|
|
6
|
+
function sanitizeTraceRecords(records) {
|
|
7
|
+
return records.map((record) => {
|
|
8
|
+
const { _id, ...rest } = record;
|
|
9
|
+
return rest;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async function importTracesToMemory(records, options) {
|
|
13
|
+
if (options?.reset) {
|
|
14
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.reset();
|
|
15
|
+
}
|
|
16
|
+
if (!records.length) {
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
await new Promise((resolve, reject) => {
|
|
20
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.insert(records, (err) => {
|
|
21
|
+
if (err) {
|
|
22
|
+
reject(err);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
resolve();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
return records.length;
|
|
29
|
+
}
|
|
@@ -1,37 +1,68 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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;
|
|
5
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.getUIRoutes = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
40
|
+
const express_1 = __importStar(require("express"));
|
|
41
|
+
const path_1 = __importDefault(require("path"));
|
|
42
|
+
const url_1 = require("url");
|
|
43
|
+
const logger_js_1 = __importDefault(require("../utils/logger.cjs"));
|
|
44
|
+
const bootConfig_js_1 = require("../config/bootConfig.cjs");
|
|
14
45
|
const getUIRoutes = () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
46
|
+
// This is when this file is in /dist
|
|
47
|
+
let relativePath = '../../ui';
|
|
48
|
+
// This is when this file in in /src
|
|
49
|
+
if (bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_ENV === 'development') {
|
|
50
|
+
relativePath = '../../dist/ui';
|
|
51
|
+
logger_js_1.default.warn('🚧 This process is serving the OASTLM UI from the build directory, but you are in development mode. For live updates, run the React app separately and access it at http://localhost:5173/.');
|
|
52
|
+
}
|
|
53
|
+
const isCjs = typeof __filename !== "undefined" && typeof __dirname !== "undefined";
|
|
54
|
+
// @ts-ignore -- import.meta no existe en el build CJS
|
|
55
|
+
const currentDirectory = isCjs ? __dirname : path_1.default.dirname((0, url_1.fileURLToPath)(__filename));
|
|
56
|
+
const staticFilesPath = path_1.default.join(currentDirectory, relativePath);
|
|
57
|
+
const router = (0, express_1.Router)();
|
|
58
|
+
// This only works once the app is built: src/ --> dist/esm/
|
|
59
|
+
// This file: dist/esm/routes/
|
|
60
|
+
// UI bundle: dist/ui/
|
|
61
|
+
// For development, the UI is served separately.
|
|
62
|
+
router.use(express_1.default.static(staticFilesPath));
|
|
63
|
+
router.use((_req, res) => {
|
|
64
|
+
res.sendFile(path_1.default.join(staticFilesPath, 'index.html'));
|
|
65
|
+
});
|
|
66
|
+
return router;
|
|
36
67
|
};
|
|
37
|
-
exports.getUIRoutes = getUIRoutes;
|
|
68
|
+
exports.getUIRoutes = getUIRoutes;
|