Пример #1
0
    var scheduleJob = function (job) {

        var currentDate = job.options.currentDate;

        if (moment(currentDate).isBefore(moment())) {
            currentDate = new Date();
        }

        var options = {
            currentDate: currentDate,
            endDate: job.options.endDate
        }

        var interval = cron.parseExpressionSync(job.cron, options);

        if (interval.hasNext()) {
            var date = interval.next();

            winston.debug('Next schedule ' + date);

            if (job.options && job.options.endDate) {
                var endTimeDelay = moment().range(new Date(), job.options.endDate).valueOf();
            }


            var delay = moment().range(new Date(), date).valueOf();

            var params = ['quartz:jobs:' + job.id, JSON.stringify(job)];

            if (endTimeDelay) {
                params.push('PX');
                params.push(endTimeDelay);
            }

            client.set(params, function (err, res) {

                //schedule it
                winston.debug('delay ' + delay);
                client.set('quartz:jobs:' + job.id + ':next', '', 'PX', delay, function (err, res) {
                    if (err) {
                        console.log(err);
                    }
                    winston.debug('Scheduling ' + res);
                });

            });

        }
    }
Пример #2
0
var scheduleJob = function(cronTime, callback, args, context, repeating, previousIndex){
    if(repeating == null) repeating = true;
    var interval = parser.parseExpressionSync(cronTime),
        difference = interval.next() - (new Date()) + 1,
        timeout = null,
        scheduledJobIndex = previousIndex;

    if(scheduledJobIndex == null){
        //Just a cheap way to get a unique ID. Used later to cancel jobs.
        scheduledJobIndex = uuid.v4();
    }
    if(difference > MAX_SET_TIMEOUT){
        delayedQueue[scheduledJobIndex] = [cronTime, callback, args, context, repeating, scheduledJobIndex];
        if(delayedQueueIntervalId == null){
            setUpDelayedQueueInterval();
        }
    }else{
        timeout = setTimeout(executeJob.bind(this, cronTime, callback, args, context, repeating, scheduledJobIndex), difference);
        scheduledJobs[scheduledJobIndex] = timeout;
    }
    return scheduledJobIndex;
};