@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,76 +1,68 @@
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.configureRoutes = void 0;
7
- var _express = require("express");
8
- var _logger = _interopRequireDefault(require("./utils/logger.cjs"));
9
- var _cors = _interopRequireDefault(require("cors"));
10
- var _traceRoutes = require("./tlm-trace/traceRoutes.cjs");
11
- var _metricsRoutes = require("./tlm-metric/metricsRoutes.cjs");
12
- var _logRoutes = require("./tlm-log/logRoutes.cjs");
13
- var _cookieParser = _interopRequireDefault(require("cookie-parser"));
14
- var _authRoutes = require("./tlm-auth/authRoutes.cjs");
15
- var _uiRoutes = require("./tlm-ui/uiRoutes.cjs");
16
- var _authMiddleware = require("./tlm-auth/authMiddleware.cjs");
17
- var _utilRoutes = require("./tlm-util/utilRoutes.cjs");
18
- var _aiRoutes = require("./tlm-ai/aiRoutes.cjs");
19
- var _bootConfig = require("./config/bootConfig.cjs");
20
- var _pluginRoutes = require("./tlm-plugin/pluginRoutes.cjs");
21
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ const express_1 = require("express");
8
+ const logger_js_1 = __importDefault(require("./utils/logger.cjs"));
9
+ const cors_1 = __importDefault(require("cors"));
10
+ const traceRoutes_js_1 = require("./tlm-trace/traceRoutes.cjs");
11
+ const metricsRoutes_js_1 = require("./tlm-metric/metricsRoutes.cjs");
12
+ const logRoutes_js_1 = require("./tlm-log/logRoutes.cjs");
13
+ const cookie_parser_1 = __importDefault(require("cookie-parser"));
14
+ const authRoutes_js_1 = require("./tlm-auth/authRoutes.cjs");
15
+ const uiRoutes_js_1 = require("./tlm-ui/uiRoutes.cjs");
16
+ const authMiddleware_js_1 = require("./tlm-auth/authMiddleware.cjs");
17
+ const utilRoutes_js_1 = require("./tlm-util/utilRoutes.cjs");
18
+ const aiRoutes_js_1 = require("./tlm-ai/aiRoutes.cjs");
19
+ const bootConfig_js_1 = require("./config/bootConfig.cjs");
20
+ const pluginRoutes_js_1 = require("./tlm-plugin/pluginRoutes.cjs");
22
21
  const configureRoutes = (router, oasTlmConfig) => {
23
- if (_bootConfig.bootEnvVariables.OASTLM_BOOT_ENV === 'development') {
24
- _logger.default.info("Running in development mode, enabling CORS for all origins");
25
- router.use((0, _cors.default)({
26
- origin: (origin, callback) => {
27
- if (!origin || /^http:\/\/localhost:\d+$/.test(origin)) {
28
- callback(null, true);
29
- } else {
30
- callback(new Error('Not allowed by CORS'));
31
- }
32
- },
33
- credentials: true
34
- }));
35
- }
36
- const telemetryBaseUrl = oasTlmConfig.general.baseUrl;
37
- // Sub-router for all telemetry endpoints
38
- const telemetryRouter = (0, _express.Router)();
39
- // Body parser for JSON requests
40
- telemetryRouter.use((req, res, next) => {
41
- if (req.body !== undefined) {
42
- return next(); // Already parsed, no need to parse again.
22
+ if (!oasTlmConfig.general.spec && !oasTlmConfig.general.specFileName) {
23
+ logger_js_1.default.warn("No spec provided, endpoint filtering will not be available. Please provide either `spec` or `specFileName` in the configuration.");
43
24
  }
44
- return (0, _express.json)({
45
- limit: '10mb'
46
- })(req, res, next);
47
- });
48
- telemetryRouter.get('/health', (_req, res) => {
49
- res.status(200).send({
50
- status: 'OK'
25
+ if (bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_ENV === 'development') {
26
+ logger_js_1.default.info("Running in development mode, enabling CORS for all origins");
27
+ router.use((0, cors_1.default)({
28
+ origin: true,
29
+ credentials: true
30
+ }));
31
+ }
32
+ const telemetryBaseUrl = bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_BASE_URL;
33
+ // Sub-router for all telemetry endpoints
34
+ const telemetryRouter = (0, express_1.Router)();
35
+ // Body parser for JSON requests
36
+ telemetryRouter.use((req, res, next) => {
37
+ if (req.body !== undefined) {
38
+ return next(); // Already parsed, no need to parse again.
39
+ }
40
+ return (0, express_1.json)({ limit: '500mb' })(req, res, next);
51
41
  });
52
- });
53
- // Redirect to the UI when accessing the base URL
54
- telemetryRouter.get('/', (req, res) => {
55
- res.redirect(`${telemetryBaseUrl}/oas-telemetry-ui/`);
56
- });
57
- // WARNING: This path must be the same as the one used in the UI package App.tsx "oas-telemetry-ui"
58
- telemetryRouter.use("/oas-telemetry-ui", (0, _uiRoutes.getUIRoutes)());
59
- telemetryRouter.use("/utils", (0, _utilRoutes.getUtilsRoutes)(oasTlmConfig));
60
- // Auth routes must be registered. If authentication is not enabled, all requests will be allowed.
61
- // Frontend will use these endpoints;
62
- telemetryRouter.use((0, _cookieParser.default)());
63
- // Refresh token uses /auth/refresh path, careful if you change it
64
- telemetryRouter.use('/auth', (0, _authRoutes.getAuthRoutes)(oasTlmConfig));
65
- telemetryRouter.use((0, _authMiddleware.getAuthMiddleware)(oasTlmConfig));
66
- telemetryRouter.use("/traces", (0, _traceRoutes.getTraceRoutes)());
67
- telemetryRouter.use("/metrics", (0, _metricsRoutes.getMetricsRoutes)());
68
- telemetryRouter.use("/logs", (0, _logRoutes.getLogRoutes)());
69
- if (oasTlmConfig.ai.openAIKey) {
70
- telemetryRouter.use("/ai", (0, _aiRoutes.getAIRoutes)(oasTlmConfig));
71
- }
72
- telemetryRouter.use("/plugins", (0, _pluginRoutes.getPluginRoutes)());
73
- // Mount the telemetryRouter under telemetryBaseUrl
74
- router.use(telemetryBaseUrl, telemetryRouter);
42
+ telemetryRouter.get('/health', (_req, res) => {
43
+ res.status(200).send({ status: 'OK' });
44
+ });
45
+ // Redirect to the UI when accessing the base URL
46
+ telemetryRouter.get('/', (req, res) => {
47
+ res.redirect(`${telemetryBaseUrl}/oas-telemetry-ui/`);
48
+ });
49
+ // WARNING: This path must be the same as the one used in the UI package App.tsx "oas-telemetry-ui"
50
+ telemetryRouter.use("/oas-telemetry-ui", (0, uiRoutes_js_1.getUIRoutes)());
51
+ telemetryRouter.use("/utils", (0, utilRoutes_js_1.getUtilsRoutes)(oasTlmConfig));
52
+ // Auth routes must be registered. If authentication is not enabled, all requests will be allowed.
53
+ // Frontend will use these endpoints;
54
+ telemetryRouter.use((0, cookie_parser_1.default)());
55
+ // Refresh token uses /auth/refresh path, careful if you change it
56
+ telemetryRouter.use('/auth', (0, authRoutes_js_1.getAuthRoutes)(oasTlmConfig));
57
+ telemetryRouter.use((0, authMiddleware_js_1.getAuthMiddleware)(oasTlmConfig));
58
+ telemetryRouter.use("/traces", (0, traceRoutes_js_1.getTraceRoutes)());
59
+ telemetryRouter.use("/metrics", (0, metricsRoutes_js_1.getMetricsRoutes)());
60
+ telemetryRouter.use("/logs", (0, logRoutes_js_1.getLogRoutes)());
61
+ if (oasTlmConfig.ai.openAIKey) {
62
+ telemetryRouter.use("/ai", (0, aiRoutes_js_1.getAIRoutes)(oasTlmConfig));
63
+ }
64
+ telemetryRouter.use("/plugins", (0, pluginRoutes_js_1.getPluginRoutes)());
65
+ // Mount the telemetryRouter under telemetryBaseUrl
66
+ router.use(telemetryBaseUrl, telemetryRouter);
75
67
  };
76
- exports.configureRoutes = configureRoutes;
68
+ exports.configureRoutes = configureRoutes;
@@ -0,0 +1,121 @@
1
+ "use strict";
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.DiskLogExporter = void 0;
7
+ const core_1 = require("@opentelemetry/core");
8
+ const circular_js_1 = require("../utils/circular.cjs");
9
+ const wrappers_js_1 = require("../wrappers.cjs");
10
+ const DiskWriter_js_1 = require("../../persistence/DiskWriter.cjs");
11
+ const logger_js_1 = __importDefault(require("../../../utils/logger.cjs"));
12
+ class DiskLogExporter extends wrappers_js_1.Enabler {
13
+ writer;
14
+ flushIntervalMs;
15
+ batchSize;
16
+ queuedLogs = [];
17
+ flushTimer = null;
18
+ flushing = false;
19
+ constructor(options) {
20
+ super();
21
+ this.flushIntervalMs = options.flushIntervalMs || 1000;
22
+ this.batchSize = options.batchSize || 500;
23
+ this.writer = new DiskWriter_js_1.DiskWriter({
24
+ directoryPath: options.directoryPath,
25
+ segmentPrefix: 'logs',
26
+ maxSegmentBytes: options.maxSegmentBytes,
27
+ });
28
+ }
29
+ export(logs, resultCallback) {
30
+ if (!this.isEnabled()) {
31
+ resultCallback({ code: core_1.ExportResultCode.SUCCESS });
32
+ return;
33
+ }
34
+ try {
35
+ const serializableLogs = logs
36
+ .map((logRecord) => this.formatLogRecord(logRecord))
37
+ .map((log) => (0, circular_js_1.removeCircularRefs)(log))
38
+ .map((log) => (0, circular_js_1.applyNesting)(log));
39
+ if (serializableLogs.length > 0) {
40
+ this.queuedLogs.push(...serializableLogs);
41
+ if (this.queuedLogs.length >= this.batchSize) {
42
+ void this.flushPending();
43
+ }
44
+ else {
45
+ this.scheduleFlush();
46
+ }
47
+ }
48
+ resultCallback({ code: core_1.ExportResultCode.SUCCESS });
49
+ }
50
+ catch (error) {
51
+ logger_js_1.default.error(`[DiskLogExporter] Failed to queue logs: ${error?.message || error}`);
52
+ resultCallback({
53
+ code: core_1.ExportResultCode.FAILED,
54
+ error: error instanceof Error ? error : new Error(String(error)),
55
+ });
56
+ }
57
+ }
58
+ async shutdown() {
59
+ this.disable();
60
+ if (this.flushTimer) {
61
+ clearTimeout(this.flushTimer);
62
+ this.flushTimer = null;
63
+ }
64
+ await this.flushPending(true);
65
+ await this.writer.flush();
66
+ }
67
+ async forceFlush() {
68
+ await this.flushPending(true);
69
+ await this.writer.flush();
70
+ }
71
+ scheduleFlush() {
72
+ if (this.flushTimer)
73
+ return;
74
+ this.flushTimer = setTimeout(() => {
75
+ this.flushTimer = null;
76
+ void this.flushPending(true);
77
+ }, this.flushIntervalMs);
78
+ }
79
+ async flushPending(forceAll = false) {
80
+ if (this.flushing)
81
+ return;
82
+ if (this.queuedLogs.length === 0)
83
+ return;
84
+ this.flushing = true;
85
+ try {
86
+ while (this.queuedLogs.length > 0) {
87
+ if (!forceAll && this.queuedLogs.length < this.batchSize) {
88
+ this.scheduleFlush();
89
+ break;
90
+ }
91
+ const size = forceAll ? this.queuedLogs.length : this.batchSize;
92
+ const batch = this.queuedLogs.splice(0, size);
93
+ await this.writer.appendRecords(batch);
94
+ }
95
+ }
96
+ catch (error) {
97
+ logger_js_1.default.error(`[DiskLogExporter] Failed writing logs to disk: ${error?.message || error}`);
98
+ }
99
+ finally {
100
+ this.flushing = false;
101
+ }
102
+ }
103
+ formatLogRecord(logRecord) {
104
+ return {
105
+ resource: {
106
+ attributes: logRecord.resource.attributes,
107
+ },
108
+ instrumentationScope: logRecord.instrumentationScope,
109
+ timestamp: (0, core_1.hrTimeToMicroseconds)(logRecord.hrTime) ?? Date.now(),
110
+ observedTimestamp: (0, core_1.hrTimeToMicroseconds)(logRecord.hrTimeObserved) ?? Date.now(),
111
+ traceId: logRecord.spanContext?.traceId,
112
+ spanId: logRecord.spanContext?.spanId,
113
+ traceFlags: logRecord.spanContext?.traceFlags,
114
+ severityText: logRecord.severityText,
115
+ severityNumber: logRecord.severityNumber,
116
+ body: logRecord.body,
117
+ attributes: logRecord.attributes,
118
+ };
119
+ }
120
+ }
121
+ exports.DiskLogExporter = DiskLogExporter;
@@ -0,0 +1,101 @@
1
+ "use strict";
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.DiskMetricExporter = void 0;
7
+ const core_1 = require("@opentelemetry/core");
8
+ const circular_js_1 = require("../utils/circular.cjs");
9
+ const wrappers_js_1 = require("../wrappers.cjs");
10
+ const logger_js_1 = __importDefault(require("../../../utils/logger.cjs"));
11
+ const DiskWriter_js_1 = require("../../persistence/DiskWriter.cjs");
12
+ class DiskMetricExporter extends wrappers_js_1.Enabler {
13
+ writer;
14
+ flushIntervalMs;
15
+ batchSize;
16
+ queuedScopeMetrics = [];
17
+ flushTimer = null;
18
+ flushing = false;
19
+ constructor(options) {
20
+ super();
21
+ this.flushIntervalMs = options.flushIntervalMs || 1000;
22
+ this.batchSize = options.batchSize || 500;
23
+ this.writer = new DiskWriter_js_1.DiskWriter({
24
+ directoryPath: options.directoryPath,
25
+ segmentPrefix: 'metrics',
26
+ maxSegmentBytes: options.maxSegmentBytes,
27
+ });
28
+ }
29
+ export(resourceMetrics, resultCallback) {
30
+ if (!this.isEnabled()) {
31
+ resultCallback({ code: core_1.ExportResultCode.SUCCESS });
32
+ return;
33
+ }
34
+ try {
35
+ const scopeMetrics = (0, circular_js_1.removeCircularRefs)(resourceMetrics.scopeMetrics || []);
36
+ if (Array.isArray(scopeMetrics) && scopeMetrics.length > 0) {
37
+ this.queuedScopeMetrics.push(...scopeMetrics);
38
+ if (this.queuedScopeMetrics.length >= this.batchSize) {
39
+ void this.flushPending();
40
+ }
41
+ else {
42
+ this.scheduleFlush();
43
+ }
44
+ }
45
+ resultCallback({ code: core_1.ExportResultCode.SUCCESS });
46
+ }
47
+ catch (error) {
48
+ logger_js_1.default.error(`[DiskMetricExporter] Failed to queue scope metrics: ${error?.message || error}`);
49
+ resultCallback({
50
+ code: core_1.ExportResultCode.FAILED,
51
+ error: error instanceof Error ? error : new Error(String(error)),
52
+ });
53
+ }
54
+ }
55
+ async shutdown() {
56
+ this.disable();
57
+ if (this.flushTimer) {
58
+ clearTimeout(this.flushTimer);
59
+ this.flushTimer = null;
60
+ }
61
+ await this.flushPending(true);
62
+ await this.writer.flush();
63
+ }
64
+ async forceFlush() {
65
+ await this.flushPending(true);
66
+ await this.writer.flush();
67
+ }
68
+ scheduleFlush() {
69
+ if (this.flushTimer)
70
+ return;
71
+ this.flushTimer = setTimeout(() => {
72
+ this.flushTimer = null;
73
+ void this.flushPending(true);
74
+ }, this.flushIntervalMs);
75
+ }
76
+ async flushPending(forceAll = false) {
77
+ if (this.flushing)
78
+ return;
79
+ if (this.queuedScopeMetrics.length === 0)
80
+ return;
81
+ this.flushing = true;
82
+ try {
83
+ while (this.queuedScopeMetrics.length > 0) {
84
+ if (!forceAll && this.queuedScopeMetrics.length < this.batchSize) {
85
+ this.scheduleFlush();
86
+ break;
87
+ }
88
+ const size = forceAll ? this.queuedScopeMetrics.length : this.batchSize;
89
+ const batch = this.queuedScopeMetrics.splice(0, size);
90
+ await this.writer.appendRecords(batch);
91
+ }
92
+ }
93
+ catch (error) {
94
+ logger_js_1.default.error(`[DiskMetricExporter] Failed writing metrics to disk: ${error?.message || error}`);
95
+ }
96
+ finally {
97
+ this.flushing = false;
98
+ }
99
+ }
100
+ }
101
+ exports.DiskMetricExporter = DiskMetricExporter;
@@ -0,0 +1,103 @@
1
+ "use strict";
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.DiskTraceExporter = void 0;
7
+ const core_1 = require("@opentelemetry/core");
8
+ const logger_js_1 = __importDefault(require("../../../utils/logger.cjs"));
9
+ const circular_js_1 = require("../utils/circular.cjs");
10
+ const DiskWriter_js_1 = require("../../persistence/DiskWriter.cjs");
11
+ const wrappers_js_1 = require("../wrappers.cjs");
12
+ class DiskTraceExporter extends wrappers_js_1.Enabler {
13
+ writer;
14
+ flushIntervalMs;
15
+ batchSize;
16
+ queuedSpans = [];
17
+ flushTimer = null;
18
+ flushing = false;
19
+ constructor(options) {
20
+ super();
21
+ this.flushIntervalMs = options.flushIntervalMs || 1000;
22
+ this.batchSize = options.batchSize || 500;
23
+ this.writer = new DiskWriter_js_1.DiskWriter({
24
+ directoryPath: options.directoryPath,
25
+ segmentPrefix: 'traces',
26
+ maxSegmentBytes: options.maxSegmentBytes,
27
+ });
28
+ }
29
+ export(spans, resultCallback) {
30
+ if (!this.isEnabled()) {
31
+ resultCallback({ code: core_1.ExportResultCode.SUCCESS });
32
+ return;
33
+ }
34
+ try {
35
+ const serializableSpans = spans
36
+ .map((span) => (0, circular_js_1.removeCircularRefs)(span))
37
+ .map((span) => (0, circular_js_1.applyNesting)(span));
38
+ if (serializableSpans.length > 0) {
39
+ this.queuedSpans.push(...serializableSpans);
40
+ if (this.queuedSpans.length >= this.batchSize) {
41
+ void this.flushPending();
42
+ }
43
+ else {
44
+ this.scheduleFlush();
45
+ }
46
+ }
47
+ resultCallback({ code: core_1.ExportResultCode.SUCCESS });
48
+ }
49
+ catch (error) {
50
+ logger_js_1.default.error(`[DiskTraceExporter] Failed to queue spans: ${error?.message || error}`);
51
+ resultCallback({
52
+ code: core_1.ExportResultCode.FAILED,
53
+ error: error instanceof Error ? error : new Error(String(error)),
54
+ });
55
+ }
56
+ }
57
+ async shutdown() {
58
+ this.disable();
59
+ if (this.flushTimer) {
60
+ clearTimeout(this.flushTimer);
61
+ this.flushTimer = null;
62
+ }
63
+ await this.flushPending(true);
64
+ await this.writer.flush();
65
+ }
66
+ async forceFlush() {
67
+ await this.flushPending(true);
68
+ await this.writer.flush();
69
+ }
70
+ scheduleFlush() {
71
+ if (this.flushTimer)
72
+ return;
73
+ this.flushTimer = setTimeout(() => {
74
+ this.flushTimer = null;
75
+ void this.flushPending(true);
76
+ }, this.flushIntervalMs);
77
+ }
78
+ async flushPending(forceAll = false) {
79
+ if (this.flushing)
80
+ return;
81
+ if (this.queuedSpans.length === 0)
82
+ return;
83
+ this.flushing = true;
84
+ try {
85
+ while (this.queuedSpans.length > 0) {
86
+ if (!forceAll && this.queuedSpans.length < this.batchSize) {
87
+ this.scheduleFlush();
88
+ break;
89
+ }
90
+ const size = forceAll ? this.queuedSpans.length : this.batchSize;
91
+ const batch = this.queuedSpans.splice(0, size);
92
+ await this.writer.appendRecords(batch);
93
+ }
94
+ }
95
+ catch (error) {
96
+ logger_js_1.default.error(`[DiskTraceExporter] Failed writing spans to disk: ${error?.message || error}`);
97
+ }
98
+ finally {
99
+ this.flushing = false;
100
+ }
101
+ }
102
+ }
103
+ exports.DiskTraceExporter = DiskTraceExporter;