trailpack-cron

2.0.0 • Public • Published

trailpack-cron

Gitter NPM version NPM downloads Build status Dependency Status Code Climate

📦 Add Trails service for running cron tasks

Intallation

With yo :

npm install -g yo generator-trails
yo trails:trailpack trailpack-cron

With npm (you will have to create config file manually) :

npm install --save trailpack-cron

Configuration

First you need to add this trailpack to your main configuration :

// config/main.js
 
module.exports = {
   ...
 
   packs: [
      ...
      require('trailpack-cron'),
      ...
   ]
   ...
}

Static jobs can be added on config/cronjs` :

// config/cron.js
module.exports = {
  jobs: {
    myJob: {
      schedule: '* * * * * *',
      onTick: function (app) {
        app.log.info('I am ticking every second');
      },
      onComplete: function (app) {
        app.log.info('I am done');
      },
      start: true, // Start task immediately
      timezone: 'France/Paris' // Custom timezone
    }
  }  
}

Annotation

You can use Cron annotation on methods services, for this you need to install trailpack-annotations : After install just add your annotations :

'use strict'

const Service = require('trails-service')

/**
 * @module DefaultService
 *
 * @description Default Service included with a new Trails app
 * @see {@link http://trailsjs.io/doc/api/services}
 * @this TrailsApp
 */
module.exports = class DefaultService extends Service {

  /**
   * @Cron('* * * * * *')
   */
  hello(){
    this.app.log.info('Run every second :)')
  }
  /**
   * @Cron({schedule: '* * * * * *', start: true, timezone: 'Europe/Paris'})
   */
  world(){
    this.app.log.info('Run every second too :)')
  }
}

Usage

Now you can send start/stop jobs like this :

this.app.services.CronService.jobs.myJob.start()
this.app.services.CronService.jobs.myJob.stop()
this.app.services.CronService.addJob('mySecondJob', {
    schedule: '*/5 * * * * *',
    onTick: function (app) {
      app.log.info('I am ticking every 5 seconds');
    },
    onComplete: function (app) {
      app.log.info('I am done');
    },
    start: true, // Start task immediately
    timezone: 'France/Paris' // Custom timezone
  })

Cluster Mode (Redis Support)

For use in a Cluster Mode for preventing the jobs running on all server. Only one server of the cluster be run a job in a distributively form. You only need configure a redis server in the cron.js config file.

// config/cron.js
module.exports = {
  cluster: {      
    host: 'localhost',
    auth_pass: ''
    db: 0,
    ttl: 600 // Default TTL
  },
  jobs: {
    myJob: {
      schedule: '* * * * * *',
      onTick: function (app) {
        app.log.info('I am ticking every second');
      },
      onComplete: function (app) {
        app.log.info('I am done');
      },
      start: true, // Start task immediately
      timezone: 'France/Paris' // Custom timezone
    }
  }  
}

For advanced options for the Redis Client take a look here: Node Redis Client Options

License

MIT

Support on Beerpay

Hey dude! Help me out for a couple of 🍻!

Beerpay Beerpay

Package Sidebar

Install

npm i trailpack-cron

Weekly Downloads

2

Version

2.0.0

License

MIT

Last publish

Collaborators

  • jaumard