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