mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-06 03:50:26 +02:00
Add priority to transcoding jobs
(1 = highest priority) 100 for new resolutions 10 for original file optimization Add a malus for transcoding jobs depending on how many uploads the user did in the last 7 days
This commit is contained in:
parent
92c871b405
commit
77d7e851dc
15 changed files with 172 additions and 79 deletions
|
@ -1,11 +1,13 @@
|
|||
import { Transaction } from 'sequelize/types'
|
||||
import { DEFAULT_AUDIO_RESOLUTION, JOB_PRIORITY } from '@server/initializers/constants'
|
||||
import { sequelizeTypescript } from '@server/initializers/database'
|
||||
import { TagModel } from '@server/models/video/tag'
|
||||
import { VideoModel } from '@server/models/video/video'
|
||||
import { FilteredModelAttributes } from '@server/types'
|
||||
import { MTag, MThumbnail, MVideoTag, MVideoThumbnail, MVideoUUID } from '@server/types/models'
|
||||
import { ThumbnailType, VideoCreate, VideoPrivacy } from '@shared/models'
|
||||
import { MTag, MThumbnail, MUserId, MVideo, MVideoFile, MVideoTag, MVideoThumbnail, MVideoUUID } from '@server/types/models'
|
||||
import { ThumbnailType, VideoCreate, VideoPrivacy, VideoTranscodingPayload } from '@shared/models'
|
||||
import { federateVideoIfNeeded } from './activitypub/videos'
|
||||
import { JobQueue } from './job-queue/job-queue'
|
||||
import { Notifier } from './notifier'
|
||||
import { createVideoMiniatureFromExisting } from './thumbnail'
|
||||
|
||||
|
@ -104,11 +106,47 @@ async function publishAndFederateIfNeeded (video: MVideoUUID, wasLive = false) {
|
|||
}
|
||||
}
|
||||
|
||||
async function addOptimizeOrMergeAudioJob (video: MVideo, videoFile: MVideoFile, user: MUserId) {
|
||||
let dataInput: VideoTranscodingPayload
|
||||
|
||||
if (videoFile.isAudio()) {
|
||||
dataInput = {
|
||||
type: 'merge-audio-to-webtorrent',
|
||||
resolution: DEFAULT_AUDIO_RESOLUTION,
|
||||
videoUUID: video.uuid,
|
||||
isNewVideo: true
|
||||
}
|
||||
} else {
|
||||
dataInput = {
|
||||
type: 'optimize-to-webtorrent',
|
||||
videoUUID: video.uuid,
|
||||
isNewVideo: true
|
||||
}
|
||||
}
|
||||
|
||||
const jobOptions = {
|
||||
priority: JOB_PRIORITY.TRANSCODING.OPTIMIZER + await getJobTranscodingPriorityMalus(user)
|
||||
}
|
||||
|
||||
return JobQueue.Instance.createJobWithPromise({ type: 'video-transcoding', payload: dataInput }, jobOptions)
|
||||
}
|
||||
|
||||
async function getJobTranscodingPriorityMalus (user: MUserId) {
|
||||
const now = new Date()
|
||||
const lastWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 7)
|
||||
|
||||
const videoUploadedByUser = await VideoModel.countVideosUploadedByUserSince(user.id, lastWeek)
|
||||
|
||||
return videoUploadedByUser
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export {
|
||||
buildLocalVideoFromReq,
|
||||
publishAndFederateIfNeeded,
|
||||
buildVideoThumbnailsFromReq,
|
||||
setVideoTags
|
||||
setVideoTags,
|
||||
addOptimizeOrMergeAudioJob,
|
||||
getJobTranscodingPriorityMalus
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue