summaryrefslogtreecommitdiff
path: root/packages/core/src
diff options
context:
space:
mode:
authorowenofbrien <[email protected]>2025-06-23 12:18:58 -0500
committerGitHub <[email protected]>2025-06-23 10:18:58 -0700
commit631591ce79c0b2fedb3cc6c2e30599e7c42ab88f (patch)
treece63899747569051300078458d72ec9c6ea713b5 /packages/core/src
parent07880d43d27f3d608f6b082e38ba188ed5dd67af (diff)
Enable clearcut logging by default (#1309)
Clearcut logging can now be disabled via disableDataCollection in user settings
Diffstat (limited to 'packages/core/src')
-rw-r--r--packages/core/src/config/config.ts13
-rw-r--r--packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts120
2 files changed, 79 insertions, 54 deletions
diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts
index a9696206..d9161fae 100644
--- a/packages/core/src/config/config.ts
+++ b/packages/core/src/config/config.ts
@@ -117,7 +117,6 @@ export interface ConfigParameters {
fileDiscoveryService?: FileDiscoveryService;
bugCommand?: BugCommandSettings;
model: string;
- disableDataCollection?: boolean;
extensionContextFilePaths?: string[];
}
@@ -155,7 +154,6 @@ export class Config {
private readonly cwd: string;
private readonly bugCommand: BugCommandSettings | undefined;
private readonly model: string;
- private readonly disableDataCollection: boolean;
private readonly extensionContextFilePaths: string[];
constructor(params: ConfigParameters) {
@@ -183,6 +181,7 @@ export class Config {
target: params.telemetry?.target ?? DEFAULT_TELEMETRY_TARGET,
otlpEndpoint: params.telemetry?.otlpEndpoint ?? DEFAULT_OTLP_ENDPOINT,
logPrompts: params.telemetry?.logPrompts ?? true,
+ disableDataCollection: params.telemetry?.disableDataCollection ?? false,
};
this.fileFiltering = {
@@ -196,8 +195,6 @@ export class Config {
this.fileDiscoveryService = params.fileDiscoveryService ?? null;
this.bugCommand = params.bugCommand;
this.model = params.model;
- this.disableDataCollection =
- params.telemetry?.disableDataCollection ?? true;
this.extensionContextFilePaths = params.extensionContextFilePaths ?? [];
if (params.contextFileName) {
@@ -208,10 +205,12 @@ export class Config {
initializeTelemetry(this);
}
- if (!this.disableDataCollection) {
- ClearcutLogger.getInstance(this)?.enqueueLogEvent(
+ if (!this.getDisableDataCollection()) {
+ ClearcutLogger.getInstance(this)?.logStartSessionEvent(
new StartSessionEvent(this),
);
+ } else {
+ console.log('Data collection is disabled.');
}
}
@@ -387,7 +386,7 @@ export class Config {
}
getDisableDataCollection(): boolean {
- return this.disableDataCollection;
+ return this.telemetrySettings.disableDataCollection ?? false;
}
getExtensionContextFilePaths(): string[] {
diff --git a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
index 8da928c7..aa4afe4c 100644
--- a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
+++ b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
@@ -64,7 +64,7 @@ export class ClearcutLogger {
]);
}
- createLogEvent(name: string, data: Map<EventMetadataKey, string>): object {
+ createLogEvent(name: string, data: object): object {
return {
Application: 'GEMINI_CLI',
event_name: name,
@@ -83,6 +83,7 @@ export class ClearcutLogger {
}
flushToClearcut(): Promise<LogResponse> {
+ console.log('Flushing log events to Clearcut.');
return new Promise<Buffer>((resolve, reject) => {
const request = [
{
@@ -92,6 +93,7 @@ export class ClearcutLogger {
},
];
const body = JSON.stringify(request);
+ console.log('Clearcut POST request body:', body);
const options = {
hostname: 'play.googleapis.com',
path: '/log',
@@ -106,6 +108,7 @@ export class ClearcutLogger {
});
});
req.on('error', (e) => {
+ console.log('Clearcut POST request error: ', e);
reject(e);
});
req.end(body);
@@ -152,58 +155,81 @@ export class ClearcutLogger {
// message is corrupted.
return undefined;
}
- return {
+
+ const returnVal = {
nextRequestWaitMs: Number(ms),
};
+ console.log('Clearcut response: ', returnVal);
+ return returnVal;
}
logStartSessionEvent(event: StartSessionEvent): void {
- const data: Map<EventMetadataKey, string> = new Map();
-
- data.set(EventMetadataKey.GEMINI_CLI_START_SESSION_MODEL, event.model);
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_EMBEDDING_MODEL,
- event.embedding_model,
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_SANDBOX,
- event.sandbox_enabled.toString(),
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_CORE_TOOLS,
- event.core_tools_enabled,
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_APPROVAL_MODE,
- event.approval_mode,
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_API_KEY_ENABLED,
- event.api_key_enabled.toString(),
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_VERTEX_API_ENABLED,
- event.vertex_ai_enabled.toString(),
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_DEBUG_MODE_ENABLED,
- event.debug_enabled.toString(),
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_MCP_SERVERS,
- event.mcp_servers,
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_ENABLED,
- event.telemetry_enabled.toString(),
- );
- data.set(
- EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_LOG_USER_PROMPTS_ENABLED,
- event.telemetry_log_user_prompts_enabled.toString(),
- );
-
+ const data = [
+ {
+ EventMetadataKey: EventMetadataKey.GEMINI_CLI_START_SESSION_MODEL,
+ value: event.model,
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_EMBEDDING_MODEL,
+ value: event.embedding_model,
+ },
+ {
+ EventMetadataKey: EventMetadataKey.GEMINI_CLI_START_SESSION_SANDBOX,
+ value: event.sandbox_enabled.toString(),
+ },
+ {
+ EventMetadataKey: EventMetadataKey.GEMINI_CLI_START_SESSION_CORE_TOOLS,
+ value: event.core_tools_enabled,
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_APPROVAL_MODE,
+ value: event.approval_mode,
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_API_KEY_ENABLED,
+ value: event.api_key_enabled.toString(),
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_VERTEX_API_ENABLED,
+ value: event.vertex_ai_enabled.toString(),
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_DEBUG_MODE_ENABLED,
+ value: event.debug_enabled.toString(),
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_VERTEX_API_ENABLED,
+ value: event.vertex_ai_enabled.toString(),
+ },
+ {
+ EventMetadataKey: EventMetadataKey.GEMINI_CLI_START_SESSION_MCP_SERVERS,
+ value: event.mcp_servers,
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_VERTEX_API_ENABLED,
+ value: event.vertex_ai_enabled.toString(),
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_ENABLED,
+ value: event.telemetry_enabled.toString(),
+ },
+ {
+ EventMetadataKey:
+ EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_LOG_USER_PROMPTS_ENABLED,
+ value: event.telemetry_log_user_prompts_enabled.toString(),
+ },
+ ];
this.enqueueLogEvent(this.createLogEvent(start_session_event_name, data));
- this.flushIfNeeded();
+ // Flush start event immediately
+ this.flushToClearcut();
}
logNewPromptEvent(event: UserPromptEvent): void {