mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-06-10 01:44:44 +00:00
* feat: add backend OpenTelemetry tracing * fix: address telemetry type checks * fix: mark aborted telemetry requests as errors * fix: record telemetry identity after auth * fix: avoid forced telemetry signal exit * fix: harden telemetry request attribution * fix: record telemetry errors on request span * chore: order imports and reorganize middleware usage * fix: reduce telemetry startup overhead * fix: preserve live telemetry controller state * fix: redact telemetry URL attributes
91 lines
2.5 KiB
JavaScript
91 lines
2.5 KiB
JavaScript
describe('telemetry bootstrap', () => {
|
|
const originalEnv = process.env;
|
|
|
|
beforeEach(() => {
|
|
jest.resetModules();
|
|
process.env = { ...originalEnv };
|
|
delete process.env.OTEL_SDK_DISABLED;
|
|
delete process.env.OTEL_TRACING_ENABLED;
|
|
jest.doMock('dotenv', () => ({
|
|
config: jest.fn(),
|
|
}));
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env = originalEnv;
|
|
jest.dontMock('dotenv');
|
|
jest.dontMock('@librechat/api/telemetry');
|
|
jest.resetModules();
|
|
});
|
|
|
|
it('does not load OpenTelemetry packages by default', () => {
|
|
jest.doMock(
|
|
'@librechat/api/telemetry',
|
|
() => {
|
|
throw new Error('telemetry package should not load when tracing is disabled');
|
|
},
|
|
{ virtual: true },
|
|
);
|
|
|
|
const telemetry = require('./telemetry');
|
|
|
|
expect(telemetry.enabled).toBe(false);
|
|
expect(telemetry.status).toBe('disabled');
|
|
});
|
|
|
|
it('does not load OpenTelemetry packages when the SDK is disabled', () => {
|
|
process.env.OTEL_SDK_DISABLED = 'true';
|
|
process.env.OTEL_TRACING_ENABLED = 'true';
|
|
jest.doMock(
|
|
'@librechat/api/telemetry',
|
|
() => {
|
|
throw new Error('telemetry package should not load when the SDK is disabled');
|
|
},
|
|
{ virtual: true },
|
|
);
|
|
|
|
const telemetry = require('./telemetry');
|
|
|
|
expect(telemetry.enabled).toBe(false);
|
|
expect(telemetry.status).toBe('disabled');
|
|
});
|
|
|
|
it('loads and exposes telemetry middleware when tracing is enabled', () => {
|
|
process.env.OTEL_TRACING_ENABLED = 'true';
|
|
let enabled = true;
|
|
let status = 'starting';
|
|
const telemetryMiddleware = jest.fn();
|
|
const telemetryErrorMiddleware = jest.fn();
|
|
const initializeTelemetry = jest.fn(() => ({
|
|
get enabled() {
|
|
return enabled;
|
|
},
|
|
get status() {
|
|
return status;
|
|
},
|
|
shutdown: jest.fn(),
|
|
}));
|
|
jest.doMock(
|
|
'@librechat/api/telemetry',
|
|
() => ({
|
|
initializeTelemetry,
|
|
telemetryMiddleware,
|
|
telemetryErrorMiddleware,
|
|
}),
|
|
{ virtual: true },
|
|
);
|
|
|
|
const telemetry = require('./telemetry');
|
|
|
|
expect(initializeTelemetry).toHaveBeenCalledTimes(1);
|
|
expect(telemetry.enabled).toBe(true);
|
|
expect(telemetry.status).toBe('starting');
|
|
expect(telemetry.telemetryMiddleware).toBe(telemetryMiddleware);
|
|
expect(telemetry.telemetryErrorMiddleware).toBe(telemetryErrorMiddleware);
|
|
|
|
enabled = false;
|
|
status = 'failed';
|
|
expect(telemetry.enabled).toBe(false);
|
|
expect(telemetry.status).toBe('failed');
|
|
});
|
|
});
|