@@ -19,15 +19,14 @@ import type { VideoMetadata } from "../lib/job-manager";
1919import {
2020 canAcceptNewVideoProcess ,
2121 createJob ,
22- decrementActiveVideoProcesses ,
2322 deleteJob ,
2423 generateJobId ,
2524 getActiveVideoProcessCount ,
2625 getAllJobs ,
2726 getJob ,
2827 getJobProgress ,
2928 getMaxConcurrentVideoProcesses ,
30- incrementActiveVideoProcesses ,
29+ getSystemResources ,
3130 sendWebhook ,
3231 updateJob ,
3332} from "../lib/job-manager" ;
@@ -77,14 +76,17 @@ function isTimeoutError(err: unknown): boolean {
7776
7877video . get ( "/status" , ( c ) => {
7978 const jobs = getAllJobs ( ) ;
79+ const resources = getSystemResources ( ) ;
8080 return c . json ( {
8181 instanceId : getInstanceId ( ) ,
8282 pid : process . pid ,
8383 activeVideoProcesses : getActiveVideoProcessCount ( ) ,
8484 maxConcurrentVideoProcesses : getMaxConcurrentVideoProcesses ( ) ,
85+ effectiveMaxVideoProcesses : resources . effectiveMax ,
8586 activeProbeProcesses : getActiveProbeProcessCount ( ) ,
8687 canAcceptNewVideoProcess : canAcceptNewVideoProcess ( ) ,
8788 canAcceptNewProbeProcess : canAcceptNewProbeProcess ( ) ,
89+ resources,
8890 jobCount : jobs . length ,
8991 jobs : jobs . map ( ( j ) => ( {
9092 jobId : j . jobId ,
@@ -239,17 +241,21 @@ video.post("/process", async (c) => {
239241
240242 if ( ! canAcceptNewVideoProcess ( ) ) {
241243 const activeVideoProcesses = getActiveVideoProcessCount ( ) ;
242- const maxConcurrentVideoProcesses = getMaxConcurrentVideoProcesses ( ) ;
244+ const resources = getSystemResources ( ) ;
243245 const jobs = getAllJobs ( ) ;
244246 return c . json (
245247 {
246248 error : "Server is busy" ,
247249 code : "SERVER_BUSY" ,
248- details : `Too many concurrent video processing jobs (${ activeVideoProcesses } /${ maxConcurrentVideoProcesses } ), please retry later` ,
250+ details : resources . throttleReason
251+ ? `Throttled: ${ resources . throttleReason } (${ activeVideoProcesses } /${ resources . effectiveMax } active)`
252+ : `Too many concurrent video processing jobs (${ activeVideoProcesses } /${ resources . effectiveMax } ), please retry later` ,
249253 instanceId : getInstanceId ( ) ,
250254 pid : process . pid ,
251255 activeVideoProcesses,
252- maxConcurrentVideoProcesses,
256+ maxConcurrentVideoProcesses : getMaxConcurrentVideoProcesses ( ) ,
257+ effectiveMaxVideoProcesses : resources . effectiveMax ,
258+ resources,
253259 jobCount : jobs . length ,
254260 jobs : jobs . map ( ( job ) => ( {
255261 jobId : job . jobId ,
@@ -275,8 +281,6 @@ video.post("/process", async (c) => {
275281 const jobId = generateJobId ( ) ;
276282 const job = createJob ( jobId , videoId , userId , webhookUrl ) ;
277283
278- incrementActiveVideoProcesses ( ) ;
279-
280284 processVideoAsync (
281285 job . jobId ,
282286 videoUrl ,
@@ -494,7 +498,6 @@ async function processVideoAsync(
494498) : Promise < void > {
495499 const job = getJob ( jobId ) ;
496500 if ( ! job ) {
497- decrementActiveVideoProcesses ( ) ;
498501 return ;
499502 }
500503
@@ -619,8 +622,6 @@ async function processVideoAsync(
619622 }
620623 await repairedTempFile ?. cleanup ( ) ;
621624 await lastResortRepairFile ?. cleanup ( ) ;
622- } finally {
623- decrementActiveVideoProcesses ( ) ;
624625 }
625626}
626627
0 commit comments