Skip to content

Commit 59fce12

Browse files
committed
feat(task): New background task process class and bin script
1 parent 148d598 commit 59fce12

File tree

2 files changed

+71
-45
lines changed

2 files changed

+71
-45
lines changed

bin/task.js

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1 @@
1-
var utils = require( 'utils' )
2-
, env = utils.bootstrapEnv()
3-
, moduleLdr = env.moduleLoader
4-
, tasks = require( 'tasks' )
5-
, chalk = require( 'chalk' )
6-
, debuggr = require( 'debug' )( 'BackgroundTasks' )
7-
, ready = false
8-
, task = null;
9-
10-
function debug() {
11-
var args = [].slice.call( arguments );
12-
args[ 0 ] = chalk.yellow( process.env.TASK_NAME + '-' + process.pid ) + ': ' + args[ 0 ];
13-
debuggr.apply( debuggr, args );
14-
}
15-
16-
debug( 'Starting...' );
17-
18-
process.on( 'message', function( message ) {
19-
if ( !ready ) {
20-
debug( 'Not ready...' );
21-
process.send( { code: 'NOT_READY' } );
22-
} else if ( task !== null ) {
23-
debug( 'Still running...' );
24-
process.send( { code: 'BUSY' } );
25-
} else {
26-
debug( 'Running task...' );
27-
28-
var payload = message.payload || {};
29-
task = new ( tasks[ process.env.TASK_NAME ] )( payload, function( err, result ) {
30-
process.nextTick(function() {
31-
task = null;
32-
process.send( { code: 'RESULT', error: err, result: result } );
33-
});
34-
});
35-
}
36-
});
37-
38-
moduleLdr.on( 'modulesLoaded', function() {
39-
debug( 'Ready...' );
40-
ready = true;
41-
process.send( { code: 'READY' } );
42-
43-
});
44-
45-
moduleLdr.loadModules();
1+
module.exports = new ( require( 'classes' ).BackgroundTask )( process.env.TASK_NAME );

classes/BackgroundTask.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
var Class = require( 'classes' ).Class
2+
, chalk = require( 'chalk' )
3+
, tasks = require( 'tasks' )
4+
, debuggr = require( 'debug' )( 'BackgroundTasks' );
5+
6+
module.exports = Class.extend(
7+
{
8+
env: null,
9+
taskClass: null
10+
},
11+
{
12+
task: null,
13+
14+
name: null,
15+
16+
isReady: false,
17+
18+
setup: function( name ) {
19+
this.name = name;
20+
this.task = null;
21+
this.isReady = false;
22+
this.Class.env = require( 'utils' ).bootstrapEnv();
23+
this.Class.taskClass = tasks[ this.name ];
24+
process.on( 'message', this.proxy( 'runTask' ) );
25+
26+
return [ this.Class.env.moduleLoader ];
27+
},
28+
29+
init: function( moduleLoader ) {
30+
moduleLoader.on( 'modulesLoaded', this.proxy( 'ready' ) );
31+
moduleLoader.loadModules();
32+
},
33+
34+
debug: function() {
35+
var args = [].slice.call( arguments );
36+
args[ 0 ] = chalk.yellow( this.name + '-' + process.pid ) + ': ' + args[ 0 ];
37+
debuggr.apply( debuggr, args );
38+
},
39+
40+
ready: function() {
41+
this.debug( 'Ready...' );
42+
this.processReady = true;
43+
process.send( { code: 'READY' } );
44+
},
45+
46+
runTask: function( message ) {
47+
var payload = message.payload || {};
48+
49+
if ( !this.processReady ) {
50+
this.debug( 'Process is not ready yet...' );
51+
process.send( { code: 'NOT_READY' } );
52+
} else if ( this.task !== null ) {
53+
this.debug( 'Still running previous task...' );
54+
process.send( { code: 'BUSY' } );
55+
} else {
56+
this.debug( 'Running task...' );
57+
this.task = new this.Class.taskClass( payload, this.proxy( 'taskFinished' ) );
58+
}
59+
},
60+
61+
taskFinished: function( err, result ) {
62+
this.debug( 'Finished processing' + ( err !== null && err !== undefined ? ' with error: ' + err : '' ) );
63+
process.send( { code: 'RESULT', error: err, result: result } );
64+
process.nextTick( this.proxy( 'clearTask' ) );
65+
},
66+
67+
clearTask: function() {
68+
this.task = null;
69+
}
70+
});

0 commit comments

Comments
 (0)