0.1.5 • Published 2 years ago

node-cron-management v0.1.5

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

Node Cron Management

npm npm npms.io (final) npms.io (final) GitHub tag (latest by date)

This package is a package to manage cron-jobs in a node.js Typescript application. It is built using node-cron and reflect-metadata packages

Installation

npm i node-cron-management

Usage

The package works with decorators and hance the following lines should be in your tsconfig.json file

"experimentalDecorators": true,
"emitDecoratorMetadata": true,

Annotate your Job class with @cronGroup and annotate each handler with @cronJob

import { cronGroup, cronJob, CronManager } from "node-cron-management";

@cronGroup('jobs')
class JobService{
    constructor(private name:string){}

    @cronJob('*/1 * * * * *', 'print_name_func')
    printName(){
        console.log(this.name)
    }
}

@cronGroup('auth')
class AuthService{
    constructor(private users: any[]){}

    @cronJob('* * * * * *', 'my_urban_func', 'Asia/Makassar')
    unbanUser(){
        console.log(`There are ${this.users.length} users in the application`)
    }
}

const manager = new CronManager();

const jobService = new JobService('JobService');
const authJob = new AuthService([])

manager.register(JobService, jobService)
manager.register(AuthService,authJob)

manager.startAll() //starts all jobs
manager.stopAll() //stops all jobs

//starting and stopping for specific groups
manager.startGroup('jobs') //starts only jobs in the class with tag equal to jobs
manager.stopGroup('jobs') //stops only jobs in the class with grouptag equal to jobs

//starting and stopping for specific handlers or jobs
manager.startHandler('my_urban_func') //starts the single job with tag equal to my_urban_func
manager.stopHandler('my_urban_func') //stop the single job with tag equal to my_urban_func

manager.getGroups() // returns ['auth','jobs']
manager.getHandlers() //returns ['my_urban_func','print_name_func']

Methods

  • @cronGroup( groupTag? : string )
    params
    • groupTag: tag to uniquely identify a a set of jobs. The same groupTag can be used for multiple classes.
  • @cronJob( cronExpression: string, handlerTag?: string, timezone?: string)
    params
    • cronExpression: Expression describing the cron interval. The package uses node-cron in the background and hence the expression description is the same.
    • handlerTag: unique string to identify a single job. The job can be started and stopped using that tag.
    • timezone: yhe timezone that is used for job scheduling. See moment-timezone for valid values.
  • manager.register(Class:Function, instance: any)
    It registers an instance of a class to the cron job manager.
    params
    • Class: The class we're registering
    • instance: An instance of that class