]>
Commit | Line | Data |
---|---|---|
b9e49a45 C |
1 | import Bluebird from 'bluebird' |
2 | import { wait } from '@shared/core-utils' | |
3396e653 C |
3 | import { |
4 | createSingleServer, | |
5 | doubleFollow, | |
6 | killallServers, | |
7 | PeerTubeServer, | |
8 | setAccessTokensToServers, | |
9 | waitJobs | |
10 | } from '@shared/server-commands' | |
b9e49a45 C |
11 | |
12 | let servers: PeerTubeServer[] | |
13 | const viewers: { xForwardedFor: string }[] = [] | |
14 | let videoId: string | |
15 | ||
16 | run() | |
17 | .then(() => process.exit(0)) | |
18 | .catch(err => console.error(err)) | |
3396e653 | 19 | .finally(() => killallServers(servers)) |
b9e49a45 C |
20 | |
21 | async function run () { | |
22 | await prepare() | |
23 | ||
24 | while (true) { | |
25 | await runViewers() | |
26 | } | |
27 | } | |
28 | ||
29 | async function prepare () { | |
30 | console.log('Preparing servers...') | |
31 | ||
32 | const config = { | |
33 | log: { | |
34 | level: 'info' | |
35 | }, | |
36 | rates_limit: { | |
37 | api: { | |
38 | max: 5_000_000 | |
39 | } | |
40 | }, | |
41 | views: { | |
42 | videos: { | |
43 | local_buffer_update_interval: '30 minutes', | |
44 | ip_view_expiration: '1 hour' | |
45 | } | |
46 | } | |
47 | } | |
48 | ||
aa2ce188 C |
49 | const env = { PRODUCTION_CONSTANTS: 'true' } |
50 | ||
b9e49a45 | 51 | servers = await Promise.all([ |
aa2ce188 C |
52 | createSingleServer(1, config, { env, nodeArgs: [ '--inspect' ] }), |
53 | createSingleServer(2, config, { env }), | |
54 | createSingleServer(3, config, { env }) | |
b9e49a45 C |
55 | ]) |
56 | ||
57 | await setAccessTokensToServers(servers) | |
58 | await doubleFollow(servers[0], servers[1]) | |
59 | await doubleFollow(servers[0], servers[2]) | |
60 | ||
61 | const { uuid } = await servers[0].videos.quickUpload({ name: 'video' }) | |
62 | videoId = uuid | |
63 | ||
64 | await waitJobs(servers) | |
65 | ||
66 | const THOUSAND_VIEWERS = 2 | |
67 | ||
68 | for (let i = 2; i < 252; i++) { | |
69 | for (let j = 2; j < 6; j++) { | |
70 | for (let k = 2; k < THOUSAND_VIEWERS + 2; k++) { | |
71 | viewers.push({ xForwardedFor: `0.${k}.${j}.${i},127.0.0.1` }) | |
72 | } | |
73 | } | |
74 | } | |
75 | ||
76 | console.log('Servers preparation finished.') | |
77 | } | |
78 | ||
79 | async function runViewers () { | |
80 | console.log('Will run views of %d viewers.', viewers.length) | |
81 | ||
3396e653 C |
82 | const before = new Date().getTime() |
83 | ||
b9e49a45 C |
84 | await Bluebird.map(viewers, viewer => { |
85 | return servers[0].views.simulateView({ id: videoId, xForwardedFor: viewer.xForwardedFor }) | |
aa2ce188 | 86 | }, { concurrency: 500 }) |
b9e49a45 | 87 | |
3396e653 C |
88 | console.log('Finished to run views in %d seconds.', (new Date().getTime() - before) / 1000) |
89 | ||
b9e49a45 C |
90 | await wait(5000) |
91 | } |