@oas-tools/oas-telemetry 0.6.2 → 0.7.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.
Files changed (125) hide show
  1. package/README.md +442 -442
  2. package/dist/{config.cjs → cjs/config.cjs} +6 -7
  3. package/dist/{exporters → cjs/exporters}/InMemoryDBMetricsExporter.cjs +5 -40
  4. package/dist/cjs/exporters/InMemoryDbExporter.cjs +87 -0
  5. package/dist/cjs/exporters/InMemoryLogRecordExporter.cjs +110 -0
  6. package/dist/{exporters → cjs/exporters}/consoleExporter.cjs +2 -7
  7. package/dist/{exporters → cjs/exporters}/dynamicExporter.cjs +12 -19
  8. package/dist/cjs/index.cjs +43 -0
  9. package/dist/cjs/instrumentation/index.cjs +28 -0
  10. package/dist/cjs/instrumentation/logs.cjs +46 -0
  11. package/dist/cjs/instrumentation/metrics.cjs +27 -0
  12. package/dist/cjs/instrumentation/traces.cjs +19 -0
  13. package/dist/cjs/tlm-ai/agent.cjs +79 -0
  14. package/dist/cjs/tlm-ai/aiController.cjs +69 -0
  15. package/dist/cjs/tlm-ai/aiRoutes.cjs +13 -0
  16. package/dist/cjs/tlm-ai/knownMicroservices.cjs +13 -0
  17. package/dist/cjs/tlm-ai/tools.cjs +504 -0
  18. package/dist/{routes/authRoutes.cjs → cjs/tlm-auth/authController.cjs} +21 -28
  19. package/dist/{middleware → cjs/tlm-auth}/authMiddleware.cjs +1 -1
  20. package/dist/cjs/tlm-auth/authRoutes.cjs +14 -0
  21. package/dist/cjs/tlm-log/logController.cjs +55 -0
  22. package/dist/cjs/tlm-log/logRoutes.cjs +13 -0
  23. package/dist/{routes → cjs/tlm-metric}/metricsRoutes.cjs +1 -2
  24. package/dist/{controllers → cjs/tlm-plugin}/pluginController.cjs +31 -41
  25. package/dist/cjs/tlm-plugin/pluginRoutes.cjs +13 -0
  26. package/dist/{controllers/telemetryController.cjs → cjs/tlm-trace/traceController.cjs} +8 -19
  27. package/dist/cjs/tlm-trace/traceRoutes.cjs +17 -0
  28. package/dist/cjs/tlm-ui/uiRoutes.cjs +31 -0
  29. package/dist/cjs/tlm-util/utilController.cjs +63 -0
  30. package/dist/cjs/tlm-util/utilRoutes.cjs +12 -0
  31. package/dist/cjs/tlmRoutes.cjs +79 -0
  32. package/dist/cjs/types/index.cjs +8 -0
  33. package/dist/cjs/utils/circular.cjs +90 -0
  34. package/dist/cjs/utils/logger.cjs +28 -0
  35. package/{src → dist/esm}/config.js +20 -23
  36. package/{src → dist/esm}/exporters/InMemoryDBMetricsExporter.js +57 -111
  37. package/dist/esm/exporters/InMemoryDbExporter.js +87 -0
  38. package/dist/esm/exporters/InMemoryLogRecordExporter.js +95 -0
  39. package/{src → dist/esm}/exporters/consoleExporter.js +38 -47
  40. package/{src → dist/esm}/exporters/dynamicExporter.js +50 -62
  41. package/dist/esm/index.js +39 -0
  42. package/dist/esm/instrumentation/index.js +26 -0
  43. package/dist/esm/instrumentation/logs.js +34 -0
  44. package/dist/esm/instrumentation/metrics.js +18 -0
  45. package/dist/esm/instrumentation/traces.js +12 -0
  46. package/dist/esm/tlm-ai/agent.js +68 -0
  47. package/dist/esm/tlm-ai/aiController.js +45 -0
  48. package/dist/esm/tlm-ai/aiRoutes.js +7 -0
  49. package/dist/esm/tlm-ai/knownMicroservices.js +5 -0
  50. package/dist/esm/tlm-ai/tools.js +490 -0
  51. package/dist/esm/tlm-auth/authController.js +41 -0
  52. package/{src/middleware → dist/esm/tlm-auth}/authMiddleware.js +12 -14
  53. package/dist/esm/tlm-auth/authRoutes.js +7 -0
  54. package/dist/esm/tlm-log/logController.js +36 -0
  55. package/dist/esm/tlm-log/logRoutes.js +7 -0
  56. package/{src/controllers → dist/esm/tlm-metric}/metricsController.js +28 -30
  57. package/{src/routes → dist/esm/tlm-metric}/metricsRoutes.js +8 -15
  58. package/{src/controllers → dist/esm/tlm-plugin}/pluginController.js +103 -115
  59. package/dist/esm/tlm-plugin/pluginRoutes.js +7 -0
  60. package/dist/esm/tlm-trace/traceController.js +54 -0
  61. package/dist/esm/tlm-trace/traceRoutes.js +11 -0
  62. package/dist/esm/tlm-ui/uiRoutes.js +23 -0
  63. package/dist/esm/tlm-util/utilController.js +57 -0
  64. package/dist/esm/tlm-util/utilRoutes.js +6 -0
  65. package/dist/esm/tlmRoutes.js +72 -0
  66. package/dist/esm/types/index.js +4 -0
  67. package/dist/esm/utils/circular.js +84 -0
  68. package/dist/esm/utils/logger.js +19 -0
  69. package/dist/types/config.d.ts +6 -0
  70. package/dist/types/exporters/InMemoryDBMetricsExporter.d.ts +15 -0
  71. package/dist/types/exporters/InMemoryDbExporter.d.ts +24 -0
  72. package/dist/types/exporters/InMemoryLogRecordExporter.d.ts +27 -0
  73. package/dist/types/exporters/consoleExporter.d.ts +13 -0
  74. package/dist/types/exporters/dynamicExporter.d.ts +25 -0
  75. package/dist/types/index.d.ts +8 -0
  76. package/dist/types/instrumentation/index.d.ts +1 -0
  77. package/dist/types/instrumentation/logs.d.ts +1 -0
  78. package/dist/types/instrumentation/metrics.d.ts +1 -0
  79. package/dist/types/instrumentation/traces.d.ts +1 -0
  80. package/dist/types/tlm-ai/agent.d.ts +1 -0
  81. package/dist/types/tlm-ai/aiController.d.ts +4 -0
  82. package/dist/types/tlm-ai/aiRoutes.d.ts +2 -0
  83. package/dist/types/tlm-ai/knownMicroservices.d.ts +6 -0
  84. package/dist/types/tlm-ai/tools.d.ts +45 -0
  85. package/dist/types/tlm-auth/authController.d.ts +4 -0
  86. package/dist/types/tlm-auth/authMiddleware.d.ts +2 -0
  87. package/dist/types/tlm-auth/authRoutes.d.ts +2 -0
  88. package/dist/types/tlm-log/logController.d.ts +4 -0
  89. package/dist/types/tlm-log/logRoutes.d.ts +2 -0
  90. package/dist/types/tlm-metric/metricsController.d.ts +4 -0
  91. package/dist/types/tlm-metric/metricsRoutes.d.ts +2 -0
  92. package/dist/types/tlm-plugin/pluginController.d.ts +3 -0
  93. package/dist/types/tlm-plugin/pluginRoutes.d.ts +2 -0
  94. package/dist/types/tlm-trace/traceController.d.ts +7 -0
  95. package/dist/types/tlm-trace/traceRoutes.d.ts +2 -0
  96. package/dist/types/tlm-ui/uiRoutes.d.ts +2 -0
  97. package/dist/types/tlm-util/utilController.d.ts +3 -0
  98. package/dist/types/tlm-util/utilRoutes.d.ts +2 -0
  99. package/dist/types/tlmRoutes.d.ts +2 -0
  100. package/dist/types/types/index.d.ts +56 -0
  101. package/dist/types/utils/circular.d.ts +31 -0
  102. package/dist/types/utils/logger.d.ts +9 -0
  103. package/dist/ui/assets/index-BNhZBPi2.css +1 -0
  104. package/dist/ui/assets/index-DxGAMrAl.js +401 -0
  105. package/dist/ui/index.html +14 -0
  106. package/dist/ui/vite.svg +1 -0
  107. package/package.json +80 -77
  108. package/dist/controllers/uiController.cjs +0 -78
  109. package/dist/exporters/InMemoryDbExporter.cjs +0 -178
  110. package/dist/index.cjs +0 -110
  111. package/dist/openTelemetry.cjs +0 -58
  112. package/dist/routes/telemetryRoutes.cjs +0 -31
  113. package/dist/services/uiService.cjs +0 -1520
  114. package/dist/systemMetrics.cjs +0 -97
  115. package/src/controllers/telemetryController.js +0 -69
  116. package/src/controllers/uiController.js +0 -69
  117. package/src/dev/ui/login.html +0 -32
  118. package/src/exporters/InMemoryDbExporter.js +0 -181
  119. package/src/index.js +0 -121
  120. package/src/openTelemetry.js +0 -58
  121. package/src/routes/authRoutes.js +0 -53
  122. package/src/routes/telemetryRoutes.js +0 -38
  123. package/src/services/uiService.js +0 -1520
  124. package/src/systemMetrics.js +0 -102
  125. /package/dist/{controllers → cjs/tlm-metric}/metricsController.cjs +0 -0
