@oas-tools/oas-telemetry 0.7.0-alpha.0 → 0.7.0-alpha.2

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 (43) hide show
  1. package/.env.example +26 -0
  2. package/NOTICE +8 -0
  3. package/README.md +76 -18
  4. package/dist/cjs/exporters/InMemoryDBMetricsExporter.cjs +10 -2
  5. package/dist/cjs/exporters/InMemoryDbExporter.cjs +16 -1
  6. package/dist/cjs/exporters/InMemoryLogRecordExporter.cjs +51 -15
  7. package/dist/cjs/tlm-ai/tools.cjs +2 -2
  8. package/dist/cjs/tlm-log/logController.cjs +69 -3
  9. package/dist/cjs/tlm-log/logRoutes.cjs +6 -1
  10. package/dist/cjs/tlm-metric/metricsController.cjs +69 -3
  11. package/dist/cjs/tlm-metric/metricsRoutes.cjs +4 -0
  12. package/dist/cjs/tlm-trace/traceController.cjs +51 -2
  13. package/dist/cjs/tlm-trace/traceRoutes.cjs +1 -0
  14. package/dist/cjs/tlm-util/utilRoutes.cjs +16 -0
  15. package/dist/cjs/tlmRoutes.cjs +3 -1
  16. package/dist/esm/exporters/InMemoryDBMetricsExporter.js +10 -2
  17. package/dist/esm/exporters/InMemoryDbExporter.js +16 -1
  18. package/dist/esm/exporters/InMemoryLogRecordExporter.js +46 -11
  19. package/dist/esm/tlm-ai/tools.js +2 -2
  20. package/dist/esm/tlm-log/logController.js +48 -1
  21. package/dist/esm/tlm-log/logRoutes.js +7 -2
  22. package/dist/esm/tlm-metric/metricsController.js +48 -1
  23. package/dist/esm/tlm-metric/metricsRoutes.js +5 -1
  24. package/dist/esm/tlm-trace/traceController.js +35 -0
  25. package/dist/esm/tlm-trace/traceRoutes.js +2 -1
  26. package/dist/esm/tlm-util/utilRoutes.js +11 -0
  27. package/dist/esm/tlmRoutes.js +1 -1
  28. package/dist/types/exporters/InMemoryDBMetricsExporter.d.ts +6 -0
  29. package/dist/types/exporters/InMemoryDbExporter.d.ts +6 -0
  30. package/dist/types/exporters/InMemoryLogRecordExporter.d.ts +7 -1
  31. package/dist/types/tlm-log/logController.d.ts +4 -0
  32. package/dist/types/tlm-metric/metricsController.d.ts +4 -0
  33. package/dist/types/tlm-trace/traceController.d.ts +1 -0
  34. package/package.json +3 -1
  35. package/dist/cjs/openTelemetry.cjs +0 -56
  36. package/dist/cjs/systemMetrics.cjs +0 -97
  37. package/dist/cjs/tlm-ui/uiController.cjs +0 -27
  38. package/dist/esm/openTelemetry.js +0 -50
  39. package/dist/esm/systemMetrics.js +0 -82
  40. package/dist/esm/tlm-ui/uiController.js +0 -20
  41. package/dist/types/openTelemetry.d.ts +0 -1
  42. package/dist/types/systemMetrics.d.ts +0 -26
  43. package/dist/types/tlm-ui/uiController.d.ts +0 -8
