Skip to content

Commit 4efcb2d

Browse files
committed
added the clock functionality
1 parent 4736a72 commit 4efcb2d

File tree

5 files changed

+122
-22
lines changed

5 files changed

+122
-22
lines changed

package-lock.json

Lines changed: 9 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"cacheman-redis": "^1.1.2",
5555
"cluster": "^0.7.7",
5656
"cors": "^2.8.3",
57+
"cron": "^1.3.0",
5758
"crypto": "0.0.3",
5859
"debug": "^2.6.3",
5960
"express": "^4.15.2",

services/queue/Model.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"use strict";
2+
3+
var db = require('../database').logMongo;
4+
5+
var collection = 'Clock';
6+
7+
var debug = require('debug')(collection);
8+
9+
var schemaObject = {
10+
job: {
11+
type: 'String'
12+
},
13+
crontab: {
14+
type: 'String'
15+
},
16+
name: {
17+
type: 'String',
18+
unique: true
19+
},
20+
enabled: {
21+
type: 'Boolean',
22+
default: true
23+
},
24+
arguments: {
25+
type: db._mongoose.Schema.Types.Mixed
26+
},
27+
lastRunAt: {
28+
type: db._mongoose.Schema.Types.Mixed
29+
}
30+
};
31+
32+
schemaObject.createdAt = {
33+
type: 'Date',
34+
default: Date.now
35+
};
36+
37+
schemaObject.updatedAt = {
38+
type: 'Date'
39+
// default: Date.now
40+
};
41+
42+
// Let us define our schema
43+
var Schema = new db._mongoose.Schema(schemaObject);
44+
45+
var Model = db.model(collection, Schema);
46+
47+
module.exports = Model;

services/queue/clock.js

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,46 @@
1-
// {
2-
// task
3-
// crontab
4-
// last runed at
5-
// next run at
6-
// name
7-
// enabled
8-
// arguments
9-
// }
1+
"use strict";
102

11-
// ToDo: work on a clock functionality so kue can support scheduled jobs
12-
// Todo: Use the cron package here https://www.npmjs.com/package/cron for timer
3+
var CronJob = require('cron').CronJob;
4+
var log = require('../logger');
5+
var Model = require('./Model');
6+
var queue = require('./');
7+
var _ = require('lodash');
8+
var config = require('../../config');
9+
10+
log.info('Starting Queue Clock...');
11+
Model.find({enabled: true})
12+
.then(function(jobs){
13+
_.forEach(jobs, function(job){
14+
log.info('Initializing '+job.name+'...');
15+
var cron = new CronJob({
16+
cronTime: job.crontab,
17+
onTick: function(){
18+
// run this
19+
// Check if job is enabled
20+
Model.findOne({_id: job._id, enabled: true})
21+
.then(function(resp){
22+
if(!resp){
23+
throw {notEnabled: true};
24+
}else{
25+
log.info('Pushing '+job.name+' to queue...');
26+
queue.create(job.job, job.arguments)
27+
.save();
28+
}
29+
})
30+
.catch(function(err){
31+
if(err.notEnabled){
32+
log.info(job.name+' is not enabled. Skipping...');
33+
}else{
34+
log.error('An error occured while running Job - '+job.name, err);
35+
}
36+
});
37+
38+
},
39+
start: true,
40+
timeZone: config.clockTimezone
41+
});
42+
});
43+
})
44+
.catch(function(err){
45+
log.error('An error occured while starting the queue clock: ', err);
46+
});

services/queue/index.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var queue = kue.createQueue({
66
redis: config.redisURL
77
});
88
var log = require('../../services/logger');
9+
var Model = require('./Model');
910

1011
// Clean Up Completed Job
1112
queue
@@ -14,19 +15,19 @@ queue
1415
})
1516
.on('job complete', function(id, result){
1617
log.info('ID: ',id,' Result: ',result);
17-
kue.Job.get(id, function(err, job){
18-
if (err) {
19-
return false;
20-
}else{
21-
job.remove(function(err){
22-
if (err) {
23-
throw new Error(err.message);
18+
kue.Job.get(id, function(err, job){
19+
if (err) {
20+
return false;
2421
}else{
25-
log.info('removed completed job #%d', job.id);
22+
job.remove(function(err){
23+
if (err) {
24+
throw err;
25+
}else{
26+
log.info('removed completed job #%d', job.id);
27+
}
28+
});
2629
}
2730
});
28-
}
29-
});
3031
});
3132

3233
// Graceful Shutdown
@@ -57,3 +58,12 @@ queue.watchStuckJobs(1000);
5758
// Process Jobs Here
5859
module.exports = queue;
5960
module.exports.kue = kue;
61+
module.exports.addSchedule = function(crontab, name, job, data){
62+
Model.create({crontab: crontab, name: name, job: job, arguments: data})
63+
.then(function(){
64+
// Silencio es dorado
65+
})
66+
.catch(function(err){
67+
log.error('Error scheduling job - ', err);
68+
});
69+
};

0 commit comments

Comments
 (0)