-
-
Notifications
You must be signed in to change notification settings - Fork 809
/
Copy pathindex.js
121 lines (103 loc) · 2.11 KB
/
index.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
'use strict';
var fs = require( 'fs' );
var path = require( 'path' );
var parallel = require( './../lib' );
var nFiles = 100;
var files;
var opts;
var dir;
/**
* Returns a generated script.
*
* @private
* @param {string} id - script id
* @returns {string} script content
*/
function template( id ) {
var file = '';
file += '\'use strict\';';
file += 'var id;';
file += 'var N;';
file += 'var i;';
file += 'id = '+id+';';
file += 'N = 1e1;';
file += 'console.log( \'File: %s. id: %s. N: %d.\', __filename, id, N );';
file += 'for ( i = 0; i < N; i++ ) {';
file += 'console.log( \'id: %s. v: %d.\', id, i );';
file += '}';
return file;
}
/**
* Creates a temporary directory.
*
* @private
* @returns {string} directory path
*/
function createDir() {
var dir = path.join( __dirname, 'tmp' );
fs.mkdirSync( dir );
return dir;
}
/**
* Creates temporary scripts.
*
* @private
* @param {string} dir - destination directory
* @param {NonNegativeInteger} nFiles - number of scripts to create
* @returns {StringArray} array of script file paths
*/
function createScripts( dir, nFiles ) {
var content;
var fpath;
var files;
var i;
files = new Array( nFiles );
for ( i = 0; i < nFiles; i++ ) {
content = template( i.toString() );
fpath = path.join( dir, i+'.js' );
fs.writeFileSync( fpath, content, {
'encoding': 'utf8'
});
files[ i ] = fpath;
}
return files;
}
/**
* Performs clean-up tasks once all scripts have run.
*
* @private
*/
function cleanup() {
var i;
// Delete the temporary files...
for ( i = 0; i < files.length; i++ ) {
fs.unlinkSync( files[ i ] );
}
// Remove temporary directory:
fs.rmdirSync( dir );
}
/**
* Callback invoked once all scripts finish.
*
* @private
* @param {Error} [error] - error object
*/
function done( error ) {
if ( error ) {
throw error;
}
cleanup();
console.log( 'Done!' );
}
// Make a temporary directory to store files...
dir = createDir();
// Create temporary files...
files = createScripts( dir, nFiles );
// Set the runner options:
opts = {
'concurrency': 3,
'workers': 3,
'ordered': false
};
// Run all temporary scripts:
parallel( files, opts, done );