@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.
Files changed (154) hide show
  1. package/.env.example +50 -17
  2. package/README.md +242 -240
  3. package/dist/cjs/config/bootConfig.cjs +18 -0
  4. package/dist/cjs/config/config.cjs +145 -0
  5. package/dist/cjs/config/config.types.cjs +5 -0
  6. package/dist/cjs/index.cjs +19 -25
  7. package/dist/cjs/{tlmRoutes.cjs → routesManager.cjs} +28 -21
  8. package/dist/cjs/{exporters/InMemoryLogRecordExporter.cjs → telemetry/custom-implementations/exporters/InMemoryDbLogExporter.cjs} +42 -19
  9. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.cjs +97 -0
  10. package/dist/cjs/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.cjs +118 -0
  11. package/dist/cjs/telemetry/custom-implementations/exporters/PluginLogExporter.cjs +52 -0
  12. package/dist/cjs/telemetry/custom-implementations/exporters/PluginMetricExporter.cjs +53 -0
  13. package/dist/cjs/telemetry/custom-implementations/exporters/PluginSpanExporter.cjs +69 -0
  14. package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.cjs +70 -0
  15. package/dist/cjs/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.cjs +70 -0
  16. package/dist/cjs/{utils → telemetry/custom-implementations/utils}/circular.cjs +39 -49
  17. package/dist/cjs/telemetry/custom-implementations/wrappers.cjs +175 -0
  18. package/dist/cjs/telemetry/initializeTelemetry.cjs +74 -0
  19. package/dist/cjs/telemetry/telemetryConfigurator.cjs +84 -0
  20. package/dist/cjs/telemetry/telemetryRegistry.cjs +40 -0
  21. package/dist/cjs/tlm-ai/agent.cjs +82 -63
  22. package/dist/cjs/tlm-ai/aiController.cjs +5 -4
  23. package/dist/cjs/tlm-ai/aiRoutes.cjs +9 -6
  24. package/dist/cjs/tlm-ai/tools.cjs +16 -9
  25. package/dist/cjs/tlm-auth/authController.cjs +14 -15
  26. package/dist/cjs/tlm-auth/authMiddleware.cjs +11 -10
  27. package/dist/cjs/tlm-auth/authRoutes.cjs +9 -7
  28. package/dist/cjs/tlm-log/logController.cjs +45 -18
  29. package/dist/cjs/tlm-log/logRoutes.cjs +16 -11
  30. package/dist/cjs/tlm-metric/metricsController.cjs +37 -12
  31. package/dist/cjs/tlm-metric/metricsRoutes.cjs +16 -11
  32. package/dist/cjs/tlm-plugin/pluginController.cjs +40 -19
  33. package/dist/cjs/tlm-plugin/pluginRoutes.cjs +8 -6
  34. package/dist/cjs/tlm-plugin/pluginService.cjs +25 -0
  35. package/dist/cjs/tlm-trace/traceController.cjs +54 -45
  36. package/dist/cjs/tlm-trace/traceRoutes.cjs +16 -11
  37. package/dist/cjs/tlm-ui/uiRoutes.cjs +26 -20
  38. package/dist/cjs/tlm-util/utilController.cjs +8 -9
  39. package/dist/cjs/tlm-util/utilRoutes.cjs +22 -19
  40. package/dist/cjs/types/index.cjs +0 -1
  41. package/dist/cjs/utils/logger.cjs +3 -5
  42. package/dist/cjs/utils/regexUtils.cjs +27 -0
  43. package/dist/esm/config/bootConfig.js +11 -0
  44. package/dist/esm/config/config.js +126 -0
  45. package/dist/esm/index.js +18 -29
  46. package/dist/esm/{tlmRoutes.js → routesManager.js} +27 -22
  47. package/dist/esm/{exporters/InMemoryLogRecordExporter.js → telemetry/custom-implementations/exporters/InMemoryDbLogExporter.js} +31 -17
  48. package/dist/esm/{exporters/InMemoryDBMetricsExporter.js → telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.js} +31 -17
  49. package/dist/esm/telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.js +105 -0
  50. package/dist/esm/telemetry/custom-implementations/exporters/PluginLogExporter.js +44 -0
  51. package/dist/esm/telemetry/custom-implementations/exporters/PluginMetricExporter.js +43 -0
  52. package/dist/esm/telemetry/custom-implementations/exporters/PluginSpanExporter.js +61 -0
  53. package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.js +64 -0
  54. package/dist/esm/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.js +64 -0
  55. package/dist/esm/telemetry/custom-implementations/utils/circular.js +76 -0
  56. package/dist/esm/telemetry/custom-implementations/wrappers.js +163 -0
  57. package/dist/esm/telemetry/initializeTelemetry.js +71 -0
  58. package/dist/esm/telemetry/telemetryConfigurator.js +74 -0
  59. package/dist/esm/telemetry/telemetryRegistry.js +34 -0
  60. package/dist/esm/tlm-ai/agent.js +77 -59
  61. package/dist/esm/tlm-ai/aiController.js +5 -4
  62. package/dist/esm/tlm-ai/aiRoutes.js +7 -5
  63. package/dist/esm/tlm-ai/tools.js +18 -9
  64. package/dist/esm/tlm-auth/authController.js +9 -10
  65. package/dist/esm/tlm-auth/authMiddleware.js +10 -9
  66. package/dist/esm/tlm-auth/authRoutes.js +8 -6
  67. package/dist/esm/tlm-log/logController.js +36 -16
  68. package/dist/esm/tlm-log/logRoutes.js +15 -11
  69. package/dist/esm/tlm-metric/metricsController.js +29 -10
  70. package/dist/esm/tlm-metric/metricsRoutes.js +15 -11
  71. package/dist/esm/tlm-plugin/pluginController.js +40 -19
  72. package/dist/esm/tlm-plugin/pluginRoutes.js +6 -5
  73. package/dist/esm/tlm-plugin/pluginService.js +19 -0
  74. package/dist/esm/tlm-trace/traceController.js +40 -35
  75. package/dist/esm/tlm-trace/traceRoutes.js +15 -11
  76. package/dist/esm/tlm-ui/uiRoutes.js +24 -19
  77. package/dist/esm/tlm-util/utilController.js +8 -9
  78. package/dist/esm/tlm-util/utilRoutes.js +17 -15
  79. package/dist/esm/types/index.js +0 -1
  80. package/dist/esm/utils/logger.js +3 -4
  81. package/dist/esm/utils/regexUtils.js +23 -0
  82. package/dist/types/config/bootConfig.d.ts +5 -0
  83. package/dist/types/config/config.d.ts +253 -0
  84. package/dist/types/config/config.types.d.ts +34 -0
  85. package/dist/types/index.d.ts +5 -4
  86. package/dist/types/routesManager.d.ts +3 -0
  87. package/dist/types/{exporters/InMemoryLogRecordExporter.d.ts → telemetry/custom-implementations/exporters/InMemoryDbLogExporter.d.ts} +6 -6
  88. package/dist/types/{exporters/InMemoryDBMetricsExporter.d.ts → telemetry/custom-implementations/exporters/InMemoryDbMetricExporter.d.ts} +7 -7
  89. package/dist/types/{exporters/InMemoryDbExporter.d.ts → telemetry/custom-implementations/exporters/InMemoryDbSpanExporter.d.ts} +9 -9
  90. package/dist/types/telemetry/custom-implementations/exporters/PluginLogExporter.d.ts +8 -0
  91. package/dist/types/telemetry/custom-implementations/exporters/PluginMetricExporter.d.ts +12 -0
  92. package/dist/types/telemetry/custom-implementations/exporters/PluginSpanExporter.d.ts +14 -0
  93. package/dist/types/telemetry/custom-implementations/processors/dynamicMultiLogProcessor.d.ts +32 -0
  94. package/dist/types/telemetry/custom-implementations/processors/dynamicMultiSpanProcessor.d.ts +34 -0
  95. package/dist/types/telemetry/custom-implementations/utils/circular.d.ts +27 -0
  96. package/dist/types/telemetry/custom-implementations/wrappers.d.ts +52 -0
  97. package/dist/types/telemetry/initializeTelemetry.d.ts +1 -0
  98. package/dist/types/telemetry/telemetryConfigurator.d.ts +2 -0
  99. package/dist/types/telemetry/telemetryRegistry.d.ts +20 -0
  100. package/dist/types/tlm-ai/agent.d.ts +2 -1
  101. package/dist/types/tlm-ai/aiController.d.ts +4 -3
  102. package/dist/types/tlm-ai/aiRoutes.d.ts +2 -2
  103. package/dist/types/tlm-ai/tools.d.ts +3 -1
  104. package/dist/types/tlm-auth/authController.d.ts +4 -3
  105. package/dist/types/tlm-auth/authMiddleware.d.ts +2 -1
  106. package/dist/types/tlm-auth/authRoutes.d.ts +2 -2
  107. package/dist/types/tlm-log/logController.d.ts +1 -0
  108. package/dist/types/tlm-log/logRoutes.d.ts +2 -2
  109. package/dist/types/tlm-metric/metricsController.d.ts +1 -0
  110. package/dist/types/tlm-metric/metricsRoutes.d.ts +2 -2
  111. package/dist/types/tlm-plugin/pluginRoutes.d.ts +1 -2
  112. package/dist/types/tlm-plugin/pluginService.d.ts +9 -0
  113. package/dist/types/tlm-trace/traceController.d.ts +7 -6
  114. package/dist/types/tlm-trace/traceRoutes.d.ts +2 -2
  115. package/dist/types/tlm-ui/uiRoutes.d.ts +1 -2
  116. package/dist/types/tlm-util/utilController.d.ts +2 -1
  117. package/dist/types/tlm-util/utilRoutes.d.ts +2 -2
  118. package/dist/types/types/index.d.ts +7 -46
  119. package/dist/types/utils/regexUtils.d.ts +1 -0
  120. package/dist/ui/assets/index-D9HsRlaQ.js +437 -0
  121. package/dist/ui/assets/index-DEyIcKBi.css +1 -0
  122. package/dist/ui/index.html +3 -3
  123. package/dist/ui/oas-tlm.svg +185 -0
  124. package/package.json +12 -7
  125. package/dist/cjs/config.cjs +0 -31
  126. package/dist/cjs/exporters/InMemoryDBMetricsExporter.cjs +0 -74
  127. package/dist/cjs/exporters/InMemoryDbExporter.cjs +0 -102
  128. package/dist/cjs/exporters/consoleExporter.cjs +0 -47
  129. package/dist/cjs/exporters/dynamicExporter.cjs +0 -57
  130. package/dist/cjs/instrumentation/index.cjs +0 -28
  131. package/dist/cjs/instrumentation/logs.cjs +0 -46
  132. package/dist/cjs/instrumentation/metrics.cjs +0 -27
  133. package/dist/cjs/instrumentation/traces.cjs +0 -19
  134. package/dist/esm/config.js +0 -20
  135. package/dist/esm/exporters/InMemoryDbExporter.js +0 -102
  136. package/dist/esm/exporters/consoleExporter.js +0 -38
  137. package/dist/esm/exporters/dynamicExporter.js +0 -50
  138. package/dist/esm/instrumentation/index.js +0 -26
  139. package/dist/esm/instrumentation/logs.js +0 -34
  140. package/dist/esm/instrumentation/metrics.js +0 -18
  141. package/dist/esm/instrumentation/traces.js +0 -12
  142. package/dist/esm/utils/circular.js +0 -84
  143. package/dist/types/config.d.ts +0 -6
  144. package/dist/types/exporters/consoleExporter.d.ts +0 -13
  145. package/dist/types/exporters/dynamicExporter.d.ts +0 -25
  146. package/dist/types/instrumentation/logs.d.ts +0 -1
  147. package/dist/types/instrumentation/metrics.d.ts +0 -1
  148. package/dist/types/instrumentation/traces.d.ts +0 -1
  149. package/dist/types/tlmRoutes.d.ts +0 -2
  150. package/dist/types/utils/circular.d.ts +0 -31
  151. package/dist/ui/assets/index-BNhZBPi2.css +0 -1
  152. package/dist/ui/assets/index-DxGAMrAl.js +0 -401
  153. package/dist/ui/vite.svg +0 -1
  154. /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.getAgentResponse = getAgentResponse;
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
- _dotenv.default.config();
13
- let openai;
14
- try {
15
- openai = new _openai.default({
16
- apiKey: process.env.OASTLM_AI_OPENAI_API_KEY,
17
- dangerouslyAllowBrowser: true
18
- });
19
- } catch {
20
- openai = null;
21
- }
22
- const messages = [{
23
- role: "assistant",
24
- 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."
25
- }];
26
- async function agent(userInput) {
27
- messages.push({
28
- role: "user",
29
- content: userInput
30
- });
31
- for (let i = 0; i < 5; i++) {
32
- const response = await openai?.chat?.completions?.create?.({
33
- model: process.env.OASTLM_AI_OPENAI_MODEL_NAME || "gpt-4o-mini",
34
- messages: messages,
35
- tools: _tools.tools
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
- const {
38
- finish_reason,
39
- message
40
- } = response.choices[0];
41
- if (finish_reason === "tool_calls" && message.tool_calls) {
42
- _logger.default.debug("Tool calls detected:", message.tool_calls);
43
- const results = [];
44
- for (const toolCall of message.tool_calls) {
45
- const functionName = toolCall.function.name;
46
- const functionToCall = _tools.availableTools[functionName];
47
- const functionArgs = JSON.parse(toolCall.function.arguments);
48
- const functionArgsArr = Object.values(functionArgs);
49
- // @ts-expect-error yes
50
- // eslint-disable-next-line prefer-spread
51
- const functionResponse = await functionToCall.apply(null, functionArgsArr);
52
- results.push({
53
- name: functionName,
54
- response: functionResponse
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
- content: "Se alcanzó el número máximo de iteraciones sin una respuesta adecuada. Intenta con una consulta más específica."
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 answer = await (0, _agent.getAgentResponse)(question);
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.default = exports.aiRoutes = void 0;
6
+ exports.getAIRoutes = void 0;
7
7
  var _express = require("express");
8
8
  var _aiController = require("./aiController.cjs");
9
- const aiRoutes = exports.aiRoutes = (0, _express.Router)();
10
- aiRoutes.post('/chat', _aiController.answerQuestion);
11
- aiRoutes.post('/microservices', _aiController.setKnownMicroservicesHandler); // New route for configuring microservices
12
- aiRoutes.get('/microservices', _aiController.getKnownMicroservicesHandler); // Route to retrieve the list of known microservices
13
- var _default = exports.default = aiRoutes;
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
- _config.globalOasTlmConfig.dynamicSpanExporter.exporter.find(search, (err, docs) => {
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
- _config.globalOasTlmConfig.logExporter.find(nedbQuery, null, (err, docs) => {
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
- _config.globalOasTlmConfig.metricsExporter.find(search, (err, docs) => {
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
- _config.globalOasTlmConfig.dynamicSpanExporter.exporter.start();
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
- _config.globalOasTlmConfig.dynamicSpanExporter.exporter.stop();
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
- _config.globalOasTlmConfig.dynamicSpanExporter.exporter.reset();
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
- active: isRunning
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.logout = exports.login = exports.check = void 0;
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 login = (req, res) => {
10
+ const getLogin = oasTlmConfig => (req, res) => {
12
11
  try {
13
12
  const {
14
13
  password
15
14
  } = req.body;
16
- if (password === _config.globalOasTlmConfig.password) {
15
+ if (password === oasTlmConfig.auth.password) {
17
16
  const options = {
18
- maxAge: _config.globalOasTlmConfig.apiKeyMaxAge,
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: _config.globalOasTlmConfig.password
25
- }, _config.globalOasTlmConfig.jwtSecret);
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.login = login;
46
- const logout = (req, res) => {
44
+ exports.getLogin = getLogin;
45
+ const getLogout = oasTlmConfig => (req, res) => {
47
46
  res.clearCookie('apiKey');
48
- res.redirect(_config.globalOasTlmConfig.baseURL + '/login');
47
+ res.redirect(oasTlmConfig.general.baseUrl + oasTlmConfig.general.uiPath + '/login');
49
48
  };
50
- exports.logout = logout;
51
- const check = (req, res) => {
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, _config.globalOasTlmConfig.jwtSecret);
60
- if (decoded.password === _config.globalOasTlmConfig.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.check = check;
71
+ exports.getCheck = getCheck;
@@ -3,17 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.authMiddleware = authMiddleware;
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 authMiddleware(req, res, next) {
11
- const apiKey = req.cookies.apiKey;
12
- if (apiKey) {
13
- const decoded = _jsonwebtoken.default.verify(apiKey, _config.globalOasTlmConfig.jwtSecret);
14
- if (decoded.password === _config.globalOasTlmConfig.password) {
15
- return next();
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
- res.status(401).redirect(_config.globalOasTlmConfig.baseURL + '/login');
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.default = void 0;
6
+ exports.getAuthRoutes = void 0;
7
7
  var _express = require("express");
8
8
  var _authController = require("./authController.cjs");
9
- const router = (0, _express.Router)();
10
- router.post('/login', _authController.login);
11
- router.get('/logout', _authController.logout);
12
- router.get('/check', _authController.check);
13
- var _default = exports.default = router;
14
- module.exports = exports.default;
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;