Added active experiment ids to Clearcut log events (#12745)

This commit is contained in:
owenofbrien
2025-11-10 11:21:49 -06:00
committed by GitHub
parent 4ef4bd6f09
commit 3f90001f83
2 changed files with 39 additions and 1 deletions
@@ -42,6 +42,7 @@ interface CustomMatchers<R = unknown> {
toHaveMetadataValue: ([key, value]: [EventMetadataKey, string]) => R; toHaveMetadataValue: ([key, value]: [EventMetadataKey, string]) => R;
toHaveEventName: (name: EventNames) => R; toHaveEventName: (name: EventNames) => R;
toHaveMetadataKey: (key: EventMetadataKey) => R; toHaveMetadataKey: (key: EventMetadataKey) => R;
toHaveGwsExperiments: (exps: number[]) => R;
} }
declare module 'vitest' { declare module 'vitest' {
@@ -92,6 +93,21 @@ expect.extend({
`event ${received} ${isNot ? 'has' : 'does not have'} the metadata key ${key}`, `event ${received} ${isNot ? 'has' : 'does not have'} the metadata key ${key}`,
}; };
}, },
toHaveGwsExperiments(received: LogEventEntry[], expected_exps: number[]) {
const { isNot } = this;
const exps = received[0].gws_experiment;
const pass =
exps.length === expected_exps.length &&
exps.every((value, index) => value === expected_exps[index]);
return {
pass,
message: () =>
`event ${received} ${isNot ? 'has' : 'does not have'} expected exp ids: ${expected_exps.join(',')}`,
};
},
}); });
vi.mock('../../utils/userAccountManager.js'); vi.mock('../../utils/userAccountManager.js');
@@ -133,7 +149,11 @@ describe('ClearcutLogger', () => {
}); });
function setup({ function setup({
config = {} as Partial<ConfigParameters>, config = {
experiments: {
experimentIds: [123, 456, 789],
},
} as unknown as Partial<ConfigParameters>,
lifetimeGoogleAccounts = 1, lifetimeGoogleAccounts = 1,
cachedGoogleAccount = 'test@google.com', cachedGoogleAccount = 'test@google.com',
} = {}) { } = {}) {
@@ -564,6 +584,7 @@ describe('ClearcutLogger', () => {
{ {
event_time_ms: Date.now(), event_time_ms: Date.now(),
source_extension_json: JSON.stringify({ event_id: i }), source_extension_json: JSON.stringify({ event_id: i }),
gws_experiment: [],
}, },
]); ]);
} }
@@ -597,6 +618,7 @@ describe('ClearcutLogger', () => {
{ {
event_time_ms: Date.now(), event_time_ms: Date.now(),
source_extension_json: JSON.stringify({ event_id: `failed_${i}` }), source_extension_json: JSON.stringify({ event_id: `failed_${i}` }),
gws_experiment: [],
}, },
]); ]);
} }
@@ -713,6 +735,20 @@ describe('ClearcutLogger', () => {
}); });
}); });
describe('logExperiments', () => {
it('logs an event with gws_experiment field containing exp ids', () => {
const { logger } = setup();
const event = new AgentStartEvent('agent-123', 'TestAgent');
logger?.logAgentStartEvent(event);
const events = getEvents(logger!);
expect(events.length).toBe(1);
expect(events[0]).toHaveEventName(EventNames.AGENT_START);
expect(events[0]).toHaveGwsExperiments([123, 456, 789]);
});
});
describe('logAgentFinishEvent', () => { describe('logAgentFinishEvent', () => {
it('logs an event with proper fields (success)', () => { it('logs an event with proper fields (success)', () => {
const { logger } = setup(); const { logger } = setup();
@@ -101,6 +101,7 @@ export interface LogResponse {
export interface LogEventEntry { export interface LogEventEntry {
event_time_ms: number; event_time_ms: number;
source_extension_json: string; source_extension_json: string;
gws_experiment: number[];
} }
export interface EventValue { export interface EventValue {
@@ -236,6 +237,7 @@ export class ClearcutLogger {
{ {
event_time_ms: Date.now(), event_time_ms: Date.now(),
source_extension_json: safeJsonStringify(event), source_extension_json: safeJsonStringify(event),
gws_experiment: this.config?.getExperiments()?.experimentIds ?? [],
}, },
]); ]);