-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
133 lines (120 loc) · 2.86 KB
/
Copy pathindex.js
File metadata and controls
133 lines (120 loc) · 2.86 KB
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
122
123
124
125
126
127
128
129
130
131
132
133
"use strict";
module.exports = (function(){
//job counter for pretty print
var job_c = 0,
job_sep = ' ',
toArray = function(a){return [].concat.apply([],a);},
getDeep = function(){
job_c = Math.max(0,job_c);
return Array(Math.max(0,job_c-1)).fill(job_sep).join('');
},
jobber;
/**
* Job pretty logger.
*/
var log = function(){
var args = toArray(arguments),
formats = getDeep();
if(typeof args[0] === 'string'){
formats += args[0];
args = toArray(args).slice(1);
}
console.log.apply(null,[formats].concat(args));
};
/**
* Print entry point of a Job.
* @param {string} j_name Job log tag name.
*/
var jobStart = function(j_name){ job_c++; log("-----> %s",j_name); job_c++;};
/**
* Print out point of a Job.
* @param {string} j_name Job log tag name.
*/
var jobEnd = function(j_name){ job_c--; log("<----- %s",j_name); job_c--;};
// /**
// * Save job log into file.
// * @param {string} log_path log file path.
// */
// var fs = require('fs');
// var path = require('path');
// var jobSave = function(){
// var getDate = function() {
// var d = new Date(),
// fix = function(x){return (""+x)[1]? x:'0'+x;};
//
// return [d.getFullYear(),d.getMonth()+1,d.getDate(),d.getHours(),d.getMinutes(),d.getSeconds()].map(fix).join('-');
// },
//
// out_name = 'jobber-'+getDate()+'.log',
// dest = path.resolve('./',out_name),
// content = '';
//
// fs.writeFileSync(dest,content);
// };
var Task = function(name,end_onerror){
var t_name = 'Task: ' + name,
c = 0;
return {
fail:0,
tasks:[],
next:function(){
c++;
this.run();
},
add:function(title,fn){
//'a task must be a function'
var args = arguments;
if( typeof args[0] == "function"){
fn = args[0];
title = null;
}
if (typeof fn == "function"){
this.tasks.push([title,fn]);
}
},
run:function(){
if(!c) jobber.start(t_name);
var t = this,
title = t.tasks[c][0],
task = t.tasks[c][1],
tag = 'task: '+(title||c),
len = t.tasks.length,
_next = function(err,msg){
var rest = len-c-1;
if(err){
jobber.err("fail: %s",msg);
t.fail++;
} else {
jobber.info('ok');
}
jobber.end('');
if(err && end_onerror){
rest && jobber.warn('...%d task(s) ignored!',rest);
jobber.end(t_name);
} else {
t.next();
}
};
if(c < len && task){
jobber.start(tag);
task(_next);
} else {
jobber.end(t_name);
c = 0;
}
}
}
};
return jobber = {
task: function(name){
return new Task(...arguments);
},
log: log,
err: log,
warn: log,
info: log,
// save: jobSave,
start: jobStart,
end: jobEnd
};
})();