Skip to content

Moleculer Framework Addons: Job Scheduling Mixin for Agenda

License

Notifications You must be signed in to change notification settings

andreyunugro/moleculer-agenda

Repository files navigation

moleculer-agenda

Job Scheduling Mixin for Agenda.

unittest Coverage Status Codacy Badge Codacy Badge

Install

npm install moleculer-agenda --save

Usage

You need Mongo Database, example below use mongodb-memory-server package. You can see more example on examples directory.

// Demo: use agenda to define a job and schedule it for next 1 minute.
const { ServiceBroker } = require('moleculer');
const { MongoMemoryServer } = require('mongodb-memory-server');
const AgendaService = require('../index');

// Main routine.
(async () => {
  // Create broker.
  const broker = new ServiceBroker({
    logger: console,
    logLevel: 'debug',
  });

  // Create mongodb memory server.
  const mongoDB = await MongoMemoryServer.create();
  const mongoDBUri = mongoDB.getUri();
  broker.logger.info('MongoDB started: ', mongoDBUri);

  // Load my service.
  broker.createService({
    name: 'agenda',
    mixins: [AgendaService({ db: { address: mongoDBUri } })],
    jobs: [{
      name: 'log',
      handler: () => {
        broker.logger.info(`Log me ${new Date().toISOString()}`);
      },
    }],
  });

  // Bundle it with try and catch.
  try {
    // Start server.
    await broker.start();
    // Schedule it.
    await broker.call('agenda.runAt', { 
      when: 'in 1 minute',
      name: 'log',
    });

    broker.logger.info('Await for 2 minutes.');
    // Run for 2 minutes.
    setTimeout(async () => {
      await broker.stop();
      await mongoDB.stop();
      broker.logger.info('MongoDB is stopped.');
      process.exit(0);
    }, 120000);
  } catch (err) {
    broker.logger.error(err.message);
    process.exit(1);
  }
})();

Actions

runEvery

Runs job name at the given interval

Parameters

Property Type Default Description
interval String required Run every X interval
name String | Array<string> required Job name or list of job name to schedule every X interval.
data Any - Optional data to run for job
options Agenda.JobOptions - Optional options to run job.

runAt

Schedules a job to run name once at a given time.

Parameters

Property Type Default Description
when String required When the job will run
name String | Array<string> required Job name or list of job name to schedule every X interval.
data Any - Optional data to run for job

runNow

Schedules a job to run name once immediately.

Parameters

Property Type Default Description
name String required Job name to run.
data Any - Optional data to run for job

runDisable

Disables any job name, preventing job from being run.

Parameters

Property Type Default Description
name String required Job name to disable.

runEnable

Enables any job name, allowing job to be run.

Parameters

Property Type Default Description
name String required Job name to enable.

Test

npm test

In development with watching

npm run ci

License

The project is available under the MIT license.