File size: 1,163 Bytes
955ce73
e4e0e54
 
955ce73
5dfc565
652f343
5dfc565
e4e0e54
 
ce7f582
652f343
 
cd0e411
652f343
 
 
e4e0e54
 
 
 
cd0e411
 
 
 
 
 
 
 
 
 
 
 
 
43afa34
 
cd0e411
be15697
cd0e411
deae345
 
652f343
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

import { getPendingVideos } from "./scheduler/getPendingVideos.mts"
import { processVideo } from "./scheduler/processVideo.mts"
import { sortPendingVideosByLeastCompletedFirst } from "./scheduler/sortPendingVideosByLeastCompletedFirst.mts"

export const main = async () => {

  const videos = await getPendingVideos()
  if (!videos.length) {
    // console.log(`no job to process.. going to try in 200 ms`)
    setTimeout(() => {
      main()
    }, 200)
    return
  }

  console.log(`there are ${videos.length} pending videos`)

  sortPendingVideosByLeastCompletedFirst(videos)

  let somethingFailed = ""
  await Promise.all(videos.map(async video => {
    try {
      const result = await processVideo(video)
      return result
    } catch (err) {
      somethingFailed = `${err}`
      // a video failed.. no big deal
      return Promise.resolve(somethingFailed)
    }
  }))

  if (somethingFailed) {
    console.error(`one of the jobs failed: ${somethingFailed}, let's wait 5 seconds`)
    setTimeout(() => { main() }, 5000)
  } else {
    console.log(`successfully worked on the jobs, let's immediately loop`)
    setTimeout(() => { main() }, 50)
  }

}