@oas-tools/oas-telemetry 0.7.1 → 0.8.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +17 -3
- package/README.md +1 -2
- package/dist/cjs/config/bootConfig.cjs +16 -14
- package/dist/cjs/config/config.cjs +120 -125
- package/dist/cjs/config/config.types.cjs +1 -4
- package/dist/cjs/docs/openapi.yaml +158 -4
- package/dist/cjs/index.cjs +27 -30
- package/dist/cjs/routesManager.cjs +62 -70
- package/dist/cjs/telemetry/custom-implementations/exporters/DiskLogExporter.cjs +121 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/DiskMetricExporter.cjs +101 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/DiskTraceExporter.cjs +103 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.cjs +194 -190
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.cjs +147 -99
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.cjs +143 -116
- package/dist/cjs/telemetry/custom-implementations/exporters/MultiMetricExporter.cjs +57 -0
- package/dist/cjs/telemetry/custom-implementations/instrumentations/logsInstrumentation.cjs +92 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Chunk.cjs +159 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/Series.cjs +168 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.cjs +392 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/types.cjs +2 -0
- package/dist/cjs/telemetry/custom-implementations/metrics/tsdb/utils.cjs +77 -0
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.cjs +65 -63
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.cjs +63 -62
- package/dist/cjs/telemetry/custom-implementations/utils/circular.cjs +47 -47
- package/dist/cjs/telemetry/custom-implementations/wrappers.cjs +209 -138
- package/dist/cjs/telemetry/initializeTelemetry.cjs +35 -91
- package/dist/cjs/telemetry/persistence/DiskImporter.cjs +85 -0
- package/dist/cjs/telemetry/persistence/DiskUtils.cjs +61 -0
- package/dist/cjs/telemetry/persistence/DiskWriter.cjs +66 -0
- package/dist/cjs/telemetry/telemetryConfigurator.cjs +139 -72
- package/dist/cjs/telemetry/telemetryRegistry.cjs +45 -31
- package/dist/cjs/tlm-ai/agent.cjs +49 -64
- package/dist/cjs/tlm-ai/aiController.cjs +54 -76
- package/dist/cjs/tlm-ai/aiRoutes.cjs +17 -20
- package/dist/cjs/tlm-ai/aiService.cjs +91 -95
- package/dist/cjs/tlm-ai/tools.cjs +177 -174
- package/dist/cjs/tlm-auth/authController.cjs +80 -123
- package/dist/cjs/tlm-auth/authMiddleware.cjs +25 -30
- package/dist/cjs/tlm-auth/authRoutes.cjs +11 -14
- package/dist/cjs/tlm-log/logController.cjs +135 -116
- package/dist/cjs/tlm-log/logRoutes.cjs +19 -20
- package/dist/cjs/tlm-log/logService.cjs +29 -0
- package/dist/cjs/tlm-metric/metricsController.cjs +154 -122
- package/dist/cjs/tlm-metric/metricsRoutes.cjs +22 -20
- package/dist/cjs/tlm-metric/metricsService.cjs +26 -0
- package/dist/cjs/tlm-plugin/pluginController.cjs +128 -140
- package/dist/cjs/tlm-plugin/pluginProcess.cjs +89 -94
- package/dist/cjs/tlm-plugin/pluginRoutes.cjs +11 -14
- package/dist/cjs/tlm-plugin/pluginService.cjs +73 -74
- package/dist/cjs/tlm-trace/traceController.cjs +140 -123
- package/dist/cjs/tlm-trace/traceRoutes.cjs +19 -20
- package/dist/cjs/tlm-trace/traceService.cjs +29 -0
- package/dist/cjs/tlm-ui/uiRoutes.cjs +63 -32
- package/dist/cjs/tlm-util/utilController.cjs +68 -70
- package/dist/cjs/tlm-util/utilRoutes.cjs +51 -63
- package/dist/cjs/types/index.cjs +2 -5
- package/dist/cjs/utils/logger.cjs +38 -43
- package/dist/cjs/utils/regexUtils.cjs +22 -22
- package/dist/esm/config/bootConfig.js +5 -2
- package/dist/esm/config/config.js +9 -2
- package/dist/esm/docs/openapi.yaml +158 -4
- package/dist/esm/index.js +9 -8
- package/dist/esm/routesManager.js +6 -10
- package/dist/esm/telemetry/custom-implementations/exporters/DiskLogExporter.js +114 -0
- package/dist/esm/telemetry/custom-implementations/exporters/DiskMetricExporter.js +94 -0
- package/dist/esm/telemetry/custom-implementations/exporters/DiskTraceExporter.js +96 -0
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.js +38 -7
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.js +107 -48
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.js +60 -29
- package/dist/esm/telemetry/custom-implementations/exporters/MultiMetricExporter.js +53 -0
- package/dist/esm/telemetry/custom-implementations/instrumentations/logsInstrumentation.js +85 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Chunk.js +155 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/Series.js +164 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.js +385 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/types.js +1 -0
- package/dist/esm/telemetry/custom-implementations/metrics/tsdb/utils.js +74 -0
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.js +2 -1
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.js +1 -1
- package/dist/esm/telemetry/custom-implementations/wrappers.js +77 -6
- package/dist/esm/telemetry/initializeTelemetry.js +27 -69
- package/dist/esm/telemetry/persistence/DiskImporter.js +78 -0
- package/dist/esm/telemetry/persistence/DiskUtils.js +51 -0
- package/dist/esm/telemetry/persistence/DiskWriter.js +59 -0
- package/dist/esm/telemetry/telemetryConfigurator.js +110 -39
- package/dist/esm/telemetry/telemetryRegistry.js +12 -1
- package/dist/esm/tlm-ai/agent.js +5 -3
- package/dist/esm/tlm-ai/aiController.js +3 -3
- package/dist/esm/tlm-ai/aiService.js +6 -2
- package/dist/esm/tlm-ai/tools.js +5 -9
- package/dist/esm/tlm-auth/authController.js +3 -2
- package/dist/esm/tlm-log/logController.js +62 -18
- package/dist/esm/tlm-log/logRoutes.js +3 -1
- package/dist/esm/tlm-log/logService.js +25 -0
- package/dist/esm/tlm-metric/metricsController.js +116 -50
- package/dist/esm/tlm-metric/metricsRoutes.js +8 -3
- package/dist/esm/tlm-metric/metricsService.js +22 -0
- package/dist/esm/tlm-plugin/pluginController.js +6 -11
- package/dist/esm/tlm-plugin/pluginService.js +2 -4
- package/dist/esm/tlm-trace/traceController.js +87 -36
- package/dist/esm/tlm-trace/traceRoutes.js +3 -1
- package/dist/esm/tlm-trace/traceService.js +25 -0
- package/dist/esm/tlm-ui/uiRoutes.js +5 -5
- package/dist/esm/tlm-util/utilController.js +3 -9
- package/dist/esm/tlm-util/utilRoutes.js +2 -2
- package/dist/types/config/bootConfig.d.ts +3 -0
- package/dist/types/config/config.d.ts +48 -7
- package/dist/types/config/config.types.d.ts +7 -0
- package/dist/types/index.d.ts +2 -3
- package/dist/types/telemetry/custom-implementations/exporters/DiskLogExporter.d.ts +24 -0
- package/dist/types/telemetry/custom-implementations/exporters/DiskMetricExporter.d.ts +23 -0
- package/dist/types/telemetry/custom-implementations/exporters/DiskTraceExporter.d.ts +23 -0
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbLogExporter.d.ts +3 -1
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.d.ts +56 -15
- package/dist/types/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.d.ts +8 -4
- package/dist/types/telemetry/custom-implementations/exporters/MultiMetricExporter.d.ts +9 -0
- package/dist/types/telemetry/custom-implementations/instrumentations/logsInstrumentation.d.ts +23 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/Chunk.d.ts +49 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/Series.d.ts +67 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/SeriesRegistry.d.ts +69 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/types.d.ts +68 -0
- package/dist/types/telemetry/custom-implementations/metrics/tsdb/utils.d.ts +21 -0
- package/dist/types/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.d.ts +2 -2
- package/dist/types/telemetry/custom-implementations/wrappers.d.ts +2 -1
- package/dist/types/telemetry/persistence/DiskImporter.d.ts +17 -0
- package/dist/types/telemetry/persistence/DiskUtils.d.ts +11 -0
- package/dist/types/telemetry/persistence/DiskWriter.d.ts +21 -0
- package/dist/types/telemetry/telemetryConfigurator.d.ts +1 -1
- package/dist/types/telemetry/telemetryRegistry.d.ts +8 -0
- package/dist/types/tlm-ai/agent.d.ts +1 -1
- package/dist/types/tlm-ai/aiService.d.ts +1 -1
- package/dist/types/tlm-log/logController.d.ts +2 -0
- package/dist/types/tlm-log/logService.d.ts +4 -0
- package/dist/types/tlm-metric/metricsController.d.ts +11 -2
- package/dist/types/tlm-metric/metricsService.d.ts +6 -0
- package/dist/types/tlm-trace/traceController.d.ts +9 -7
- package/dist/types/tlm-trace/traceService.d.ts +4 -0
- package/dist/types/types/index.d.ts +2 -2
- package/dist/ui/assets/{ApiDocsPage-C_VVPPHa.js → ApiDocsPage-DTCgVbW2.js} +2 -2
- package/dist/ui/assets/CollapsibleCard-lWgfsaAn.js +1 -0
- package/dist/ui/assets/DevToolsPage-DEhf8CBy.js +1 -0
- package/dist/ui/assets/LandingPage-CfEHCDxY.js +6 -0
- package/dist/ui/assets/LogsPage-DFDKRuGH.js +1 -0
- package/dist/ui/assets/{NotFoundPage-B3quk3P1.js → NotFoundPage-DCy0DcV7.js} +1 -1
- package/dist/ui/assets/PluginCreatePage-BawZ5_-h.js +50 -0
- package/dist/ui/assets/PluginPage-D3FmgU7d.js +27 -0
- package/dist/ui/assets/TraceSpansPage-D0_L45Rb.js +6 -0
- package/dist/ui/assets/VirtualizedListPanel-q605n9He.js +16 -0
- package/dist/ui/assets/alert-DBAFshSi.js +1133 -0
- package/dist/ui/assets/badge-DGNBtnxU.js +1 -0
- package/dist/ui/assets/{chevron-down-CPsvsmqj.js → chevron-down-CFEqYzGC.js} +1 -1
- package/dist/ui/assets/{chevron-up-Df9jMo1X.js → chevron-up-lDnFwAJq.js} +1 -1
- package/dist/ui/assets/{circle-alert-DOPQPvU8.js → circle-alert-BpYUuRs7.js} +1 -1
- package/dist/ui/assets/dialog-1dRyI6SC.js +15 -0
- package/dist/ui/assets/index-C7RfU6hR.js +1 -0
- package/dist/ui/assets/index-C9dDYIpd.js +305 -0
- package/dist/ui/assets/index-D6f1KjWV.css +1 -0
- package/dist/ui/assets/info-CuJQWoBU.js +6 -0
- package/dist/ui/assets/{input-Dzvg_ZEZ.js → input-BLXaar0X.js} +1 -1
- package/dist/ui/assets/label-DfAcltsl.js +1 -0
- package/dist/ui/assets/{loader-circle-CrvlRy5o.js → loader-circle-B7oLyPsi.js} +1 -1
- package/dist/ui/assets/{loginPage-qa4V-B70.js → loginPage-DswZvOJ-.js} +1 -1
- package/dist/ui/assets/metrics-page-BhtXrfUW.js +31 -0
- package/dist/ui/assets/metrics-page-D1GxaB_c.css +1 -0
- package/dist/ui/assets/popover-IDker85U.js +11 -0
- package/dist/ui/assets/select-B8y5IidE.js +6 -0
- package/dist/ui/assets/separator-B6EzrxYY.js +6 -0
- package/dist/ui/assets/severityOptions-DtCsaAZK.js +11 -0
- package/dist/ui/assets/square-pen-D_oecB1x.js +6 -0
- package/dist/ui/assets/switch-Dqo0XkRD.js +1 -0
- package/dist/ui/assets/trace-DJq1miYa.js +1 -0
- package/dist/ui/assets/upload-prIohEdY.js +11 -0
- package/dist/ui/assets/{utilService-DNyqzwj0.js → utilService-C8TJKLqs.js} +1 -1
- package/dist/ui/assets/wand-sparkles-OgXuzsSx.js +6 -0
- package/dist/ui/index.html +2 -2
- package/package.json +44 -49
- package/dist/ui/assets/CollapsibleCard-B3KR_8mL.js +0 -1
- package/dist/ui/assets/DevToolsPage-OyZcDcmw.js +0 -1
- package/dist/ui/assets/LandingPage-CppFBA6K.js +0 -6
- package/dist/ui/assets/LogsPage-9Fq8GArS.js +0 -26
- package/dist/ui/assets/PluginCreatePage-X_aCH4t4.js +0 -50
- package/dist/ui/assets/PluginPage-DMDSihrZ.js +0 -27
- package/dist/ui/assets/alert-jQ9HCPIf.js +0 -1133
- package/dist/ui/assets/badge-CNq0-mH5.js +0 -1
- package/dist/ui/assets/card-DFAwwhN3.js +0 -1
- package/dist/ui/assets/index-BkD6DijD.js +0 -15
- package/dist/ui/assets/index-CERGVYZK.js +0 -292
- package/dist/ui/assets/index-CSIPf9qw.css +0 -1
- package/dist/ui/assets/label-DuVnkZ4q.js +0 -1
- package/dist/ui/assets/select-DhS8YUtJ.js +0 -1
- package/dist/ui/assets/separator-isK4chBP.js +0 -6
- package/dist/ui/assets/severityOptions-O38dSOfk.js +0 -11
- package/dist/ui/assets/switch-Z3mImG9n.js +0 -1
- package/dist/ui/assets/tabs-_77MUUQe.js +0 -16
- package/dist/ui/assets/upload-C1LT4Gkb.js +0 -16
|
@@ -1,146 +1,178 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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.
|
|
17
|
+
exports.getMetricsStats = getMetricsStats;
|
|
58
18
|
const resetMetrics = (req, res) => {
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
111
|
-
|
|
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
|
-
|
|
116
|
-
|
|
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
|
-
|
|
121
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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.
|
|
178
|
+
exports.importMetrics = importMetrics;
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
+
}
|