Fix telemetry shutdown noise and improve token usage diagnostics (#444)
Co-authored-by: zuolingxuan <zuolingxuan@bytedance.com>
This commit is contained in:
committed by
GitHub
Unverified
parent
01adc828b5
commit
995a7f070d
92
tests/unit/telemetry.test.ts
Normal file
92
tests/unit/telemetry.test.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
const {
|
||||
shutdownMock,
|
||||
captureMock,
|
||||
getSettingMock,
|
||||
setSettingMock,
|
||||
loggerDebugMock,
|
||||
loggerErrorMock,
|
||||
} = vi.hoisted(() => ({
|
||||
shutdownMock: vi.fn(),
|
||||
captureMock: vi.fn(),
|
||||
getSettingMock: vi.fn(),
|
||||
setSettingMock: vi.fn(),
|
||||
loggerDebugMock: vi.fn(),
|
||||
loggerErrorMock: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('posthog-node', () => ({
|
||||
PostHog: vi.fn(function PostHogMock() {
|
||||
return {
|
||||
capture: captureMock,
|
||||
shutdown: shutdownMock,
|
||||
};
|
||||
}),
|
||||
}));
|
||||
|
||||
vi.mock('@electron/utils/store', () => ({
|
||||
getSetting: getSettingMock,
|
||||
setSetting: setSettingMock,
|
||||
}));
|
||||
|
||||
vi.mock('@electron/utils/logger', () => ({
|
||||
logger: {
|
||||
debug: loggerDebugMock,
|
||||
error: loggerErrorMock,
|
||||
info: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock('electron', () => ({
|
||||
app: {
|
||||
getVersion: () => '0.2.1',
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock('node-machine-id', () => ({
|
||||
machineIdSync: () => 'machine-id-1',
|
||||
}));
|
||||
|
||||
describe('main telemetry shutdown', () => {
|
||||
beforeEach(() => {
|
||||
vi.resetModules();
|
||||
vi.clearAllMocks();
|
||||
getSettingMock.mockImplementation(async (key: string) => {
|
||||
switch (key) {
|
||||
case 'telemetryEnabled':
|
||||
return true;
|
||||
case 'machineId':
|
||||
return 'existing-machine-id';
|
||||
case 'hasReportedInstall':
|
||||
return true;
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
});
|
||||
setSettingMock.mockResolvedValue(undefined);
|
||||
captureMock.mockReturnValue(undefined);
|
||||
});
|
||||
|
||||
it('ignores PostHog network timeout errors during shutdown', async () => {
|
||||
shutdownMock.mockRejectedValueOnce(
|
||||
Object.assign(new Error('Network error while fetching PostHog'), {
|
||||
name: 'PostHogFetchNetworkError',
|
||||
cause: Object.assign(new Error('The operation was aborted due to timeout'), {
|
||||
name: 'TimeoutError',
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
const { initTelemetry, shutdownTelemetry } = await import('@electron/utils/telemetry');
|
||||
await initTelemetry();
|
||||
await shutdownTelemetry();
|
||||
|
||||
expect(loggerErrorMock).not.toHaveBeenCalled();
|
||||
expect(loggerDebugMock).toHaveBeenCalledWith(
|
||||
'Ignored telemetry shutdown network error:',
|
||||
expect.objectContaining({ name: 'PostHogFetchNetworkError' }),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user