@@ -3,77 +3,70 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.logout = exports.login = exports.check = void 0;
7
7
  var _config = require("../config.cjs");
8
- var _express = require("express");
9
- var _cookie = require("cookie");
10
- var _uiService = _interopRequireDefault(require("../services/uiService.cjs"));
11
8
  var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
- const router = (0, _express.Router)();
14
- router.post('/login', (req, res) => {
9
+ var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ const login = (req, res) => {
15
12
  try {
16
13
  const {
17
14
  password
18
15
  } = req.body;
19
16
  if (password === _config.globalOasTlmConfig.password) {
20
- let options = {
17
+ const options = {
21
18
  maxAge: _config.globalOasTlmConfig.apiKeyMaxAge,
22
19
  httpOnly: true,
23
- // The cookie only accessible by the web server
24
20
  secure: true,
25
- // Only sends cookie over https
26
- signed: false // Indicates if the cookie should be signed
21
+ signed: false
27
22
  };
28
23
  const apiKey = _jsonwebtoken.default.sign({
29
24
  password: _config.globalOasTlmConfig.password
30
25
  }, _config.globalOasTlmConfig.jwtSecret);
31
26
  res.cookie('apiKey', apiKey, options);
32
- return res.status(200).json({
27
+ res.status(200).json({
33
28
  valid: true,
34
29
  message: 'API Key is valid'
35
30
  });
31
+ return;
36
32
  }
37
33
  res.status(400).json({
38
34
  valid: false,
39
35
  message: 'Invalid API Key'
40
36
  });
41
37
  } catch (error) {
42
- console.log("Error: ", error);
38
+ _logger.default.log("Error: ", error);
43
39
  res.status(500).json({
44
40
  valid: false,
45
41
  message: 'Internal server error'
46
42
  });
47
43
  }
48
- });
49
- router.get('/logout', (req, res) => {
44
+ };
45
+ exports.login = login;
46
+ const logout = (req, res) => {
50
47
  res.clearCookie('apiKey');
51
48
  res.redirect(_config.globalOasTlmConfig.baseURL + '/login');
52
- });
53
-
54
- //check is used in the UI (http polling) to validate the Cookies to redirect to the login page if needed
55
- router.get('/check', (req, res) => {
49
+ };
50
+ exports.logout = logout;
51
+ const check = (req, res) => {
56
52
  if (!req.cookies.apiKey) {
57
- return res.status(200).json({
53
+ res.status(200).json({
58
54
  valid: false,
59
55
  message: 'API Key is invalid'
60
56
  });
57
+ return;
61
58
  }
62
59
  const decoded = _jsonwebtoken.default.verify(req.cookies.apiKey, _config.globalOasTlmConfig.jwtSecret);
63
60
  if (decoded.password === _config.globalOasTlmConfig.password) {
64
- return res.status(200).json({
61
+ res.status(200).json({
65
62
  valid: true,
66
63
  message: 'API Key is valid'
67
64
  });
65
+ return;
68
66
  }
69
67
  res.status(200).json({
70
68
  valid: false,
71
69
  message: 'Invalid API Key'
72
70
  });
73
- });
74
- router.get('/login', (req, res) => {
75
- const baseURL = _config.globalOasTlmConfig.baseURL;
76
- res.send((0, _uiService.default)(baseURL).login);
77
- });
78
- var _default = exports.default = router;
79
- module.exports = exports.default;
71
+ };
72
+ exports.check = check;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.authMiddleware = authMiddleware;
7
7
  var _config = require("../config.cjs");
8
8
  var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  function authMiddleware(req, res, next) {
11
11
  const apiKey = req.cookies.apiKey;
12
12
  if (apiKey) {
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _express = require("express");
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;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.resetLogs = exports.listLogs = exports.findLogs = void 0;
7
+ var _config = require("../config.cjs");
8
+ const listLogs = async (req, res) => {
9
+ try {
10
+ const logs = _config.globalOasTlmConfig.logExporter.getFinishedSpans();
11
+ res.send({
12
+ logsCount: logs.length,
13
+ logs: logs
14
+ });
15
+ } catch (err) {
16
+ console.error(err);
17
+ res.status(500).send({
18
+ error: 'Failed to list log data'
19
+ });
20
+ }
21
+ };
22
+ exports.listLogs = listLogs;
23
+ const findLogs = async (req, res) => {
24
+ const body = req.body;
25
+ const messageSearch = body?.search || null; // Search term for MiniSearch
26
+ const findQuery = body?.find || {}; // Query for NeDB
27
+ console.dir(`findLogs called with query: ${JSON.stringify(findQuery)} and search ${messageSearch}`, {
28
+ depth: 3
29
+ });
30
+ try {
31
+ const results = await new Promise((resolve, reject) => {
32
+ _config.globalOasTlmConfig.logExporter.find(findQuery, messageSearch, (err, docs) => {
33
+ if (err) return reject(err);
34
+ resolve(docs);
35
+ });
36
+ });
37
+ const typedResults = results;
38
+ res.send({
39
+ logsCount: typedResults.length,
40
+ logs: typedResults
41
+ });
42
+ } catch (err) {
43
+ console.error(err);
44
+ res.status(500).send({
45
+ error: 'Failed to find logs',
46
+ details: err.message
47
+ });
48
+ }
49
+ };
50
+ exports.findLogs = findLogs;
51
+ const resetLogs = (req, res) => {
52
+ _config.globalOasTlmConfig.logExporter.reset();
53
+ res.send('Logs reset');
54
+ };
55
+ exports.resetLogs = resetLogs;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.logRoutes = exports.default = void 0;
7
+ var _express = require("express");
8
+ var _logController = require("./logController.cjs");
9
+ const logRoutes = exports.logRoutes = (0, _express.Router)();
10
+ logRoutes.get('/', _logController.listLogs);
11
+ logRoutes.post('/find', _logController.findLogs);
12
+ logRoutes.get('/reset', _logController.resetLogs);
13
+ var _default = exports.default = logRoutes;
@@ -5,9 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.metricsRoutes = exports.default = void 0;
7
7
  var _express = require("express");
8
- var _metricsController = require("../controllers/metricsController.cjs");
8
+ var _metricsController = require("./metricsController.cjs");
9
9
  const metricsRoutes = exports.metricsRoutes = (0, _express.Router)();
10
-
11
10
  // Metrics Control
12
11
  metricsRoutes.get('/', _metricsController.listMetrics);
13
12
  metricsRoutes.post('/find', _metricsController.findMetrics);
@@ -3,29 +3,32 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.registerPlugin = exports.listPlugins = exports.checkApiKey = void 0;
6
+ exports.registerPlugin = exports.listPlugins = void 0;
7
7
  var _config = require("../config.cjs");
8
8
  var _axios = _interopRequireDefault(require("axios"));
9
9
  var _importFromString = require("import-from-string");
10
10
  var _dynamicInstaller = require("dynamic-installer");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
- let dbglog = () => {};
13
- if (process.env.OTDEBUG == "true") dbglog = console.log;
11
+ var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ // @ts-expect-error: import-from-string does not have proper type declarations
14
+
15
+ // @ts-expect-error: dynamic-installer does not have proper type declarations
16
+
14
17
  const listPlugins = (req, res) => {
15
- res.send(_config.globalOasTlmConfig.dynamicExporter.getPlugins().map(p => {
18
+ res.send(_config.globalOasTlmConfig.dynamicSpanExporter.getPlugins().map(plugin => {
16
19
  return {
17
- id: p.id,
18
- name: p.name,
19
- url: p.url,
20
- active: p.active
20
+ id: plugin.id,
21
+ name: plugin.name,
22
+ url: plugin.url,
23
+ active: plugin.active
21
24
  };
22
25
  }));
23
26
  };
24
27
  exports.listPlugins = listPlugins;
25
28
  const registerPlugin = async (req, res) => {
26
- let pluginResource = req.body;
27
- dbglog(`Plugin Registration Request: = ${JSON.stringify(req.body, null, 2)}...`);
28
- dbglog(`Getting plugin at ${pluginResource.url}...`);
29
+ const pluginResource = req.body;
30
+ _logger.default.info(`Plugin Registration Request: = ${JSON.stringify(req.body, null, 2)}...`);
31
+ _logger.default.info(`Getting plugin at ${pluginResource.url}...`);
29
32
  let pluginCode;
30
33
  if (!pluginResource.url && !pluginResource.code) {
31
34
  res.status(400).send(`Plugin code or URL must be provided`);
@@ -47,72 +50,59 @@ const registerPlugin = async (req, res) => {
47
50
  const dependenciesStatus = await (0, _dynamicInstaller.installDependencies)(pluginResource.install);
48
51
  if (!dependenciesStatus.success) {
49
52
  if (pluginResource.install.ignoreErrors === true) {
50
- console.warn(`Warning: Error installing dependencies: ${JSON.stringify(dependenciesStatus.details)}`);
53
+ _logger.default.warn(`Warning: Error installing dependencies: ${JSON.stringify(dependenciesStatus.details)}`);
51
54
  } else {
52
55
  res.status(400).send(`Error installing dependencies: ${JSON.stringify(dependenciesStatus.details)}`);
53
56
  return;
54
57
  }
55
58
  }
56
59
  }
57
- dbglog("Plugin size: " + pluginCode?.length);
58
- dbglog("Plugin format: " + pluginResource?.moduleFormat);
60
+ _logger.default.info("Plugin size: " + pluginCode?.length);
61
+ _logger.default.info("Plugin format: " + pluginResource?.moduleFormat);
59
62
  if (pluginResource?.moduleFormat && pluginResource.moduleFormat.toUpperCase() == "ESM") {
60
- console.log("ESM detected");
63
+ _logger.default.info("ESM detected");
61
64
  module = await (0, _importFromString.importFromString)(pluginCode);
62
65
  } else {
63
- console.log("CJS detected (default)");
66
+ _logger.default.info("CJS detected (default)");
64
67
  module = await (0, _importFromString.requireFromString)(pluginCode);
65
- console.log(module);
68
+ _logger.default.info(module);
66
69
  }
67
70
  } catch (error) {
68
- console.error(`Error loading plugin: ${error}`);
71
+ _logger.default.error(`Error loading plugin: ${error}`);
69
72
  res.status(400).send(`Error loading plugin: ${error}`);
70
73
  return;
71
74
  }
72
75
  const plugin = module.default?.plugin ?? module.plugin;
73
76
  if (plugin == undefined) {
74
77
  res.status(400).send(`Plugin code should export a "plugin" object`);
75
- console.log("Error in plugin code: no plugin object exported");
78
+ _logger.default.info("Error in plugin code: no plugin object exported");
76
79
  return;
77
80
  }
78
- for (let requiredFunction of ["load", "getName", "isConfigured"]) {
81
+ for (const requiredFunction of ["load", "getName", "isConfigured"]) {
79
82
  if (plugin[requiredFunction] == undefined) {
80
83
  res.status(400).send(`The plugin code exports a "plugin" object, however it should have a "${requiredFunction}" method`);
81
- console.log("Error in plugin code: some required functions are missing");
84
+ _logger.default.info("Error in plugin code: some required functions are missing");
82
85
  return;
83
86
  }
84
87
  }
85
88
  try {
86
89
  await plugin.load(pluginResource.config);
87
90
  } catch (error) {
88
- console.error(`Error loading plugin configuration: ${error}`);
91
+ _logger.default.error(`Error loading plugin configuration: ${error}`);
89
92
  res.status(400).send(`Error loading plugin configuration: ${error}`);
90
93
  return;
91
94
  }
92
95
  if (plugin.isConfigured()) {
93
- dbglog(`Loaded plugin <${plugin.getName()}>`);
96
+ _logger.default.info(`Loaded plugin <${plugin.getName()}>`);
94
97
  pluginResource.plugin = plugin;
95
98
  pluginResource.name = plugin.getName();
96
99
  pluginResource.active = true;
97
- _config.globalOasTlmConfig.dynamicExporter.pushPlugin(pluginResource);
98
- _config.globalOasTlmConfig.dynamicExporter.activatePlugin(pluginResource.plugin);
100
+ _config.globalOasTlmConfig.dynamicSpanExporter.pushPlugin(pluginResource);
101
+ _config.globalOasTlmConfig.dynamicSpanExporter.activatePlugin(pluginResource.plugin);
99
102
  res.status(201).send(`Plugin registered`);
100
103
  } else {
101
- console.error(`Plugin <${plugin.getName()}> can not be configured`);
104
+ _logger.default.error(`Plugin <${plugin.getName()}> can not be configured`);
102
105
  res.status(400).send(`Plugin configuration problem`);
103
106
  }
104
107
  };
105
- exports.registerPlugin = registerPlugin;
106
- const checkApiKey = (req, res) => {
107
- const apiKey = req.query.apiKey || req.body.apiKey;
108
- if (apiKey === process.env.APIKEY) {
109
- res.status(200).send({
110
- valid: true
111
- });
112
- } else {
113
- res.status(401).send({
114
- valid: false
115
- });
116
- }
117
- };
118
- exports.checkApiKey = checkApiKey;
108
+ exports.registerPlugin = registerPlugin;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pluginRoutes = exports.default = void 0;
7
+ var _express = require("express");
8
+ var _pluginController = require("./pluginController.cjs");
9
+ const pluginRoutes = exports.pluginRoutes = (0, _express.Router)();
10
+ // Plugins
11
+ pluginRoutes.get('/plugins', _pluginController.listPlugins);
12
+ pluginRoutes.post('/plugins', _pluginController.registerPlugin);
13
+ var _default = exports.default = pluginRoutes;
@@ -3,35 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.stopTelemetry = exports.statusTelemetry = exports.startTelemetry = exports.resetTelemetry = exports.listTelemetry = exports.heapStats = exports.findTelemetry = void 0;
7
- var _v = _interopRequireDefault(require("v8"));
6
+ exports.stopTelemetry = exports.statusTelemetry = exports.startTelemetry = exports.resetTelemetry = exports.listTelemetry = exports.findTelemetry = void 0;
8
7
  var _config = require("../config.cjs");
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
8
  const startTelemetry = (req, res) => {
11
- _config.globalOasTlmConfig.dynamicExporter.exporter.start();
9
+ _config.globalOasTlmConfig.dynamicSpanExporter.exporter.start();
12
10
  res.send('Telemetry started');
13
11
  };
14
12
  exports.startTelemetry = startTelemetry;
15
13
  const stopTelemetry = (req, res) => {
16
- _config.globalOasTlmConfig.dynamicExporter.exporter.stop();
14
+ _config.globalOasTlmConfig.dynamicSpanExporter.exporter.stop();
17
15
  res.send('Telemetry stopped');
18
16
  };
19
17
  exports.stopTelemetry = stopTelemetry;
20
18
  const statusTelemetry = (req, res) => {
21
- const isRunning = _config.globalOasTlmConfig.dynamicExporter.exporter.isRunning() || false;
19
+ const isRunning = _config.globalOasTlmConfig.dynamicSpanExporter.exporter.isRunning() || false;
22
20
  res.send({
23
21
  active: isRunning
24
22
  });
25
23
  };
26
24
  exports.statusTelemetry = statusTelemetry;
27
25
  const resetTelemetry = (req, res) => {
28
- _config.globalOasTlmConfig.dynamicExporter.exporter.reset();
26
+ _config.globalOasTlmConfig.dynamicSpanExporter.exporter.reset();
29
27
  res.send('Telemetry reset');
30
28
  };
31
29
  exports.resetTelemetry = resetTelemetry;
32
30
  const listTelemetry = async (req, res) => {
33
31
  try {
34
- const spans = await _config.globalOasTlmConfig.dynamicExporter.exporter.getFinishedSpans();
32
+ const spans = await _config.globalOasTlmConfig.dynamicSpanExporter.exporter.getFinishedSpans();
35
33
  res.send({
36
34
  spansCount: spans.length,
37
35
  spans: spans
@@ -44,21 +42,12 @@ const listTelemetry = async (req, res) => {
44
42
  }
45
43
  };
46
44
  exports.listTelemetry = listTelemetry;
47
- const heapStats = (req, res) => {
48
- var heapStats = _v.default.getHeapStatistics();
49
- var roundedHeapStats = Object.getOwnPropertyNames(heapStats).reduce(function (map, stat) {
50
- map[stat] = Math.round(heapStats[stat] / 1024 / 1024 * 1000) / 1000;
51
- return map;
52
- }, {});
53
- roundedHeapStats['units'] = 'MB';
54
- res.send(roundedHeapStats);
55
- };
56
- exports.heapStats = heapStats;
57
45
  const findTelemetry = (req, res) => {
58
46
  const body = req.body;
59
47
  const search = body?.search ? body.search : {};
60
48
  if (body?.flags?.containsRegex) {
61
49
  try {
50
+ //@ts-expect-error yes
62
51
  body.config?.regexIds?.forEach(regexId => {
63
52
  if (search[regexId]) search[regexId] = new RegExp(search[regexId]);
64
53
  });
@@ -72,7 +61,7 @@ const findTelemetry = (req, res) => {
72
61
  return;
73
62
  }
74
63
  }
75
- _config.globalOasTlmConfig.dynamicExporter.exporter.find(search, (err, docs) => {
64
+ _config.globalOasTlmConfig.dynamicSpanExporter.exporter.find(search, (err, docs) => {
76
65
  if (err) {
77
66
  console.error(err);
78
67
  res.status(404).send({
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.traceRoutes = exports.default = void 0;
7
+ var _express = require("express");
8
+ var _traceController = require("./traceController.cjs");
9
+ const traceRoutes = exports.traceRoutes = (0, _express.Router)();
10
+ traceRoutes.get('/', _traceController.listTelemetry);
11
+ traceRoutes.post('/find', _traceController.findTelemetry);
12
+ // Telemetry Control
13
+ traceRoutes.get('/start', _traceController.startTelemetry);
14
+ traceRoutes.get('/stop', _traceController.stopTelemetry);
15
+ traceRoutes.get('/status', _traceController.statusTelemetry);
16
+ traceRoutes.get('/reset', _traceController.resetTelemetry);
17
+ var _default = exports.default = traceRoutes;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.uiRoutes = exports.default = void 0;
7
+ var _express = _interopRequireWildcard(require("express"));
8
+ var _path = _interopRequireDefault(require("path"));
9
+ var _url = require("url");
10
+ var _logger = _interopRequireDefault(require("../utils/logger.cjs"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ let relativePath = '../../ui';
14
+ if (process.env.OASTLM_ENV === 'development') {
15
+ relativePath = '../../dist/ui';
16
+ _logger.default.warn('🚧 This process is serving the OASTLM UI from the build directory, but you are in development mode. For live updates, run the React app separately and access it at http://localhost:5173/.');
17
+ }
18
+ const customFilename = (0, _url.fileURLToPath)(require('url').pathToFileURL(__filename).toString());
19
+ const customDirname = _path.default.dirname(customFilename);
20
+ const staticFilesPath = _path.default.join(customDirname, relativePath);
21
+ const uiRoutes = exports.uiRoutes = (0, _express.Router)();
22
+ // This only works once the app is built: src/ --> dist/esm/
23
+ // This file: dist/esm/routes/
24
+ // UI bundle: dist/ui/
25
+ // For development, the UI is served separately.
26
+ uiRoutes.use(_express.default.static(staticFilesPath));
27
+ uiRoutes.get('*', (_req, res) => {
28
+ // Serve the index.html file for all routes
29
+ res.sendFile(_path.default.join(staticFilesPath, 'index.html'));
30
+ });
31
+ var _default = exports.default = uiRoutes;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.specLoader = exports.heapStats = void 0;
7
+ var _config = require("../config.cjs");
8
+ var _fs = require("fs");
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _jsYaml = _interopRequireDefault(require("js-yaml"));
11
+ var _nodeV = _interopRequireDefault(require("node:v8"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ const specLoader = (_req, res) => {
14
+ if (_config.globalOasTlmConfig.specFileName) {
15
+ try {
16
+ const data = (0, _fs.readFileSync)(_config.globalOasTlmConfig.specFileName, {
17
+ encoding: 'utf8',
18
+ flag: 'r'
19
+ });
20
+ const extension = _path.default.extname(_config.globalOasTlmConfig.specFileName);
21
+ let json = data;
22
+ if (extension == "yaml")
23
+ //@ts-expect-error yes
24
+ json = JSON.stringify(_jsYaml.default.SafeLoad(data), null, 2);
25
+ res.setHeader('Content-Type', 'application/json');
26
+ res.send(json);
27
+ } catch (e) {
28
+ console.error(`ERROR loading spec file ${_config.globalOasTlmConfig.specFileName}: ${e}`);
29
+ }
30
+ } else if (_config.globalOasTlmConfig.spec) {
31
+ let spec = null;
32
+ try {
33
+ spec = JSON.parse(_config.globalOasTlmConfig.spec);
34
+ } catch (ej) {
35
+ try {
36
+ spec = JSON.stringify(_jsYaml.default.load(_config.globalOasTlmConfig.spec), null, 2);
37
+ } catch (ey) {
38
+ console.error(`Error parsing spec: ${ej} - ${ey}`);
39
+ }
40
+ }
41
+ if (!spec) {
42
+ res.status(404);
43
+ } else {
44
+ res.setHeader('Content-Type', 'application/json');
45
+ res.send(spec);
46
+ }
47
+ } else {
48
+ res.status(404);
49
+ }
50
+ };
51
+ exports.specLoader = specLoader;
52
+ const heapStats = (req, res) => {
53
+ const heapStats = _nodeV.default.getHeapStatistics();
54
+ const roundedHeapStats = Object.getOwnPropertyNames(heapStats).reduce(function (map, stat) {
55
+ //@ts-expect-error yes
56
+ map[stat] = Math.round(heapStats[stat] / 1024 / 1024 * 1000) / 1000;
57
+ return map;
58
+ }, {});
59
+ // @ts-expect-error yes
60
+ roundedHeapStats['units'] = 'MB';
61
+ res.send(roundedHeapStats);
62
+ };
63
+ exports.heapStats = heapStats;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.utilsRoutes = exports.default = void 0;
7
+ var _express = require("express");
8
+ var _utilController = require("./utilController.cjs");
9
+ const utilsRoutes = exports.utilsRoutes = (0, _express.Router)();
10
+ utilsRoutes.get('/spec', _utilController.specLoader);
11
+ utilsRoutes.get('/heapStats', _utilController.heapStats);
12
+ var _default = exports.default = utilsRoutes;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.configureRoutes = void 0;
7
+ var _express = require("express");
8
+ var _logger = _interopRequireDefault(require("./utils/logger.cjs"));
9
+ var _cors = _interopRequireDefault(require("cors"));
10
+ var _config = require("./config.cjs");
11
+ var _metricsRoutes = _interopRequireDefault(require("./tlm-metric/metricsRoutes.cjs"));
12
+ var _cookieParser = _interopRequireDefault(require("cookie-parser"));
13
+ var _authRoutes = _interopRequireDefault(require("./tlm-auth/authRoutes.cjs"));
14
+ var _uiRoutes = _interopRequireDefault(require("./tlm-ui/uiRoutes.cjs"));
15
+ var _traceRoutes = _interopRequireDefault(require("./tlm-trace/traceRoutes.cjs"));
16
+ var _authMiddleware = require("./tlm-auth/authMiddleware.cjs");
17
+ var _utilRoutes = _interopRequireDefault(require("./tlm-util/utilRoutes.cjs"));
18
+ var _logRoutes = _interopRequireDefault(require("./tlm-log/logRoutes.cjs"));
19
+ var _aiRoutes = _interopRequireDefault(require("./tlm-ai/aiRoutes.cjs"));
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ const configureRoutes = router => {
22
+ if (process.env.OASTLM_ENV === 'development') {
23
+ _logger.default.info("Running in development mode, enabling CORS for all origins");
24
+ router.use((0, _cors.default)({
25
+ origin: '*',
26
+ // Permitir todas las solicitudes en desarrollo
27
+ methods: ['GET', 'POST', 'PUT', 'DELETE'],
28
+ allowedHeaders: ['Content-Type', 'Authorization']
29
+ }));
30
+ }
31
+ router.use((req, res, next) => {
32
+ if (req.body !== undefined) {
33
+ return next(); // Already parsed, no need to parse again.
34
+ }
35
+ return (0, _express.json)()(req, res, next);
36
+ });
37
+ const allAuthMiddlewares = getWrappedMiddlewares(() => _config.globalOasTlmConfig.authEnabled, [(0, _cookieParser.default)(), _authRoutes.default, _authMiddleware.authMiddleware]);
38
+ const baseURL = _config.globalOasTlmConfig.baseURL;
39
+ router.use(baseURL, allAuthMiddlewares);
40
+ // WARNING: This path must be the same as the one used in the UI package App.tsx "oas-telemetry-ui"
41
+ router.use(baseURL + "/traces", _traceRoutes.default);
42
+ router.use(baseURL + "/metrics", _metricsRoutes.default);
43
+ router.use(baseURL + "/logs", _logRoutes.default);
44
+ router.use(baseURL + "/ai", getWrappedMiddlewares(() => process.env.OASTLM_AI_OPENAI_API_KEY !== null && process.env.OASTLM_AI_OPENAI_API_KEY !== "", [_aiRoutes.default]));
45
+ router.use(baseURL + "/oas-telemetry-ui", _uiRoutes.default);
46
+ router.use(baseURL + "/utils", _utilRoutes.default);
47
+ //redirect to the UI when accessing the base URL
48
+ router.get(baseURL, (req, res) => {
49
+ res.redirect(baseURL + "/oas-telemetry-ui");
50
+ });
51
+ };
52
+ /**
53
+ * This function wraps the provided middleware functions with a condition callback.
54
+ * If the condition callback returns true, the middleware/router will be executed.
55
+ * If the condition callback returns false, the middleware/router will be skipped.
56
+ *
57
+ * @callback {function} conditionCallback A callback function that returns a boolean to determine if the middleware should be used.
58
+ * @param {Array} middlewares An array of middleware or routers to be wrapped.
59
+ * @returns {Array} An array of wrapped middleware functions.
60
+ */
61
+ exports.configureRoutes = configureRoutes;
62
+ function getWrappedMiddlewares(conditionCallback, middlewares) {
63
+ return middlewares.map(middleware => {
64
+ return function (req, res, next) {
65
+ if (conditionCallback()) {
66
+ if (typeof middleware === 'function') {
67
+ // look for handle property, if it exists, it's a router. If not call middleware
68
+ if (middleware.handle) {
69
+ middleware.handle(req, res, next);
70
+ } else {
71
+ middleware(req, res, next);
72
+ }
73
+ }
74
+ } else {
75
+ next();
76
+ }
77
+ };
78
+ });
79
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ ;
7
+ ;
8
+ ;