UNPKG

1.83 kBJavaScriptView Raw
1'use strict'
2
3const xorshift = require('xorshift')
4const MB = Math.pow(1024, 2)
5
6function generateProcessStat (data, noiseLevel, timeStretching) {
7 const rng = new xorshift.constructor([
8 294915, 70470, 145110, 287911 // from random.org :)
9 ])
10
11 noiseLevel = noiseLevel || 0
12 timeStretching = timeStretching || 1
13
14 function noise () {
15 return rng.random() * noiseLevel
16 }
17
18 // flatten data structure
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 // check lengths are equal
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 // create a process stat array of length `maxLength === minLength`
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
62module.exports = generateProcessStat