1 | 'use strict'
|
2 |
|
3 | const xorshift = require('xorshift')
|
4 | const MB = Math.pow(1024, 2)
|
5 |
|
6 | function generateProcessStat (data, noiseLevel, timeStretching) {
|
7 | const rng = new xorshift.constructor([
|
8 | 294915, 70470, 145110, 287911
|
9 | ])
|
10 |
|
11 | noiseLevel = noiseLevel || 0
|
12 | timeStretching = timeStretching || 1
|
13 |
|
14 | function noise () {
|
15 | return rng.random() * noiseLevel
|
16 | }
|
17 |
|
18 |
|
19 | const flat = {
|
20 | delay: data.delay,
|
21 | cpu: data.cpu,
|
22 | rss: data.memory && data.memory.rss,
|
23 | heapTotal: data.memory && data.memory.heapTotal,
|
24 | heapUsed: data.memory && data.memory.heapUsed,
|
25 | external: data.memory && data.memory.external,
|
26 | handles: data.handles && data.handles
|
27 | }
|
28 |
|
29 |
|
30 | let minLength = Infinity
|
31 | let maxLength = -Infinity
|
32 | for (const array of Object.values(flat)) {
|
33 | if (array === undefined) continue
|
34 | maxLength = Math.max(maxLength, array.length)
|
35 | minLength = Math.min(minLength, array.length)
|
36 | }
|
37 |
|
38 | if (maxLength !== minLength) {
|
39 | throw new Error('provided arrays are not equally long')
|
40 | }
|
41 |
|
42 |
|
43 | const output = []
|
44 | for (let i = 0; i < maxLength; i++) {
|
45 | output.push({
|
46 | timestamp: i * 10 * timeStretching,
|
47 | delay: !flat.delay ? 0 : flat.delay[i] + noise(),
|
48 | cpu: !flat.cpu ? 0 : (flat.cpu[i] + noise()) * 0.01,
|
49 | memory: {
|
50 | rss: !flat.rss ? 0 : (flat.rss[i] + noise()) * MB,
|
51 | heapTotal: !flat.heapTotal ? 0 : (flat.heapTotal[i] + noise()) * MB,
|
52 | heapUsed: !flat.heapUsed ? 0 : (flat.heapUsed[i] + noise()) * MB,
|
53 | external: !flat.external ? 0 : (flat.external[i] + noise()) * MB
|
54 | },
|
55 | handles: !flat.handles ? 0 : (flat.handles[i] + noise())
|
56 | })
|
57 | }
|
58 |
|
59 | return output
|
60 | }
|
61 |
|
62 | module.exports = generateProcessStat
|