Enable clearcut logging by default (#1309)
Clearcut logging can now be disabled via disableDataCollection in user settings
This commit is contained in:
parent
07880d43d2
commit
631591ce79
|
@ -226,7 +226,7 @@ export async function loadCliConfig(
|
||||||
process.env.OTEL_EXPORTER_OTLP_ENDPOINT ??
|
process.env.OTEL_EXPORTER_OTLP_ENDPOINT ??
|
||||||
settings.telemetry?.otlpEndpoint,
|
settings.telemetry?.otlpEndpoint,
|
||||||
logPrompts: argv.telemetryLogPrompts ?? settings.telemetry?.logPrompts,
|
logPrompts: argv.telemetryLogPrompts ?? settings.telemetry?.logPrompts,
|
||||||
disableDataCollection: settings.telemetry?.disableDataCollection ?? true,
|
disableDataCollection: settings.telemetry?.disableDataCollection ?? false,
|
||||||
},
|
},
|
||||||
// Git-aware file filtering settings
|
// Git-aware file filtering settings
|
||||||
fileFiltering: {
|
fileFiltering: {
|
||||||
|
|
|
@ -117,7 +117,6 @@ export interface ConfigParameters {
|
||||||
fileDiscoveryService?: FileDiscoveryService;
|
fileDiscoveryService?: FileDiscoveryService;
|
||||||
bugCommand?: BugCommandSettings;
|
bugCommand?: BugCommandSettings;
|
||||||
model: string;
|
model: string;
|
||||||
disableDataCollection?: boolean;
|
|
||||||
extensionContextFilePaths?: string[];
|
extensionContextFilePaths?: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,7 +154,6 @@ export class Config {
|
||||||
private readonly cwd: string;
|
private readonly cwd: string;
|
||||||
private readonly bugCommand: BugCommandSettings | undefined;
|
private readonly bugCommand: BugCommandSettings | undefined;
|
||||||
private readonly model: string;
|
private readonly model: string;
|
||||||
private readonly disableDataCollection: boolean;
|
|
||||||
private readonly extensionContextFilePaths: string[];
|
private readonly extensionContextFilePaths: string[];
|
||||||
|
|
||||||
constructor(params: ConfigParameters) {
|
constructor(params: ConfigParameters) {
|
||||||
|
@ -183,6 +181,7 @@ export class Config {
|
||||||
target: params.telemetry?.target ?? DEFAULT_TELEMETRY_TARGET,
|
target: params.telemetry?.target ?? DEFAULT_TELEMETRY_TARGET,
|
||||||
otlpEndpoint: params.telemetry?.otlpEndpoint ?? DEFAULT_OTLP_ENDPOINT,
|
otlpEndpoint: params.telemetry?.otlpEndpoint ?? DEFAULT_OTLP_ENDPOINT,
|
||||||
logPrompts: params.telemetry?.logPrompts ?? true,
|
logPrompts: params.telemetry?.logPrompts ?? true,
|
||||||
|
disableDataCollection: params.telemetry?.disableDataCollection ?? false,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.fileFiltering = {
|
this.fileFiltering = {
|
||||||
|
@ -196,8 +195,6 @@ export class Config {
|
||||||
this.fileDiscoveryService = params.fileDiscoveryService ?? null;
|
this.fileDiscoveryService = params.fileDiscoveryService ?? null;
|
||||||
this.bugCommand = params.bugCommand;
|
this.bugCommand = params.bugCommand;
|
||||||
this.model = params.model;
|
this.model = params.model;
|
||||||
this.disableDataCollection =
|
|
||||||
params.telemetry?.disableDataCollection ?? true;
|
|
||||||
this.extensionContextFilePaths = params.extensionContextFilePaths ?? [];
|
this.extensionContextFilePaths = params.extensionContextFilePaths ?? [];
|
||||||
|
|
||||||
if (params.contextFileName) {
|
if (params.contextFileName) {
|
||||||
|
@ -208,10 +205,12 @@ export class Config {
|
||||||
initializeTelemetry(this);
|
initializeTelemetry(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.disableDataCollection) {
|
if (!this.getDisableDataCollection()) {
|
||||||
ClearcutLogger.getInstance(this)?.enqueueLogEvent(
|
ClearcutLogger.getInstance(this)?.logStartSessionEvent(
|
||||||
new StartSessionEvent(this),
|
new StartSessionEvent(this),
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
console.log('Data collection is disabled.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,7 +386,7 @@ export class Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
getDisableDataCollection(): boolean {
|
getDisableDataCollection(): boolean {
|
||||||
return this.disableDataCollection;
|
return this.telemetrySettings.disableDataCollection ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
getExtensionContextFilePaths(): string[] {
|
getExtensionContextFilePaths(): string[] {
|
||||||
|
|
|
@ -64,7 +64,7 @@ export class ClearcutLogger {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
createLogEvent(name: string, data: Map<EventMetadataKey, string>): object {
|
createLogEvent(name: string, data: object): object {
|
||||||
return {
|
return {
|
||||||
Application: 'GEMINI_CLI',
|
Application: 'GEMINI_CLI',
|
||||||
event_name: name,
|
event_name: name,
|
||||||
|
@ -83,6 +83,7 @@ export class ClearcutLogger {
|
||||||
}
|
}
|
||||||
|
|
||||||
flushToClearcut(): Promise<LogResponse> {
|
flushToClearcut(): Promise<LogResponse> {
|
||||||
|
console.log('Flushing log events to Clearcut.');
|
||||||
return new Promise<Buffer>((resolve, reject) => {
|
return new Promise<Buffer>((resolve, reject) => {
|
||||||
const request = [
|
const request = [
|
||||||
{
|
{
|
||||||
|
@ -92,6 +93,7 @@ export class ClearcutLogger {
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const body = JSON.stringify(request);
|
const body = JSON.stringify(request);
|
||||||
|
console.log('Clearcut POST request body:', body);
|
||||||
const options = {
|
const options = {
|
||||||
hostname: 'play.googleapis.com',
|
hostname: 'play.googleapis.com',
|
||||||
path: '/log',
|
path: '/log',
|
||||||
|
@ -106,6 +108,7 @@ export class ClearcutLogger {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
req.on('error', (e) => {
|
req.on('error', (e) => {
|
||||||
|
console.log('Clearcut POST request error: ', e);
|
||||||
reject(e);
|
reject(e);
|
||||||
});
|
});
|
||||||
req.end(body);
|
req.end(body);
|
||||||
|
@ -152,58 +155,81 @@ export class ClearcutLogger {
|
||||||
// message is corrupted.
|
// message is corrupted.
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return {
|
|
||||||
|
const returnVal = {
|
||||||
nextRequestWaitMs: Number(ms),
|
nextRequestWaitMs: Number(ms),
|
||||||
};
|
};
|
||||||
|
console.log('Clearcut response: ', returnVal);
|
||||||
|
return returnVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
logStartSessionEvent(event: StartSessionEvent): void {
|
logStartSessionEvent(event: StartSessionEvent): void {
|
||||||
const data: Map<EventMetadataKey, string> = new Map();
|
const data = [
|
||||||
|
{
|
||||||
data.set(EventMetadataKey.GEMINI_CLI_START_SESSION_MODEL, event.model);
|
EventMetadataKey: EventMetadataKey.GEMINI_CLI_START_SESSION_MODEL,
|
||||||
data.set(
|
value: event.model,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EventMetadataKey:
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_EMBEDDING_MODEL,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_EMBEDDING_MODEL,
|
||||||
event.embedding_model,
|
value: event.embedding_model,
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_SANDBOX,
|
EventMetadataKey: EventMetadataKey.GEMINI_CLI_START_SESSION_SANDBOX,
|
||||||
event.sandbox_enabled.toString(),
|
value: event.sandbox_enabled.toString(),
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_CORE_TOOLS,
|
EventMetadataKey: EventMetadataKey.GEMINI_CLI_START_SESSION_CORE_TOOLS,
|
||||||
event.core_tools_enabled,
|
value: event.core_tools_enabled,
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
|
EventMetadataKey:
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_APPROVAL_MODE,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_APPROVAL_MODE,
|
||||||
event.approval_mode,
|
value: event.approval_mode,
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
|
EventMetadataKey:
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_API_KEY_ENABLED,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_API_KEY_ENABLED,
|
||||||
event.api_key_enabled.toString(),
|
value: event.api_key_enabled.toString(),
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
|
EventMetadataKey:
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_VERTEX_API_ENABLED,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_VERTEX_API_ENABLED,
|
||||||
event.vertex_ai_enabled.toString(),
|
value: event.vertex_ai_enabled.toString(),
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
|
EventMetadataKey:
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_DEBUG_MODE_ENABLED,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_DEBUG_MODE_ENABLED,
|
||||||
event.debug_enabled.toString(),
|
value: event.debug_enabled.toString(),
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_MCP_SERVERS,
|
EventMetadataKey:
|
||||||
event.mcp_servers,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_VERTEX_API_ENABLED,
|
||||||
);
|
value: event.vertex_ai_enabled.toString(),
|
||||||
data.set(
|
},
|
||||||
|
{
|
||||||
|
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,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_ENABLED,
|
||||||
event.telemetry_enabled.toString(),
|
value: event.telemetry_enabled.toString(),
|
||||||
);
|
},
|
||||||
data.set(
|
{
|
||||||
|
EventMetadataKey:
|
||||||
EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_LOG_USER_PROMPTS_ENABLED,
|
EventMetadataKey.GEMINI_CLI_START_SESSION_TELEMETRY_LOG_USER_PROMPTS_ENABLED,
|
||||||
event.telemetry_log_user_prompts_enabled.toString(),
|
value: event.telemetry_log_user_prompts_enabled.toString(),
|
||||||
);
|
},
|
||||||
|
];
|
||||||
this.enqueueLogEvent(this.createLogEvent(start_session_event_name, data));
|
this.enqueueLogEvent(this.createLogEvent(start_session_event_name, data));
|
||||||
this.flushIfNeeded();
|
// Flush start event immediately
|
||||||
|
this.flushToClearcut();
|
||||||
}
|
}
|
||||||
|
|
||||||
logNewPromptEvent(event: UserPromptEvent): void {
|
logNewPromptEvent(event: UserPromptEvent): void {
|
||||||
|
|
Loading…
Reference in New Issue