From b9e49a45f5441fd1a2d49a10b88aaf4d425dc992 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 17 Jun 2022 10:48:37 +0200 Subject: Add simulate many viewers script Helps us to improve views scalability on peertube --- scripts/simulate-many-viewers.ts | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 scripts/simulate-many-viewers.ts (limited to 'scripts') diff --git a/scripts/simulate-many-viewers.ts b/scripts/simulate-many-viewers.ts new file mode 100644 index 000000000..4ec928aa8 --- /dev/null +++ b/scripts/simulate-many-viewers.ts @@ -0,0 +1,77 @@ +import Bluebird from 'bluebird' +import { wait } from '@shared/core-utils' +import { createSingleServer, doubleFollow, PeerTubeServer, setAccessTokensToServers, waitJobs } from '@shared/server-commands' + +let servers: PeerTubeServer[] +const viewers: { xForwardedFor: string }[] = [] +let videoId: string + +run() + .then(() => process.exit(0)) + .catch(err => console.error(err)) + +async function run () { + await prepare() + + while (true) { + await runViewers() + } +} + +async function prepare () { + console.log('Preparing servers...') + + const config = { + log: { + level: 'info' + }, + rates_limit: { + api: { + max: 5_000_000 + } + }, + views: { + videos: { + local_buffer_update_interval: '30 minutes', + ip_view_expiration: '1 hour' + } + } + } + + servers = await Promise.all([ + createSingleServer(1, config, { nodeArgs: [ '--inspect' ] }), + createSingleServer(2, config), + createSingleServer(3, config) + ]) + + await setAccessTokensToServers(servers) + await doubleFollow(servers[0], servers[1]) + await doubleFollow(servers[0], servers[2]) + + const { uuid } = await servers[0].videos.quickUpload({ name: 'video' }) + videoId = uuid + + await waitJobs(servers) + + const THOUSAND_VIEWERS = 2 + + for (let i = 2; i < 252; i++) { + for (let j = 2; j < 6; j++) { + for (let k = 2; k < THOUSAND_VIEWERS + 2; k++) { + viewers.push({ xForwardedFor: `0.${k}.${j}.${i},127.0.0.1` }) + } + } + } + + console.log('Servers preparation finished.') +} + +async function runViewers () { + console.log('Will run views of %d viewers.', viewers.length) + + await Bluebird.map(viewers, viewer => { + return servers[0].views.simulateView({ id: videoId, xForwardedFor: viewer.xForwardedFor }) + }, { concurrency: 100 }) + + await wait(5000) +} -- cgit v1.2.3 From 3396e6534592865f184ee2db32a75957c42cb887 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 17 Jun 2022 10:49:37 +0200 Subject: Optimize broadcast job creation --- scripts/simulate-many-viewers.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/simulate-many-viewers.ts b/scripts/simulate-many-viewers.ts index 4ec928aa8..fb666c318 100644 --- a/scripts/simulate-many-viewers.ts +++ b/scripts/simulate-many-viewers.ts @@ -1,6 +1,13 @@ import Bluebird from 'bluebird' import { wait } from '@shared/core-utils' -import { createSingleServer, doubleFollow, PeerTubeServer, setAccessTokensToServers, waitJobs } from '@shared/server-commands' +import { + createSingleServer, + doubleFollow, + killallServers, + PeerTubeServer, + setAccessTokensToServers, + waitJobs +} from '@shared/server-commands' let servers: PeerTubeServer[] const viewers: { xForwardedFor: string }[] = [] @@ -9,6 +16,7 @@ let videoId: string run() .then(() => process.exit(0)) .catch(err => console.error(err)) + .finally(() => killallServers(servers)) async function run () { await prepare() @@ -69,9 +77,13 @@ async function prepare () { async function runViewers () { console.log('Will run views of %d viewers.', viewers.length) + const before = new Date().getTime() + await Bluebird.map(viewers, viewer => { return servers[0].views.simulateView({ id: videoId, xForwardedFor: viewer.xForwardedFor }) }, { concurrency: 100 }) + console.log('Finished to run views in %d seconds.', (new Date().getTime() - before) / 1000) + await wait(5000) } -- cgit v1.2.3