mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-04-22 20:39:17 +08:00
93 lines
2.1 KiB
TypeScript
93 lines
2.1 KiB
TypeScript
import kue = require('kue');
|
|
|
|
// create our job queue
|
|
|
|
var jobs = kue.createQueue();
|
|
|
|
// start redis with $ redis-server
|
|
|
|
// create some jobs at random,
|
|
// usually you would create these
|
|
// in your http processes upon
|
|
// user input etc.
|
|
|
|
function create() {
|
|
var name = [ 'tobi', 'loki', 'jane', 'manny' ][ Math.random() * 4 | 0 ];
|
|
var job = jobs.create( 'video conversion', {
|
|
title: 'converting ' + name + '\'s to avi', user: 1, frames: 200
|
|
});
|
|
|
|
job.on('complete', function() {
|
|
console.log(" Job complete");
|
|
}).on('failed', function() {
|
|
console.log(" Job failed");
|
|
}).on('progress', function(progress: number) {
|
|
process.stdout.write('\r job #' + job.id + ' ' + progress + '% complete');
|
|
});
|
|
|
|
job.save();
|
|
|
|
setTimeout( create, Math.random() * 2000 | 0 );
|
|
}
|
|
|
|
create();
|
|
|
|
// process video conversion jobs, 1 at a time.
|
|
|
|
jobs.process('video conversion', 1, function(job: kue.Job, done: Function) {
|
|
var frames: number = job.data.frames;
|
|
|
|
function next(i: number) {
|
|
// pretend we are doing some work
|
|
convertFrame(i, function(err: Error) {
|
|
if (err) return done(err);
|
|
// report progress, i/frames complete
|
|
job.progress(i, frames);
|
|
if (i >= frames) done();
|
|
else next(i + Math.random() * 10);
|
|
} );
|
|
}
|
|
|
|
next(0);
|
|
} );
|
|
|
|
function convertFrame(i: number, fn: Function) {
|
|
setTimeout(fn, Math.random() * 50);
|
|
}
|
|
|
|
// one minute
|
|
|
|
var minute = 60000;
|
|
|
|
var email = jobs.create('email', {
|
|
title: 'Account renewal required', to: 'tj@learnboost.com', template: 'renewal-email'
|
|
}).delay(minute)
|
|
.priority('high')
|
|
.save();
|
|
|
|
|
|
email.on('promotion', function() {
|
|
console.log('renewal job promoted');
|
|
} );
|
|
|
|
email.on('complete', function() {
|
|
console.log('renewal job completed' );
|
|
} );
|
|
|
|
jobs.create('email', {
|
|
title: 'Account expired', to: 'tj@learnboost.com', template: 'expired-email'
|
|
} ).delay( minute * 10 )
|
|
.priority('high')
|
|
.save();
|
|
|
|
jobs.promote();
|
|
|
|
jobs.process('email', 10, function(job: kue.Job, done: Function) {
|
|
setTimeout(function() {
|
|
done();
|
|
}, Math.random() * 5000);
|
|
});
|
|
|
|
// start the UI
|
|
kue.app.listen(3000);
|
|
console.log('UI started on port 3000'); |