@@ -4,7 +4,8 @@ import { PreDequeueFn, PreSkipFn } from "./types.js";
44
55type RunQueueConsumerOptions = {
66 client : SupervisorHttpClient ;
7- intervalMs ?: number ;
7+ intervalMs : number ;
8+ idleIntervalMs : number ;
89 preDequeue ?: PreDequeueFn ;
910 preSkip ?: PreSkipFn ;
1011 maxRunCount ?: number ;
@@ -19,11 +20,13 @@ export class RunQueueConsumer {
1920 private readonly onDequeue : ( messages : WorkerApiDequeueResponseBody ) => Promise < void > ;
2021
2122 private intervalMs : number ;
23+ private idleIntervalMs : number ;
2224 private isEnabled : boolean ;
2325
2426 constructor ( opts : RunQueueConsumerOptions ) {
2527 this . isEnabled = false ;
26- this . intervalMs = opts . intervalMs ?? 5_000 ;
28+ this . intervalMs = opts . intervalMs ;
29+ this . idleIntervalMs = opts . idleIntervalMs ;
2730 this . preDequeue = opts . preDequeue ;
2831 this . preSkip = opts . preSkip ;
2932 this . maxRunCount = opts . maxRunCount ;
@@ -84,9 +87,11 @@ export class RunQueueConsumer {
8487 }
8588 }
8689
87- return this . scheduleNextDequeue ( ) ;
90+ return this . scheduleNextDequeue ( this . idleIntervalMs ) ;
8891 }
8992
93+ let nextIntervalMs = this . idleIntervalMs ;
94+
9095 try {
9196 const response = await this . client . dequeue ( {
9297 maxResources : preDequeueResult ?. maxResources ,
@@ -98,6 +103,10 @@ export class RunQueueConsumer {
98103 } else {
99104 try {
100105 await this . onDequeue ( response . data ) ;
106+
107+ if ( response . data . length > 0 ) {
108+ nextIntervalMs = this . intervalMs ;
109+ }
101110 } catch ( handlerError ) {
102111 console . error ( "[RunQueueConsumer] onDequeue error" , { error : handlerError } ) ;
103112 }
@@ -106,10 +115,10 @@ export class RunQueueConsumer {
106115 console . error ( "[RunQueueConsumer] client.dequeue error" , { error : clientError } ) ;
107116 }
108117
109- this . scheduleNextDequeue ( ) ;
118+ this . scheduleNextDequeue ( nextIntervalMs ) ;
110119 }
111120
112- scheduleNextDequeue ( delay : number = this . intervalMs ) {
113- setTimeout ( this . dequeue . bind ( this ) , delay ) ;
121+ scheduleNextDequeue ( delayMs : number ) {
122+ setTimeout ( this . dequeue . bind ( this ) , delayMs ) ;
114123 }
115124}
0 commit comments