]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - shared/server-commands/server/jobs.ts
server: serve files from storage/well-known (#5214)
[github/Chocobozzz/PeerTube.git] / shared / server-commands / server / jobs.ts
CommitLineData
9c6327f8 1
842a1573 2import { expect } from 'chai'
c55e3d72 3import { wait } from '@shared/core-utils'
51353d9a 4import { JobState, JobType } from '../../models'
254d3579 5import { PeerTubeServer } from './server'
5cd80545 6
0305db28 7async function waitJobs (serversArg: PeerTubeServer[] | PeerTubeServer, skipDelayed = false) {
fae6e4da
C
8 const pendingJobWait = process.env.NODE_PENDING_JOB_WAIT
9 ? parseInt(process.env.NODE_PENDING_JOB_WAIT, 10)
4b91bc15 10 : 250
fae6e4da 11
254d3579 12 let servers: PeerTubeServer[]
3cd0734f 13
254d3579
C
14 if (Array.isArray(serversArg) === false) servers = [ serversArg as PeerTubeServer ]
15 else servers = serversArg as PeerTubeServer[]
3cd0734f 16
0305db28
JB
17 const states: JobState[] = [ 'waiting', 'active' ]
18 if (!skipDelayed) states.push('delayed')
19
51353d9a 20 const repeatableJobs: JobType[] = [ 'videos-views-stats', 'activitypub-cleaner' ]
bfbd9128 21 let pendingRequests: boolean
3cd0734f 22
cef534ed
C
23 function tasksBuilder () {
24 const tasks: Promise<any>[] = []
3cd0734f
C
25
26 // Check if each server has pending request
27 for (const server of servers) {
28 for (const state of states) {
851675c5 29 const p = server.jobs.list({
9c6327f8 30 state,
1061c73f
C
31 start: 0,
32 count: 10,
33 sort: '-createdAt'
9c6327f8
C
34 }).then(body => body.data)
35 .then(jobs => jobs.filter(j => !repeatableJobs.includes(j.type)))
6b616860 36 .then(jobs => {
2284f202
C
37 if (jobs.length !== 0) {
38 pendingRequests = true
39 }
3cd0734f 40 })
fae6e4da 41
3cd0734f
C
42 tasks.push(p)
43 }
fae6e4da 44
89d241a7 45 const p = server.debug.getDebug()
883a9019 46 .then(obj => {
fae6e4da
C
47 if (obj.activityPubMessagesWaiting !== 0) {
48 pendingRequests = true
49 }
50 })
51
52 tasks.push(p)
3cd0734f
C
53 }
54
cef534ed
C
55 return tasks
56 }
57
58 do {
bfbd9128 59 pendingRequests = false
cef534ed 60 await Promise.all(tasksBuilder())
3cd0734f
C
61
62 // Retry, in case of new jobs were created
63 if (pendingRequests === false) {
2f1548fd 64 await wait(pendingJobWait)
cef534ed 65 await Promise.all(tasksBuilder())
3cd0734f
C
66 }
67
68 if (pendingRequests) {
4b91bc15 69 await wait(pendingJobWait)
3cd0734f
C
70 }
71 } while (pendingRequests)
72}
73
842a1573
C
74async function expectNoFailedTranscodingJob (server: PeerTubeServer) {
75 const { data } = await server.jobs.listFailed({ jobType: 'video-transcoding' })
76 expect(data).to.have.lengthOf(0)
77}
78
5cd80545
C
79// ---------------------------------------------------------------------------
80
81export {
842a1573
C
82 waitJobs,
83 expectNoFailedTranscodingJob
5cd80545 84}