/
datagen.js
57 lines (50 loc) · 1.63 KB
/
datagen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
var _ = require('underscore'),
childProcess = require('child_process'),
fs = require('fs'),
ncp = require('ncp'),
p = require('path');
/**
* class DataGen
**/
function DataGen() {
}
/**
* DataGen#config(cb)
* - cb (Function): standard cb(err, result) callback
*
* Create sample header, segment, footer configuration files in current directory.
**/
DataGen.prototype.config = function (cb) {
console.log('Creating sample configuration files: header, segment, footer');
ncp.ncp(p.join(__dirname, '../examples'), '.', cb);
};
/**
* DataGen#generate(genId, numSegments, numWorkers, outFile)
* - genId (Number): an ID unique to the current data generation, used by all worker processes
* - numSegments (Number): how many segments in a data file
* - numWorkers (Number): how many worker processes to spawn, each worker creates a data file
* - outFile (String): the data file name, to be postfixed with worker ID
*
* Spawn worker processes which will then generate the data file.
**/
DataGen.prototype.generate = function (genId, numSegments, numWorkers, outFile) {
genId = genId || process.pid.toString();
numSegments = numSegments || 1;
numWorkers = numWorkers || 1;
outFile = outFile || 'data';
var templates = {};
['header', 'segment', 'footer'].forEach(function (file) {
templates[file] = fs.readFileSync(file).toString();
});
for (var i = 0; i < numWorkers; i += 1) {
var worker = childProcess.fork(p.join(__dirname, 'worker.js'));
worker.send({
workerId: i + 1,
templates: templates,
genId: genId,
numSegments: numSegments,
outFile: outFile
});
}
};
module.exports = DataGen;