@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,33 +1,28 @@
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.getAuthMiddleware = getAuthMiddleware;
7
- var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
8
  function getAuthMiddleware(oasTlmConfig) {
10
- return function authMiddleware(req, res, next) {
11
- if (!oasTlmConfig.auth.enabled) {
12
- return next();
13
- }
14
- const token = req.cookies["oas-tlm-access-token"];
15
- if (!token) {
16
- res.status(401).json({
17
- valid: false,
18
- message: "No access token"
19
- });
20
- return;
21
- }
22
- try {
23
- const payload = _jsonwebtoken.default.verify(token, oasTlmConfig.auth.jwtSecret);
24
- if (payload.type !== "access") throw new Error("Invalid token type");
25
- return next();
26
- } catch {
27
- res.status(401).json({
28
- valid: false,
29
- message: "Invalid access token"
30
- });
31
- }
32
- };
33
- }
9
+ return function authMiddleware(req, res, next) {
10
+ if (!oasTlmConfig.auth.enabled) {
11
+ return next();
12
+ }
13
+ const token = req.cookies["oas-tlm-access-token"];
14
+ if (!token) {
15
+ res.status(401).json({ valid: false, message: "No access token" });
16
+ return;
17
+ }
18
+ try {
19
+ const payload = jsonwebtoken_1.default.verify(token, oasTlmConfig.auth.jwtSecret);
20
+ if (payload.type !== "access")
21
+ throw new Error("Invalid token type");
22
+ return next();
23
+ }
24
+ catch {
25
+ res.status(401).json({ valid: false, message: "Invalid access token" });
26
+ }
27
+ };
28
+ }
@@ -1,17 +1,14 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.getAuthRoutes = void 0;
7
- var _express = require("express");
8
- var _authController = require("./authController.cjs");
9
- const getAuthRoutes = oasTlmConfig => {
10
- const router = (0, _express.Router)();
11
- router.post('/login', (0, _authController.getLogin)(oasTlmConfig));
12
- router.post('/refresh', (0, _authController.getRefresh)(oasTlmConfig));
13
- router.post('/logout', (0, _authController.getLogout)(oasTlmConfig));
14
- router.get('/enabled', (0, _authController.getAuthEnabled)(oasTlmConfig));
15
- return router;
4
+ const express_1 = require("express");
5
+ const authController_js_1 = require("./authController.cjs");
6
+ const getAuthRoutes = (oasTlmConfig) => {
7
+ const router = (0, express_1.Router)();
8
+ router.post('/login', (0, authController_js_1.getLogin)(oasTlmConfig));
9
+ router.post('/refresh', (0, authController_js_1.getRefresh)(oasTlmConfig));
10
+ router.post('/logout', (0, authController_js_1.getLogout)(oasTlmConfig));
11
+ router.get('/enabled', (0, authController_js_1.getAuthEnabled)(oasTlmConfig));
12
+ return router;
16
13
  };
17
- exports.getAuthRoutes = getAuthRoutes;
14
+ exports.getAuthRoutes = getAuthRoutes;
@@ -1,142 +1,161 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.stopLogs = exports.statusLogs = exports.startLogs = exports.setLogRetentionTime = exports.resetLogs = exports.insertLogsToDb = exports.getLogRetentionTime = exports.findLogs = void 0;
7
- var _telemetryRegistry = require("../telemetry/telemetryRegistry.cjs");
8
- var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
9
- var _regexUtils = require("../utils/regexUtils.cjs");
10
- const _excluded = ["_id"];
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
- 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; }
13
- 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; }
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
+ exports.exportLogs = exports.getLogRetentionTime = exports.setLogRetentionTime = exports.statusLogs = exports.stopLogs = exports.startLogs = exports.importLogs = exports.insertLogsToDb = exports.resetLogs = exports.findLogs = void 0;
7
+ const telemetryRegistry_js_1 = require("../telemetry/telemetryRegistry.cjs");
8
+ const logger_js_1 = __importDefault(require("../utils/logger.cjs"));
9
+ const regexUtils_js_1 = require("../utils/regexUtils.cjs");
10
+ const logService_js_1 = require("./logService.cjs");
11
+ const zlib_1 = require("zlib");
14
12
  const findLogs = async (req, res) => {
15
- const body = req.body || {};
16
- const messageSearch = body.textSearch || null;
17
- const findQuery = body.query || {};
18
- const limit = parseInt(body.limit) || 50;
19
- const sortOrder = body.sort || null;
20
- _logger.default.debug(`findLogs called with query: ${JSON.stringify(findQuery)} and search: ${messageSearch}`, {
21
- depth: 3
22
- });
23
- let processedQuery;
24
- try {
25
- processedQuery = (0, _regexUtils.convertRegexRecursively)(findQuery);
26
- } catch (error) {
27
- _logger.default.error(error.message);
28
- res.status(400).send({
29
- error: error.message
30
- });
31
- return; // Exit if invalid regex was encountered
32
- }
33
- try {
34
- // Use findConfig object
35
- const findConfig = {
36
- query: processedQuery,
37
- messageSearch,
38
- limit,
39
- sortOrder
40
- };
41
- const docs = await _telemetryRegistry.inMemoryDbLogExporter.find(findConfig);
42
- res.send({
43
- items: docs
44
- });
45
- } catch (err) {
46
- _logger.default.error(err);
47
- res.status(500).send({
48
- error: 'Failed to find logs',
49
- details: err.message
50
- });
51
- }
13
+ const body = req.body || {};
14
+ const messageSearch = body.textSearch || null;
15
+ const findQuery = body.query || {};
16
+ const limit = parseInt(body.limit) || 50;
17
+ const sortOrder = body.sort || null;
18
+ logger_js_1.default.debug(`findLogs called with query: ${JSON.stringify(findQuery)} and search: ${messageSearch}`, { depth: 3 });
19
+ let processedQuery;
20
+ try {
21
+ processedQuery = (0, regexUtils_js_1.convertRegexRecursively)(findQuery);
22
+ }
23
+ catch (error) {
24
+ logger_js_1.default.error(error.message);
25
+ res.status(400).send({ error: error.message });
26
+ return; // Exit if invalid regex was encountered
27
+ }
28
+ try {
29
+ // Use findConfig object
30
+ const findConfig = {
31
+ query: processedQuery,
32
+ messageSearch,
33
+ limit,
34
+ sortOrder
35
+ };
36
+ const docs = await telemetryRegistry_js_1.inMemoryDbLogExporter.find(findConfig);
37
+ res.send({
38
+ logsCount: docs.length,
39
+ logs: docs,
40
+ });
41
+ }
42
+ catch (err) {
43
+ logger_js_1.default.error(err);
44
+ res.status(500).send({ error: 'Failed to find logs', details: err.message });
45
+ }
52
46
  };
