@@ -163,84 +163,110 @@ async function loadWorkerManifest() {
163
163
return WorkerManifest . parse ( raw ) ;
164
164
}
165
165
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" ) ;
170
169
171
- const { config , handleError } = await importConfig ( workerManifest . configPath ) ;
170
+ const workerManifest = await loadWorkerManifest ( ) ;
172
171
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 ) ;
181
173
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 ) ;
184
175
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
+ } ) ;
191
184
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 ) ;
193
187
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
+ ) ;
199
196
200
- logger . setGlobalTaskLogger ( otelTaskLogger ) ;
197
+ const configLogLevel = triggerLogLevel ?? config . logLevel ?? "info" ;
201
198
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" ,
206
203
} ) ;
207
- }
208
204
209
- if ( config . onStart ) {
210
- lifecycleHooks . registerGlobalStartHook ( {
211
- id : "config" ,
212
- fn : config . onStart as AnyOnStartHookFunction ,
213
- } ) ;
214
- }
205
+ logger . setGlobalTaskLogger ( otelTaskLogger ) ;
215
206
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
+ }
222
213
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
+ }
229
220
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 ( ) ;
235
267
}
236
268
237
- return {
238
- tracer,
239
- tracingSDK,
240
- consoleInterceptor,
241
- config,
242
- workerManifest,
243
- } ;
269
+ return bootstrapCache ;
244
270
}
245
271
246
272
let _execution : TaskRunExecution | undefined ;
@@ -253,6 +279,7 @@ let _lastFlushPromise: Promise<void> | undefined;
253
279
let _sharedWorkerRuntime : SharedRuntimeManager | undefined ;
254
280
255
281
let _lastEnv : Record < string , string > | undefined ;
282
+ let _executionCount = 0 ;
256
283
257
284
function resetExecutionEnvironment ( ) {
258
285
_execution = undefined ;
@@ -444,13 +471,15 @@ const zodIpc = new ZodIpcConnection({
444
471
}
445
472
446
473
runMetadataManager . runId = execution . run . id ;
474
+ _executionCount ++ ;
447
475
448
476
const executor = new TaskExecutor ( task , {
449
477
tracer,
450
478
tracingSDK,
451
479
consoleInterceptor,
452
480
retries : config . retries ,
453
481
isWarmStart,
482
+ executionCount : _executionCount ,
454
483
} ) ;
455
484
456
485
try {
0 commit comments