1.1.1 • Published 1 year ago

micro-job-scheduler v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Sometimes you just want to run tasks at a regular interval, with some concurrency, and the overhead of job scheduling systems like agenda are just too much.

This package implements a very simple job scheduler that allows you to run jobs on a schedule (defined by an ISO 8601 duration), with support for running jobs of a particular type with a level of concurrency.

It is implemented with a basic setInterval that runs once a second and looks for jobs to schedule.

Getting Started

import MicroJobScheduler from "micro-job-scheduler";

const scheduler = new MicroJobScheduler();

for (let i = 0; i < 10; i++) {
  scheduler.addJob(
    {
      concurrencyKey: "aJob",
      durationBetweenRuns: "PT1M",
      fn: aJob,
    },
    {
      i,
    }
  );
}

scheduler.setConcurrency("aJob", 2);

async function aJob(job: Job) {
  return new Promise((resolve) => {
    console.log("A JOB IS RUNNING", job.id, job.data);
    setTimeout(() => {
      console.log("A JOB IS COMPLETED", job.id, job.data);
      resolve();
    }, 10000);
  });
}

scheduler.start();

API

start()

Starts the job scheduler.

stop()

Stop the job scheduler.

addJob(jobOptions, jobData)

Add a job with the given options, and the given data. Options you can pass are:

  • durationBetweenRuns: An ISO8601 duration string, like PT5M to indicate 5 minutes. Use PT0M (or anything else that is a valid ISO8601 duration that is 0 seconds long) for a single-shot job that should only be run once, and removed from the scheduler when it completes (successfully or unsuccessfully).
  • concurrencyKey: A string which groups jobs together for the purpose of concurrency
  • fn: The function to run your job, with the signature fn(job: Job): Promise<any>.

removeJob(jobId)

Removes a job from the scheduler.

updateJobData(jobId, data)

Updates the data for a job.

setConcurrency(concurrencyKey, concurrency)

Sets how many jobs with a particular concurrencyKey can run simultaneously.

getJobs()

Returns a copy of the internal scheduler state.

Supporters

This package is supported by SaaSquatch.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

1.1.1

1 year ago

1.1.0

2 years ago

1.1.0-0

2 years ago

1.0.0

3 years ago

0.0.1-7

3 years ago

0.0.1-6

3 years ago

0.0.1-5

3 years ago

0.0.1-4

3 years ago

0.0.1-3

3 years ago

0.0.1-2

3 years ago

0.0.1-1

3 years ago

0.0.1-0

3 years ago