@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,146 +1,178 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.stopMetrics = exports.statusMetrics = exports.startMetrics = exports.setMetricRetentionTime = exports.resetMetrics = exports.listMetrics = exports.insertMetricsToDb = exports.getMetricRetentionTime = exports.findMetrics = 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 listMetrics = async (req, res) => {
13
- try {
14
- const metrics = _telemetryRegistry.inMemoryDbMetricExporter.getFinishedMetrics();
15
- res.send({
16
- metricsCount: metrics.length,
17
- metrics: metrics
18
- });
19
- } catch (err) {
20
- console.error(err);
21
- res.status(500).send({
22
- error: 'Failed to list metrics data'
23
- });
24
- }
25
- };
26
- exports.listMetrics = listMetrics;
27
- const findMetrics = (req, res) => {
28
- const body = req.body;
29
- const query = body?.query ? body.query : {};
30
- let processedQuery;
31
- try {
32
- processedQuery = (0, _regexUtils.convertRegexRecursively)(query);
33
- } catch (error) {
34
- console.error(error.message);
35
- res.status(400).send({
36
- error: error.message
37
- });
38
- return; // Exit if invalid regex was encountered
39
- }
40
- _telemetryRegistry.inMemoryDbMetricExporter.find(processedQuery, (err, docs) => {
41
- if (err) {
42
- console.error(err);
43
- res.status(404).send({
44
- metricsCount: 0,
45
- metrics: [],
46
- error: err
47
- });
48
- return;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.importMetrics = exports.exportMetrics = exports.findMetrics = exports.getMetricRetentionTime = exports.setMetricRetentionTime = exports.statusMetrics = exports.stopMetrics = exports.startMetrics = exports.insertMetricsToDb = exports.resetMetrics = exports.getMetricsStats = void 0;
4
+ const telemetryRegistry_js_1 = require("../telemetry/telemetryRegistry.cjs");
5
+ const metricsService_js_1 = require("./metricsService.cjs");
6
+ const zlib_1 = require("zlib");
7
+ const getMetricsStats = async (req, res) => {
8
+ try {
9
+ const stats = telemetryRegistry_js_1.inMemoryDbMetricExporter.getStats();
10
+ res.send(stats);
11
+ }
12
+ catch (err) {
13
+ console.error(err);
14
+ res.status(500).send({ error: 'Failed to get metrics stats' });
49
15
  }
50
- const metrics = docs;
51
- res.send({
52
- metricsCount: metrics.length,
53
- metrics: metrics
54
- });
55
- });
56
16
  };
57
- exports.findMetrics = findMetrics;
17
+ exports.getMetricsStats = getMetricsStats;
58
18
  const resetMetrics = (req, res) => {
59
- _telemetryRegistry.inMemoryDbMetricExporter.reset();
60
- res.send('Metrics reset');
19
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.reset();
20
+ res.send('Metrics reset');
61
21
  };
62
22
  exports.resetMetrics = resetMetrics;
63
23
  const insertMetricsToDb = async (req, res) => {
64
- const jsonContent = req.body.metrics;
65
- const resetData = req.query.reset === 'true';
66
- if (!Array.isArray(jsonContent)) {
67
- res.status(400).send({
68
- error: 'Invalid data format.'
69
- });
70
- return;
71
- }
72
- const cleanedMetrics = jsonContent.map(metric => {
73
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
- const {
75
- _id
76
- } = metric,
77
- rest = _objectWithoutProperties(metric, _excluded); // Remove _id if it exists
78
- return rest; // Return the cleaned metric object
79
- });
80
- try {
81
- let message = '';
82
- if (resetData) {
83
- _telemetryRegistry.inMemoryDbMetricExporter.reset();
84
- message += 'Metrics Database reset. ';
85
- }
86
- await new Promise((resolve, reject) => {
87
- _telemetryRegistry.inMemoryDbMetricExporter.insert(cleanedMetrics, (err, newDocs) => {
88
- if (err) {
89
- console.error('Error inserting metrics:', err);
90
- return reject(err);
24
+ try {
25
+ const scopeMetricsData = (req.body || {}).scopeMetrics;
26
+ const resetData = req.query.reset === 'true';
27
+ const format = (req.body.format || req.query.format || 'raw');
28
+ if (!Array.isArray(scopeMetricsData)) {
29
+ res.status(400).send({ error: 'Invalid data format. Expected array in body.scopeMetrics' });
30
+ return;
31
+ }
32
+ const cleanedScopeMetrics = (0, metricsService_js_1.sanitizeMetricRecords)(scopeMetricsData);
33
+ let message = '';
34
+ (0, metricsService_js_1.importMetricsToMemory)(cleanedScopeMetrics, { reset: resetData, format });
35
+ if (resetData) {
36
+ message += 'Metrics Database reset. ';
91
37
  }
92
- resolve(newDocs);
93
- });
94
- });
95
- message += `Inserted ${cleanedMetrics.length} metrics.`;
96
- res.send({
97
- message,
98
- InsertedMetricsCount: cleanedMetrics.length
99
- });
100
- } catch (err) {
101
- console.error(err);
102
- res.status(500).send({
103
- error: 'Failed to reset and insert data',
104
- details: err.message
105
- });
106
- }
38
+ message += `Inserted ${cleanedScopeMetrics.length} scopeMetrics (format: ${format}).`;
39
+ res.send({
40
+ message,
41
+ scopeMetricsCount: cleanedScopeMetrics.length,
42
+ format
43
+ });
44
+ }
45
+ catch (err) {
46
+ console.error(err);
47
+ res.status(500).send({ error: 'Failed to reset and insert data', details: err.message });
48
+ }
107
49
  };
108
50
  exports.insertMetricsToDb = insertMetricsToDb;
109
51
  const startMetrics = (req, res) => {
110
- _telemetryRegistry.inMemoryDbMetricExporter.enable();
111
- res.send('Metrics collection started');
52
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.enable();
53
+ res.send('Metrics collection started');
112
54
  };
113
55
  exports.startMetrics = startMetrics;
114
56
  const stopMetrics = (req, res) => {
115
- _telemetryRegistry.inMemoryDbMetricExporter.disable();
116
- res.send('Metrics collection stopped');
57
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.disable();
58
+ res.send('Metrics collection stopped');
117
59
  };
118
60
  exports.stopMetrics = stopMetrics;
119
61
  const statusMetrics = (req, res) => {
120
- const isRunning = _telemetryRegistry.inMemoryDbMetricExporter.isEnabled() || false;
121
- res.send({
122
- active: isRunning
123
- });
62
+ const isRunning = telemetryRegistry_js_1.inMemoryDbMetricExporter.isEnabled() || false;
63
+ res.send({ active: isRunning });
124
64
  };
125
65
  exports.statusMetrics = statusMetrics;
126
66
  const setMetricRetentionTime = (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.inMemoryDbMetricExporter.retentionTimeInSeconds = retentionTimeInSeconds;
135
- res.send({
136
- message: `Retention time set to ${retentionTimeInSeconds} seconds.`
137
- });
67
+ const retentionTimeInSeconds = (req.body || {}).retentionTimeInSeconds;
68
+ if (typeof retentionTimeInSeconds !== 'number' || retentionTimeInSeconds <= 0) {
69
+ res.status(400).send({ error: 'Invalid retention time. Must be a positive number.' });
70
+ return;
71
+ }
72
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.retentionTimeInSeconds = retentionTimeInSeconds;
73
+ res.send({ message: `Retention time set to ${retentionTimeInSeconds} seconds.` });
138
74
  };
139
75
  exports.setMetricRetentionTime = setMetricRetentionTime;
140
76
  const getMetricRetentionTime = (req, res) => {
141
- const retentionTimeInSeconds = _telemetryRegistry.inMemoryDbMetricExporter.retentionTimeInSeconds || 0;
142
- res.send({
143
- retentionTimeInSeconds: retentionTimeInSeconds
144
- });
77
+ const retentionTimeInSeconds = telemetryRegistry_js_1.inMemoryDbMetricExporter.retentionTimeInSeconds || 0;
78
+ res.send({ retentionTimeInSeconds: retentionTimeInSeconds });
79
+ };
80
+ exports.getMetricRetentionTime = getMetricRetentionTime;
81
+ /**
82
+ * Find metrics by scope+metric queries with filters (POST /metrics/find or GET /metrics)
83
+ * All parameters are optional:
84
+ * - If scopeMetrics is not provided or empty, returns all metrics
85
+ * - If startTime/endTime not provided, returns all available data
86
+ * - format can be 'raw' (default) or 'otel'
87
+ */
88
+ const findMetrics = async (req, res) => {
89
+ try {
90
+ const { scopeMetrics, from, to, format } = req.body || {};
91
+ // Validate scopeMetrics structure if provided
92
+ if (scopeMetrics && Array.isArray(scopeMetrics)) {
93
+ for (const query of scopeMetrics) {
94
+ if (!query.scope || !query.scope.name || !query.descriptor || !query.descriptor.name) {
95
+ res.status(400).json({
96
+ error: 'Each query must have scope.name and descriptor.name defined'
97
+ });
98
+ return;
99
+ }
100
+ }
101
+ }
102
+ // Execute query
103
+ const response = telemetryRegistry_js_1.inMemoryDbMetricExporter.find({
104
+ scopeMetrics: scopeMetrics && scopeMetrics.length > 0 ? scopeMetrics : undefined,
105
+ from,
106
+ to,
107
+ format: format || 'raw'
108
+ });
109
+ res.json({
110
+ format: format || 'raw',
111
+ scopeMetricsCount: response.results.length,
112
+ scopeMetrics: response.results,
113
+ });
114
+ }
115
+ catch (err) {
116
+ console.error(err);
117
+ res.status(500).json({ error: 'Failed to find metrics' });
118
+ }
119
+ };
120
+ exports.findMetrics = findMetrics;
121
+ const exportMetrics = (req, res) => {
122
+ try {
123
+ const response = telemetryRegistry_js_1.inMemoryDbMetricExporter.find({
124
+ format: 'raw'
125
+ });
126
+ const responseBody = {
127
+ format: 'raw',
128
+ scopeMetricsCount: response.results.length,
129
+ scopeMetrics: response.results,
130
+ };
131
+ const payload = JSON.stringify(responseBody);
132
+ const payloadSize = Buffer.byteLength(payload, 'utf-8');
133
+ const acceptsGzip = String(req.headers['accept-encoding'] || '').includes('gzip');
134
+ const timestamp = new Date().toISOString().slice(0, 19).replace(/[-T:]/g, '');
135
+ res.setHeader('Content-Type', 'application/json');
136
+ res.setHeader('Content-Disposition', `attachment; filename="metrics-${timestamp}.json"`);
137
+ res.setHeader('Vary', 'Accept-Encoding');
138
+ if (acceptsGzip && payloadSize > 64 * 1024) {
139
+ const compressed = (0, zlib_1.gzipSync)(payload);
140
+ res.setHeader('Content-Encoding', 'gzip');
141
+ res.setHeader('Content-Length', compressed.length.toString());
142
+ res.end(compressed);
143
+ return;
144
+ }
145
+ res.setHeader('Content-Length', payloadSize.toString());
146
+ res.end(payload);
147
+ }
148
+ catch (err) {
149
+ console.error('Failed to export metrics:', err);
150
+ res.status(500).send({ error: 'Failed to export metrics', details: err.message });
151
+ }
152
+ };
153
+ exports.exportMetrics = exportMetrics;
154
+ const importMetrics = async (req, res) => {
155
+ const resetData = req.query.reset === 'true';
156
+ const body = req.body || {};
157
+ const format = (body.format || req.query.format || 'raw');
158
+ const importedScopeMetrics = Array.isArray(body) ? body : body.scopeMetrics;
159
+ try {
160
+ if (!Array.isArray(importedScopeMetrics)) {
161
+ res.status(400).send({ error: 'Invalid data format. Expected an array in request body or body.scopeMetrics.' });
162
+ return;
163
+ }
164
+ const cleanedMetrics = (0, metricsService_js_1.sanitizeMetricRecords)(importedScopeMetrics);
165
+ (0, metricsService_js_1.importMetricsToMemory)(cleanedMetrics, { reset: resetData, format });
166
+ let message = '';
167
+ if (resetData) {
168
+ message += 'Metrics Database reset. ';
169
+ }
170
+ message += `Imported ${cleanedMetrics.length} metrics (format: ${format}).`;
171
+ res.send({ message, ImportedMetricsCount: cleanedMetrics.length, format });
172
+ }
173
+ catch (err) {
174
+ console.error('Import failed:', err);
175
+ res.status(400).send({ error: 'Failed to import metrics', details: err.message });
176
+ }
145
177
  };
146
- exports.getMetricRetentionTime = getMetricRetentionTime;
178
+ exports.importMetrics = importMetrics;
@@ -1,24 +1,26 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getMetricsRoutes = exports.default = void 0;
7
- var _express = require("express");
8
- var _metricsController = require("./metricsController.cjs");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMetricsRoutes = void 0;
4
+ const express_1 = require("express");
5
+ const metricsController_js_1 = require("./metricsController.cjs");
9
6
  const getMetricsRoutes = () => {
10
- const router = (0, _express.Router)();
11
- // Metrics Control
12
- router.post('/start', _metricsController.startMetrics);
13
- router.post('/stop', _metricsController.stopMetrics);
14
- router.get('/status', _metricsController.statusMetrics);
15
- router.post('/reset', _metricsController.resetMetrics);
16
- router.post('/retention-time', _metricsController.setMetricRetentionTime);
17
- router.get('/retention-time', _metricsController.getMetricRetentionTime);
18
- router.get('/', _metricsController.listMetrics);
19
- router.post('/', _metricsController.insertMetricsToDb);
20
- router.post('/find', _metricsController.findMetrics);
21
- return router;
7
+ const router = (0, express_1.Router)();
8
+ // Metrics Control
9
+ router.post('/start', metricsController_js_1.startMetrics);
10
+ router.post('/stop', metricsController_js_1.stopMetrics);
11
+ router.get('/status', metricsController_js_1.statusMetrics);
12
+ router.post('/reset', metricsController_js_1.resetMetrics);
13
+ router.post('/retention-time', metricsController_js_1.setMetricRetentionTime);
14
+ router.get('/retention-time', metricsController_js_1.getMetricRetentionTime);
15
+ // Export/Import
16
+ router.get('/export', metricsController_js_1.exportMetrics);
17
+ router.post('/import', metricsController_js_1.importMetrics);
18
+ // Query endpoints
19
+ router.post('/find', metricsController_js_1.findMetrics);
20
+ router.get('/stats', metricsController_js_1.getMetricsStats);
21
+ router.get('/', metricsController_js_1.findMetrics);
22
+ router.post('/', metricsController_js_1.insertMetricsToDb);
23
+ return router;
22
24
  };
23
25
  exports.getMetricsRoutes = getMetricsRoutes;
24
- var _default = exports.default = getMetricsRoutes;
26
+ exports.default = exports.getMetricsRoutes;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeMetricRecords = sanitizeMetricRecords;
4
+ exports.importMetricsToMemory = importMetricsToMemory;
5
+ const telemetryRegistry_js_1 = require("../telemetry/telemetryRegistry.cjs");
6
+ function sanitizeMetricRecords(records) {
7
+ return records.map((record) => {
8
+ const { _id, ...rest } = record;
9
+ return rest;
10
+ });
11
+ }
12
+ function importMetricsToMemory(records, options) {
13
+ if (options?.reset) {
14
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.reset();
15
+ }
16
+ if (!records.length) {
17
+ return 0;
18
+ }
19
+ if ((options?.format || 'raw') === 'otel') {
20
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.insertOtel(records);
21
+ }
22
+ else {
23
+ telemetryRegistry_js_1.inMemoryDbMetricExporter.insertRaw(records);
24
+ }
25
+ return records.length;
26
+ }