]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
More robust runner update handler
authorChocobozzz <me@florianbigard.com>
Mon, 19 Jun 2023 11:45:26 +0000 (13:45 +0200)
committerChocobozzz <me@florianbigard.com>
Mon, 19 Jun 2023 11:45:26 +0000 (13:45 +0200)
packages/peertube-runner/server/process/shared/common.ts
shared/ffmpeg/ffmpeg-command-wrapper.ts

index 88f7c33f10459e5817bb721df824c06fc23582c3..dbeb9dfc142c10a96978dc187f46b738a120c8ee 100644 (file)
@@ -1,5 +1,4 @@
 import { remove } from 'fs-extra'
-import { throttle } from 'lodash'
 import { ConfigManager, downloadFile, logger } from 'packages/peertube-runner/shared'
 import { join } from 'path'
 import { buildUUID } from '@shared/extra-utils'
@@ -60,17 +59,26 @@ export function buildFFmpegVOD (options: {
     ? 500
     : 60000
 
-  const updateJobProgress = throttle((progress: number) => {
-    if (progress < 0 || progress > 100) progress = undefined
+  let progress: number
 
+  const interval = setInterval(() => {
     updateTranscodingProgress({ server, job, runnerToken, progress })
       .catch(err => logger.error({ err }, 'Cannot send job progress'))
-  }, updateInterval, { trailing: false })
+  }, updateInterval)
 
   return new FFmpegVOD({
     ...getCommonFFmpegOptions(),
 
-    updateJobProgress
+    onError: () => clearInterval(interval),
+    onEnd: () => clearInterval(interval),
+
+    updateJobProgress: arg => {
+      if (arg < 0 || arg > 100) {
+        progress = undefined
+      } else {
+        progress = arg
+      }
+    }
   })
 }
 
index 7a8c19d4bd73074d7fb5b7a48c407d6a42f49616..efb75c1988ade37fb20157f93ec8563b7236d544 100644 (file)
@@ -21,6 +21,8 @@ export interface FFmpegCommandWrapperOptions {
   lTags?: { tags: string[] }
 
   updateJobProgress?: (progress?: number) => void
+  onEnd?: () => void
+  onError?: (err: Error) => void
 }
 
 export class FFmpegCommandWrapper {
@@ -37,6 +39,8 @@ export class FFmpegCommandWrapper {
   private readonly lTags: { tags: string[] }
 
   private readonly updateJobProgress: (progress?: number) => void
+  private readonly onEnd?: () => void
+  private readonly onError?: (err: Error) => void
 
   private command: FfmpegCommand
 
@@ -48,7 +52,11 @@ export class FFmpegCommandWrapper {
     this.threads = options.threads
     this.logger = options.logger
     this.lTags = options.lTags || { tags: [] }
+
     this.updateJobProgress = options.updateJobProgress
+
+    this.onEnd = options.onEnd
+    this.onError = options.onError
   }
 
   getAvailableEncoders () {
@@ -101,12 +109,16 @@ export class FFmpegCommandWrapper {
       this.command.on('error', (err, stdout, stderr) => {
         if (silent !== true) this.logger.error('Error in ffmpeg.', { stdout, stderr, shellCommand, ...this.lTags })
 
+        if (this.onError) this.onError(err)
+
         rej(err)
       })
 
       this.command.on('end', (stdout, stderr) => {
         this.logger.debug('FFmpeg command ended.', { stdout, stderr, shellCommand, ...this.lTags })
 
+        if (this.onEnd) this.onEnd()
+
         res()
       })