https://github.com/binded/gracedown
Collection of consolidated graceful/forceful shutdown procedures for common Node.js libraries.
https://github.com/binded/gracedown
Last synced: 8 months ago
JSON representation
Collection of consolidated graceful/forceful shutdown procedures for common Node.js libraries.
- Host: GitHub
- URL: https://github.com/binded/gracedown
- Owner: binded
- Created: 2016-05-07T00:02:21.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2016-05-12T21:36:44.000Z (about 10 years ago)
- Last Synced: 2025-02-22T01:46:01.925Z (over 1 year ago)
- Language: JavaScript
- Size: 16.6 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# gracedown
[](https://travis-ci.org/blockai/gracedown)
Collection of consolidated graceful/forceful shutdown procedures for
common Node.js libraries.
Currently supports:
- [http server / express](#stophttpserverhttpserver)
- [knex](#stopknexknex)
- send PR for more!
## Install
```
npm install --save gracedown
```
## Usage
### gracedown(handlers, [, opts])
Returns a function which can be called to gracefully shutdown your application.
The returned function doesn't call `process.exit` or output any text by
default, unless `opts.shutdown` is set to true.
- **handlers**: array of [shutdown handlers](#shutdown-handlers)
- **opts.shutdown**: if true, changes default option values (defaults to `false`)
- **opts.timeout**: timeout in ms before forceful shutdown (defaults to `10000`)
- **opts.log**: logging function
- **opts.logError**: logging function for errors
- **opts.exit**: exit function
- **opts.exitError**: exit function on error
Default values if `shutdown` is `false`:
```javascript
// where noop = () => {}
{
timeout: 10000,
log: noop,
logError: noop,
exit: noop,
exitError: noop,
}
```
Default values if `shutdown` is `true`:
```javascript
{
timeout: 10000,
log: console.log.bind(console),
logError: console.error.bind(console),
exit: () => process.exit(),
exitError: () => process.exit(1),
}
```
### Shutdown Handlers
**shutdownHandler(opts)**
Handlers are Promise-returning functions which accept the following options object:
- **opts.log** and **opts.logError**: same as above
- **opts.forceful**: `true` if we want to shutdown as quick as possible (defaults to `false`).
For example, the http server handle doesn't wait for connections to
close if this is true.
The following functions return shutdown handlers for common Node.js
libraries/modules.
#### stopHttpServer(httpServer)
- **httpServer**: Node.js http server instance
#### stopKnex(knex)
- **knex**: [Knex.js](http://knexjs.org/) object
## Example
```javascript
import gracedown, { stopHttpServer } from 'gracedown'
import http from 'http'
const httpServer = http.createServer((req, res) => res.end('ok'))
httpServer.listen()
const someTimeout = setTimeout(() => {
console.log('timeout called')
}, 3000)
const shutdown = gracedown([
stopHttpServer(httpServer),
// Custom shutdown procedure
() => {
clearTimeout(someTimeout)
}
], { timeout: 5000, shutdown: true })
process.on('SIGTERM', shutdown)
process.on('SIGINT', shutdown)
```