53
47
  exports.findLogs = findLogs;
54
48
  const resetLogs = (req, res) => {
55
- _telemetryRegistry.inMemoryDbLogExporter.reset();
56
- res.send('Logs reset');
49
+ telemetryRegistry_js_1.inMemoryDbLogExporter.reset();
50
+ res.send('Logs reset');
57
51
  };
58
52
  exports.resetLogs = resetLogs;
59
53
  const insertLogsToDb = async (req, res) => {
60
- const jsonContent = req.body.logs;
61
- const resetData = req.query.reset === 'true';
62
- if (!Array.isArray(jsonContent)) {
63
- res.status(400).send({
64
- error: 'Invalid data format.'
65
- });
66
- return;
67
- }
68
- const cleanedLogs = jsonContent.map(log => {
69
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
70
- const {
71
- _id
72
- } = log,
73
- rest = _objectWithoutProperties(log, _excluded); // Remove _id if it exists
74
- return rest; // Return the cleaned log object
75
- });
76
- try {
77
- let message = '';
78
- if (resetData) {
79
- _telemetryRegistry.inMemoryDbLogExporter.reset();
80
- message += 'Logs Database reset. ';
54
+ const jsonContent = (req.body || {}).logs;
55
+ const resetData = req.query.reset === 'true';
56
+ if (!Array.isArray(jsonContent)) {
57
+ res.status(400).send({ error: 'Invalid data format.' });
58
+ return;
81
59
  }
82
- await new Promise((resolve, reject) => {
83
- _telemetryRegistry.inMemoryDbLogExporter.insert(cleanedLogs, (err, newDocs) => {
84
- if (err) {
85
- _logger.default.error('Error inserting logs:', err);
86
- return reject(err);
60
+ const cleanedLogs = (0, logService_js_1.sanitizeLogRecords)(jsonContent);
61
+ try {
62
+ let message = '';
63
+ await (0, logService_js_1.importLogsToMemory)(cleanedLogs, { reset: resetData });
64
+ if (resetData) {
65
+ message += 'Logs Database reset. ';
87
66
  }
88
- resolve(newDocs);
89
- });
90
- });
91
- message += `Inserted ${cleanedLogs.length} logs.`;
92
- res.send({
93
- message,
94
- InsertedLogsCount: cleanedLogs.length
95
- });
96
- } catch (err) {
97
- _logger.default.error(err);
98
- res.status(500).send({
99
- error: 'Failed to reset and insert data',
100
- details: err.message
101
- });
102
- }
67
+ message += `Inserted ${cleanedLogs.length} logs.`;
68
+ res.send({ message, InsertedLogsCount: cleanedLogs.length });
69
+ }
70
+ catch (err) {
71
+ logger_js_1.default.error(err);
72
+ res.status(500).send({ error: 'Failed to reset and insert data', details: err.message });
73
+ }
103
74
  };
104
75
  exports.insertLogsToDb = insertLogsToDb;
76
+ const importLogs = async (req, res) => {
77
+ const resetData = req.query.reset === 'true';
78
+ const body = req.body || {};
79
+ const importedLogs = Array.isArray(body) ? body : body.logs;
80
+ try {
81
+ if (!Array.isArray(importedLogs)) {
82
+ res.status(400).send({ error: 'Invalid data format. Expected an array in request body or body.logs.' });
83
+ return;
84
+ }
85
+ const cleanedLogs = (0, logService_js_1.sanitizeLogRecords)(importedLogs);
86
+ let message = '';
87
+ await (0, logService_js_1.importLogsToMemory)(cleanedLogs, { reset: resetData });
88
+ if (resetData) {
89
+ message += 'Logs Database reset. ';
90
+ }
91
+ message += `Imported ${cleanedLogs.length} logs.`;
92
+ res.send({ message, ImportedLogsCount: cleanedLogs.length });
93
+ }
94
+ catch (err) {
95
+ logger_js_1.default.error('Import failed:', err);
96
+ res.status(400).send({ error: 'Failed to import logs', details: err.message });
97
+ }
98
+ };
99
+ exports.importLogs = importLogs;
105
100
  const startLogs = (req, res) => {
106
- _telemetryRegistry.inMemoryDbLogExporter.enable();
107
- res.send('Log collection started');
101
+ telemetryRegistry_js_1.inMemoryDbLogExporter.enable();
102
+ res.send('Log collection started');
108
103
  };
109
104
  exports.startLogs = startLogs;
110
105
  const stopLogs = (req, res) => {
111
- _telemetryRegistry.inMemoryDbLogExporter.disable();
112
- res.send('Log collection stopped');
106
+ telemetryRegistry_js_1.inMemoryDbLogExporter.disable();
107
+ res.send('Log collection stopped');
113
108
  };
114
109
  exports.stopLogs = stopLogs;
115
110
  const statusLogs = (req, res) => {
116
- const isRunning = _telemetryRegistry.inMemoryDbLogExporter.isEnabled() || false;
117
- res.send({
118
- active: isRunning
119
- });
111
+ const isRunning = telemetryRegistry_js_1.inMemoryDbLogExporter.isEnabled() || false;
112
+ res.send({ active: isRunning });
120
113
  };
121
114
  exports.statusLogs = statusLogs;
122
115
  const setLogRetentionTime = (req, res) => {
123
- const retentionTimeInSeconds = req.body.retentionTimeInSeconds;
124
- if (typeof retentionTimeInSeconds !== 'number' || retentionTimeInSeconds <= 0) {
125
- res.status(400).send({
126
- error: 'Invalid retention time. Must be a positive number.'
127
- });
128
- return;
129
- }
130
- _telemetryRegistry.inMemoryDbLogExporter.retentionTimeInSeconds = retentionTimeInSeconds;
131
- res.send({
132
- message: `Retention time set to ${retentionTimeInSeconds} seconds.`
133
- });
116
+ const retentionTimeInSeconds = (req.body || {}).retentionTimeInSeconds;
117
+ if (typeof retentionTimeInSeconds !== 'number' || retentionTimeInSeconds <= 0) {
118
+ res.status(400).send({ error: 'Invalid retention time. Must be a positive number.' });
119
+ return;
120
+ }
121
+ telemetryRegistry_js_1.inMemoryDbLogExporter.retentionTimeInSeconds = retentionTimeInSeconds;
122
+ res.send({ message: `Retention time set to ${retentionTimeInSeconds} seconds.` });
134
123
  };
135
124
  exports.setLogRetentionTime = setLogRetentionTime;
136
125
  const getLogRetentionTime = (req, res) => {
137
- const retentionTimeInSeconds = _telemetryRegistry.inMemoryDbLogExporter.retentionTimeInSeconds || 0;
138
- res.send({
139
- retentionTimeInSeconds: retentionTimeInSeconds
140
- });
126
+ const retentionTimeInSeconds = telemetryRegistry_js_1.inMemoryDbLogExporter.retentionTimeInSeconds || 0;
127
+ res.send({ retentionTimeInSeconds: retentionTimeInSeconds });
128
+ };
129
+ exports.getLogRetentionTime = getLogRetentionTime;
130
+ const exportLogs = async (req, res) => {
131
+ try {
132
+ const findConfig = {
133
+ query: {},
134
+ messageSearch: null,
135
+ sortOrder: { timestamp: -1 }
136
+ };
137
+ const docs = await telemetryRegistry_js_1.inMemoryDbLogExporter.find(findConfig);
138
+ const responseBody = { logsCount: docs.length, logs: docs };
139
+ const payload = JSON.stringify(responseBody);
140
+ const payloadSize = Buffer.byteLength(payload, 'utf-8');
141
+ const acceptsGzip = String(req.headers['accept-encoding'] || '').includes('gzip');
142
+ const timestamp = new Date().toISOString().slice(0, 19).replace(/[-T:]/g, '');
143
+ res.setHeader('Content-Type', 'application/json');
144
+ res.setHeader('Content-Disposition', `attachment; filename="logs-${timestamp}.json"`);
145
+ res.setHeader('Vary', 'Accept-Encoding');
146
+ if (acceptsGzip && payloadSize > 64 * 1024) {
147
+ const compressed = (0, zlib_1.gzipSync)(payload);
148
+ res.setHeader('Content-Encoding', 'gzip');
149
+ res.setHeader('Content-Length', compressed.length.toString());
150
+ res.end(compressed);
151
+ return;
152
+ }
153
+ res.setHeader('Content-Length', payloadSize.toString());
154
+ res.end(payload);
155
+ }
156
+ catch (err) {
157
+ logger_js_1.default.error('Failed to export logs:', err);
158
+ res.status(500).send({ error: 'Failed to export logs', details: err.message });
159
+ }
141
160
  };
142
- exports.getLogRetentionTime = getLogRetentionTime;
161
+ exports.exportLogs = exportLogs;
@@ -1,24 +1,23 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getLogRoutes = exports.default = void 0;
7
- var _express = require("express");
8
- var _logController = require("./logController.cjs");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLogRoutes = void 0;
4
+ const express_1 = require("express");
5
+ const logController_js_1 = require("./logController.cjs");
9
6
  const getLogRoutes = () => {
10
- const router = (0, _express.Router)();
11
- // Logs Control
12
- router.post('/start', _logController.startLogs);
13
- router.post('/stop', _logController.stopLogs);
14
- router.get('/status', _logController.statusLogs);
15
- router.post('/reset', _logController.resetLogs);
16
- router.post('/retention-time', _logController.setLogRetentionTime);
17
- router.get('/retention-time', _logController.getLogRetentionTime);
18
- router.get('/', _logController.findLogs);
19
- router.post('/', _logController.insertLogsToDb);
20
- router.post('/find', _logController.findLogs);
21
- return router;
7
+ const router = (0, express_1.Router)();
8
+ // Logs Control
9
+ router.post('/start', logController_js_1.startLogs);
10
+ router.post('/stop', logController_js_1.stopLogs);
11
+ router.get('/status', logController_js_1.statusLogs);
12
+ router.post('/reset', logController_js_1.resetLogs);
13
+ router.post('/retention-time', logController_js_1.setLogRetentionTime);
14
+ router.get('/retention-time', logController_js_1.getLogRetentionTime);
15
+ router.get('/export', logController_js_1.exportLogs);
16
+ router.post('/import', logController_js_1.importLogs);
17
+ router.get('/', logController_js_1.findLogs);
18
+ router.post('/', logController_js_1.insertLogsToDb);
19
+ router.post('/find', logController_js_1.findLogs);
20
+ return router;
22
21
  };
23
22
  exports.getLogRoutes = getLogRoutes;
24
- var _default = exports.default = getLogRoutes;
23
+ exports.default = exports.getLogRoutes;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeLogRecords = sanitizeLogRecords;
4
+ exports.importLogsToMemory = importLogsToMemory;
5
+ const telemetryRegistry_js_1 = require("../telemetry/telemetryRegistry.cjs");
6
+ function sanitizeLogRecords(records) {
7
+ return records.map((record) => {
8
+ const { _id, ...rest } = record;
9
+ return rest;
10
+ });
11
+ }
12
+ async function importLogsToMemory(records, options) {
13
+ if (options?.reset) {
14
+ telemetryRegistry_js_1.inMemoryDbLogExporter.reset();
15
+ }
16
+ if (!records.length) {
17
+ return 0;
18
+ }
19
+ await new Promise((resolve, reject) => {
20
+ telemetryRegistry_js_1.inMemoryDbLogExporter.insert(records, (err) => {
21
+ if (err) {
22
+ reject(err);
23
+ return;
24
+ }
25
+ resolve();
26
+ });
27
+ });
28
+ return records.length;
29
+ }