@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.
Files changed (194) hide show
  1. package/.env.example +17 -3
  2. package/README.md +1 -2
  3. package/dist/cjs/config/bootConfig.cjs +16 -14
  4. package/dist/cjs/config/config.cjs +120 -125
  5. package/dist/cjs/config/config.types.cjs +1 -4
  6. package/dist/cjs/docs/openapi.yaml +158 -4
  7. package/dist/cjs/index.cjs +27 -30
  8. package/dist/cjs/routesManager.cjs +62 -70
  9. package/dist/cjs/telemetry/custom-implementations/exporters/DiskLogExporter.cjs +121 -0
  10. package/dist/cjs/telemetry/custom-implementations/exporters/DiskMetricExporter.cjs +101 -0
  11. package/dist/cjs/telemetry/custom-implementations/exporters/DiskTraceExporter.cjs +103 -0
  12. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.cjs +194 -190
  13. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.cjs +147 -99
  14. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.cjs +143 -116
  15. package/dist/cjs/telemetry/custom-implementations/exporters/MultiMetricExporter.cjs +57 -0
  16. package/dist/cjs/telemetry/custom-implementations/instrumentations/logsInstrumentation.cjs +92 -0
  17. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Chunk.cjs +159 -0
  18. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Series.cjs +168 -0
  19. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.cjs +392 -0
  20. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/types.cjs +2 -0
  21. package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/utils.cjs +77 -0
  22. package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.cjs +65 -63
  23. package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.cjs +63 -62
  24. package/dist/cjs/telemetry/custom-implementations/utils/circular.cjs +47 -47
  25. package/dist/cjs/telemetry/custom-implementations/wrappers.cjs +209 -138
  26. package/dist/cjs/telemetry/initializeTelemetry.cjs +35 -91
  27. package/dist/cjs/telemetry/persistence/DiskImporter.cjs +85 -0
  28. package/dist/cjs/telemetry/persistence/DiskUtils.cjs +61 -0
  29. package/dist/cjs/telemetry/persistence/DiskWriter.cjs +66 -0
  30. package/dist/cjs/telemetry/telemetryConfigurator.cjs +139 -72
  31. package/dist/cjs/telemetry/telemetryRegistry.cjs +45 -31
  32. package/dist/cjs/tlm-ai/agent.cjs +49 -64
  33. package/dist/cjs/tlm-ai/aiController.cjs +54 -76
  34. package/dist/cjs/tlm-ai/aiRoutes.cjs +17 -20
  35. package/dist/cjs/tlm-ai/aiService.cjs +91 -95
  36. package/dist/cjs/tlm-ai/tools.cjs +177 -174
  37. package/dist/cjs/tlm-auth/authController.cjs +80 -123
  38. package/dist/cjs/tlm-auth/authMiddleware.cjs +25 -30
  39. package/dist/cjs/tlm-auth/authRoutes.cjs +11 -14
  40. package/dist/cjs/tlm-log/logController.cjs +135 -116
  41. package/dist/cjs/tlm-log/logRoutes.cjs +19 -20
  42. package/dist/cjs/tlm-log/logService.cjs +29 -0
  43. package/dist/cjs/tlm-metric/metricsController.cjs +154 -122
  44. package/dist/cjs/tlm-metric/metricsRoutes.cjs +22 -20
  45. package/dist/cjs/tlm-metric/metricsService.cjs +26 -0
  46. package/dist/cjs/tlm-plugin/pluginController.cjs +128 -140
  47. package/dist/cjs/tlm-plugin/pluginProcess.cjs +89 -94
  48. package/dist/cjs/tlm-plugin/pluginRoutes.cjs +11 -14
  49. package/dist/cjs/tlm-plugin/pluginService.cjs +73 -74
  50. package/dist/cjs/tlm-trace/traceController.cjs +140 -123
  51. package/dist/cjs/tlm-trace/traceRoutes.cjs +19 -20
  52. package/dist/cjs/tlm-trace/traceService.cjs +29 -0
  53. package/dist/cjs/tlm-ui/uiRoutes.cjs +63 -32
  54. package/dist/cjs/tlm-util/utilController.cjs +68 -70
  55. package/dist/cjs/tlm-util/utilRoutes.cjs +51 -63
  56. package/dist/cjs/types/index.cjs +2 -5
  57. package/dist/cjs/utils/logger.cjs +38 -43
  58. package/dist/cjs/utils/regexUtils.cjs +22 -22
  59. package/dist/esm/config/bootConfig.js +5 -2
  60. package/dist/esm/config/config.js +9 -2
  61. package/dist/esm/docs/openapi.yaml +158 -4
  62. package/dist/esm/index.js +9 -8
  63. package/dist/esm/routesManager.js +6 -10
  64. package/dist/esm/telemetry/custom-implementations/exporters/DiskLogExporter.js +114 -0
  65. package/dist/esm/telemetry/custom-implementations/exporters/DiskMetricExporter.js +94 -0
  66. package/dist/esm/telemetry/custom-implementations/exporters/DiskTraceExporter.js +96 -0
  67. package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.js +38 -7
  68. package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.js +107 -48
  69. package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.js +60 -29
  70. package/dist/esm/telemetry/custom-implementations/exporters/MultiMetricExporter.js +53 -0
  71. package/dist/esm/telemetry/custom-implementations/instrumentations/logsInstrumentation.js +85 -0
  72. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Chunk.js +155 -0
  73. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Series.js +164 -0
  74. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.js +385 -0
  75. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/types.js +1 -0
  76. package/dist/esm/telemetry/custom-implementations/metrics/tsdb/utils.js +74 -0
  77. package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.js +2 -1
  78. package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.js +1 -1
  79. package/dist/esm/telemetry/custom-implementations/wrappers.js +77 -6
  80. package/dist/esm/telemetry/initializeTelemetry.js +27 -69
  81. package/dist/esm/telemetry/persistence/DiskImporter.js +78 -0
  82. package/dist/esm/telemetry/persistence/DiskUtils.js +51 -0
  83. package/dist/esm/telemetry/persistence/DiskWriter.js +59 -0
  84. package/dist/esm/telemetry/telemetryConfigurator.js +110 -39
  85. package/dist/esm/telemetry/telemetryRegistry.js +12 -1
  86. package/dist/esm/tlm-ai/agent.js +5 -3
  87. package/dist/esm/tlm-ai/aiController.js +3 -3
  88. package/dist/esm/tlm-ai/aiService.js +6 -2
  89. package/dist/esm/tlm-ai/tools.js +5 -9
  90. package/dist/esm/tlm-auth/authController.js +3 -2
  91. package/dist/esm/tlm-log/logController.js +62 -18
  92. package/dist/esm/tlm-log/logRoutes.js +3 -1
  93. package/dist/esm/tlm-log/logService.js +25 -0
  94. package/dist/esm/tlm-metric/metricsController.js +116 -50
  95. package/dist/esm/tlm-metric/metricsRoutes.js +8 -3
  96. package/dist/esm/tlm-metric/metricsService.js +22 -0
  97. package/dist/esm/tlm-plugin/pluginController.js +6 -11
  98. package/dist/esm/tlm-plugin/pluginService.js +2 -4
  99. package/dist/esm/tlm-trace/traceController.js +87 -36
  100. package/dist/esm/tlm-trace/traceRoutes.js +3 -1
  101. package/dist/esm/tlm-trace/traceService.js +25 -0
  102. package/dist/esm/tlm-ui/uiRoutes.js +5 -5
  103. package/dist/esm/tlm-util/utilController.js +3 -9
  104. package/dist/esm/tlm-util/utilRoutes.js +2 -2
  105. package/dist/types/config/bootConfig.d.ts +3 -0
  106. package/dist/types/config/config.d.ts +48 -7
  107. package/dist/types/config/config.types.d.ts +7 -0
  108. package/dist/types/index.d.ts +2 -3
  109. package/dist/types/telemetry/custom-implementations/exporters/DiskLogExporter.d.ts +24 -0
  110. package/dist/types/telemetry/custom-implementations/exporters/DiskMetricExporter.d.ts +23 -0
  111. package/dist/types/telemetry/custom-implementations/exporters/DiskTraceExporter.d.ts +23 -0
  112. package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.d.ts +3 -1
  113. package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.d.ts +56 -15
  114. package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.d.ts +8 -4
  115. package/dist/types/telemetry/custom-implementations/exporters/MultiMetricExporter.d.ts +9 -0
  116. package/dist/types/telemetry/custom-implementations/instrumentations/logsInstrumentation.d.ts +23 -0
  117. package/dist/types/telemetry/custom-implementations/metrics/tsdb/Chunk.d.ts +49 -0
  118. package/dist/types/telemetry/custom-implementations/metrics/tsdb/Series.d.ts +67 -0
  119. package/dist/types/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.d.ts +69 -0
  120. package/dist/types/telemetry/custom-implementations/metrics/tsdb/types.d.ts +68 -0
  121. package/dist/types/telemetry/custom-implementations/metrics/tsdb/utils.d.ts +21 -0
  122. package/dist/types/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.d.ts +2 -2
  123. package/dist/types/telemetry/custom-implementations/wrappers.d.ts +2 -1
  124. package/dist/types/telemetry/persistence/DiskImporter.d.ts +17 -0
  125. package/dist/types/telemetry/persistence/DiskUtils.d.ts +11 -0
  126. package/dist/types/telemetry/persistence/DiskWriter.d.ts +21 -0
  127. package/dist/types/telemetry/telemetryConfigurator.d.ts +1 -1
  128. package/dist/types/telemetry/telemetryRegistry.d.ts +8 -0
  129. package/dist/types/tlm-ai/agent.d.ts +1 -1
  130. package/dist/types/tlm-ai/aiService.d.ts +1 -1
  131. package/dist/types/tlm-log/logController.d.ts +2 -0
  132. package/dist/types/tlm-log/logService.d.ts +4 -0
  133. package/dist/types/tlm-metric/metricsController.d.ts +11 -2
  134. package/dist/types/tlm-metric/metricsService.d.ts +6 -0
  135. package/dist/types/tlm-trace/traceController.d.ts +9 -7
  136. package/dist/types/tlm-trace/traceService.d.ts +4 -0
  137. package/dist/types/types/index.d.ts +2 -2
  138. package/dist/ui/assets/{ApiDocsPage-C_VVPPHa.js → ApiDocsPage-DTCgVbW2.js} +2 -2
  139. package/dist/ui/assets/CollapsibleCard-lWgfsaAn.js +1 -0
  140. package/dist/ui/assets/DevToolsPage-DEhf8CBy.js +1 -0
  141. package/dist/ui/assets/LandingPage-CfEHCDxY.js +6 -0
  142. package/dist/ui/assets/LogsPage-DFDKRuGH.js +1 -0
  143. package/dist/ui/assets/{NotFoundPage-B3quk3P1.js → NotFoundPage-DCy0DcV7.js} +1 -1
  144. package/dist/ui/assets/PluginCreatePage-BawZ5_-h.js +50 -0
  145. package/dist/ui/assets/PluginPage-D3FmgU7d.js +27 -0
  146. package/dist/ui/assets/TraceSpansPage-D0_L45Rb.js +6 -0
  147. package/dist/ui/assets/VirtualizedListPanel-q605n9He.js +16 -0
  148. package/dist/ui/assets/alert-DBAFshSi.js +1133 -0
  149. package/dist/ui/assets/badge-DGNBtnxU.js +1 -0
  150. package/dist/ui/assets/{chevron-down-CPsvsmqj.js → chevron-down-CFEqYzGC.js} +1 -1
  151. package/dist/ui/assets/{chevron-up-Df9jMo1X.js → chevron-up-lDnFwAJq.js} +1 -1
  152. package/dist/ui/assets/{circle-alert-DOPQPvU8.js → circle-alert-BpYUuRs7.js} +1 -1
  153. package/dist/ui/assets/dialog-1dRyI6SC.js +15 -0
  154. package/dist/ui/assets/index-C7RfU6hR.js +1 -0
  155. package/dist/ui/assets/index-C9dDYIpd.js +305 -0
  156. package/dist/ui/assets/index-D6f1KjWV.css +1 -0
  157. package/dist/ui/assets/info-CuJQWoBU.js +6 -0
  158. package/dist/ui/assets/{input-Dzvg_ZEZ.js → input-BLXaar0X.js} +1 -1
  159. package/dist/ui/assets/label-DfAcltsl.js +1 -0
  160. package/dist/ui/assets/{loader-circle-CrvlRy5o.js → loader-circle-B7oLyPsi.js} +1 -1
  161. package/dist/ui/assets/{loginPage-qa4V-B70.js → loginPage-DswZvOJ-.js} +1 -1
  162. package/dist/ui/assets/metrics-page-BhtXrfUW.js +31 -0
  163. package/dist/ui/assets/metrics-page-D1GxaB_c.css +1 -0
  164. package/dist/ui/assets/popover-IDker85U.js +11 -0
  165. package/dist/ui/assets/select-B8y5IidE.js +6 -0
  166. package/dist/ui/assets/separator-B6EzrxYY.js +6 -0
  167. package/dist/ui/assets/severityOptions-DtCsaAZK.js +11 -0
  168. package/dist/ui/assets/square-pen-D_oecB1x.js +6 -0
  169. package/dist/ui/assets/switch-Dqo0XkRD.js +1 -0
  170. package/dist/ui/assets/trace-DJq1miYa.js +1 -0
  171. package/dist/ui/assets/upload-prIohEdY.js +11 -0
  172. package/dist/ui/assets/{utilService-DNyqzwj0.js → utilService-C8TJKLqs.js} +1 -1
  173. package/dist/ui/assets/wand-sparkles-OgXuzsSx.js +6 -0
  174. package/dist/ui/index.html +2 -2
  175. package/package.json +44 -49
  176. package/dist/ui/assets/CollapsibleCard-B3KR_8mL.js +0 -1
  177. package/dist/ui/assets/DevToolsPage-OyZcDcmw.js +0 -1
  178. package/dist/ui/assets/LandingPage-CppFBA6K.js +0 -6
  179. package/dist/ui/assets/LogsPage-9Fq8GArS.js +0 -26
  180. package/dist/ui/assets/PluginCreatePage-X_aCH4t4.js +0 -50
  181. package/dist/ui/assets/PluginPage-DMDSihrZ.js +0 -27
  182. package/dist/ui/assets/alert-jQ9HCPIf.js +0 -1133
  183. package/dist/ui/assets/badge-CNq0-mH5.js +0 -1
  184. package/dist/ui/assets/card-DFAwwhN3.js +0 -1
  185. package/dist/ui/assets/index-BkD6DijD.js +0 -15
  186. package/dist/ui/assets/index-CERGVYZK.js +0 -292
  187. package/dist/ui/assets/index-CSIPf9qw.css +0 -1
  188. package/dist/ui/assets/label-DuVnkZ4q.js +0 -1
  189. package/dist/ui/assets/select-DhS8YUtJ.js +0 -1
  190. package/dist/ui/assets/separator-isK4chBP.js +0 -6
  191. package/dist/ui/assets/severityOptions-O38dSOfk.js +0 -11
  192. package/dist/ui/assets/switch-Z3mImG9n.js +0 -1
  193. package/dist/ui/assets/tabs-_77MUUQe.js +0 -16
  194. package/dist/ui/assets/upload-C1LT4Gkb.js +0 -16
