+ }
+
+ return total
+ }
+
+ async removeOldJobs () {
+ for (const key of Object.keys(this.queues)) {
+ const queue = this.queues[key]
+ await queue.clean(JOB_COMPLETED_LIFETIME, 'completed')
+ }
+ }
+
+ private addRepeatableJobs () {
+ this.queues['videos-views'].add({}, {
+ repeat: REPEAT_JOBS['videos-views']
+ }).catch(err => logger.error('Cannot add repeatable job.', { err }))
+
+ if (CONFIG.FEDERATION.VIDEOS.CLEANUP_REMOTE_INTERACTIONS) {
+ this.queues['activitypub-cleaner'].add({}, {
+ repeat: REPEAT_JOBS['activitypub-cleaner']
+ }).catch(err => logger.error('Cannot add repeatable job.', { err }))
+ }
+ }
+
+ private filterJobTypes (jobType?: JobType) {
+ if (!jobType) return jobTypes
+
+ return jobTypes.filter(t => t === jobType)
+ }
+
+ private getJobConcurrency (jobType: JobType) {
+ if (jobType === 'video-transcoding') return CONFIG.TRANSCODING.CONCURRENCY
+ if (jobType === 'video-import') return CONFIG.IMPORT.VIDEOS.CONCURRENCY
+
+ return JOB_CONCURRENCY[jobType]