Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/futurestudio/hapi-pulse

hapi plugin that gracefully stops the hapi server (for graceful process reloads, e.g. with PM2)
https://github.com/futurestudio/hapi-pulse

future-studio-university graceful-shutdown hapi hapi-plugin hapi-pulse hapi-server hapijs pm2 shutdown signal

Last synced: about 1 month ago
JSON representation

hapi plugin that gracefully stops the hapi server (for graceful process reloads, e.g. with PM2)

Awesome Lists containing this project

README

        


hapi-pulse logo





hapi plugin to gracefully stop your hapi server





Installation ·
Usage ·
Plugin Options







Build Status
Known Vulnerabilities
Latest Version
Total downloads



Follow @marcuspoehls for updates!


------

The Future Studio University supports development of this hapi plugin 🚀


Join the Future Studio University and Skyrocket in Node.js

------

## Introduction
A hapi plugin that gracefully stops the hapi server on `SIGINT` and `SIGTERM` and your custom signals.

`hapi-pulse` works great with [**PM2**](https://github.com/Unitech/pm2) and other Node.js process manager to accomplish zero-downtime deployments!

This serves existing requests before closing the connection and stopping the hapi server process.
It uses hapi’s `server.stop()` method to close connections properly.

## Requirements
> **hapi v19 (or later)** and **Node.js v12 (or newer)**

This plugin requires **hapi v19** (or later) and **Node.js v12 or newer**.

### Compatibility
| Major Release | [hapi.js](https://github.com/hapijs/hapi) version | Node.js version |
| --- | --- | --- |
| `v3` | `>=17 hapi` | `>=12` |
| `v2` | `>=17 hapi` | `>=8` |

## Installation
Add `hapi-pulse` as a dependency to your project:

```bash
npm i hapi-pulse
```

## Usage
The most straight forward way to register the `hapi-pulse` plugin:

```js
await server.register({
plugin: require('hapi-pulse'),
options: {
// any option that is supported by hapi's "server.stop()"
timeout: 15000,

// plugin specific options
logger: console,
signals: ['SIGINT'],
postServerStop: async function () {
// await Database.close()
}
}
})
```

## Plugin Registration Options
`hapi-pulse` passes the options through to hapi’s [`server.stop(options)`](https://hapijs.com/api#-await-serverstopoptions).
Customize the behavior of `server.stop()`, like the `timeout` before forcefully stopping the process.

Additionally, you can pass along the following options:

- **logger**: `(Object)`, default: `console` — in case of an error, hapi-pulse logs the error with `logger.error('message', error)`
- **signals**: `(Array)`, default: `['SIGINT', 'SIGTERM']` — use this `signals` option to customize the events on which hapi-pulse will stop the server
- **preServerStop**: `(Function)`, default: `Promise.resolve` — an async function that runs before `server.stop()`
- **postServerStop**: `(Function)`, default: `Promise.resolve` — an async function that runs after `server.stop()`
- **preShutdown**: `(Function)`, default: `Promise.resolve` — an async function that runs after `postServerStop()` and before `process.exit`
- **timeout**: `(int)`, default: `5000 (5 seconds)` — the timeout existing connections should be closed until they are forcefully interrupted. This option is passed through to hapi’s `server.stop()`

**Example**

```js
await server.register({
plugin: require('hapi-pulse'),
options: {
timeout: 25 * 1000,
logger: console,
signals: ['SIGINT', 'SIGTERM'],
preServerStop: async function () {
// this runs before server.stop()
},
postServerStop: async function () {
// this runs after server.stop()
// e.g., await Database.close()
},
preShutdown: async function () {
// this runs after postServerStop() and before process.exit
}
}
})

// went smooth like chocolate :)
```

## Feature Requests
Do you miss a feature? Please don’t hesitate to
[create an issue](https://github.com/futurestudio/hapi-pulse/issues) with a short description of your desired addition to this plugin.

## Links & Resources

- [hapi tutorial series](https://futurestud.io/tutorials/hapi-get-your-server-up-and-running) with 100+ tutorials

## Contributing

1. Create a fork
2. Create your feature branch: `git checkout -b my-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. Submit a pull request 🚀

## License

MIT © [Future Studio](https://futurestud.io)

---

> [futurestud.io](https://futurestud.io)  · 
> GitHub [@futurestudio](https://github.com/futurestudio/)  · 
> Twitter [@futurestud_io](https://twitter.com/futurestud_io)