55 LogLevel ,
66 RunExecutionData ,
77 TaskRunExecution ,
8+ TaskRunExecutionMetrics ,
89 TaskRunExecutionResult ,
910 TaskRunFailedExecutionResult ,
1011} from "@trigger.dev/core/v3" ;
@@ -475,17 +476,21 @@ export class DevRunController {
475476 private async startAndExecuteRunAttempt ( {
476477 runFriendlyId,
477478 snapshotFriendlyId,
479+ dequeuedAt,
478480 isWarmStart = false ,
479481 } : {
480482 runFriendlyId : string ;
481483 snapshotFriendlyId : string ;
484+ dequeuedAt ?: Date ;
482485 isWarmStart ?: boolean ;
483486 } ) {
484487 this . subscribeToRunNotifications ( {
485488 run : { friendlyId : runFriendlyId } ,
486489 snapshot : { friendlyId : snapshotFriendlyId } ,
487490 } ) ;
488491
492+ const attemptStartedAt = Date . now ( ) ;
493+
489494 const start = await this . httpClient . dev . startRunAttempt ( runFriendlyId , snapshotFriendlyId ) ;
490495
491496 if ( ! start . success ) {
@@ -495,6 +500,8 @@ export class DevRunController {
495500 return ;
496501 }
497502
503+ const attemptDuration = Date . now ( ) - attemptStartedAt ;
504+
498505 const { run, snapshot, execution, envVars } = start . data ;
499506
500507 eventBus . emit ( "runStarted" , this . opts . worker , execution ) ;
@@ -508,8 +515,28 @@ export class DevRunController {
508515 // This is the only case where incrementing the attempt number is allowed
509516 this . enterRunPhase ( run , snapshot ) ;
510517
518+ const metrics = [
519+ {
520+ name : "start" ,
521+ event : "create_attempt" ,
522+ timestamp : attemptStartedAt ,
523+ duration : attemptDuration ,
524+ } ,
525+ ] . concat (
526+ dequeuedAt
527+ ? [
528+ {
529+ name : "start" ,
530+ event : "dequeue" ,
531+ timestamp : dequeuedAt . getTime ( ) ,
532+ duration : 0 ,
533+ } ,
534+ ]
535+ : [ ]
536+ ) ;
537+
511538 try {
512- return await this . executeRun ( { run, snapshot, execution, envVars } ) ;
539+ return await this . executeRun ( { run, snapshot, execution, envVars, metrics } ) ;
513540 } catch ( error ) {
514541 // TODO: Handle the case where we're in the warm start phase or executing a new run
515542 // This can happen if we kill the run while it's still executing, e.g. after receiving an attempt number mismatch
@@ -566,7 +593,10 @@ export class DevRunController {
566593 snapshot,
567594 execution,
568595 envVars,
569- } : WorkloadRunAttemptStartResponseBody ) {
596+ metrics,
597+ } : WorkloadRunAttemptStartResponseBody & {
598+ metrics ?: TaskRunExecutionMetrics ;
599+ } ) {
570600 if ( ! this . opts . worker . serverWorker ) {
571601 throw new Error ( `No server worker for Dev ${ run . friendlyId } ` ) ;
572602 }
@@ -594,6 +624,7 @@ export class DevRunController {
594624 payload : {
595625 execution,
596626 traceContext : execution . run . traceContext ?? { } ,
627+ metrics,
597628 } ,
598629 messageId : run . friendlyId ,
599630 } ) ;
@@ -753,6 +784,7 @@ export class DevRunController {
753784 await this . startAndExecuteRunAttempt ( {
754785 runFriendlyId : dequeueMessage . run . friendlyId ,
755786 snapshotFriendlyId : dequeueMessage . snapshot . friendlyId ,
787+ dequeuedAt : dequeueMessage . dequeuedAt ,
756788 } ) . finally ( async ( ) => { } ) ;
757789 }
758790
0 commit comments