]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/worker/parent-process.ts
Bumped to version v5.2.1
[github/Chocobozzz/PeerTube.git] / server / lib / worker / parent-process.ts
CommitLineData
c53853ca
C
1import { join } from 'path'
2import Piscina from 'piscina'
daa0226b 3import { processImage } from '@server/helpers/image-utils'
f240fb4b 4import { JOB_CONCURRENCY, WORKER_THREADS } from '@server/initializers/constants'
405c83f9 5import { httpBroadcast } from './workers/http-broadcast'
c53853ca
C
6import { downloadImage } from './workers/image-downloader'
7
daa0226b 8let downloadImageWorker: Piscina
c53853ca
C
9
10function downloadImageFromWorker (options: Parameters<typeof downloadImage>[0]): Promise<ReturnType<typeof downloadImage>> {
daa0226b
C
11 if (!downloadImageWorker) {
12 downloadImageWorker = new Piscina({
13 filename: join(__dirname, 'workers', 'image-downloader.js'),
14 concurrentTasksPerWorker: WORKER_THREADS.DOWNLOAD_IMAGE.CONCURRENCY,
15 maxThreads: WORKER_THREADS.DOWNLOAD_IMAGE.MAX_THREADS
16 })
17 }
18
19 return downloadImageWorker.run(options)
c53853ca
C
20}
21
3a54605d
C
22// ---------------------------------------------------------------------------
23
daa0226b 24let processImageWorker: Piscina
3a54605d
C
25
26function processImageFromWorker (options: Parameters<typeof processImage>[0]): Promise<ReturnType<typeof processImage>> {
daa0226b
C
27 if (!processImageWorker) {
28 processImageWorker = new Piscina({
29 filename: join(__dirname, 'workers', 'image-processor.js'),
30 concurrentTasksPerWorker: WORKER_THREADS.PROCESS_IMAGE.CONCURRENCY,
31 maxThreads: WORKER_THREADS.PROCESS_IMAGE.MAX_THREADS
32 })
33 }
34
3a54605d
C
35 return processImageWorker.run(options)
36}
37
405c83f9
C
38// ---------------------------------------------------------------------------
39
40let parallelHTTPBroadcastWorker: Piscina
41
42function parallelHTTPBroadcastFromWorker (options: Parameters<typeof httpBroadcast>[0]): Promise<ReturnType<typeof httpBroadcast>> {
43 if (!parallelHTTPBroadcastWorker) {
44 parallelHTTPBroadcastWorker = new Piscina({
45 filename: join(__dirname, 'workers', 'http-broadcast.js'),
f240fb4b
C
46 // Keep it sync with job concurrency so the worker will accept all the requests sent by the parallelized jobs
47 concurrentTasksPerWorker: JOB_CONCURRENCY['activitypub-http-broadcast-parallel'],
48 maxThreads: 1
405c83f9
C
49 })
50 }
51
52 return parallelHTTPBroadcastWorker.run(options)
53}
54
55// ---------------------------------------------------------------------------
56
57let sequentialHTTPBroadcastWorker: Piscina
58
59function sequentialHTTPBroadcastFromWorker (options: Parameters<typeof httpBroadcast>[0]): Promise<ReturnType<typeof httpBroadcast>> {
60 if (!sequentialHTTPBroadcastWorker) {
61 sequentialHTTPBroadcastWorker = new Piscina({
62 filename: join(__dirname, 'workers', 'http-broadcast.js'),
f240fb4b
C
63 // Keep it sync with job concurrency so the worker will accept all the requests sent by the parallelized jobs
64 concurrentTasksPerWorker: JOB_CONCURRENCY['activitypub-http-broadcast'],
65 maxThreads: 1
405c83f9
C
66 })
67 }
68
69 return sequentialHTTPBroadcastWorker.run(options)
70}
71
c53853ca 72export {
3a54605d 73 downloadImageFromWorker,
405c83f9
C
74 processImageFromWorker,
75 parallelHTTPBroadcastFromWorker,
76 sequentialHTTPBroadcastFromWorker
c53853ca 77}