]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/extra-utils/server/jobs.ts
Use an object to represent a server
[github/Chocobozzz/PeerTube.git] / shared / extra-utils / server / jobs.ts
index 692b5e24d4b6f8eb01c3a7627cb1970321b58bb6..64a0353eba5b4ad79915bc67f2c0fc015d5df632 100644 (file)
@@ -1,64 +1,59 @@
-import * as request from 'supertest'
-import { Job, JobState } from '../../models'
-import { wait } from '../miscs/miscs'
-import { ServerInfo } from './servers'
-
-function getJobsList (url: string, accessToken: string, state: JobState) {
-  const path = '/api/v1/jobs/' + state
-
-  return request(url)
-          .get(path)
-          .set('Accept', 'application/json')
-          .set('Authorization', 'Bearer ' + accessToken)
-          .expect(200)
-          .expect('Content-Type', /json/)
-}
 
-function getJobsListPaginationAndSort (url: string, accessToken: string, state: JobState, start: number, count: number, sort: string) {
-  const path = '/api/v1/jobs/' + state
-
-  return request(url)
-          .get(path)
-          .query({ start })
-          .query({ count })
-          .query({ sort })
-          .set('Accept', 'application/json')
-          .set('Authorization', 'Bearer ' + accessToken)
-          .expect(200)
-          .expect('Content-Type', /json/)
-}
+import { JobState } from '../../models'
+import { wait } from '../miscs'
+import { PeerTubeServer } from './server'
+
+async function waitJobs (serversArg: PeerTubeServer[] | PeerTubeServer) {
+  const pendingJobWait = process.env.NODE_PENDING_JOB_WAIT
+    ? parseInt(process.env.NODE_PENDING_JOB_WAIT, 10)
+    : 250
 
-async function waitJobs (serversArg: ServerInfo[] | ServerInfo) {
-  const pendingJobWait = process.env.NODE_PENDING_JOB_WAIT ? parseInt(process.env.NODE_PENDING_JOB_WAIT, 10) : 2000
-  let servers: ServerInfo[]
+  let servers: PeerTubeServer[]
 
-  if (Array.isArray(serversArg) === false) servers = [ serversArg as ServerInfo ]
-  else servers = serversArg as ServerInfo[]
+  if (Array.isArray(serversArg) === false) servers = [ serversArg as PeerTubeServer ]
+  else servers = serversArg as PeerTubeServer[]
 
   const states: JobState[] = [ 'waiting', 'active', 'delayed' ]
-  let pendingRequests = false
+  const repeatableJobs = [ 'videos-views', 'activitypub-cleaner' ]
+  let pendingRequests: boolean
 
   function tasksBuilder () {
     const tasks: Promise<any>[] = []
-    pendingRequests = false
 
     // Check if each server has pending request
     for (const server of servers) {
       for (const state of states) {
-        const p = getJobsListPaginationAndSort(server.url, server.accessToken, state, 0, 10, '-createdAt')
-          .then(res => res.body.data)
-          .then((jobs: Job[]) => jobs.filter(j => j.type !== 'videos-views'))
+        const p = server.jobs.getJobsList({
+          state,
+          start: 0,
+          count: 10,
+          sort: '-createdAt'
+        }).then(body => body.data)
+          .then(jobs => jobs.filter(j => !repeatableJobs.includes(j.type)))
           .then(jobs => {
-            if (jobs.length !== 0) pendingRequests = true
+            if (jobs.length !== 0) {
+              pendingRequests = true
+            }
           })
+
         tasks.push(p)
       }
+
+      const p = server.debug.getDebug()
+        .then(obj => {
+          if (obj.activityPubMessagesWaiting !== 0) {
+            pendingRequests = true
+          }
+        })
+
+      tasks.push(p)
     }
 
     return tasks
   }
 
   do {
+    pendingRequests = false
     await Promise.all(tasksBuilder())
 
     // Retry, in case of new jobs were created
@@ -68,7 +63,7 @@ async function waitJobs (serversArg: ServerInfo[] | ServerInfo) {
     }
 
     if (pendingRequests) {
-      await wait(1000)
+      await wait(pendingJobWait)
     }
   } while (pendingRequests)
 }
@@ -76,7 +71,5 @@ async function waitJobs (serversArg: ServerInfo[] | ServerInfo) {
 // ---------------------------------------------------------------------------
 
 export {
-  getJobsList,
-  waitJobs,
-  getJobsListPaginationAndSort
+  waitJobs
 }