@@ -1,82 +1,81 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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
- var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
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
- constructor() {
11
- this.plugins = [];
12
- this.enabled = false;
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
- deactivatePlugin(pluginId) {
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
- deletePlugin(pluginId) {
33
- const plugin = this.plugins.find(p => p.id === pluginId);
34
- if (plugin?.process && !plugin.process.killed) {
35
- plugin.process.kill(1);
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
- this.plugins = this.plugins.filter(p => p.id !== pluginId);
38
- }
39
- broadcastToPlugins(type, payload) {
40
- if (!this.enabled) return;
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
- } else {
58
- _logger.default.debug(`Plugin <${plugin.name}> does not implement ${type}. Skipping.`);
59
- }
60
- });
61
- }
62
- /**
63
- * Broadcast a new metric to all active plugins
64
- */
65
- broadcastMetric(metric) {
66
- this.broadcastToPlugins("newMetric", metric);
67
- }
68
- /**
69
- * Broadcast a new log to all active plugins
70
- */
71
- broadcastLog(log) {
72
- this.broadcastToPlugins("newLog", log);
73
- }
74
- /**
75
- * Broadcast a new trace to all active plugins
76
- * TODO: rename to span (trace is the whole trace, span is a single unit of work within a trace)
77
- */
78
- broadcastTrace(trace) {
79
- this.broadcastToPlugins("newTrace", trace);
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
- const pluginService = exports.pluginService = new PluginService();
81
+ exports.pluginService = new PluginService();
@@ -1,146 +1,163 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.stopTraces = exports.statusTraces = exports.startTraces = exports.setTraceRetentionTime = exports.resetTraces = exports.listTraces = exports.insertTracesToDb = exports.getTraceRetentionTime = exports.findTraces = void 0;
7
- var _telemetryRegistry = require("../telemetry/telemetryRegistry.cjs");
8
- var _regexUtils = require("../utils/regexUtils.cjs");
9
- const _excluded = ["_id"];
10
- function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
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 = (req, res) => {
18
- _telemetryRegistry.inMemoryDbSpanExporter.disable();
19
- res.send('Traces stopped');
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 = (req, res) => {
23
- const isRunning = _telemetryRegistry.inMemoryDbSpanExporter.isEnabled() || false;
24
- res.send({
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 = (req, res) => {
30
- _telemetryRegistry.inMemoryDbSpanExporter.reset();
31
- res.send('Traces reset');
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 (req, res) => {
35
- try {
36
- const spans = _telemetryRegistry.inMemoryDbSpanExporter.getFinishedSpans();
37
- res.send({
38
- spansCount: spans.length,
39
- spans: spans
40
- });
41
- } catch (err) {
42
- console.error(err);
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
- const body = req.body;
51
- const query = body?.query ? body.query : {};
52
- let processedQuery;
53
- try {
54
- processedQuery = (0, _regexUtils.convertRegexRecursively)(query);
55
- } catch (error) {
56
- console.error(error.message);
57
- res.status(400).send({
58
- error: error.message
59
- });
60
- return; // Exit if invalid regex was encountered
61
- }
62
- _telemetryRegistry.inMemoryDbSpanExporter.find(processedQuery, (err, docs) => {
63
- if (err) {
64
- console.error(err);
65
- res.status(400).send({
66
- spansCount: 0,
67
- spans: [],
68
- error: err.message
69
- });
70
- return; // Exit the function to prevent further execution
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
- const jsonContent = req.body.spans;
82
- const resetData = req.query.reset === 'true';
83
- if (!Array.isArray(jsonContent)) {
84
- res.status(400).send({
85
- error: 'Invalid data format.'
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
- await new Promise((resolve, reject) => {
104
- _telemetryRegistry.inMemoryDbSpanExporter.insert(cleanedTraces, (err, newDocs) => {
105
- if (err) {
106
- console.error('Error inserting traces:', err);
107
- return reject(err);
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
- resolve(newDocs);
110
- });
111
- });
112
- message += `Inserted ${cleanedTraces.length} traces.`;
113
- res.send({
114
- message,
115
- InsertedTracesCount: cleanedTraces.length
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
- const retentionTimeInSeconds = req.body.retentionTimeInSeconds;
128
- if (typeof retentionTimeInSeconds !== 'number' || retentionTimeInSeconds <= 0) {
129
- res.status(400).send({
130
- error: 'Invalid retention time. Must be a positive number.'
131
- });
132
- return;
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 = (req, res) => {
141
- const retentionTimeInSeconds = _telemetryRegistry.inMemoryDbSpanExporter.retentionTimeInSeconds || 0;
142
- res.send({
143
- retentionTimeInSeconds: retentionTimeInSeconds
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.getTraceRetentionTime = getTraceRetentionTime;
163
+ exports.exportTraces = exportTraces;
@@ -1,24 +1,23 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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
- const router = (0, _express.Router)();
11
- // Telemetry Control
12
- router.post('/start', _traceController.startTraces);
13
- router.post('/stop', _traceController.stopTraces);
14
- router.get('/status', _traceController.statusTraces);
15
- router.post('/reset', _traceController.resetTraces);
16
- router.get('/', _traceController.listTraces);
17
- router.post('/', _traceController.insertTracesToDb);
18
- router.post('/find', _traceController.findTraces);
19
- router.post('/retention-time', _traceController.setTraceRetentionTime);
20
- router.get('/retention-time', _traceController.getTraceRetentionTime);
21
- return router;
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
- var _default = exports.default = getTraceRoutes;
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
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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
- var _express = _interopRequireWildcard(require("express"));
8
- var _path = _interopRequireDefault(require("path"));
9
- var _url = require("url");
10
- var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
11
- var _bootConfig = require("../config/bootConfig.cjs");
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
- // This is when this file is in /dist
16
- let relativePath = '../../ui';
17
- // This is when this file in in /src
18
- if (_bootConfig.bootEnvVariables.OASTLM_BOOT_ENV === 'development') {
19
- relativePath = '../../dist/ui';
20
- _logger.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/.');
21
- }
22
- const customFilename = (0, _url.fileURLToPath)(require('url').pathToFileURL(__filename).toString());
23
- const customDirname = _path.default.dirname(customFilename);
24
- const staticFilesPath = _path.default.join(customDirname, relativePath);
25
- const router = (0, _express.Router)();
26
- // This only works once the app is built: src/ --> dist/esm/
27
- // This file: dist/esm/routes/
28
- // UI bundle: dist/ui/
29
- // For development, the UI is served separately.
30
- router.use(_express.default.static(staticFilesPath));
31
- router.get('*', (_req, res) => {
32
- // Serve the index.html file for all routes
33
- res.sendFile(_path.default.join(staticFilesPath, 'index.html'));
34
- });
35
- return router;
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;