2.0.1 • Published 10 months ago

pm2-master-process v2.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

💻 🌍 pm2-master-process

When using PM2 (Process Manager) for managing your Node.js applications, you will probably later need to run specific tasks only on a single instance (process). This small library solves this problem and gives you simple API and method decorators that you can use. Does this library help you? Do not forget to give it a ⭐️!

⭐️ Features

  • Allow running specific tasks only on a single instance
  • Supports PM2 restarts and scaling
  • Decorators for easy use
  • Retrieves number of slaves

🚀 Installation

First you need to install this package and related pm2 package.

yarn add pm2-master-process promise-based-task pm2
npm install pm2-master-process

Without any configuration, the environment variable which tells us the instance of the id is pm_id, which is automatically set by PM2.

🤘🏻 Usage

Without custom configuration

import { isMasterInstance } from 'pm2-master-process'

if (await isMasterInstance()) {
  console.info(`I am master!`)
} else {
  console.info(`I am a slave.`)
}

With custom configuration

import { isMasterInstance, Pm2MasterProcessConfig } from 'pm2-master-process'

const config: Partial<Pm2MasterProcessConfig> = {
  instanceIdStatus: ['online', 'launching'], // 'online' | 'stopping' | 'stopped' | 'launching' | 'errored' | 'one-launch-status', default is ['online'] 
  logger: false,
}

if (await isMasterInstance(config)) {
  console.info(`I am master!`)
} else {
  console.info(`I am a slave.`)
}

Using decorators

import { MasterInstance, NotMasterInstance } from 'pm2-master-process';

class MyController {

  @Cron('0 0 0 * * *', {
    name: 'Validate FS',
  })
  @MasterInstance()
  runJob() {
    ...
  }

  @Cron('0 0 0 * * *', {
    name: 'Something else',
  })
  @NotMasterInstance()
  runDifferntJob() {
    ...
  }

}

✨ Feature functions

Retrieve number of slaves

import { getSlavesCount } from 'pm2-master-process';

const slavesCount = await getSlavesCount()

Retrieve processes and not just instances

import { getInstances } from 'pm2-master-process';

const instances = await getInstances()

API

declare function getCurrentProcessId(): number | null;

declare function getProcesses({ instanceStatus }?: Pick<Pm2MasterProcessConfig, 'instanceStatus'>): Promise<ProcessDescription[]>;
declare function getProcessesIds(customConfig?: Partial<Pm2MasterProcessConfig>): Promise<number[]>;

declare function isMasterProcess(customConfig?: Partial<Pm2MasterProcessConfig>): Promise<boolean>;
declare function getMasterProcessId(customConfig?: Partial<Pm2MasterProcessConfig>): Promise<number | null>;

declare function getSlavesCount(customConfig?: Partial<Pm2MasterProcessConfig>): Promise<number>;

TODO

  • Add tests
2.0.1

10 months ago

2.0.0-beta.1

1 year ago

2.0.0

1 year ago

1.3.2

2 years ago

1.2.7

2 years ago

1.2.6

2 years ago

1.3.0

2 years ago

1.2.5

2 years ago

1.2.4

2 years ago

1.2.0

2 years ago

1.1.0

2 years ago

1.2.3

2 years ago

1.2.2

2 years ago

1.2.1

2 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.3

3 years ago

1.0.0

3 years ago