UNPKG

healthcheck-middleware

Version:

Express middleware for rendering a JSON healthcheck page.

152 lines (127 loc) 4.94 kB
# healthcheck-middleware [![Build Status](https://travis-ci.org/michaelgoin/healthcheck-middleware.svg?branch=master)](https://travis-ci.org/michaelgoin/healthcheck-middleware) Express middleware for rendering a JSON healthcheck page. Provides default functionality, ability to add additional checks and ability to change displayed health info. ```bash $ npm install healthcheck-middleware ``` ```js var healthcheck = require('healthcheck-middleware'); ``` ## healthcheck([options]) Returns healthcheck middleware using the given options. The middleware will return a JSON response with status 200 on success or status 500 on `addChecks` failure (see addChecks). ```js app.use('/healthcheck', healthcheck()); ``` > {status: 'success', uptime: 3, memoryUsage: {rss: 32587776, heapTotal: 29604500, heapUsed: 14572104}} ## options These properties can be passed as a part of the `options` object: * `addChecks` * `healthInfo` ### addChecks A function that allows the addition of checks to the healthcheck. The function is called as `addChecks(fail, pass)`. You will call `fail()` or `pass()` depending on your desired state. addChecks will also catch a thrown Error but the preferred method is to call `fail()`. ```js module.exports = healthcheck({ addChecks: function(fail, pass) { store.getDatabaseInfoAsync() .then(function(databaseInfo) { pass(databaseInfo); }) .catch(function() { fail(new Error('could not connect to database')); }); } }); ``` #### fail Call `fail()` when the intent is the for the healthcheck to fail. Fail accepts an Error as an argument. Calling fail will result in a status 500 and a JSON message indicating failure with the error message. ##### Example 1 ```js fail(); ``` > {status: 'failure'} ##### Example 2 ```js fail(new Error('some error')); ``` > {status: 'failure', message: 'some error'} #### pass Call `pass()` when the intent is for the healthcheck to pass. Pass can be called with a JSON object that specifies additional properties to display with the health information. Calling pass will result in a status 200 and JSON message that indicates success, process.uptime(), process.memoryUsage(), and any custom properties. If you return properties called status, uptime or memoryUsage they will override the standard values returned. ##### Example 1 ```js pass(); ``` > {status: 'success', uptime: 3, memoryUsage: {rss: 32587776, heapTotal: 29604500, heapUsed: 14572104}} ##### Example 2 ```js var databaseInfo = { region: 'us-west', status: 'ACTIVE' }; pass({database: databaseInfo}); ``` > {database: {region: 'us-west', status: 'ACTIVE'}, status: 'success', uptime: 3, memoryUsage: {rss: 32587776, heapTotal: 29604500, heapUsed: 14572104}} ##### Example 3 ```js pass({status: 'WORKED!'}); ``` > {status: 'WORKED!', uptime: 3, memoryUsage: {rss: 32587776, heapTotal: 29604500, heapUsed: 14572104}} ### healthInfo A function that allows customization of the displayed health information. The function is called as `healthInfo(passInfo)`. The `passInfo` parameter contains the health information that would normally be displayed (see examples above). You will return the JSON representation of the health info you want rendered. You may also return a string which will be converted into a JSON object `{message: string}`. Healthcheck will still result in a status 200 if an Error is thrown inside of `healthInfo`. It will return a successful status with a warning that includes the error message. ##### Example 1 ```js module.exports = healthcheck({ healthInfo: function(passInfo) { return { status: passInfo.status, server: os.hostname(), version: process.env.APP_VERSION }; } }); ``` > {status: 'success', server: 'theServer', version: '1.0.0'} ##### Example 2 ```js module.exports = healthcheck({ healthInfo: function(passInfo) { return 'This is not particularly helpful.' } }); ``` > {message: 'This is not particularly helpful.'} ##### Example 3 ```js module.exports = healthcheck({ healthInfo: function(passInfo) { throw new Error('format fail'); } }); ``` > {status: 'success', warning: 'Healthcheck passed but there was an error in healthInfo: format fail'} ### Full Example ```js module.exports = healthcheck({ addChecks: function(fail, pass) { store.getDatabaseInfoAsync() .then(function(databaseInfo) { pass(databaseInfo); }) .catch(function() { fail(new Error('could not connect to database')); }); }, healthInfo: function(passInfo) { return { status: passInfo.status, server: os.hostname(), version: process.env.APP_VERSION, databaseRegion: passInfo.database.region, databaseStatus: passInfo.database.status }; } }); ``` > {status: 'success', server: 'theServer', version: '1.0.0', databaseRegion: 'us-west', databaseStatus: 'ACTIVE'}