@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,76 +1,68 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
24
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
telemetryRouter.use("/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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;
|