11import { EventRepository } from "~/v3/eventRepository.server" ;
22import { TracedEventSpan , TraceEventConcern , TriggerTaskRequest } from "../types" ;
33import { SemanticInternalAttributes } from "@trigger.dev/core/v3/semanticInternalAttributes" ;
4- import { BatchId } from "@trigger.dev/core/v3/isomorphic" ;
54import { TaskRun } from "@trigger.dev/database" ;
5+ import { getTaskEventStore } from "~/v3/taskEventStore.server" ;
6+ import { ClickhouseEventRepository } from "~/v3/clickhouseEventRepository.server" ;
7+ import { IEventRepository } from "~/v3/eventRepository.types" ;
8+ import { FEATURE_FLAG , flags } from "~/v3/featureFlags.server" ;
9+ import { env } from "~/env.server" ;
610
711export class DefaultTraceEventsConcern implements TraceEventConcern {
812 private readonly eventRepository : EventRepository ;
13+ private readonly clickhouseEventRepository : ClickhouseEventRepository ;
914
10- constructor ( eventRepository : EventRepository ) {
15+ constructor (
16+ eventRepository : EventRepository ,
17+ clickhouseEventRepository : ClickhouseEventRepository
18+ ) {
1119 this . eventRepository = eventRepository ;
20+ this . clickhouseEventRepository = clickhouseEventRepository ;
21+ }
22+
23+ async #getEventRepository(
24+ request : TriggerTaskRequest
25+ ) : Promise < { repository : IEventRepository ; store : string } > {
26+ const taskEventRepository = await flags ( {
27+ key : FEATURE_FLAG . taskEventRepository ,
28+ defaultValue : env . EVENT_REPOSITORY_DEFAULT_STORE ,
29+ overrides : request . environment . organization . featureFlags as Record < string , unknown > ,
30+ } ) ;
31+
32+ if ( taskEventRepository === "clickhouse" ) {
33+ return { repository : this . clickhouseEventRepository , store : "clickhouse" } ;
34+ }
35+
36+ return { repository : this . eventRepository , store : getTaskEventStore ( ) } ;
1237 }
1338
1439 async traceRun < T > (
1540 request : TriggerTaskRequest ,
16- callback : ( span : TracedEventSpan ) => Promise < T >
41+ callback : ( span : TracedEventSpan , store : string ) => Promise < T >
1742 ) : Promise < T > {
18- return await this . eventRepository . traceEvent (
43+ const { repository, store } = await this . #getEventRepository( request ) ;
44+
45+ return await repository . traceEvent (
1946 request . taskId ,
2047 {
2148 context : request . options ?. traceContext ,
@@ -38,14 +65,17 @@ export class DefaultTraceEventsConcern implements TraceEventConcern {
3865 : undefined ,
3966 } ,
4067 async ( event , traceContext , traceparent ) => {
41- return await callback ( {
42- traceId : event . traceId ,
43- spanId : event . spanId ,
44- traceContext,
45- traceparent,
46- setAttribute : ( key , value ) => event . setAttribute ( key as any , value ) ,
47- failWithError : event . failWithError . bind ( event ) ,
48- } ) ;
68+ return await callback (
69+ {
70+ traceId : event . traceId ,
71+ spanId : event . spanId ,
72+ traceContext,
73+ traceparent,
74+ setAttribute : ( key , value ) => event . setAttribute ( key as any , value ) ,
75+ failWithError : event . failWithError . bind ( event ) ,
76+ } ,
77+ store
78+ ) ;
4979 }
5080 ) ;
5181 }
@@ -58,11 +88,12 @@ export class DefaultTraceEventsConcern implements TraceEventConcern {
5888 incomplete : boolean ;
5989 isError : boolean ;
6090 } ,
61- callback : ( span : TracedEventSpan ) => Promise < T >
91+ callback : ( span : TracedEventSpan , store : string ) => Promise < T >
6292 ) : Promise < T > {
6393 const { existingRun, idempotencyKey, incomplete, isError } = options ;
94+ const { repository, store } = await this . #getEventRepository( request ) ;
6495
65- return await this . eventRepository . traceEvent (
96+ return await repository . traceEvent (
6697 `${ request . taskId } (cached)` ,
6798 {
6899 context : request . options ?. traceContext ,
@@ -99,14 +130,17 @@ export class DefaultTraceEventsConcern implements TraceEventConcern {
99130 }
100131 ) ;
101132
102- return await callback ( {
103- traceId : event . traceId ,
104- spanId : event . spanId ,
105- traceContext,
106- traceparent,
107- setAttribute : ( key , value ) => event . setAttribute ( key as any , value ) ,
108- failWithError : event . failWithError . bind ( event ) ,
109- } ) ;
133+ return await callback (
134+ {
135+ traceId : event . traceId ,
136+ spanId : event . spanId ,
137+ traceContext,
138+ traceparent,
139+ setAttribute : ( key , value ) => event . setAttribute ( key as any , value ) ,
140+ failWithError : event . failWithError . bind ( event ) ,
141+ } ,
142+ store
143+ ) ;
110144 }
111145 ) ;
112146 }
0 commit comments