@@ -1,27 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.mainPage = void 0;
7
- var _fs = require("fs");
8
- var _path = _interopRequireDefault(require("path"));
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- /**
11
- * WARNING: DO NOT CHANGE PATH, this is used in the build.
12
- * Build = src (ts) ----> dist (js)
13
- * After build, this file is at dist/esm/tlm-ui/ and the UI is at dist/ui/.
14
- * The path below navigates two levels up to reach dist/, then into ui/.
15
- */
16
- const mainPage = (_req, res) => {
17
- const bundlePath = _path.default.join(__dirname, '../../dist/ui');
18
- try {
19
- const indexHtml = (0, _fs.readFileSync)(_path.default.join(bundlePath, 'index.html'), 'utf8');
20
- res.set('Content-Type', 'text/html');
21
- res.send(indexHtml);
22
- } catch (error) {
23
- console.error(`Error serving React bundle: ${error}`);
24
- res.status(500).send('Error loading the application.');
25
- }
26
- };
27
- exports.mainPage = mainPage;
@@ -1,50 +0,0 @@
1
- import { NodeSDK } from '@opentelemetry/sdk-node';
2
- // import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
3
- import { Resource } from '@opentelemetry/resources';
4
- import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
5
- import { globalOasTlmConfig } from './config.js';
6
- import { getCpuUsageData, getProcessCpuUsageData, getMemoryData, getProcessMemoryData } from './systemMetrics.js'; // Import system metrics functions
7
- import logger from './utils/logger.js';
8
- // DynamicExporter allows changing to any exporter at runtime;
9
- const dynamicSpanExporter = globalOasTlmConfig.dynamicSpanExporter;
10
- // Alternative 1: Using NodeSDK
11
- const sdk = new NodeSDK({
12
- resource: new Resource({
13
- service: 'oas-telemetry-service'
14
- }),
15
- traceExporter: dynamicSpanExporter,
16
- instrumentations: [new HttpInstrumentation()]
17
- });
18
- // Collect and export system metrics
19
- setInterval(() => {
20
- const cpuUsageData = getCpuUsageData();
21
- const processCpuUsageData = getProcessCpuUsageData();
22
- const memoryData = getMemoryData();
23
- const processMemoryData = getProcessMemoryData();
24
- const metrics = {
25
- timestamp: Date.now(),
26
- cpuUsageData,
27
- processCpuUsageData,
28
- memoryData,
29
- processMemoryData,
30
- };
31
- // Export the collected metrics using the InMemoryDBMetricsExporter
32
- const inMemoryDbMetricExporter = globalOasTlmConfig.metricsExporter;
33
- inMemoryDbMetricExporter.export(metrics, () => { });
34
- }, globalOasTlmConfig.systemMetricsInterval);
35
- logger.info('✅ OpenTelemetry System Metrics initialized.');
36
- if (process.env.OASTLM_MODULE_DISABLED !== 'true') {
37
- sdk.start();
38
- }
39
- // Alternative 2:
40
- // const provider = new NodeTracerProvider();
41
- // provider.addSpanProcessor(new SimpleSpanProcessor(traceExporter));
42
- // if (process.env.OASTLM_MODULE_DISABLED !== 'true') {
43
- // provider.register();
44
- // registerInstrumentations({
45
- // instrumentations: [
46
- // new HttpInstrumentation(),
47
- // new ExpressInstrumentation(),
48
- // ],
49
- // });
50
- // }
@@ -1,82 +0,0 @@
1
- import { cpus, totalmem, freemem } from 'os';
2
- const MILLISECOND = 1 / 1e3;
3
- const MICROSECOND = 1 / 1e6;
4
- let prevOsData = {
5
- time: Date.now(),
6
- cpus: cpus(),
7
- };
8
- export function getCpuUsageData() {
9
- const currentTime = Date.now();
10
- const timeElapsed = currentTime - prevOsData.time;
11
- const currentOsData = { time: currentTime, cpus: cpus() };
12
- const usageData = currentOsData.cpus.map((cpu, cpuNumber) => {
13
- const prevTimes = prevOsData.cpus[cpuNumber].times;
14
- const currTimes = cpu.times;
15
- const idle = currTimes.idle * MILLISECOND;
16
- const user = currTimes.user * MILLISECOND;
17
- const system = currTimes.sys * MILLISECOND;
18
- const interrupt = currTimes.irq * MILLISECOND;
19
- const nice = currTimes.nice * MILLISECOND;
20
- const idleP = (currTimes.idle - prevTimes.idle) / timeElapsed;
21
- const userP = (currTimes.user - prevTimes.user) / timeElapsed;
22
- const systemP = (currTimes.sys - prevTimes.sys) / timeElapsed;
23
- const interruptP = (currTimes.irq - prevTimes.irq) / timeElapsed;
24
- const niceP = (currTimes.nice - prevTimes.nice) / timeElapsed;
25
- return {
26
- cpuNumber: String(cpuNumber),
27
- idle,
28
- user,
29
- system,
30
- interrupt,
31
- nice,
32
- userP,
33
- systemP,
34
- idleP,
35
- interruptP,
36
- niceP,
37
- };
38
- });
39
- prevOsData = currentOsData;
40
- return usageData;
41
- }
42
- let prevProcData = {
43
- time: Date.now(),
44
- usage: process.cpuUsage(),
45
- };
46
- export function getProcessCpuUsageData() {
47
- const currentTime = Date.now();
48
- const currentUsage = process.cpuUsage();
49
- const prevUsage = prevProcData.usage;
50
- const timeElapsed = (currentTime - prevProcData.time) * 1000;
51
- const cpusTimeElapsed = timeElapsed * prevOsData.cpus.length;
52
- const user = currentUsage.user * MICROSECOND;
53
- const system = currentUsage.system * MICROSECOND;
54
- const userP = (currentUsage.user - prevUsage.user) / cpusTimeElapsed;
55
- const systemP = (currentUsage.system - prevUsage.system) / cpusTimeElapsed;
56
- prevProcData = { time: currentTime, usage: currentUsage };
57
- return {
58
- user,
59
- system,
60
- userP,
61
- systemP,
62
- };
63
- }
64
- export function getMemoryData() {
65
- const total = totalmem();
66
- const free = freemem();
67
- const used = total - free;
68
- const freeP = free / total;
69
- const usedP = used / total;
70
- return {
71
- used,
72
- free,
73
- usedP,
74
- freeP,
75
- };
76
- }
77
- export function getProcessMemoryData() {
78
- if (process.memoryUsage().rss) {
79
- return process.memoryUsage().rss;
80
- }
81
- return 0;
82
- }
@@ -1,20 +0,0 @@
1
- import { readFileSync } from 'fs';
2
- import path from 'path';
3
- /**
4
- * WARNING: DO NOT CHANGE PATH, this is used in the build.
5
- * Build = src (ts) ----> dist (js)
6
- * After build, this file is at dist/esm/tlm-ui/ and the UI is at dist/ui/.
7
- * The path below navigates two levels up to reach dist/, then into ui/.
8
- */
9
- export const mainPage = (_req, res) => {
10
- const bundlePath = path.join(__dirname, '../../dist/ui');
11
- try {
12
- const indexHtml = readFileSync(path.join(bundlePath, 'index.html'), 'utf8');
13
- res.set('Content-Type', 'text/html');
14
- res.send(indexHtml);
15
- }
16
- catch (error) {
17
- console.error(`Error serving React bundle: ${error}`);
18
- res.status(500).send('Error loading the application.');
19
- }
20
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,26 +0,0 @@
1
- export declare function getCpuUsageData(): Array<{
2
- cpuNumber: string;
3
- idle: number;
4
- user: number;
5
- system: number;
6
- interrupt: number;
7
- nice: number;
8
- userP: number;
9
- systemP: number;
10
- idleP: number;
11
- interruptP: number;
12
- niceP: number;
13
- }>;
14
- export declare function getProcessCpuUsageData(): {
15
- user: number;
16
- system: number;
17
- userP: number;
18
- systemP: number;
19
- };
20
- export declare function getMemoryData(): {
21
- used: number;
22
- free: number;
23
- usedP: number;
24
- freeP: number;
25
- };
26
- export declare function getProcessMemoryData(): number;
@@ -1,8 +0,0 @@
1
- import { Request, Response } from 'express';
2
- /**
3
- * WARNING: DO NOT CHANGE PATH, this is used in the build.
4
- * Build = src (ts) ----> dist (js)
5
- * After build, this file is at dist/esm/tlm-ui/ and the UI is at dist/ui/.
6
- * The path below navigates two levels up to reach dist/, then into ui/.
7
- */
8
- export declare const mainPage: (_req: Request, res: Response) => void;