Ensure telemetry events are flushed immediately (#1344)
The previous implementation used `flushIfNeeded` to batch most telemetry events, but it was not reliably sending them, leading to data loss. Notably, the `startSession` event, which already used `flushToClearcut`, was working correctly, indicating an issue with the batching logic itself. This change replaces all calls to `flushIfNeeded` with `flushToClearcut` to align all event logging with the working `startSession` implementation and ensure that events are sent immediately. This prioritizes the reliability of data collection over network efficiency. This is a temporary solution to prevent further data loss. The underlying issue with the batching mechanism in `flushIfNeeded` should be investigated and fixed in the future, at which point this change can be reverted.
This commit is contained in:
parent
58572a6eaa
commit
b443b5e800
|
@ -289,6 +289,7 @@ describe('useGeminiStream', () => {
|
||||||
getCheckpointingEnabled: vi.fn(() => false),
|
getCheckpointingEnabled: vi.fn(() => false),
|
||||||
getGeminiClient: mockGetGeminiClient,
|
getGeminiClient: mockGetGeminiClient,
|
||||||
getUsageStatisticsEnabled: () => true,
|
getUsageStatisticsEnabled: () => true,
|
||||||
|
getDebugMode: () => false,
|
||||||
addHistory: vi.fn(),
|
addHistory: vi.fn(),
|
||||||
} as unknown as Config;
|
} as unknown as Config;
|
||||||
mockOnDebugMessage = vi.fn();
|
mockOnDebugMessage = vi.fn();
|
||||||
|
|
|
@ -49,6 +49,7 @@ const mockConfig = {
|
||||||
getToolRegistry: vi.fn(() => mockToolRegistry as unknown as ToolRegistry),
|
getToolRegistry: vi.fn(() => mockToolRegistry as unknown as ToolRegistry),
|
||||||
getApprovalMode: vi.fn(() => ApprovalMode.DEFAULT),
|
getApprovalMode: vi.fn(() => ApprovalMode.DEFAULT),
|
||||||
getUsageStatisticsEnabled: () => true,
|
getUsageStatisticsEnabled: () => true,
|
||||||
|
getDebugMode: () => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mockTool: Tool = {
|
const mockTool: Tool = {
|
||||||
|
|
|
@ -78,7 +78,8 @@ describe('CoreToolScheduler', () => {
|
||||||
const mockConfig = {
|
const mockConfig = {
|
||||||
getSessionId: () => 'test-session-id',
|
getSessionId: () => 'test-session-id',
|
||||||
getUsageStatisticsEnabled: () => true,
|
getUsageStatisticsEnabled: () => true,
|
||||||
} as Config;
|
getDebugMode: () => false,
|
||||||
|
} as unknown as Config;
|
||||||
|
|
||||||
const scheduler = new CoreToolScheduler({
|
const scheduler = new CoreToolScheduler({
|
||||||
config: mockConfig,
|
config: mockConfig,
|
||||||
|
|
|
@ -28,6 +28,7 @@ const mockConfig = {
|
||||||
getSessionId: () => 'test-session-id',
|
getSessionId: () => 'test-session-id',
|
||||||
getTelemetryLogPromptsEnabled: () => true,
|
getTelemetryLogPromptsEnabled: () => true,
|
||||||
getUsageStatisticsEnabled: () => true,
|
getUsageStatisticsEnabled: () => true,
|
||||||
|
getDebugMode: () => false,
|
||||||
} as unknown as Config;
|
} as unknown as Config;
|
||||||
|
|
||||||
describe('GeminiChat', () => {
|
describe('GeminiChat', () => {
|
||||||
|
|
|
@ -19,6 +19,7 @@ import { Part, Type } from '@google/genai';
|
||||||
const mockConfig = {
|
const mockConfig = {
|
||||||
getSessionId: () => 'test-session-id',
|
getSessionId: () => 'test-session-id',
|
||||||
getUsageStatisticsEnabled: () => true,
|
getUsageStatisticsEnabled: () => true,
|
||||||
|
getDebugMode: () => false,
|
||||||
} as unknown as Config;
|
} as unknown as Config;
|
||||||
|
|
||||||
describe('executeToolCall', () => {
|
describe('executeToolCall', () => {
|
||||||
|
|
|
@ -249,7 +249,7 @@ export class ClearcutLogger {
|
||||||
);
|
);
|
||||||
|
|
||||||
this.enqueueLogEvent(this.createLogEvent(new_prompt_event_name, data));
|
this.enqueueLogEvent(this.createLogEvent(new_prompt_event_name, data));
|
||||||
this.flushIfNeeded();
|
this.flushToClearcut();
|
||||||
}
|
}
|
||||||
|
|
||||||
logToolCallEvent(event: ToolCallEvent): void {
|
logToolCallEvent(event: ToolCallEvent): void {
|
||||||
|
@ -278,7 +278,7 @@ export class ClearcutLogger {
|
||||||
);
|
);
|
||||||
|
|
||||||
this.enqueueLogEvent(this.createLogEvent(tool_call_event_name, data));
|
this.enqueueLogEvent(this.createLogEvent(tool_call_event_name, data));
|
||||||
this.flushIfNeeded();
|
this.flushToClearcut();
|
||||||
}
|
}
|
||||||
|
|
||||||
logApiRequestEvent(event: ApiRequestEvent): void {
|
logApiRequestEvent(event: ApiRequestEvent): void {
|
||||||
|
@ -287,7 +287,7 @@ export class ClearcutLogger {
|
||||||
data.set(EventMetadataKey.GEMINI_CLI_API_REQUEST_MODEL, event.model);
|
data.set(EventMetadataKey.GEMINI_CLI_API_REQUEST_MODEL, event.model);
|
||||||
|
|
||||||
this.enqueueLogEvent(this.createLogEvent(api_request_event_name, data));
|
this.enqueueLogEvent(this.createLogEvent(api_request_event_name, data));
|
||||||
this.flushIfNeeded();
|
this.flushToClearcut();
|
||||||
}
|
}
|
||||||
|
|
||||||
logApiResponseEvent(event: ApiResponseEvent): void {
|
logApiResponseEvent(event: ApiResponseEvent): void {
|
||||||
|
@ -328,7 +328,7 @@ export class ClearcutLogger {
|
||||||
);
|
);
|
||||||
|
|
||||||
this.enqueueLogEvent(this.createLogEvent(api_response_event_name, data));
|
this.enqueueLogEvent(this.createLogEvent(api_response_event_name, data));
|
||||||
this.flushIfNeeded();
|
this.flushToClearcut();
|
||||||
}
|
}
|
||||||
|
|
||||||
logApiErrorEvent(event: ApiErrorEvent): void {
|
logApiErrorEvent(event: ApiErrorEvent): void {
|
||||||
|
@ -349,7 +349,7 @@ export class ClearcutLogger {
|
||||||
);
|
);
|
||||||
|
|
||||||
this.enqueueLogEvent(this.createLogEvent(api_error_event_name, data));
|
this.enqueueLogEvent(this.createLogEvent(api_error_event_name, data));
|
||||||
this.flushIfNeeded();
|
this.flushToClearcut();
|
||||||
}
|
}
|
||||||
|
|
||||||
logEndSessionEvent(event: EndSessionEvent): void {
|
logEndSessionEvent(event: EndSessionEvent): void {
|
||||||
|
|
Loading…
Reference in New Issue