@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,98 +1,93 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
_logger.default.error('Error fetching traces:', error);
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
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.availableTools = exports.tools = void 0;
|
|
7
|
+
const logger_js_1 = __importDefault(require("../utils/logger.cjs"));
|
|
8
|
+
const telemetryRegistry_js_1 = require("../telemetry/telemetryRegistry.cjs");
|
|
9
|
+
const getTraces = async (searchInput) => {
|
|
10
|
+
logger_js_1.default.debug("getTraces called with searchInput:", searchInput);
|
|
11
|
+
try {
|
|
12
|
+
const search = searchInput ? JSON.parse(searchInput) : {};
|
|
13
|
+
const traces = await telemetryRegistry_js_1.inMemoryDbSpanExporter.find({
|
|
14
|
+
query: search,
|
|
15
|
+
limit: 1000
|
|
16
|
+
});
|
|
17
|
+
const simplifiedTraces = getSimplifiedTraces(traces);
|
|
18
|
+
logger_js_1.default.debug(`Searching for traces with searchInput: ${JSON.stringify(search)}`);
|
|
19
|
+
logger_js_1.default.debug(`Traces found: ${JSON.stringify(simplifiedTraces.length)}`);
|
|
20
|
+
return { traces: simplifiedTraces };
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
logger_js_1.default.error('Error fetching traces:', error);
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
29
26
|
};
|
|
30
27
|
const getLogs = async (startDate, endDate) => {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
28
|
+
logger_js_1.default.debug("getLogs called with startDate:", startDate, "endDate:", endDate);
|
|
29
|
+
try {
|
|
30
|
+
// Timestamps are stored in microseconds in the DB (must multiply by 1000)
|
|
31
|
+
const startEpoch = startDate ? new Date(startDate).getTime() * 1000 : 0;
|
|
32
|
+
const endEpoch = endDate ? new Date(endDate).getTime() * 1000 : Date.now() * 1000;
|
|
33
|
+
logger_js_1.default.debug(`Fetching logs from ${startEpoch} to ${endEpoch}`);
|
|
34
|
+
const nedbQuery = {
|
|
35
|
+
timestamp: {
|
|
36
|
+
$gte: startEpoch,
|
|
37
|
+
$lte: endEpoch
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const logs = (await telemetryRegistry_js_1.inMemoryDbLogExporter.find({
|
|
41
|
+
query: nedbQuery,
|
|
42
|
+
messageSearch: null,
|
|
43
|
+
limit: 1000 // or any appropriate limit
|
|
44
|
+
})) || [];
|
|
45
|
+
logger_js_1.default.debug(`Found ${logs.length} logs in the specified range.`);
|
|
46
|
+
const simplifiedLogs = getSimplifiedLogs(logs);
|
|
47
|
+
return { logs: simplifiedLogs };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
logger_js_1.default.error('Error fetching logs:', error);
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
57
53
|
};
|
|
58
54
|
const startTelemetry = () => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
55
|
+
logger_js_1.default.debug("Starting telemetry...");
|
|
56
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.enable();
|
|
57
|
+
telemetryRegistry_js_1.inMemoryDbLogExporter.enable();
|
|
58
|
+
telemetryRegistry_js_1.inMemoryDbMetricExporter.enable();
|
|
63
59
|
};
|
|
64
60
|
const stopTelemetry = () => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
logger_js_1.default.debug("Stopping telemetry...");
|
|
62
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.disable();
|
|
63
|
+
telemetryRegistry_js_1.inMemoryDbLogExporter.disable();
|
|
64
|
+
telemetryRegistry_js_1.inMemoryDbMetricExporter.disable();
|
|
69
65
|
};
|
|
70
66
|
const resetTelemetry = () => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
67
|
+
logger_js_1.default.debug("Resetting telemetry...");
|
|
68
|
+
telemetryRegistry_js_1.inMemoryDbSpanExporter.reset();
|
|
69
|
+
telemetryRegistry_js_1.inMemoryDbLogExporter.reset();
|
|
70
|
+
telemetryRegistry_js_1.inMemoryDbMetricExporter.reset();
|
|
75
71
|
};
|
|
76
72
|
const getTelemetryStatus = () => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
logger_js_1.default.debug("Getting telemetry status...");
|
|
74
|
+
return {
|
|
75
|
+
spansEnabled: telemetryRegistry_js_1.inMemoryDbSpanExporter.isEnabled(),
|
|
76
|
+
logsEnabled: telemetryRegistry_js_1.inMemoryDbLogExporter.isEnabled(),
|
|
77
|
+
metricsEnabled: telemetryRegistry_js_1.inMemoryDbMetricExporter.isEnabled()
|
|
78
|
+
};
|
|
83
79
|
};
|
|
84
80
|
const getCurrentDate = () => {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
currentDateISO: now.toISOString()
|
|
89
|
-
};
|
|
81
|
+
logger_js_1.default.debug("Getting the current date in ISO format...");
|
|
82
|
+
const now = new Date();
|
|
83
|
+
return { currentDateISO: now.toISOString() };
|
|
90
84
|
};
|
|
91
|
-
const tools =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
85
|
+
const tools = [
|
|
86
|
+
{
|
|
87
|
+
type: "function",
|
|
88
|
+
function: {
|
|
89
|
+
name: "getTraces",
|
|
90
|
+
description: `Fetches trace data for the microservice.
|
|
96
91
|
Traces provide detailed information about requests and their lifecycle, including HTTP attributes (e.g., URL, method, status code),
|
|
97
92
|
network details (e.g., peer IP, port), and timing information.
|
|
98
93
|
The 'searchInput' parameter is an object used to filter traces based on specific criteria.
|
|
@@ -154,26 +149,27 @@ const tools = exports.tools = [{
|
|
|
154
149
|
you must give a {searchInput: query} object to the function
|
|
155
150
|
|
|
156
151
|
`,
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
152
|
+
parameters: {
|
|
153
|
+
type: "object",
|
|
154
|
+
properties: {
|
|
155
|
+
searchInput: {
|
|
156
|
+
type: "object",
|
|
157
|
+
description: `Optional search criteria for filtering traces.
|
|
163
158
|
This is a NeDB query using MongoDB-like (neDB) syntax.
|
|
164
159
|
For example, you can filter by HTTP attributes, timestamps, or duration.
|
|
165
160
|
If null, all traces will be returned.`,
|
|
166
|
-
|
|
161
|
+
additionalProperties: true
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
required: ["searchInput"]
|
|
165
|
+
}
|
|
167
166
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
function: {
|
|
175
|
-
name: "getLogs",
|
|
176
|
-
description: `Fetches log data for the microservice.
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
type: "function",
|
|
170
|
+
function: {
|
|
171
|
+
name: "getLogs",
|
|
172
|
+
description: `Fetches log data for the microservice.
|
|
177
173
|
Logs provide information about system events, including timestamps, log levels (e.g., info, error), and messages.
|
|
178
174
|
The 'startDate' and 'endDate' parameters define the time range for fetching logs.
|
|
179
175
|
If you need a date, you MUST first call the "getCurrentDate" tool to obtain the current date in ISO format, and then use it as a parameter.
|
|
@@ -184,90 +180,97 @@ const tools = exports.tools = [{
|
|
|
184
180
|
"endDate": "2023-10-02T00:00:00Z"
|
|
185
181
|
}
|
|
186
182
|
Common filters include timestamps or log levels.`,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
183
|
+
parameters: {
|
|
184
|
+
type: "object",
|
|
185
|
+
properties: {
|
|
186
|
+
startDate: {
|
|
187
|
+
type: "string"
|
|
188
|
+
},
|
|
189
|
+
endDate: {
|
|
190
|
+
type: "string"
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
}
|
|
195
194
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
name: "startTelemetry",
|
|
203
|
-
description: `Starts the telemetry data collection process.
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
type: "function",
|
|
198
|
+
function: {
|
|
199
|
+
name: "startTelemetry",
|
|
200
|
+
description: `Starts the telemetry data collection process.
|
|
204
201
|
This function initializes the telemetry system and begins capturing trace, log, and metric data.`,
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
},
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
202
|
+
parameters: {}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
type: "function",
|
|
207
|
+
function: {
|
|
208
|
+
name: "stopTelemetry",
|
|
209
|
+
description: `Stops the telemetry data collection process.
|
|
212
210
|
This function halts the telemetry system and stops capturing trace, log, and metric data.`,
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
},
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
211
|
+
parameters: {}
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
type: "function",
|
|
216
|
+
function: {
|
|
217
|
+
name: "resetTelemetry",
|
|
218
|
+
description: `Resets the telemetry data collection process.
|
|
220
219
|
This function clears any existing telemetry data and prepares the system for a fresh start.`,
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
},
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
220
|
+
parameters: {}
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
type: "function",
|
|
225
|
+
function: {
|
|
226
|
+
name: "getTelemetryStatus",
|
|
227
|
+
description: `Retrieves the current status of the telemetry system.
|
|
228
228
|
This function checks whether the telemetry system is currently active or inactive.`,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
},
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
229
|
+
parameters: {}
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
type: "function",
|
|
234
|
+
function: {
|
|
235
|
+
name: "getCurrentDate",
|
|
236
|
+
description: `Returns the current date in ISO 8601 format (e.g., "2024-06-07T12:34:56.789Z").
|
|
236
237
|
Use this tool to obtain the current date when you need to specify a date for other tools, such as "getLogs".`,
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
238
|
+
parameters: {}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
];
|
|
242
|
+
exports.tools = tools;
|
|
243
|
+
const availableTools = {
|
|
244
|
+
getTraces,
|
|
245
|
+
getLogs,
|
|
246
|
+
startTelemetry,
|
|
247
|
+
stopTelemetry,
|
|
248
|
+
resetTelemetry,
|
|
249
|
+
getTelemetryStatus,
|
|
250
|
+
getCurrentDate
|
|
248
251
|
};
|
|
252
|
+
exports.availableTools = availableTools;
|
|
249
253
|
function getSimplifiedTraces(spans) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
254
|
+
return spans.map((span) => {
|
|
255
|
+
return {
|
|
256
|
+
name: span.name,
|
|
257
|
+
kind: span.kind,
|
|
258
|
+
attributes: span.attributes,
|
|
259
|
+
resource: span.resource,
|
|
260
|
+
_spanContext: span._spanContext,
|
|
261
|
+
startTime: span.startTime,
|
|
262
|
+
endTime: span.endTime,
|
|
263
|
+
_duration: span._duration
|
|
264
|
+
};
|
|
265
|
+
});
|
|
262
266
|
}
|
|
263
267
|
function getSimplifiedLogs(logs) {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
268
|
+
return logs.map((log) => ({
|
|
269
|
+
service: log.resource?.attributes?.service?.name || undefined,
|
|
270
|
+
timestamp: new Date(log.timestamp / 1000).toISOString(), // converting microseconds to milliseconds
|
|
271
|
+
severityText: log.severityText,
|
|
272
|
+
message: log.body,
|
|
273
|
+
traceId: log.traceId,
|
|
274
|
+
source: log.attributes?.source || undefined,
|
|
275
|
+
}));
|
|
276
|
+
}
|
|
@@ -1,136 +1,93 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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.getAuthEnabled = exports.getRefresh = exports.getLogout = exports.getLogin = void 0;
|
|
7
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
|
+
const logger_js_1 = __importDefault(require("../utils/logger.cjs"));
|
|
9
|
+
const bootConfig_js_1 = require("../config/bootConfig.cjs");
|
|
10
10
|
function generateAccessToken(secret, expiresIn) {
|
|
11
|
-
|
|
12
|
-
type: "access"
|
|
13
|
-
}, secret, {
|
|
14
|
-
expiresIn: Math.floor(expiresIn / 1000)
|
|
15
|
-
});
|
|
11
|
+
return jsonwebtoken_1.default.sign({ type: "access" }, secret, { expiresIn: Math.floor(expiresIn / 1000) });
|
|
16
12
|
}
|
|
17
13
|
function generateRefreshToken(secret, expiresIn) {
|
|
18
|
-
|
|
19
|
-
type: "refresh"
|
|
20
|
-
}, secret, {
|
|
21
|
-
expiresIn: Math.floor(expiresIn / 1000)
|
|
22
|
-
});
|
|
14
|
+
return jsonwebtoken_1.default.sign({ type: "refresh" }, secret, { expiresIn: Math.floor(expiresIn / 1000) });
|
|
23
15
|
}
|
|
24
|
-
const getLogin = oasTlmConfig => (req, res) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
message: "
|
|
56
|
-
});
|
|
57
|
-
return;
|
|
16
|
+
const getLogin = (oasTlmConfig) => (req, res) => {
|
|
17
|
+
if (!oasTlmConfig.auth.enabled) {
|
|
18
|
+
res.status(200).json({ valid: true, message: "Auth disabled" });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const { password } = req.body;
|
|
23
|
+
if (password === oasTlmConfig.auth.password) {
|
|
24
|
+
const accessToken = generateAccessToken(oasTlmConfig.auth.jwtSecret, oasTlmConfig.auth.accessTokenMaxAge);
|
|
25
|
+
const refreshToken = generateRefreshToken(oasTlmConfig.auth.jwtSecret, oasTlmConfig.auth.refreshTokenMaxAge);
|
|
26
|
+
res.cookie("oas-tlm-access-token", accessToken, {
|
|
27
|
+
maxAge: oasTlmConfig.auth.accessTokenMaxAge,
|
|
28
|
+
httpOnly: true,
|
|
29
|
+
secure: process.env.NODE_ENV === "production",
|
|
30
|
+
sameSite: "lax",
|
|
31
|
+
path: "/"
|
|
32
|
+
});
|
|
33
|
+
res.cookie("oas-tlm-refresh-token", refreshToken, {
|
|
34
|
+
maxAge: oasTlmConfig.auth.refreshTokenMaxAge,
|
|
35
|
+
httpOnly: true,
|
|
36
|
+
secure: process.env.NODE_ENV === "production",
|
|
37
|
+
sameSite: "lax",
|
|
38
|
+
path: bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_BASE_URL + "/auth/refresh"
|
|
39
|
+
});
|
|
40
|
+
res.status(200).json({ valid: true, message: "Login successful" });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
res.status(400).json({ valid: false, message: "Invalid password" });
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
logger_js_1.default.error("Login error: ", error);
|
|
47
|
+
res.status(500).json({ valid: false, message: "Internal server error" });
|
|
58
48
|
}
|
|
59
|
-
res.status(400).json({
|
|
60
|
-
valid: false,
|
|
61
|
-
message: "Invalid password"
|
|
62
|
-
});
|
|
63
|
-
} catch (error) {
|
|
64
|
-
_logger.default.error("Login error: ", error);
|
|
65
|
-
res.status(500).json({
|
|
66
|
-
valid: false,
|
|
67
|
-
message: "Internal server error"
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
49
|
};
|
|
71
50
|
exports.getLogin = getLogin;
|
|
72
|
-
const getLogout = oasTlmConfig => (req, res) => {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
res.clearCookie('oas-tlm-access-token', {
|
|
81
|
-
path: '/'
|
|
82
|
-
});
|
|
83
|
-
res.clearCookie('oas-tlm-refresh-token', {
|
|
84
|
-
path: oasTlmConfig.general.baseUrl + '/auth/refresh'
|
|
85
|
-
});
|
|
86
|
-
res.status(200).json({
|
|
87
|
-
valid: true,
|
|
88
|
-
message: "Logged out"
|
|
89
|
-
});
|
|
51
|
+
const getLogout = (oasTlmConfig) => (req, res) => {
|
|
52
|
+
if (!oasTlmConfig.auth.enabled) {
|
|
53
|
+
res.status(200).json({ valid: true, message: "Auth disabled" });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
res.clearCookie('oas-tlm-access-token', { path: '/' });
|
|
57
|
+
res.clearCookie('oas-tlm-refresh-token', { path: bootConfig_js_1.bootEnvVariables.OASTLM_BOOT_BASE_URL + '/auth/refresh' });
|
|
58
|
+
res.status(200).json({ valid: true, message: "Logged out" });
|
|
90
59
|
};
|
|
91
60
|
exports.getLogout = getLogout;
|
|
92
|
-
const getRefresh = oasTlmConfig => (req, res) => {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
res.status(200).json({
|
|
120
|
-
valid: true,
|
|
121
|
-
message: "Refreshed"
|
|
122
|
-
});
|
|
123
|
-
} catch {
|
|
124
|
-
res.status(401).json({
|
|
125
|
-
valid: false,
|
|
126
|
-
message: "Invalid refresh token"
|
|
127
|
-
});
|
|
128
|
-
}
|
|
61
|
+
const getRefresh = (oasTlmConfig) => (req, res) => {
|
|
62
|
+
if (!oasTlmConfig.auth.enabled) {
|
|
63
|
+
res.status(200).json({ valid: true, message: "Auth disabled" });
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const refreshToken = req.cookies["oas-tlm-refresh-token"];
|
|
67
|
+
if (!refreshToken) {
|
|
68
|
+
res.status(401).json({ valid: false, message: "No refresh token" });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const payload = jsonwebtoken_1.default.verify(refreshToken, oasTlmConfig.auth.jwtSecret);
|
|
73
|
+
if (payload.type !== "refresh")
|
|
74
|
+
throw new Error("Invalid token type");
|
|
75
|
+
const accessToken = generateAccessToken(oasTlmConfig.auth.jwtSecret, oasTlmConfig.auth.accessTokenMaxAge);
|
|
76
|
+
res.cookie("oas-tlm-access-token", accessToken, {
|
|
77
|
+
maxAge: oasTlmConfig.auth.accessTokenMaxAge,
|
|
78
|
+
httpOnly: true,
|
|
79
|
+
secure: process.env.NODE_ENV === "production",
|
|
80
|
+
sameSite: "lax",
|
|
81
|
+
path: "/"
|
|
82
|
+
});
|
|
83
|
+
res.status(200).json({ valid: true, message: "Refreshed" });
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
res.status(401).json({ valid: false, message: "Invalid refresh token" });
|
|
87
|
+
}
|
|
129
88
|
};
|
|
130
89
|
exports.getRefresh = getRefresh;
|
|
131
|
-
const getAuthEnabled = oasTlmConfig => (req, res) => {
|
|
132
|
-
|
|
133
|
-
enabled: !!oasTlmConfig.auth.enabled
|
|
134
|
-
});
|
|
90
|
+
const getAuthEnabled = (oasTlmConfig) => (req, res) => {
|
|
91
|
+
res.status(200).json({ enabled: !!oasTlmConfig.auth.enabled });
|
|
135
92
|
};
|
|
136
|
-
exports.getAuthEnabled = getAuthEnabled;
|
|
93
|
+
exports.getAuthEnabled = getAuthEnabled;
|