@@ -163,84 +163,110 @@ async function loadWorkerManifest() {
163163 return WorkerManifest . parse ( raw ) ;
164164}
165165
166- async function bootstrap ( ) {
167- const workerManifest = await loadWorkerManifest ( ) ;
168-
169- resourceCatalog . registerWorkerManifest ( workerManifest ) ;
166+ async function doBootstrap ( ) {
167+ return await runTimelineMetrics . measureMetric ( "trigger.dev/start" , "bootstrap" , { } , async ( ) => {
168+ log ( "Bootstrapping worker" ) ;
170169
171- const { config , handleError } = await importConfig ( workerManifest . configPath ) ;
170+ const workerManifest = await loadWorkerManifest ( ) ;
172171
173- const tracingSDK = new TracingSDK ( {
174- url : env . OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318" ,
175- instrumentations : config . telemetry ?. instrumentations ?? config . instrumentations ?? [ ] ,
176- exporters : config . telemetry ?. exporters ?? [ ] ,
177- logExporters : config . telemetry ?. logExporters ?? [ ] ,
178- diagLogLevel : ( env . OTEL_LOG_LEVEL as TracingDiagnosticLogLevel ) ?? "none" ,
179- forceFlushTimeoutMillis : 30_000 ,
180- } ) ;
172+ resourceCatalog . registerWorkerManifest ( workerManifest ) ;
181173
182- const otelTracer : Tracer = tracingSDK . getTracer ( "trigger-dev-worker" , VERSION ) ;
183- const otelLogger : Logger = tracingSDK . getLogger ( "trigger-dev-worker" , VERSION ) ;
174+ const { config, handleError } = await importConfig ( workerManifest . configPath ) ;
184175
185- const tracer = new TriggerTracer ( { tracer : otelTracer , logger : otelLogger } ) ;
186- const consoleInterceptor = new ConsoleInterceptor (
187- otelLogger ,
188- typeof config . enableConsoleLogging === "boolean" ? config . enableConsoleLogging : true ,
189- typeof config . disableConsoleInterceptor === "boolean" ? config . disableConsoleInterceptor : false
190- ) ;
176+ const tracingSDK = new TracingSDK ( {
177+ url : env . OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318" ,
178+ instrumentations : config . telemetry ?. instrumentations ?? config . instrumentations ?? [ ] ,
179+ exporters : config . telemetry ?. exporters ?? [ ] ,
180+ logExporters : config . telemetry ?. logExporters ?? [ ] ,
181+ diagLogLevel : ( env . OTEL_LOG_LEVEL as TracingDiagnosticLogLevel ) ?? "none" ,
182+ forceFlushTimeoutMillis : 30_000 ,
183+ } ) ;
191184
192- const configLogLevel = triggerLogLevel ?? config . logLevel ?? "info" ;
185+ const otelTracer : Tracer = tracingSDK . getTracer ( "trigger-dev-worker" , VERSION ) ;
186+ const otelLogger : Logger = tracingSDK . getLogger ( "trigger-dev-worker" , VERSION ) ;
193187
194- const otelTaskLogger = new OtelTaskLogger ( {
195- logger : otelLogger ,
196- tracer : tracer ,
197- level : logLevels . includes ( configLogLevel as any ) ? ( configLogLevel as LogLevel ) : "info" ,
198- } ) ;
188+ const tracer = new TriggerTracer ( { tracer : otelTracer , logger : otelLogger } ) ;
189+ const consoleInterceptor = new ConsoleInterceptor (
190+ otelLogger ,
191+ typeof config . enableConsoleLogging === "boolean" ? config . enableConsoleLogging : true ,
192+ typeof config . disableConsoleInterceptor === "boolean"
193+ ? config . disableConsoleInterceptor
194+ : false
195+ ) ;
199196
200- logger . setGlobalTaskLogger ( otelTaskLogger ) ;
197+ const configLogLevel = triggerLogLevel ?? config . logLevel ?? "info" ;
201198
202- if ( config . init ) {
203- lifecycleHooks . registerGlobalInitHook ( {
204- id : "config" ,
205- fn : config . init as AnyOnInitHookFunction ,
199+ const otelTaskLogger = new OtelTaskLogger ( {
200+ logger : otelLogger ,
201+ tracer : tracer ,
202+ level : logLevels . includes ( configLogLevel as any ) ? ( configLogLevel as LogLevel ) : "info" ,
206203 } ) ;
207- }
208204
209- if ( config . onStart ) {
210- lifecycleHooks . registerGlobalStartHook ( {
211- id : "config" ,
212- fn : config . onStart as AnyOnStartHookFunction ,
213- } ) ;
214- }
205+ logger . setGlobalTaskLogger ( otelTaskLogger ) ;
215206
216- if ( config . onSuccess ) {
217- lifecycleHooks . registerGlobalSuccessHook ( {
218- id : "config" ,
219- fn : config . onSuccess as AnyOnSuccessHookFunction ,
220- } ) ;
221- }
207+ if ( config . init ) {
208+ lifecycleHooks . registerGlobalInitHook ( {
209+ id : "config" ,
210+ fn : config . init as AnyOnInitHookFunction ,
211+ } ) ;
212+ }
222213
223- if ( config . onFailure ) {
224- lifecycleHooks . registerGlobalFailureHook ( {
225- id : "config" ,
226- fn : config . onFailure as AnyOnFailureHookFunction ,
227- } ) ;
228- }
214+ if ( config . onStart ) {
215+ lifecycleHooks . registerGlobalStartHook ( {
216+ id : "config" ,
217+ fn : config . onStart as AnyOnStartHookFunction ,
218+ } ) ;
219+ }
229220
230- if ( handleError ) {
231- lifecycleHooks . registerGlobalCatchErrorHook ( {
232- id : "config" ,
233- fn : handleError as AnyOnCatchErrorHookFunction ,
234- } ) ;
221+ if ( config . onSuccess ) {
222+ lifecycleHooks . registerGlobalSuccessHook ( {
223+ id : "config" ,
224+ fn : config . onSuccess as AnyOnSuccessHookFunction ,
225+ } ) ;
226+ }
227+
228+ if ( config . onFailure ) {
229+ lifecycleHooks . registerGlobalFailureHook ( {
230+ id : "config" ,
231+ fn : config . onFailure as AnyOnFailureHookFunction ,
232+ } ) ;
233+ }
234+
235+ if ( handleError ) {
236+ lifecycleHooks . registerGlobalCatchErrorHook ( {
237+ id : "config" ,
238+ fn : handleError as AnyOnCatchErrorHookFunction ,
239+ } ) ;
240+ }
241+
242+ log ( "Bootstrapped worker" ) ;
243+
244+ return {
245+ tracer,
246+ tracingSDK,
247+ consoleInterceptor,
248+ config,
249+ workerManifest,
250+ } ;
251+ } ) ;
252+ }
253+
254+ let bootstrapCache :
255+ | {
256+ tracer : TriggerTracer ;
257+ tracingSDK : TracingSDK ;
258+ consoleInterceptor : ConsoleInterceptor ;
259+ config : TriggerConfig ;
260+ workerManifest : WorkerManifest ;
261+ }
262+ | undefined ;
263+
264+ async function bootstrap ( ) {
265+ if ( ! bootstrapCache ) {
266+ bootstrapCache = await doBootstrap ( ) ;
235267 }
236268
237- return {
238- tracer,
239- tracingSDK,
240- consoleInterceptor,
241- config,
242- workerManifest,
243- } ;
269+ return bootstrapCache ;
244270}
245271
246272let _execution : TaskRunExecution | undefined ;
@@ -253,6 +279,7 @@ let _lastFlushPromise: Promise<void> | undefined;
253279let _sharedWorkerRuntime : SharedRuntimeManager | undefined ;
254280
255281let _lastEnv : Record < string , string > | undefined ;
282+ let _executionCount = 0 ;
256283
257284function resetExecutionEnvironment ( ) {
258285 _execution = undefined ;
@@ -444,13 +471,15 @@ const zodIpc = new ZodIpcConnection({
444471 }
445472
446473 runMetadataManager . runId = execution . run . id ;
474+ _executionCount ++ ;
447475
448476 const executor = new TaskExecutor ( task , {
449477 tracer,
450478 tracingSDK,
451479 consoleInterceptor,
452480 retries : config . retries ,
453481 isWarmStart,
482+ executionCount : _executionCount ,
454483 } ) ;
455484
456485 try {
0 commit comments