multi-tasks 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
let fs = require('fs');
|
|
2
|
+
let pathutil = require('path');
|
|
3
|
+
let SuperConsumer = require('../index').SuperConsumer;
|
|
4
|
+
|
|
5
|
+
let loadTaskFile = (dir)=>{
|
|
6
|
+
var results = []
|
|
7
|
+
var list = fs.readdirSync(dir);
|
|
8
|
+
list.forEach(function(file) {
|
|
9
|
+
var stat;
|
|
10
|
+
try{
|
|
11
|
+
stat = fs.statSync(pathutil.resolve(dir, file))
|
|
12
|
+
}catch(e){
|
|
13
|
+
//Must try-catch, the file maybe deleted by other process
|
|
14
|
+
}
|
|
15
|
+
if (stat && !stat.isDirectory()) results.push({file, fpath: pathutil.resolve(dir, file)});
|
|
16
|
+
})
|
|
17
|
+
//console.log(results);
|
|
18
|
+
return results;
|
|
19
|
+
};
|
|
20
|
+
let mvTask = (oldPath, newPath, oldfname, callback)=>{
|
|
21
|
+
if(typeof callback === 'undefined') callback = ()=>{};
|
|
22
|
+
//console.log('>>>', oldPath, newPath, oldfname)
|
|
23
|
+
let oldfPath = pathutil.resolve(oldPath, oldfname);
|
|
24
|
+
let newfPath = pathutil.resolve(newPath, oldfname);
|
|
25
|
+
//if(fs.existsSync(newfPath)) fs.rmSync(newfPath, {force: true});
|
|
26
|
+
fs.rename(oldfPath, newfPath, (err) => {
|
|
27
|
+
if (err) throw err;
|
|
28
|
+
callback(newfPath);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
let _do = (mainTaskInfo, actions, callback)=>{
|
|
33
|
+
let{dynamicTasksFolderNew, dynamicTasksFolderSucc, dynamicTasksFolderFail} = mainTaskInfo.defination;
|
|
34
|
+
|
|
35
|
+
let tasks = loadTaskFile(dynamicTasksFolderNew);
|
|
36
|
+
|
|
37
|
+
if(tasks.length === 0) return callback({data:'hahaha'+Math.random()});
|
|
38
|
+
let task = tasks[0];
|
|
39
|
+
let fpath = task.fpath;
|
|
40
|
+
|
|
41
|
+
mvTask(dynamicTasksFolderNew, dynamicTasksFolderSucc, task.file);
|
|
42
|
+
|
|
43
|
+
{
|
|
44
|
+
//processing...
|
|
45
|
+
console.log('processing...', fpath);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
_do(mainTaskInfo, actions, callback);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class TestConsumer extends SuperConsumer {
|
|
53
|
+
// constructor
|
|
54
|
+
constructor(taskname, parentfolder) {
|
|
55
|
+
super(taskname, parentfolder)
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
setTaskTrunkInfo(trunkInfo){
|
|
59
|
+
this.trunkInfo = trunkInfo;
|
|
60
|
+
}
|
|
61
|
+
run (mainTaskInfo, subTaskInfo, taskInfo, callback){
|
|
62
|
+
//console.log(`this.trunkInfo===`, this.trunkInfo)
|
|
63
|
+
let actions = subTaskInfo.actions;
|
|
64
|
+
mainTaskInfo.defination = this.trunkInfo;
|
|
65
|
+
_do(mainTaskInfo, actions, (result)=>{
|
|
66
|
+
callback(result)
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
module.exports = TestConsumer;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
let SuperProducer = require('../index').SuperProducer;
|
|
2
|
+
class TestProducer extends SuperProducer {
|
|
3
|
+
|
|
4
|
+
// constructor
|
|
5
|
+
constructor(taskname, parentfolder) {
|
|
6
|
+
super(taskname, parentfolder)
|
|
7
|
+
|
|
8
|
+
}
|
|
9
|
+
setTaskTrunkInfo(trunkInfo){
|
|
10
|
+
this.trunkInfo = trunkInfo;
|
|
11
|
+
}
|
|
12
|
+
getAllActions() {
|
|
13
|
+
|
|
14
|
+
return new Promise((resolve, reject)=>{
|
|
15
|
+
let trunkInfo = this.trunkInfo;
|
|
16
|
+
let {NUMBER_OF_WORKS} = trunkInfo;
|
|
17
|
+
//console.log(this.trunkInfo)
|
|
18
|
+
//throw repos.length+'ff'+repos2.length
|
|
19
|
+
//here, IGNORED_repoRegexStringList
|
|
20
|
+
let alltasks = []
|
|
21
|
+
for(let i=0;i<NUMBER_OF_WORKS;i++){
|
|
22
|
+
alltasks.push({
|
|
23
|
+
num:i
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
resolve(alltasks);
|
|
27
|
+
})
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
module.exports = TestProducer;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
let fs = require('fs');
|
|
2
|
+
let pathutil = require('path');
|
|
3
|
+
let makeDir = require('make-dir');
|
|
4
|
+
let RunnerProducer = require('./RunnerProducer')
|
|
5
|
+
let RunnerConsumer = require('./RunnerConsumer')
|
|
6
|
+
|
|
7
|
+
let thisroot = pathutil.parse(__filename).dir;
|
|
8
|
+
let taskId = `workers_of_${Math.random()}`;
|
|
9
|
+
let multi_task_parent_folder = pathutil.resolve(thisroot, `../../../multi-tasks-example2-dynamicIncreasing`);
|
|
10
|
+
|
|
11
|
+
let producer = new RunnerProducer(taskId, multi_task_parent_folder)
|
|
12
|
+
let consumer = new RunnerConsumer();
|
|
13
|
+
let master = require('../index').master;
|
|
14
|
+
|
|
15
|
+
console.log(producer.getTaskName())
|
|
16
|
+
//return;
|
|
17
|
+
|
|
18
|
+
let NUMBER_OF_WORKS = 6;//LOCK NUMBER OF WORKERS
|
|
19
|
+
|
|
20
|
+
let taskConfig = {
|
|
21
|
+
NUMBER_OF_WORKS,
|
|
22
|
+
dynamicTasksFolderNew: pathutil.resolve(multi_task_parent_folder, `./dynamicTasks-NEW`),
|
|
23
|
+
dynamicTasksFolderSucc: pathutil.resolve(multi_task_parent_folder, `./dynamicTasks-SUCC`),
|
|
24
|
+
dynamicTasksFolderFail: pathutil.resolve(multi_task_parent_folder, `./dynamicTasks-FAIL`),
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if(!fs.existsSync(taskConfig.dynamicTasksFolderNew)) throw "Must create folder, DO NOT create by code!";
|
|
28
|
+
if(!fs.existsSync(taskConfig.dynamicTasksFolderSucc)) throw "Must create folder, DO NOT create by code!";
|
|
29
|
+
if(!fs.existsSync(taskConfig.dynamicTasksFolderFail)) throw "Must create folder, DO NOT create by code!";
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
producer.setTaskTrunkInfo(taskConfig);
|
|
33
|
+
consumer.setTaskTrunkInfo(taskConfig)
|
|
34
|
+
master.run(producer, consumer, {
|
|
35
|
+
quotaOfEachTask:1, //<--Lock as one
|
|
36
|
+
numberOfWorks:NUMBER_OF_WORKS
|
|
37
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "multi-tasks",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"directories": {
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
"worker",
|
|
15
15
|
"multithread"
|
|
16
16
|
],
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"moment":"2.29.4",
|
|
19
|
+
"make-dir":"^3.1.0"
|
|
20
|
+
},
|
|
17
21
|
"author": "zhanglei923@gmail.com",
|
|
18
22
|
"license": "MIT"
|
|
19
23
|
}
|