@oas-tools/oas-telemetry 0.7.0-alpha.2 → 0.7.0-alpha.3
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 +50 -17
- package/README.md +242 -240
- package/dist/cjs/config/bootConfig.cjs +18 -0
- package/dist/cjs/config/config.cjs +145 -0
- package/dist/cjs/config/config.types.cjs +5 -0
- package/dist/cjs/index.cjs +19 -25
- package/dist/cjs/{tlmRoutes.cjs → routesManager.cjs} +28 -21
- package/dist/cjs/{exporters/InMemoryLogRecordExporter.cjs → telemetry/custom-implementations/exporters/InMemoryDbLogExporter.cjs} +42 -19
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.cjs +97 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.cjs +118 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/PluginLogExporter.cjs +52 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/PluginMetricExporter.cjs +53 -0
- package/dist/cjs/telemetry/custom-implementations/exporters/PluginSpanExporter.cjs +69 -0
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.cjs +70 -0
- package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.cjs +70 -0
- package/dist/cjs/{utils → telemetry/custom-implementations/utils}/circular.cjs +39 -49
- package/dist/cjs/telemetry/custom-implementations/wrappers.cjs +175 -0
- package/dist/cjs/telemetry/initializeTelemetry.cjs +74 -0
- package/dist/cjs/telemetry/telemetryConfigurator.cjs +84 -0
- package/dist/cjs/telemetry/telemetryRegistry.cjs +40 -0
- package/dist/cjs/tlm-ai/agent.cjs +82 -63
- package/dist/cjs/tlm-ai/aiController.cjs +5 -4
- package/dist/cjs/tlm-ai/aiRoutes.cjs +9 -6
- package/dist/cjs/tlm-ai/tools.cjs +16 -9
- package/dist/cjs/tlm-auth/authController.cjs +14 -15
- package/dist/cjs/tlm-auth/authMiddleware.cjs +11 -10
- package/dist/cjs/tlm-auth/authRoutes.cjs +9 -7
- package/dist/cjs/tlm-log/logController.cjs +45 -18
- package/dist/cjs/tlm-log/logRoutes.cjs +16 -11
- package/dist/cjs/tlm-metric/metricsController.cjs +37 -12
- package/dist/cjs/tlm-metric/metricsRoutes.cjs +16 -11
- package/dist/cjs/tlm-plugin/pluginController.cjs +40 -19
- package/dist/cjs/tlm-plugin/pluginRoutes.cjs +8 -6
- package/dist/cjs/tlm-plugin/pluginService.cjs +25 -0
- package/dist/cjs/tlm-trace/traceController.cjs +54 -45
- package/dist/cjs/tlm-trace/traceRoutes.cjs +16 -11
- package/dist/cjs/tlm-ui/uiRoutes.cjs +26 -20
- package/dist/cjs/tlm-util/utilController.cjs +8 -9
- package/dist/cjs/tlm-util/utilRoutes.cjs +22 -19
- package/dist/cjs/types/index.cjs +0 -1
- package/dist/cjs/utils/logger.cjs +3 -5
- package/dist/cjs/utils/regexUtils.cjs +27 -0
- package/dist/esm/config/bootConfig.js +11 -0
- package/dist/esm/config/config.js +126 -0
- package/dist/esm/index.js +18 -29
- package/dist/esm/{tlmRoutes.js → routesManager.js} +27 -22
- package/dist/esm/{exporters/InMemoryLogRecordExporter.js → telemetry/custom-implementations/exporters/InMemoryDbLogExporter.js} +31 -17
- package/dist/esm/{exporters/InMemoryDBMetricsExporter.js → telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.js} +31 -17
- package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.js +105 -0
- package/dist/esm/telemetry/custom-implementations/exporters/PluginLogExporter.js +44 -0
- package/dist/esm/telemetry/custom-implementations/exporters/PluginMetricExporter.js +43 -0
- package/dist/esm/telemetry/custom-implementations/exporters/PluginSpanExporter.js +61 -0
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.js +64 -0
- package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.js +64 -0
- package/dist/esm/telemetry/custom-implementations/utils/circular.js +76 -0
- package/dist/esm/telemetry/custom-implementations/wrappers.js +163 -0
- package/dist/esm/telemetry/initializeTelemetry.js +71 -0
- package/dist/esm/telemetry/telemetryConfigurator.js +74 -0
- package/dist/esm/telemetry/telemetryRegistry.js +34 -0
- package/dist/esm/tlm-ai/agent.js +77 -59
- package/dist/esm/tlm-ai/aiController.js +5 -4
- package/dist/esm/tlm-ai/aiRoutes.js +7 -5
- package/dist/esm/tlm-ai/tools.js +18 -9
- package/dist/esm/tlm-auth/authController.js +9 -10
- package/dist/esm/tlm-auth/authMiddleware.js +10 -9
- package/dist/esm/tlm-auth/authRoutes.js +8 -6
- package/dist/esm/tlm-log/logController.js +36 -16
- package/dist/esm/tlm-log/logRoutes.js +15 -11
- package/dist/esm/tlm-metric/metricsController.js +29 -10
- package/dist/esm/tlm-metric/metricsRoutes.js +15 -11
- package/dist/esm/tlm-plugin/pluginController.js +40 -19
- package/dist/esm/tlm-plugin/pluginRoutes.js +6 -5
- package/dist/esm/tlm-plugin/pluginService.js +19 -0
- package/dist/esm/tlm-trace/traceController.js +40 -35
- package/dist/esm/tlm-trace/traceRoutes.js +15 -11
- package/dist/esm/tlm-ui/uiRoutes.js +24 -19
- package/dist/esm/tlm-util/utilController.js +8 -9
- package/dist/esm/tlm-util/utilRoutes.js +17 -15
- package/dist/esm/types/index.js +0 -1
- package/dist/esm/utils/logger.js +3 -4
- package/dist/esm/utils/regexUtils.js +23 -0
- package/dist/types/config/bootConfig.d.ts +5 -0
- package/dist/types/config/config.d.ts +253 -0
- package/dist/types/config/config.types.d.ts +34 -0
- package/dist/types/index.d.ts +5 -4
- package/dist/types/routesManager.d.ts +3 -0
- package/dist/types/{exporters/InMemoryLogRecordExporter.d.ts → telemetry/custom-implementations/exporters/InMemoryDbLogExporter.d.ts} +6 -6
- package/dist/types/{exporters/InMemoryDBMetricsExporter.d.ts → telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.d.ts} +7 -7
- package/dist/types/{exporters/InMemoryDbExporter.d.ts → telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.d.ts} +9 -9
- package/dist/types/telemetry/custom-implementations/exporters/PluginLogExporter.d.ts +8 -0
- package/dist/types/telemetry/custom-implementations/exporters/PluginMetricExporter.d.ts +12 -0
- package/dist/types/telemetry/custom-implementations/exporters/PluginSpanExporter.d.ts +14 -0
- package/dist/types/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.d.ts +32 -0
- package/dist/types/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.d.ts +34 -0
- package/dist/types/telemetry/custom-implementations/utils/circular.d.ts +27 -0
- package/dist/types/telemetry/custom-implementations/wrappers.d.ts +52 -0
- package/dist/types/telemetry/initializeTelemetry.d.ts +1 -0
- package/dist/types/telemetry/telemetryConfigurator.d.ts +2 -0
- package/dist/types/telemetry/telemetryRegistry.d.ts +20 -0
- package/dist/types/tlm-ai/agent.d.ts +2 -1
- package/dist/types/tlm-ai/aiController.d.ts +4 -3
- package/dist/types/tlm-ai/aiRoutes.d.ts +2 -2
- package/dist/types/tlm-ai/tools.d.ts +3 -1
- package/dist/types/tlm-auth/authController.d.ts +4 -3
- package/dist/types/tlm-auth/authMiddleware.d.ts +2 -1
- package/dist/types/tlm-auth/authRoutes.d.ts +2 -2
- package/dist/types/tlm-log/logController.d.ts +1 -0
- package/dist/types/tlm-log/logRoutes.d.ts +2 -2
- package/dist/types/tlm-metric/metricsController.d.ts +1 -0
- package/dist/types/tlm-metric/metricsRoutes.d.ts +2 -2
- package/dist/types/tlm-plugin/pluginRoutes.d.ts +1 -2
- package/dist/types/tlm-plugin/pluginService.d.ts +9 -0
- package/dist/types/tlm-trace/traceController.d.ts +7 -6
- package/dist/types/tlm-trace/traceRoutes.d.ts +2 -2
- package/dist/types/tlm-ui/uiRoutes.d.ts +1 -2
- package/dist/types/tlm-util/utilController.d.ts +2 -1
- package/dist/types/tlm-util/utilRoutes.d.ts +2 -2
- package/dist/types/types/index.d.ts +7 -46
- package/dist/types/utils/regexUtils.d.ts +1 -0
- package/dist/ui/assets/index-D9HsRlaQ.js +437 -0
- package/dist/ui/assets/index-DEyIcKBi.css +1 -0
- package/dist/ui/index.html +3 -3
- package/dist/ui/oas-tlm.svg +185 -0
- package/package.json +12 -7
- package/dist/cjs/config.cjs +0 -31
- package/dist/cjs/exporters/InMemoryDBMetricsExporter.cjs +0 -74
- package/dist/cjs/exporters/InMemoryDbExporter.cjs +0 -102
- package/dist/cjs/exporters/consoleExporter.cjs +0 -47
- package/dist/cjs/exporters/dynamicExporter.cjs +0 -57
- package/dist/cjs/instrumentation/index.cjs +0 -28
- package/dist/cjs/instrumentation/logs.cjs +0 -46
- package/dist/cjs/instrumentation/metrics.cjs +0 -27
- package/dist/cjs/instrumentation/traces.cjs +0 -19
- package/dist/esm/config.js +0 -20
- package/dist/esm/exporters/InMemoryDbExporter.js +0 -102
- package/dist/esm/exporters/consoleExporter.js +0 -38
- package/dist/esm/exporters/dynamicExporter.js +0 -50
- package/dist/esm/instrumentation/index.js +0 -26
- package/dist/esm/instrumentation/logs.js +0 -34
- package/dist/esm/instrumentation/metrics.js +0 -18
- package/dist/esm/instrumentation/traces.js +0 -12
- package/dist/esm/utils/circular.js +0 -84
- package/dist/types/config.d.ts +0 -6
- package/dist/types/exporters/consoleExporter.d.ts +0 -13
- package/dist/types/exporters/dynamicExporter.d.ts +0 -25
- package/dist/types/instrumentation/logs.d.ts +0 -1
- package/dist/types/instrumentation/metrics.d.ts +0 -1
- package/dist/types/instrumentation/traces.d.ts +0 -1
- package/dist/types/tlmRoutes.d.ts +0 -2
- package/dist/types/utils/circular.d.ts +0 -31
- package/dist/ui/assets/index-BNhZBPi2.css +0 -1
- package/dist/ui/assets/index-DxGAMrAl.js +0 -401
- package/dist/ui/vite.svg +0 -1
- /package/dist/{types/instrumentation/index.d.ts → esm/config/config.types.js} +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.configureTelemetry = void 0;
|
|
7
|
+
var _sdkTraceNode = require("@opentelemetry/sdk-trace-node");
|
|
8
|
+
var _telemetryRegistry = require("./telemetryRegistry.cjs");
|
|
9
|
+
var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
|
|
10
|
+
var _sdkLogs = require("@opentelemetry/sdk-logs");
|
|
11
|
+
var _sdkMetrics = require("@opentelemetry/sdk-metrics");
|
|
12
|
+
var _hostMetrics = require("@opentelemetry/host-metrics");
|
|
13
|
+
var _bootConfig = require("../config/bootConfig.cjs");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
const configureTelemetry = oasTlmConfig => {
|
|
16
|
+
configureTraces(oasTlmConfig);
|
|
17
|
+
configureMetrics(oasTlmConfig);
|
|
18
|
+
configureLogs(oasTlmConfig);
|
|
19
|
+
_logger.default.info("✅ Telemetry configured successfully. All exporters are ready");
|
|
20
|
+
};
|
|
21
|
+
exports.configureTelemetry = configureTelemetry;
|
|
22
|
+
function configureTraces(oasTlmConfig) {
|
|
23
|
+
// TRACES CONFIGURATION
|
|
24
|
+
// [OT]Provider -> [OT]SpanProcessor(multiSpan) -> n Processors(eg mainProcessor, extra) -> 1 SpanExporter
|
|
25
|
+
_telemetryRegistry.inMemoryDbSpanExporter.baseUrl = oasTlmConfig.general.baseUrl; // TODO this will be done with filters
|
|
26
|
+
_telemetryRegistry.inMemoryDbSpanExporter.retentionTimeInSeconds = oasTlmConfig.traces.memoryExporter.retentionTimeSeconds;
|
|
27
|
+
_telemetryRegistry.inMemoryDbSpanExporter.setEnabledValue(oasTlmConfig.traces.memoryExporter.enabled);
|
|
28
|
+
_telemetryRegistry.pluginSpanExporter.setEnabledValue(oasTlmConfig.plugins.enabled);
|
|
29
|
+
const mainExporter = _telemetryRegistry.multiSpanExporter;
|
|
30
|
+
let mainProcessor = new _sdkTraceNode.BatchSpanProcessor(mainExporter);
|
|
31
|
+
if (_bootConfig.bootEnvVariables.OASTLM_BOOT_ENV !== 'production') {
|
|
32
|
+
_logger.default.info('Not in production, using SimpleSpanProcessor for traces');
|
|
33
|
+
mainProcessor = new _sdkTraceNode.SimpleSpanProcessor(mainExporter);
|
|
34
|
+
}
|
|
35
|
+
mainExporter.addExporters(_telemetryRegistry.inMemoryDbSpanExporter); // Main exporter have at least the in-memory exporter used by the traces controller
|
|
36
|
+
mainExporter.addExporters(_telemetryRegistry.pluginSpanExporter);
|
|
37
|
+
mainExporter.addExporters(oasTlmConfig.traces.extraExporters);
|
|
38
|
+
_telemetryRegistry.dynamicMultiSpanProcessor.addProcessors(mainProcessor);
|
|
39
|
+
_telemetryRegistry.dynamicMultiSpanProcessor.addProcessors(oasTlmConfig.traces.extraProcessors);
|
|
40
|
+
}
|
|
41
|
+
function configureLogs(oasTlmConfig) {
|
|
42
|
+
// LOGS CONFIGURATION
|
|
43
|
+
// [OT]LoggerProvider -> [OT]LogRecordProcessor(multiLogProcessor) -> n Processors(eg mainProcessor, extra) -> 1 LogExporter
|
|
44
|
+
_telemetryRegistry.inMemoryDbLogExporter.setEnabledValue(oasTlmConfig.logs.memoryExporter.enabled);
|
|
45
|
+
_telemetryRegistry.inMemoryDbLogExporter.retentionTimeInSeconds = oasTlmConfig.logs.memoryExporter.retentionTimeSeconds;
|
|
46
|
+
const mainExporter = _telemetryRegistry.multiLogExporter;
|
|
47
|
+
let mainProcessor = new _sdkLogs.BatchLogRecordProcessor(mainExporter);
|
|
48
|
+
if (_bootConfig.bootEnvVariables.OASTLM_BOOT_ENV !== 'production') {
|
|
49
|
+
_logger.default.info('Not in production, using SimpleLogRecordProcessor for logs');
|
|
50
|
+
mainProcessor = new _sdkLogs.SimpleLogRecordProcessor(mainExporter);
|
|
51
|
+
}
|
|
52
|
+
mainExporter.addExporters(_telemetryRegistry.inMemoryDbLogExporter); // Main exporter have at least the in-memory exporter used by the logs controller
|
|
53
|
+
mainExporter.addExporters(oasTlmConfig.logs.extraExporters);
|
|
54
|
+
mainExporter.addExporters(_telemetryRegistry.pluginLogExporter); // Allow logs to be sent to plugins too
|
|
55
|
+
_telemetryRegistry.dynamicMultiLogProcessor.addProcessors(mainProcessor);
|
|
56
|
+
_telemetryRegistry.dynamicMultiLogProcessor.addProcessors(oasTlmConfig.logs.extraProcessors);
|
|
57
|
+
}
|
|
58
|
+
function configureMetrics(oasTlmConfig) {
|
|
59
|
+
// METRICS CONFIGURATION
|
|
60
|
+
// [CUSTOM]MeterProvider -> n [OTel]MetricReader -> (0-1) MetricExporter (only if push-based reader)
|
|
61
|
+
_telemetryRegistry.inMemoryDbMetricExporter.setEnabledValue(oasTlmConfig.metrics.memoryExporter.enabled);
|
|
62
|
+
_telemetryRegistry.inMemoryDbMetricExporter.retentionTimeInSeconds = oasTlmConfig.metrics.memoryExporter.retentionTimeSeconds;
|
|
63
|
+
const mainReader = new _sdkMetrics.PeriodicExportingMetricReader({
|
|
64
|
+
exporter: _telemetryRegistry.inMemoryDbMetricExporter,
|
|
65
|
+
exportIntervalMillis: oasTlmConfig.metrics.mainMetricReaderOptions.exportIntervalMillis,
|
|
66
|
+
metricProducers: oasTlmConfig.metrics.mainMetricReaderOptions.metricProducers
|
|
67
|
+
});
|
|
68
|
+
const pluginReader = new _sdkMetrics.PeriodicExportingMetricReader({
|
|
69
|
+
exporter: _telemetryRegistry.pluginMetricExporter,
|
|
70
|
+
exportIntervalMillis: oasTlmConfig.metrics.mainMetricReaderOptions.exportIntervalMillis,
|
|
71
|
+
metricProducers: oasTlmConfig.metrics.mainMetricReaderOptions.metricProducers
|
|
72
|
+
});
|
|
73
|
+
const meterProvider = new _sdkMetrics.MeterProvider({
|
|
74
|
+
resource: _telemetryRegistry.oasTelemetryResource,
|
|
75
|
+
readers: [mainReader, pluginReader, ...oasTlmConfig.metrics.extraReaders],
|
|
76
|
+
views: oasTlmConfig.metrics.extraViews || []
|
|
77
|
+
});
|
|
78
|
+
// TODO maybe hostMetrics are too much, consider using only a subset of them.
|
|
79
|
+
const hostMetrics = new _hostMetrics.HostMetrics({
|
|
80
|
+
meterProvider: meterProvider
|
|
81
|
+
});
|
|
82
|
+
// AFTER adding all readers, start the instrumentations
|
|
83
|
+
hostMetrics.start();
|
|
84
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.pluginSpanExporter = exports.pluginMetricExporter = exports.pluginLogExporter = exports.oasTelemetryResource = exports.multiSpanExporter = exports.multiLogExporter = exports.inMemoryDbSpanExporter = exports.inMemoryDbMetricExporter = exports.inMemoryDbLogExporter = exports.dynamicMultiSpanProcessor = exports.dynamicMultiLogProcessor = void 0;
|
|
7
|
+
var _InMemoryDbSpanExporter = require("./custom-implementations/exporters/InMemoryDbSpanExporter.cjs");
|
|
8
|
+
var _wrappers = require("./custom-implementations/wrappers.cjs");
|
|
9
|
+
var _InMemoryDbLogExporter = require("./custom-implementations/exporters/InMemoryDbLogExporter.cjs");
|
|
10
|
+
var _InMemoryDbMetricExporter = require("./custom-implementations/exporters/InMemoryDbMetricExporter.cjs");
|
|
11
|
+
var _dynamicMultiSpanProcessor = require("./custom-implementations/processors/dynamicMultiSpanProcessor.cjs");
|
|
12
|
+
var _dynamicMultiLogProcessor = require("./custom-implementations/processors/dynamicMultiLogProcessor.cjs");
|
|
13
|
+
var _semanticConventions = require("@opentelemetry/semantic-conventions");
|
|
14
|
+
var _resources = require("@opentelemetry/resources");
|
|
15
|
+
var _PluginSpanExporter = require("./custom-implementations/exporters/PluginSpanExporter.cjs");
|
|
16
|
+
var _PluginLogExporter = require("./custom-implementations/exporters/PluginLogExporter.cjs");
|
|
17
|
+
var _PluginMetricExporter = require("./custom-implementations/exporters/PluginMetricExporter.cjs");
|
|
18
|
+
// GLOBAL REGISTRY of telemetry components, used by SDKs and controllers.
|
|
19
|
+
const oasTelemetryResource = exports.oasTelemetryResource = (0, _resources.resourceFromAttributes)({
|
|
20
|
+
[_semanticConventions.ATTR_SERVICE_NAME]: 'oas-telemetry-service'
|
|
21
|
+
});
|
|
22
|
+
// TRACES -------------------------------------------------------------------------------------
|
|
23
|
+
// This is the main exporter for oas-telemetry spans. (Used by the traces controller)
|
|
24
|
+
const inMemoryDbSpanExporter = exports.inMemoryDbSpanExporter = new _InMemoryDbSpanExporter.InMemoryDbSpanExporter();
|
|
25
|
+
// This allows to add more exporter in the future without changing the code
|
|
26
|
+
const multiSpanExporter = exports.multiSpanExporter = new _wrappers.EnablerMultiSpanExporter();
|
|
27
|
+
// This allows the addition of more processors at runtime
|
|
28
|
+
const dynamicMultiSpanProcessor = exports.dynamicMultiSpanProcessor = new _dynamicMultiSpanProcessor.DynamicMultiSpanProcessor();
|
|
29
|
+
const pluginSpanExporter = exports.pluginSpanExporter = new _PluginSpanExporter.PluginSpanExporter(); // This exporter sends spans to the plugin module.
|
|
30
|
+
// LOGS ----------------------------------------------------------------------------------------
|
|
31
|
+
const inMemoryDbLogExporter = exports.inMemoryDbLogExporter = new _InMemoryDbLogExporter.InMemoryDbLogExporter();
|
|
32
|
+
const multiLogExporter = exports.multiLogExporter = new _wrappers.EnablerMultiLogExporter();
|
|
33
|
+
const dynamicMultiLogProcessor = exports.dynamicMultiLogProcessor = new _dynamicMultiLogProcessor.DynamicMultiLogRecordProcessor();
|
|
34
|
+
const pluginLogExporter = exports.pluginLogExporter = new _PluginLogExporter.PluginLogExporter(); // This exporter sends logs to the plugin module.
|
|
35
|
+
// METRICS -------------------------------------------------------------------------------------
|
|
36
|
+
// Metrics follow a different pattern in OpenTelemetry
|
|
37
|
+
const inMemoryDbMetricExporter = exports.inMemoryDbMetricExporter = new _InMemoryDbMetricExporter.InMemoryDbMetricExporter();
|
|
38
|
+
const pluginMetricExporter = exports.pluginMetricExporter = new _PluginMetricExporter.PluginMetricExporter(); // This exporter sends metrics to the plugin module.
|
|
39
|
+
// Readers and their exporters cannot be grouped together in a MultiReader or similar construct
|
|
40
|
+
// due to differences in aggregation temporality and aggregation selection.
|
|
@@ -3,77 +3,96 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.getAgent = getAgent;
|
|
7
7
|
var _openai = _interopRequireDefault(require("openai"));
|
|
8
|
-
var _dotenv = _interopRequireDefault(require("dotenv"));
|
|
9
8
|
var _tools = require("./tools.cjs");
|
|
10
9
|
var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
|
|
11
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
|
|
13
|
-
let openai;
|
|
14
|
-
try {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
11
|
+
function getAgent(oasTlmConfig) {
|
|
12
|
+
let openai;
|
|
13
|
+
try {
|
|
14
|
+
if (!oasTlmConfig.ai.openAIKey) {
|
|
15
|
+
openai = null;
|
|
16
|
+
} else {
|
|
17
|
+
openai = new _openai.default({
|
|
18
|
+
apiKey: oasTlmConfig.ai.openAIKey ?? undefined,
|
|
19
|
+
dangerouslyAllowBrowser: true
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
} catch {
|
|
23
|
+
openai = null;
|
|
24
|
+
}
|
|
25
|
+
const messages = [{
|
|
26
|
+
role: "assistant",
|
|
27
|
+
content: "You are a helpful telemetry assistant. Only use the functions you have been provided with. If the question is not related to the functions, respond with 'I cannot help with that.'. If you need to call to other agents, do so using the tools provided."
|
|
28
|
+
}];
|
|
29
|
+
// Add extra context prompts if provided
|
|
30
|
+
if (oasTlmConfig.ai.extraContextPrompts) {
|
|
31
|
+
for (const prompt of oasTlmConfig.ai.extraContextPrompts) {
|
|
32
|
+
messages.push({
|
|
33
|
+
role: "system",
|
|
34
|
+
content: prompt
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function agent(userInput) {
|
|
39
|
+
if (!openai) {
|
|
40
|
+
_logger.default.error("OpenAI client is not initialized. Please check your OpenAI API key.");
|
|
41
|
+
return {
|
|
42
|
+
content: "OpenAI client is not initialized. Please check your OpenAI API key."
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
messages.push({
|
|
46
|
+
role: "user",
|
|
47
|
+
content: userInput
|
|
36
48
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
for (let i = 0; i < 5; i++) {
|
|
50
|
+
const response = await openai?.chat?.completions?.create?.({
|
|
51
|
+
model: oasTlmConfig.ai.openAIModel,
|
|
52
|
+
messages: messages,
|
|
53
|
+
tools: _tools.tools
|
|
54
|
+
});
|
|
55
|
+
const {
|
|
56
|
+
finish_reason,
|
|
57
|
+
message
|
|
58
|
+
} = response.choices[0];
|
|
59
|
+
if (finish_reason === "tool_calls" && message.tool_calls) {
|
|
60
|
+
_logger.default.debug("Tool calls detected:", message.tool_calls);
|
|
61
|
+
const results = [];
|
|
62
|
+
for (const toolCall of message.tool_calls) {
|
|
63
|
+
const functionName = toolCall.function.name;
|
|
64
|
+
const functionToCall = _tools.availableTools[functionName];
|
|
65
|
+
const functionArgs = JSON.parse(toolCall.function.arguments);
|
|
66
|
+
const functionArgsArr = Object.values(functionArgs);
|
|
67
|
+
// @ts-expect-error yes
|
|
68
|
+
// eslint-disable-next-line prefer-spread
|
|
69
|
+
const functionResponse = await functionToCall.apply(null, functionArgsArr);
|
|
70
|
+
results.push({
|
|
71
|
+
name: functionName,
|
|
72
|
+
response: functionResponse
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const resultMessage = results.map(({
|
|
76
|
+
name,
|
|
77
|
+
response
|
|
78
|
+
}) => `Result from "${name}":\n${JSON.stringify(response, null, 2)}`).join("\n\n");
|
|
79
|
+
messages.push({
|
|
80
|
+
role: "function",
|
|
81
|
+
name: "multiple_tool_calls",
|
|
82
|
+
content: resultMessage
|
|
55
83
|
});
|
|
84
|
+
} else if (finish_reason === "stop") {
|
|
85
|
+
messages.push(message);
|
|
86
|
+
return message;
|
|
56
87
|
}
|
|
57
|
-
const resultMessage = results.map(({
|
|
58
|
-
name,
|
|
59
|
-
response
|
|
60
|
-
}) => `Result from "${name}":\n${JSON.stringify(response, null, 2)}`).join("\n\n");
|
|
61
|
-
messages.push({
|
|
62
|
-
role: "function",
|
|
63
|
-
name: "multiple_tool_calls",
|
|
64
|
-
content: resultMessage
|
|
65
|
-
});
|
|
66
|
-
} else if (finish_reason === "stop") {
|
|
67
|
-
messages.push(message);
|
|
68
|
-
return message;
|
|
69
88
|
}
|
|
89
|
+
return {
|
|
90
|
+
content: "Se alcanzó el número máximo de iteraciones sin una respuesta adecuada. Intenta con una consulta más específica."
|
|
91
|
+
};
|
|
70
92
|
}
|
|
71
|
-
return {
|
|
72
|
-
|
|
93
|
+
return async function getAgentResponse(question) {
|
|
94
|
+
const response = await agent(question);
|
|
95
|
+
_logger.default.debug("Response from agent:", response);
|
|
96
|
+
return response.content;
|
|
73
97
|
};
|
|
74
|
-
}
|
|
75
|
-
async function getAgentResponse(question) {
|
|
76
|
-
const response = await agent(question);
|
|
77
|
-
_logger.default.debug("Response from agent:", response);
|
|
78
|
-
return response.content;
|
|
79
98
|
}
|
|
@@ -8,7 +8,7 @@ var _agent = require("./agent.cjs");
|
|
|
8
8
|
var _knownMicroservices = require("./knownMicroservices.cjs");
|
|
9
9
|
var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
const answerQuestion = async (req, res) => {
|
|
11
|
+
const answerQuestion = oasTlmConfig => async (req, res) => {
|
|
12
12
|
try {
|
|
13
13
|
const {
|
|
14
14
|
question
|
|
@@ -16,7 +16,8 @@ const answerQuestion = async (req, res) => {
|
|
|
16
16
|
if (!question) res.status(400).json({
|
|
17
17
|
error: 'Missing question'
|
|
18
18
|
});
|
|
19
|
-
const
|
|
19
|
+
const getAgentResponse = (0, _agent.getAgent)(oasTlmConfig);
|
|
20
|
+
const answer = await getAgentResponse(question);
|
|
20
21
|
res.json({
|
|
21
22
|
answer
|
|
22
23
|
});
|
|
@@ -28,7 +29,7 @@ const answerQuestion = async (req, res) => {
|
|
|
28
29
|
}
|
|
29
30
|
};
|
|
30
31
|
exports.answerQuestion = answerQuestion;
|
|
31
|
-
const setKnownMicroservicesHandler = (req, res) => {
|
|
32
|
+
const setKnownMicroservicesHandler = () => (req, res) => {
|
|
32
33
|
try {
|
|
33
34
|
const {
|
|
34
35
|
microservices
|
|
@@ -53,7 +54,7 @@ const setKnownMicroservicesHandler = (req, res) => {
|
|
|
53
54
|
}
|
|
54
55
|
};
|
|
55
56
|
exports.setKnownMicroservicesHandler = setKnownMicroservicesHandler;
|
|
56
|
-
const getKnownMicroservicesHandler = (req, res) => {
|
|
57
|
+
const getKnownMicroservicesHandler = () => (req, res) => {
|
|
57
58
|
try {
|
|
58
59
|
const microservices = (0, _knownMicroservices.getKnownMicroservices)();
|
|
59
60
|
res.json({
|
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.getAIRoutes = void 0;
|
|
7
7
|
var _express = require("express");
|
|
8
8
|
var _aiController = require("./aiController.cjs");
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
const getAIRoutes = oasTlmConfig => {
|
|
10
|
+
const router = (0, _express.Router)();
|
|
11
|
+
router.post('/chat', (0, _aiController.answerQuestion)(oasTlmConfig));
|
|
12
|
+
router.post('/microservices', (0, _aiController.setKnownMicroservicesHandler)());
|
|
13
|
+
router.get('/microservices', (0, _aiController.getKnownMicroservicesHandler)());
|
|
14
|
+
return router;
|
|
15
|
+
};
|
|
16
|
+
exports.getAIRoutes = getAIRoutes;
|
|
@@ -5,16 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.tools = exports.availableTools = void 0;
|
|
7
7
|
var _axios = _interopRequireDefault(require("axios"));
|
|
8
|
-
var _config = require("../config.cjs");
|
|
9
8
|
var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
|
|
10
9
|
var _knownMicroservices = require("./knownMicroservices.cjs");
|
|
10
|
+
var _telemetryRegistry = require("../telemetry/telemetryRegistry.cjs");
|
|
11
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
12
|
const getTraces = async searchInput => {
|
|
13
13
|
_logger.default.debug("getTraces called with searchInput:", searchInput);
|
|
14
14
|
try {
|
|
15
15
|
const search = searchInput || {};
|
|
16
16
|
const traces = await new Promise((resolve, reject) => {
|
|
17
|
-
|
|
17
|
+
_telemetryRegistry.inMemoryDbSpanExporter.find(search, (err, docs) => {
|
|
18
18
|
if (err) reject(err);else resolve(docs);
|
|
19
19
|
});
|
|
20
20
|
});
|
|
@@ -47,7 +47,7 @@ const getLogs = async (startDate, endDate) => {
|
|
|
47
47
|
}
|
|
48
48
|
const logs = [];
|
|
49
49
|
await new Promise((resolve, reject) => {
|
|
50
|
-
|
|
50
|
+
_telemetryRegistry.inMemoryDbLogExporter.find(nedbQuery, null, (err, docs) => {
|
|
51
51
|
if (err) {
|
|
52
52
|
reject(err);
|
|
53
53
|
} else {
|
|
@@ -71,7 +71,7 @@ const getMetrics = async searchInput => {
|
|
|
71
71
|
try {
|
|
72
72
|
const search = searchInput || {};
|
|
73
73
|
const metrics = await new Promise((resolve, reject) => {
|
|
74
|
-
|
|
74
|
+
_telemetryRegistry.inMemoryDbMetricExporter.find(search, (err, docs) => {
|
|
75
75
|
if (err) reject(err);else resolve(docs || []);
|
|
76
76
|
});
|
|
77
77
|
});
|
|
@@ -96,21 +96,28 @@ const getCurrentTimestampInEpoch = () => {
|
|
|
96
96
|
};
|
|
97
97
|
const startTelemetry = () => {
|
|
98
98
|
_logger.default.debug("Starting telemetry...");
|
|
99
|
-
|
|
99
|
+
_telemetryRegistry.inMemoryDbSpanExporter.enable();
|
|
100
|
+
_telemetryRegistry.inMemoryDbLogExporter.enable();
|
|
101
|
+
_telemetryRegistry.inMemoryDbMetricExporter.enable();
|
|
100
102
|
};
|
|
101
103
|
const stopTelemetry = () => {
|
|
102
104
|
_logger.default.debug("Stopping telemetry...");
|
|
103
|
-
|
|
105
|
+
_telemetryRegistry.inMemoryDbSpanExporter.disable();
|
|
106
|
+
_telemetryRegistry.inMemoryDbLogExporter.disable();
|
|
107
|
+
_telemetryRegistry.inMemoryDbMetricExporter.disable();
|
|
104
108
|
};
|
|
105
109
|
const resetTelemetry = () => {
|
|
106
110
|
_logger.default.debug("Resetting telemetry...");
|
|
107
|
-
|
|
111
|
+
_telemetryRegistry.inMemoryDbSpanExporter.reset();
|
|
112
|
+
_telemetryRegistry.inMemoryDbLogExporter.reset();
|
|
113
|
+
_telemetryRegistry.inMemoryDbMetricExporter.reset();
|
|
108
114
|
};
|
|
109
115
|
const getTelemetryStatus = () => {
|
|
110
116
|
_logger.default.debug("Getting telemetry status...");
|
|
111
|
-
const isRunning = _config.globalOasTlmConfig.dynamicSpanExporter.exporter.isRunning() || false;
|
|
112
117
|
return {
|
|
113
|
-
|
|
118
|
+
spansEnabled: _telemetryRegistry.inMemoryDbSpanExporter.isEnabled(),
|
|
119
|
+
logsEnabled: _telemetryRegistry.inMemoryDbLogExporter.isEnabled(),
|
|
120
|
+
metricsEnabled: _telemetryRegistry.inMemoryDbMetricExporter.isEnabled()
|
|
114
121
|
};
|
|
115
122
|
};
|
|
116
123
|
const talkToExternalMicroserviceAgent = async (message, microserviceId) => {
|
|
@@ -3,26 +3,25 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
var _config = require("../config.cjs");
|
|
6
|
+
exports.getLogout = exports.getLogin = exports.getCheck = void 0;
|
|
8
7
|
var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
|
|
9
8
|
var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
|
|
10
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
const
|
|
10
|
+
const getLogin = oasTlmConfig => (req, res) => {
|
|
12
11
|
try {
|
|
13
12
|
const {
|
|
14
13
|
password
|
|
15
14
|
} = req.body;
|
|
16
|
-
if (password ===
|
|
15
|
+
if (password === oasTlmConfig.auth.password) {
|
|
17
16
|
const options = {
|
|
18
|
-
maxAge:
|
|
17
|
+
maxAge: oasTlmConfig.auth.apiKeyMaxAge,
|
|
19
18
|
httpOnly: true,
|
|
20
19
|
secure: true,
|
|
21
20
|
signed: false
|
|
22
21
|
};
|
|
23
22
|
const apiKey = _jsonwebtoken.default.sign({
|
|
24
|
-
password:
|
|
25
|
-
},
|
|
23
|
+
password: oasTlmConfig.auth.password
|
|
24
|
+
}, oasTlmConfig.auth.jwtSecret);
|
|
26
25
|
res.cookie('apiKey', apiKey, options);
|
|
27
26
|
res.status(200).json({
|
|
28
27
|
valid: true,
|
|
@@ -42,13 +41,13 @@ const login = (req, res) => {
|
|
|
42
41
|
});
|
|
43
42
|
}
|
|
44
43
|
};
|
|
45
|
-
exports.
|
|
46
|
-
const
|
|
44
|
+
exports.getLogin = getLogin;
|
|
45
|
+
const getLogout = oasTlmConfig => (req, res) => {
|
|
47
46
|
res.clearCookie('apiKey');
|
|
48
|
-
res.redirect(
|
|
47
|
+
res.redirect(oasTlmConfig.general.baseUrl + oasTlmConfig.general.uiPath + '/login');
|
|
49
48
|
};
|
|
50
|
-
exports.
|
|
51
|
-
const
|
|
49
|
+
exports.getLogout = getLogout;
|
|
50
|
+
const getCheck = oasTlmConfig => (req, res) => {
|
|
52
51
|
if (!req.cookies.apiKey) {
|
|
53
52
|
res.status(200).json({
|
|
54
53
|
valid: false,
|
|
@@ -56,8 +55,8 @@ const check = (req, res) => {
|
|
|
56
55
|
});
|
|
57
56
|
return;
|
|
58
57
|
}
|
|
59
|
-
const decoded = _jsonwebtoken.default.verify(req.cookies.apiKey,
|
|
60
|
-
if (decoded.password ===
|
|
58
|
+
const decoded = _jsonwebtoken.default.verify(req.cookies.apiKey, oasTlmConfig.auth.jwtSecret);
|
|
59
|
+
if (decoded.password === oasTlmConfig.auth.password) {
|
|
61
60
|
res.status(200).json({
|
|
62
61
|
valid: true,
|
|
63
62
|
message: 'API Key is valid'
|
|
@@ -69,4 +68,4 @@ const check = (req, res) => {
|
|
|
69
68
|
message: 'Invalid API Key'
|
|
70
69
|
});
|
|
71
70
|
};
|
|
72
|
-
exports.
|
|
71
|
+
exports.getCheck = getCheck;
|
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
var _config = require("../config.cjs");
|
|
6
|
+
exports.getAuthMiddleware = getAuthMiddleware;
|
|
8
7
|
var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
|
|
9
8
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
function getAuthMiddleware(oasTlmConfig) {
|
|
10
|
+
return function authMiddleware(req, res, next) {
|
|
11
|
+
const apiKey = req.cookies.apiKey;
|
|
12
|
+
if (apiKey) {
|
|
13
|
+
const decoded = _jsonwebtoken.default.verify(apiKey, oasTlmConfig.auth.jwtSecret);
|
|
14
|
+
if (decoded.password === oasTlmConfig.auth.password) {
|
|
15
|
+
return next();
|
|
16
|
+
}
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
res.status(401).redirect(oasTlmConfig.general.baseUrl + oasTlmConfig.general.uiPath + '/login');
|
|
19
|
+
};
|
|
19
20
|
}
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.getAuthRoutes = void 0;
|
|
7
7
|
var _express = require("express");
|
|
8
8
|
var _authController = require("./authController.cjs");
|
|
9
|
-
const
|
|
10
|
-
router
|
|
11
|
-
router.
|
|
12
|
-
router.get('/
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
const getAuthRoutes = oasTlmConfig => {
|
|
10
|
+
const router = (0, _express.Router)();
|
|
11
|
+
router.post('/login', (0, _authController.getLogin)(oasTlmConfig));
|
|
12
|
+
router.get('/logout', (0, _authController.getLogout)(oasTlmConfig));
|
|
13
|
+
router.get('/check', (0, _authController.getCheck)(oasTlmConfig));
|
|
14
|
+
return router;
|
|
15
|
+
};
|
|
16
|
+
exports.getAuthRoutes = getAuthRoutes;
|