@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
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { globalOasTlmConfig } from '../config.js';
|
|
2
1
|
import { readFileSync } from 'fs';
|
|
3
2
|
import path from 'path';
|
|
4
3
|
import yaml from 'js-yaml';
|
|
5
4
|
import v8 from 'node:v8';
|
|
6
|
-
export const specLoader = (_req, res) => {
|
|
7
|
-
if (
|
|
5
|
+
export const specLoader = (_req, res, oasTlmConfig) => {
|
|
6
|
+
if (oasTlmConfig.general.specFileName) {
|
|
8
7
|
try {
|
|
9
|
-
const data = readFileSync(
|
|
10
|
-
const extension = path.extname(
|
|
8
|
+
const data = readFileSync(oasTlmConfig.general.specFileName, { encoding: 'utf8', flag: 'r' });
|
|
9
|
+
const extension = path.extname(oasTlmConfig.general.specFileName);
|
|
11
10
|
let json = data;
|
|
12
11
|
if (extension == "yaml")
|
|
13
12
|
//@ts-expect-error yes
|
|
@@ -16,17 +15,17 @@ export const specLoader = (_req, res) => {
|
|
|
16
15
|
res.send(json);
|
|
17
16
|
}
|
|
18
17
|
catch (e) {
|
|
19
|
-
console.error(`ERROR loading spec file ${
|
|
18
|
+
console.error(`ERROR loading spec file ${oasTlmConfig.general.specFileName}: ${e}`);
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
|
-
else if (
|
|
21
|
+
else if (oasTlmConfig.general.spec) {
|
|
23
22
|
let spec = null;
|
|
24
23
|
try {
|
|
25
|
-
spec = JSON.parse(
|
|
24
|
+
spec = JSON.parse(oasTlmConfig.general.spec);
|
|
26
25
|
}
|
|
27
26
|
catch (ej) {
|
|
28
27
|
try {
|
|
29
|
-
spec = JSON.stringify(yaml.load(
|
|
28
|
+
spec = JSON.stringify(yaml.load(oasTlmConfig.general.spec), null, 2);
|
|
30
29
|
}
|
|
31
30
|
catch (ey) {
|
|
32
31
|
console.error(`Error parsing spec: ${ej} - ${ey}`);
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
2
|
import { specLoader, heapStats } from './utilController.js';
|
|
3
|
-
export const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
17
|
-
|
|
3
|
+
export const getUtilsRoutes = (oasTlmConfig) => {
|
|
4
|
+
const router = Router();
|
|
5
|
+
router.get('/spec', (req, res) => specLoader(req, res, oasTlmConfig));
|
|
6
|
+
router.get('/heapStats', heapStats);
|
|
7
|
+
router.get('/generateLog', (req, res) => {
|
|
8
|
+
const log = req.query.log || 'Default log message';
|
|
9
|
+
console.log(log);
|
|
10
|
+
res.send({ message: 'Log generated', log: log });
|
|
11
|
+
});
|
|
12
|
+
router.get('/wait/:seconds?', async (req, res) => {
|
|
13
|
+
const seconds = parseInt(req.params.seconds ?? "1", 10);
|
|
14
|
+
const waitTime = isNaN(seconds) ? 1 : seconds;
|
|
15
|
+
await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
|
|
16
|
+
res.send({ waited: waitTime });
|
|
17
|
+
});
|
|
18
|
+
return router;
|
|
19
|
+
};
|
package/dist/esm/types/index.js
CHANGED
package/dist/esm/utils/logger.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
dotenv.config();
|
|
1
|
+
import { bootEnvVariables } from "../config/bootConfig.js";
|
|
3
2
|
const LOG_LEVELS = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE'];
|
|
4
|
-
const currentLogLevel = (
|
|
5
|
-
const serviceName =
|
|
3
|
+
const currentLogLevel = (bootEnvVariables.OASTLM_BOOT_LOG_LEVEL || 'INFO').toUpperCase();
|
|
4
|
+
const serviceName = 'OAS-Telemetry';
|
|
6
5
|
function log(level, ...messages) {
|
|
7
6
|
if (LOG_LEVELS.indexOf(level) >= LOG_LEVELS.indexOf(currentLogLevel)) {
|
|
8
7
|
const timestamp = new Date().toISOString();
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const convertRegexRecursively = (obj) => {
|
|
2
|
+
if (Array.isArray(obj)) {
|
|
3
|
+
return obj.map(convertRegexRecursively);
|
|
4
|
+
}
|
|
5
|
+
else if (obj && typeof obj === 'object') {
|
|
6
|
+
const newObj = {};
|
|
7
|
+
for (const key of Object.keys(obj)) {
|
|
8
|
+
if (key === '$regex' && typeof obj[key] === 'string') {
|
|
9
|
+
try {
|
|
10
|
+
return new RegExp(obj[key]);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
throw new Error(`Invalid regex value "${obj[key]}"`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
newObj[key] = convertRegexRecursively(obj[key]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return newObj;
|
|
21
|
+
}
|
|
22
|
+
return obj;
|
|
23
|
+
};
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { OasTlmConfig, DeepPartial, UserConfig } from './config.types';
|
|
2
|
+
import { BufferConfig, SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-node';
|
|
3
|
+
import { IMetricReader, MetricProducer } from '@opentelemetry/sdk-metrics';
|
|
4
|
+
import { LogRecordExporter, LogRecordProcessor } from '@opentelemetry/sdk-logs';
|
|
5
|
+
import { type PluginResource } from '../types/index.js';
|
|
6
|
+
import { ViewOptions } from '@opentelemetry/sdk-metrics/build/src/view/View';
|
|
7
|
+
export declare const defaultConfig: {
|
|
8
|
+
general: {
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
specFileName: string | null;
|
|
11
|
+
spec: string | null;
|
|
12
|
+
uiPath: string;
|
|
13
|
+
};
|
|
14
|
+
auth: {
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
apiKeyMaxAge: number;
|
|
17
|
+
password: string;
|
|
18
|
+
jwtSecret: string;
|
|
19
|
+
};
|
|
20
|
+
ai: {
|
|
21
|
+
openAIKey: string | null;
|
|
22
|
+
openAIModel: string;
|
|
23
|
+
extraContextPrompts: string[];
|
|
24
|
+
};
|
|
25
|
+
traces: {
|
|
26
|
+
extraExporters: SpanExporter[];
|
|
27
|
+
extraProcessors: SpanProcessor[];
|
|
28
|
+
mainProcessorOptions: {
|
|
29
|
+
config: BufferConfig | undefined;
|
|
30
|
+
};
|
|
31
|
+
memoryExporter: {
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
retentionTimeSeconds: number;
|
|
34
|
+
};
|
|
35
|
+
filters: any[];
|
|
36
|
+
};
|
|
37
|
+
metrics: {
|
|
38
|
+
mainMetricReaderOptions: {
|
|
39
|
+
exportIntervalMillis: number;
|
|
40
|
+
metricProducers: MetricProducer[];
|
|
41
|
+
};
|
|
42
|
+
extraReaders: IMetricReader[];
|
|
43
|
+
extraViews: ViewOptions[];
|
|
44
|
+
memoryExporter: {
|
|
45
|
+
enabled: boolean;
|
|
46
|
+
retentionTimeSeconds: number;
|
|
47
|
+
};
|
|
48
|
+
filters: any[];
|
|
49
|
+
};
|
|
50
|
+
logs: {
|
|
51
|
+
extraExporters: LogRecordExporter[];
|
|
52
|
+
extraProcessors: LogRecordProcessor[];
|
|
53
|
+
memoryExporter: {
|
|
54
|
+
enabled: boolean;
|
|
55
|
+
retentionTimeSeconds: number;
|
|
56
|
+
};
|
|
57
|
+
filters: any[];
|
|
58
|
+
};
|
|
59
|
+
plugins: {
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
extraPlugins: PluginResource[];
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export declare const getConfig: (userConfig?: UserConfig, fallbackConfig?: OasTlmConfig, envConfig?: DeepPartial<OasTlmConfig>) => {
|
|
65
|
+
general: {
|
|
66
|
+
baseUrl: string;
|
|
67
|
+
specFileName: string | null;
|
|
68
|
+
spec: string | null;
|
|
69
|
+
uiPath: string;
|
|
70
|
+
};
|
|
71
|
+
auth: {
|
|
72
|
+
enabled: boolean;
|
|
73
|
+
apiKeyMaxAge: number;
|
|
74
|
+
password: string;
|
|
75
|
+
jwtSecret: string;
|
|
76
|
+
};
|
|
77
|
+
ai: {
|
|
78
|
+
openAIKey: string | null;
|
|
79
|
+
openAIModel: string;
|
|
80
|
+
extraContextPrompts: string[];
|
|
81
|
+
};
|
|
82
|
+
traces: {
|
|
83
|
+
extraExporters: SpanExporter[];
|
|
84
|
+
extraProcessors: SpanProcessor[];
|
|
85
|
+
mainProcessorOptions: {
|
|
86
|
+
config: BufferConfig | undefined;
|
|
87
|
+
};
|
|
88
|
+
memoryExporter: {
|
|
89
|
+
enabled: boolean;
|
|
90
|
+
retentionTimeSeconds: number;
|
|
91
|
+
};
|
|
92
|
+
filters: any[];
|
|
93
|
+
};
|
|
94
|
+
metrics: {
|
|
95
|
+
mainMetricReaderOptions: {
|
|
96
|
+
exportIntervalMillis: number;
|
|
97
|
+
metricProducers: MetricProducer[];
|
|
98
|
+
};
|
|
99
|
+
extraReaders: IMetricReader[];
|
|
100
|
+
extraViews: ViewOptions[];
|
|
101
|
+
memoryExporter: {
|
|
102
|
+
enabled: boolean;
|
|
103
|
+
retentionTimeSeconds: number;
|
|
104
|
+
};
|
|
105
|
+
filters: any[];
|
|
106
|
+
};
|
|
107
|
+
logs: {
|
|
108
|
+
extraExporters: LogRecordExporter[];
|
|
109
|
+
extraProcessors: LogRecordProcessor[];
|
|
110
|
+
memoryExporter: {
|
|
111
|
+
enabled: boolean;
|
|
112
|
+
retentionTimeSeconds: number;
|
|
113
|
+
};
|
|
114
|
+
filters: any[];
|
|
115
|
+
};
|
|
116
|
+
plugins: {
|
|
117
|
+
enabled: boolean;
|
|
118
|
+
extraPlugins: PluginResource[];
|
|
119
|
+
};
|
|
120
|
+
} & UserConfig & {
|
|
121
|
+
general?: {
|
|
122
|
+
baseUrl?: string | undefined;
|
|
123
|
+
specFileName?: string | null | undefined;
|
|
124
|
+
spec?: string | null | undefined;
|
|
125
|
+
uiPath?: string | undefined;
|
|
126
|
+
} | undefined;
|
|
127
|
+
auth?: {
|
|
128
|
+
enabled?: boolean | undefined;
|
|
129
|
+
apiKeyMaxAge?: number | undefined;
|
|
130
|
+
password?: string | undefined;
|
|
131
|
+
jwtSecret?: string | undefined;
|
|
132
|
+
} | undefined;
|
|
133
|
+
ai?: {
|
|
134
|
+
openAIKey?: string | null | undefined;
|
|
135
|
+
openAIModel?: string | undefined;
|
|
136
|
+
extraContextPrompts?: (string | undefined)[] | undefined;
|
|
137
|
+
} | undefined;
|
|
138
|
+
traces?: {
|
|
139
|
+
extraExporters?: ({
|
|
140
|
+
export?: {} | undefined;
|
|
141
|
+
shutdown?: {} | undefined;
|
|
142
|
+
forceFlush?: {} | undefined;
|
|
143
|
+
} | undefined)[] | undefined;
|
|
144
|
+
extraProcessors?: ({
|
|
145
|
+
forceFlush?: {} | undefined;
|
|
146
|
+
onStart?: {} | undefined;
|
|
147
|
+
onEnd?: {} | undefined;
|
|
148
|
+
shutdown?: {} | undefined;
|
|
149
|
+
} | undefined)[] | undefined;
|
|
150
|
+
mainProcessorOptions?: {
|
|
151
|
+
config?: {
|
|
152
|
+
maxExportBatchSize?: number | undefined;
|
|
153
|
+
scheduledDelayMillis?: number | undefined;
|
|
154
|
+
exportTimeoutMillis?: number | undefined;
|
|
155
|
+
maxQueueSize?: number | undefined;
|
|
156
|
+
} | undefined;
|
|
157
|
+
} | undefined;
|
|
158
|
+
memoryExporter?: {
|
|
159
|
+
enabled?: boolean | undefined;
|
|
160
|
+
retentionTimeSeconds?: number | undefined;
|
|
161
|
+
} | undefined;
|
|
162
|
+
filters?: any[] | undefined;
|
|
163
|
+
} | undefined;
|
|
164
|
+
metrics?: {
|
|
165
|
+
mainMetricReaderOptions?: {
|
|
166
|
+
exportIntervalMillis?: number | undefined;
|
|
167
|
+
metricProducers?: ({
|
|
168
|
+
collect?: {} | undefined;
|
|
169
|
+
} | undefined)[] | undefined;
|
|
170
|
+
} | undefined;
|
|
171
|
+
extraReaders?: ({
|
|
172
|
+
setMetricProducer?: {} | undefined;
|
|
173
|
+
selectAggregation?: {} | undefined;
|
|
174
|
+
selectAggregationTemporality?: {} | undefined;
|
|
175
|
+
selectCardinalityLimit?: {} | undefined;
|
|
176
|
+
collect?: {} | undefined;
|
|
177
|
+
shutdown?: {} | undefined;
|
|
178
|
+
forceFlush?: {} | undefined;
|
|
179
|
+
} | undefined)[] | undefined;
|
|
180
|
+
extraViews?: ({
|
|
181
|
+
name?: string | undefined;
|
|
182
|
+
description?: string | undefined;
|
|
183
|
+
attributesProcessors?: ({
|
|
184
|
+
process?: {} | undefined;
|
|
185
|
+
} | undefined)[] | undefined;
|
|
186
|
+
aggregation?: {
|
|
187
|
+
type?: import("@opentelemetry/sdk-metrics").AggregationType.EXPONENTIAL_HISTOGRAM | undefined;
|
|
188
|
+
options?: {
|
|
189
|
+
recordMinMax?: boolean | undefined;
|
|
190
|
+
maxSize?: number | undefined;
|
|
191
|
+
} | undefined;
|
|
192
|
+
} | {
|
|
193
|
+
type?: import("@opentelemetry/sdk-metrics").AggregationType.EXPLICIT_BUCKET_HISTOGRAM | undefined;
|
|
194
|
+
options?: {
|
|
195
|
+
recordMinMax?: boolean | undefined;
|
|
196
|
+
boundaries?: (number | undefined)[] | undefined;
|
|
197
|
+
} | undefined;
|
|
198
|
+
} | {
|
|
199
|
+
type?: import("@opentelemetry/sdk-metrics").AggregationType.SUM | undefined;
|
|
200
|
+
} | {
|
|
201
|
+
type?: import("@opentelemetry/sdk-metrics").AggregationType.DROP | undefined;
|
|
202
|
+
} | {
|
|
203
|
+
type?: import("@opentelemetry/sdk-metrics").AggregationType.DEFAULT | undefined;
|
|
204
|
+
} | {
|
|
205
|
+
type?: import("@opentelemetry/sdk-metrics").AggregationType.LAST_VALUE | undefined;
|
|
206
|
+
} | undefined;
|
|
207
|
+
aggregationCardinalityLimit?: number | undefined;
|
|
208
|
+
instrumentType?: import("@opentelemetry/sdk-metrics").InstrumentType | undefined;
|
|
209
|
+
instrumentName?: string | undefined;
|
|
210
|
+
instrumentUnit?: string | undefined;
|
|
211
|
+
meterName?: string | undefined;
|
|
212
|
+
meterVersion?: string | undefined;
|
|
213
|
+
meterSchemaUrl?: string | undefined;
|
|
214
|
+
} | undefined)[] | undefined;
|
|
215
|
+
memoryExporter?: {
|
|
216
|
+
enabled?: boolean | undefined;
|
|
217
|
+
retentionTimeSeconds?: number | undefined;
|
|
218
|
+
} | undefined;
|
|
219
|
+
filters?: any[] | undefined;
|
|
220
|
+
} | undefined;
|
|
221
|
+
logs?: {
|
|
222
|
+
extraExporters?: ({
|
|
223
|
+
export?: {} | undefined;
|
|
224
|
+
shutdown?: {} | undefined;
|
|
225
|
+
} | undefined)[] | undefined;
|
|
226
|
+
extraProcessors?: ({
|
|
227
|
+
forceFlush?: {} | undefined;
|
|
228
|
+
onEmit?: {} | undefined;
|
|
229
|
+
shutdown?: {} | undefined;
|
|
230
|
+
} | undefined)[] | undefined;
|
|
231
|
+
memoryExporter?: {
|
|
232
|
+
enabled?: boolean | undefined;
|
|
233
|
+
retentionTimeSeconds?: number | undefined;
|
|
234
|
+
} | undefined;
|
|
235
|
+
filters?: any[] | undefined;
|
|
236
|
+
} | undefined;
|
|
237
|
+
plugins?: {
|
|
238
|
+
enabled?: boolean | undefined;
|
|
239
|
+
extraPlugins?: ({
|
|
240
|
+
[x: string]: any;
|
|
241
|
+
id?: string | undefined;
|
|
242
|
+
name?: string | undefined;
|
|
243
|
+
active?: boolean | undefined;
|
|
244
|
+
description?: string | undefined;
|
|
245
|
+
version?: string | undefined;
|
|
246
|
+
pluginImplementation?: {
|
|
247
|
+
newTrace?: {} | undefined;
|
|
248
|
+
newMetric?: {} | undefined;
|
|
249
|
+
newLog?: {} | undefined;
|
|
250
|
+
} | undefined;
|
|
251
|
+
} | undefined)[] | undefined;
|
|
252
|
+
} | undefined;
|
|
253
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LogRecordExporter, LogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
2
|
+
import { IMetricReader } from "@opentelemetry/sdk-metrics";
|
|
3
|
+
import { SpanExporter, SpanProcessor } from "@opentelemetry/sdk-trace-node";
|
|
4
|
+
import { defaultConfig } from "./config.js";
|
|
5
|
+
import { ViewOptions } from "@opentelemetry/sdk-metrics/build/src/view/View.js";
|
|
6
|
+
export type DeepPartial<T> = T extends object ? {
|
|
7
|
+
[P in keyof T]?: DeepPartial<T[P]>;
|
|
8
|
+
} : T;
|
|
9
|
+
export type OasTlmConfig = typeof defaultConfig;
|
|
10
|
+
export type UserConfig = {
|
|
11
|
+
general?: Partial<OasTlmConfig["general"]>;
|
|
12
|
+
auth?: Partial<OasTlmConfig["auth"]>;
|
|
13
|
+
ai?: {
|
|
14
|
+
extraContextPrompts?: string[];
|
|
15
|
+
openAIModel?: string;
|
|
16
|
+
};
|
|
17
|
+
traces?: {
|
|
18
|
+
extraExporters?: SpanExporter[];
|
|
19
|
+
extraProcessors?: SpanProcessor[];
|
|
20
|
+
memoryExporter?: Partial<OasTlmConfig["traces"]["memoryExporter"]>;
|
|
21
|
+
};
|
|
22
|
+
metrics?: {
|
|
23
|
+
mainMetricReaderOptions?: Partial<OasTlmConfig["metrics"]["mainMetricReaderOptions"]>;
|
|
24
|
+
extraReaders?: IMetricReader[];
|
|
25
|
+
extraViews?: ViewOptions[];
|
|
26
|
+
memoryExporter?: Partial<OasTlmConfig["metrics"]["memoryExporter"]>;
|
|
27
|
+
};
|
|
28
|
+
logs?: {
|
|
29
|
+
extraExporters?: LogRecordExporter[];
|
|
30
|
+
extraProcessors?: LogRecordProcessor[];
|
|
31
|
+
memoryExporter?: Partial<OasTlmConfig["logs"]["memoryExporter"]>;
|
|
32
|
+
};
|
|
33
|
+
plugins?: Partial<OasTlmConfig["plugins"]>;
|
|
34
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "./config/bootConfig.js";
|
|
2
|
+
import './telemetry/initializeTelemetry.js';
|
|
2
3
|
import { Router } from 'express';
|
|
3
|
-
import {
|
|
4
|
+
import { UserConfig } from './config/config.types.js';
|
|
4
5
|
/**
|
|
5
|
-
* Returns the
|
|
6
|
+
* Returns the OAS-Telemetry middleware.
|
|
6
7
|
* All parameters are optional. However, either `spec` or `specFileName` must be provided to enable endpoint filtering.
|
|
7
8
|
*/
|
|
8
|
-
export default function oasTelemetry(oasTlmInputConfig
|
|
9
|
+
export default function oasTelemetry(oasTlmInputConfig?: UserConfig): Router;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ExportResult } from '@opentelemetry/core';
|
|
2
2
|
import { ReadableLogRecord, LogRecordExporter } from '@opentelemetry/sdk-logs';
|
|
3
|
-
|
|
3
|
+
import { Enabler } from '../wrappers.js';
|
|
4
|
+
export declare class InMemoryDbLogExporter extends Enabler implements LogRecordExporter {
|
|
4
5
|
private _db;
|
|
5
6
|
private _miniSearch;
|
|
6
|
-
private
|
|
7
|
-
constructor();
|
|
7
|
+
private _retentionTimeInSeconds;
|
|
8
|
+
constructor(retentionTimeInSeconds?: number);
|
|
8
9
|
/**
|
|
9
10
|
* Export logs.
|
|
10
11
|
* @param logs
|
|
@@ -18,9 +19,6 @@ export declare class InMemoryLogRecordExporter implements LogRecordExporter {
|
|
|
18
19
|
shutdown(): Promise<void>;
|
|
19
20
|
find(query: any, messageSearch: string | null, callback: (err: any, docs: any) => void): void;
|
|
20
21
|
insert(data: any[], callback: (err: any, newDocs: any[]) => void): void;
|
|
21
|
-
start(): void;
|
|
22
|
-
stop(): void;
|
|
23
|
-
isRunning(): boolean;
|
|
24
22
|
getFinishedLogs(): any[];
|
|
25
23
|
/**
|
|
26
24
|
* @copyright The OpenTelemetry Authors
|
|
@@ -29,5 +27,7 @@ export declare class InMemoryLogRecordExporter implements LogRecordExporter {
|
|
|
29
27
|
* @param logRecord
|
|
30
28
|
*/
|
|
31
29
|
private _formatLogRecord;
|
|
30
|
+
set retentionTimeInSeconds(retentionTimeInSeconds: number);
|
|
32
31
|
private _insertLogs;
|
|
32
|
+
private _startCleanupJob;
|
|
33
33
|
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { ResourceMetrics } from '@opentelemetry/sdk-metrics';
|
|
2
|
-
|
|
1
|
+
import { PushMetricExporter, ResourceMetrics } from '@opentelemetry/sdk-metrics';
|
|
2
|
+
import { Enabler } from '../wrappers.js';
|
|
3
|
+
export declare class InMemoryDbMetricExporter extends Enabler implements PushMetricExporter {
|
|
3
4
|
private _metrics;
|
|
4
|
-
private
|
|
5
|
-
constructor();
|
|
5
|
+
private _retentionTimeInSeconds;
|
|
6
|
+
constructor(retentionTimeInSeconds?: number);
|
|
6
7
|
export(metrics: ResourceMetrics, resultCallback: any): any;
|
|
7
|
-
start(): void;
|
|
8
|
-
stop(): void;
|
|
9
|
-
isRunning(): boolean;
|
|
10
8
|
shutdown(): Promise<void>;
|
|
11
9
|
forceFlush(): Promise<void>;
|
|
12
10
|
find(search: any, callback: any): void;
|
|
@@ -18,4 +16,6 @@ export declare class InMemoryDBMetricsExporter {
|
|
|
18
16
|
* @param callback - The callback to execute after insertion.
|
|
19
17
|
*/
|
|
20
18
|
insert(metrics: any[], callback: (err: any, newDocs: any[]) => void): void;
|
|
19
|
+
set retentionTimeInSeconds(retentionTimeInSeconds: number);
|
|
20
|
+
private _startCleanupJob;
|
|
21
21
|
}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { ExportResultCode } from '@opentelemetry/core';
|
|
2
|
-
import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
|
|
3
|
-
import {
|
|
4
|
-
export declare class
|
|
2
|
+
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
import { Enabler } from '../wrappers.js';
|
|
4
|
+
export declare class InMemoryDbSpanExporter extends Enabler implements SpanExporter {
|
|
5
5
|
private _spans;
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
private _baseUrl;
|
|
7
|
+
private _retentionTimeInSeconds;
|
|
8
|
+
constructor(retentionTimeInSeconds?: number);
|
|
9
|
+
set baseUrl(baseUrl: string);
|
|
10
|
+
set retentionTimeInSeconds(retentionTimeInSeconds: number);
|
|
9
11
|
export(readableSpans: ReadableSpan[], resultCallback: (arg0: {
|
|
10
12
|
code: ExportResultCode;
|
|
11
13
|
error?: Error;
|
|
12
14
|
}) => void): void;
|
|
13
|
-
start(): void;
|
|
14
|
-
stop(): void;
|
|
15
|
-
isRunning(): boolean;
|
|
16
15
|
shutdown(): Promise<void>;
|
|
17
16
|
/**
|
|
18
17
|
* Exports any pending spans in the exporter
|
|
@@ -27,4 +26,5 @@ export declare class InMemoryExporter implements OasTlmExporter {
|
|
|
27
26
|
* @param callback - The callback to execute after insertion.
|
|
28
27
|
*/
|
|
29
28
|
insert(spans: any[], callback: (err: any, newDocs: any[]) => void): void;
|
|
29
|
+
_startCleanupJob(): void;
|
|
30
30
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ExportResult } from '@opentelemetry/core';
|
|
2
|
+
import { ReadableLogRecord, LogRecordExporter } from '@opentelemetry/sdk-logs';
|
|
3
|
+
import { Enabler } from '../wrappers.js';
|
|
4
|
+
export declare class PluginLogExporter extends Enabler implements LogRecordExporter {
|
|
5
|
+
constructor();
|
|
6
|
+
export(logs: ReadableLogRecord[], resultCallback: (result: ExportResult) => void): void;
|
|
7
|
+
shutdown(): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ExportResultCode } from '@opentelemetry/core';
|
|
2
|
+
import { ResourceMetrics, PushMetricExporter } from '@opentelemetry/sdk-metrics';
|
|
3
|
+
import { Enabler } from '../wrappers.js';
|
|
4
|
+
export declare class PluginMetricExporter extends Enabler implements PushMetricExporter {
|
|
5
|
+
constructor();
|
|
6
|
+
export(metrics: ResourceMetrics, resultCallback: (result: {
|
|
7
|
+
code: ExportResultCode;
|
|
8
|
+
error?: Error;
|
|
9
|
+
}) => void): void;
|
|
10
|
+
shutdown(): Promise<void>;
|
|
11
|
+
forceFlush(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ExportResultCode } from '@opentelemetry/core';
|
|
2
|
+
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
import { Enabler } from '../wrappers.js';
|
|
4
|
+
export declare class PluginSpanExporter extends Enabler implements SpanExporter {
|
|
5
|
+
private _baseUrl;
|
|
6
|
+
constructor();
|
|
7
|
+
set baseUrl(baseUrl: string);
|
|
8
|
+
export(readableSpans: ReadableSpan[], resultCallback: (result: {
|
|
9
|
+
code: ExportResultCode;
|
|
10
|
+
error?: Error;
|
|
11
|
+
}) => void): void;
|
|
12
|
+
shutdown(): Promise<void>;
|
|
13
|
+
forceFlush(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Context } from '@opentelemetry/api';
|
|
2
|
+
import type { LogRecordProcessor } from '@opentelemetry/sdk-logs';
|
|
3
|
+
import type { LogRecord } from '@opentelemetry/sdk-logs';
|
|
4
|
+
export declare class DynamicMultiLogRecordProcessor implements LogRecordProcessor {
|
|
5
|
+
private _processors;
|
|
6
|
+
private _forceFlushTimeoutMillis;
|
|
7
|
+
constructor(initialProcessors?: LogRecordProcessor[], forceFlushTimeoutMillis?: number);
|
|
8
|
+
/**
|
|
9
|
+
* Add a new LogRecordProcessor or an array of LogRecordProcessors at runtime.
|
|
10
|
+
*/
|
|
11
|
+
addProcessors(processor: LogRecordProcessor | LogRecordProcessor[]): void;
|
|
12
|
+
/**
|
|
13
|
+
* Remove a specific LogRecordProcessor.
|
|
14
|
+
*/
|
|
15
|
+
removeProcessor(processor: LogRecordProcessor): void;
|
|
16
|
+
/**
|
|
17
|
+
* Clear all LogRecordProcessors.
|
|
18
|
+
*/
|
|
19
|
+
clearProcessors(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Called when a log record is emitted.
|
|
22
|
+
*/
|
|
23
|
+
onEmit(logRecord: LogRecord, context?: Context): void;
|
|
24
|
+
/**
|
|
25
|
+
* Force flush all processors with timeout.
|
|
26
|
+
*/
|
|
27
|
+
forceFlush(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Shutdown all processors.
|
|
30
|
+
*/
|
|
31
|
+
shutdown(): Promise<void>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SpanProcessor, ReadableSpan, Span } from '@opentelemetry/sdk-trace-base';
|
|
2
|
+
import { Context } from '@opentelemetry/api';
|
|
3
|
+
export declare class DynamicMultiSpanProcessor implements SpanProcessor {
|
|
4
|
+
private _spanProcessors;
|
|
5
|
+
constructor(initialProcessors?: SpanProcessor[]);
|
|
6
|
+
/**
|
|
7
|
+
* Add a new SpanProcessor or an array of SpanProcessors at runtime.
|
|
8
|
+
*/
|
|
9
|
+
addProcessors(processor: SpanProcessor | SpanProcessor[]): void;
|
|
10
|
+
/**
|
|
11
|
+
* Remove a specific SpanProcessor if needed.
|
|
12
|
+
*/
|
|
13
|
+
removeProcessor(processor: SpanProcessor): void;
|
|
14
|
+
/**
|
|
15
|
+
* Clear all processors.
|
|
16
|
+
*/
|
|
17
|
+
clearProcessors(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Called when a span is started.
|
|
20
|
+
*/
|
|
21
|
+
onStart(span: Span, context: Context): void;
|
|
22
|
+
/**
|
|
23
|
+
* Called when a span ends.
|
|
24
|
+
*/
|
|
25
|
+
onEnd(span: ReadableSpan): void;
|
|
26
|
+
/**
|
|
27
|
+
* Force flush all processors.
|
|
28
|
+
*/
|
|
29
|
+
forceFlush(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Shutdown all processors.
|
|
32
|
+
*/
|
|
33
|
+
shutdown(): Promise<void>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare function removeCircularRefs(obj: any): any;
|
|
2
|
+
/**
|
|
3
|
+
* Recursively converts dot-separated keys in an object to nested objects.
|
|
4
|
+
*
|
|
5
|
+
* @param {any} obj - The object to process.
|
|
6
|
+
* @returns {any} - The object with all dot-separated keys converted to nested objects.
|
|
7
|
+
* @example
|
|
8
|
+
* Input:
|
|
9
|
+
* {
|
|
10
|
+
* "http.method": "GET",
|
|
11
|
+
* "http.url": "http://example.com",
|
|
12
|
+
* "nested.obj.key": "value"
|
|
13
|
+
* }
|
|
14
|
+
* Output:
|
|
15
|
+
* {
|
|
16
|
+
* "http": {
|
|
17
|
+
* "method": "GET",
|
|
18
|
+
* "url": "http://example.com"
|
|
19
|
+
* },
|
|
20
|
+
* "nested": {
|
|
21
|
+
* "obj": {
|
|
22
|
+
* "key": "value"
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
*/
|
|
27
|
+
export declare function applyNesting(obj: any): any;
|