mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-26 21:14:35 -07:00
feat(infra) - Add logging for when user tries to exit multiple times (#11218)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
This commit is contained in:
@@ -108,6 +108,7 @@ export {
|
||||
// Custom metrics for token usage and API responses
|
||||
recordCustomTokenUsageMetrics,
|
||||
recordCustomApiResponseMetrics,
|
||||
recordExitFail,
|
||||
// OpenTelemetry GenAI semantic convention for token usage and operation duration
|
||||
recordGenAiClientTokenUsage,
|
||||
recordGenAiClientOperationDuration,
|
||||
|
||||
@@ -92,6 +92,7 @@ describe('Telemetry Metrics', () => {
|
||||
let recordGenAiClientTokenUsageModule: typeof import('./metrics.js').recordGenAiClientTokenUsage;
|
||||
let recordGenAiClientOperationDurationModule: typeof import('./metrics.js').recordGenAiClientOperationDuration;
|
||||
let recordFlickerFrameModule: typeof import('./metrics.js').recordFlickerFrame;
|
||||
let recordExitFailModule: typeof import('./metrics.js').recordExitFail;
|
||||
let recordAgentRunMetricsModule: typeof import('./metrics.js').recordAgentRunMetrics;
|
||||
|
||||
beforeEach(async () => {
|
||||
@@ -133,6 +134,7 @@ describe('Telemetry Metrics', () => {
|
||||
recordGenAiClientOperationDurationModule =
|
||||
metricsJsModule.recordGenAiClientOperationDuration;
|
||||
recordFlickerFrameModule = metricsJsModule.recordFlickerFrame;
|
||||
recordExitFailModule = metricsJsModule.recordExitFail;
|
||||
recordAgentRunMetricsModule = metricsJsModule.recordAgentRunMetrics;
|
||||
|
||||
const otelApiModule = await import('@opentelemetry/api');
|
||||
@@ -170,6 +172,28 @@ describe('Telemetry Metrics', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('recordExitFail', () => {
|
||||
it('does not record metrics if not initialized', () => {
|
||||
const config = makeFakeConfig({});
|
||||
recordExitFailModule(config);
|
||||
expect(mockCounterAddFn).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('records a exit fail event when initialized', () => {
|
||||
const config = makeFakeConfig({});
|
||||
initializeMetricsModule(config);
|
||||
recordExitFailModule(config);
|
||||
|
||||
// Called for session, then for exit fail
|
||||
expect(mockCounterAddFn).toHaveBeenCalledTimes(2);
|
||||
expect(mockCounterAddFn).toHaveBeenNthCalledWith(2, 1, {
|
||||
'session.id': 'test-session-id',
|
||||
'installation.id': 'test-installation-id',
|
||||
'user.email': 'test@example.com',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('initializeMetrics', () => {
|
||||
const mockConfig = {
|
||||
getSessionId: () => 'test-session-id',
|
||||
|
||||
@@ -56,6 +56,7 @@ const REGRESSION_PERCENTAGE_CHANGE =
|
||||
'gemini_cli.performance.regression.percentage_change';
|
||||
const BASELINE_COMPARISON = 'gemini_cli.performance.baseline.comparison';
|
||||
const FLICKER_FRAME_COUNT = 'gemini_cli.ui.flicker.count';
|
||||
const EXIT_FAIL_COUNT = 'gemini_cli.exit.fail.count';
|
||||
|
||||
const baseMetricDefinition = {
|
||||
getCommonAttributes,
|
||||
@@ -175,6 +176,12 @@ const COUNTER_DEFINITIONS = {
|
||||
assign: (c: Counter) => (flickerFrameCounter = c),
|
||||
attributes: {} as Record<string, never>,
|
||||
},
|
||||
[EXIT_FAIL_COUNT]: {
|
||||
description: 'Counts CLI exit failures.',
|
||||
valueType: ValueType.INT,
|
||||
assign: (c: Counter) => (exitFailCounter = c),
|
||||
attributes: {} as Record<string, never>,
|
||||
},
|
||||
} as const;
|
||||
|
||||
const HISTOGRAM_DEFINITIONS = {
|
||||
@@ -458,6 +465,7 @@ let agentRunCounter: Counter | undefined;
|
||||
let agentDurationHistogram: Histogram | undefined;
|
||||
let agentTurnsHistogram: Histogram | undefined;
|
||||
let flickerFrameCounter: Counter | undefined;
|
||||
let exitFailCounter: Counter | undefined;
|
||||
|
||||
// OpenTelemetry GenAI Semantic Convention Metrics
|
||||
let genAiClientTokenUsageHistogram: Histogram | undefined;
|
||||
@@ -623,6 +631,14 @@ export function recordFlickerFrame(config: Config): void {
|
||||
flickerFrameCounter.add(1, baseMetricDefinition.getCommonAttributes(config));
|
||||
}
|
||||
|
||||
/**
|
||||
* Records a metric for when user failed to exit
|
||||
*/
|
||||
export function recordExitFail(config: Config): void {
|
||||
if (!exitFailCounter || !isMetricsInitialized) return;
|
||||
exitFailCounter.add(1, baseMetricDefinition.getCommonAttributes(config));
|
||||
}
|
||||
|
||||
/**
|
||||
* Records a metric for when an invalid chunk is received from a stream.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user