JSPM

  • Created
  • Published
  • Downloads 145
  • Score
    100M100P100Q84133F
  • License MIT

An extension exposes health check related endpoints with LoopBack 4

Package Exports

  • @loopback/extension-health

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@loopback/extension-health) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@loopback/extension-health

This module contains a component to report health status using @cloudnative/health.

Installation

npm install --save @loopback/extension-health

Basic use

{% include note.html content="this.configure() must be called before this.component() to take effect. This is a known limitation." %}

The component should be loaded in the constructor of your custom Application class.

Start by importing the component class:

import {HealthComponent} from '@loopback/extension-health';

In the constructor, add the component to your application:

this.component(HealthComponent);

By default, three routes are exposed at:

  • /health - overall health status
  • /live - liveness status
  • /ready - readiness status

The paths can be customized via Health configuration as follows:

this.configure(HealthBindings.COMPONENT).to({
  healthPath: '/health',
  livePath: '/live',
  readyPath: '/ready',
});

http://localhost:3000/health returns health in JSON format, such as:

{
  "status": "UP",
  "checks": [
    {"name": "readiness", "state": "UP", "data": {"reason": ""}},
    {"name": "liveness", "state": "UP", "data": {"reason": ""}}
  ]
}

Add custom live and ready checks

The health component allows extra live and ready checks to be added.

import {LiveCheck, ReadyCheck, HealthTags} from '@loopback/extension-health';

const myLiveCheck: LiveCheck = () => {
  return Promise.resolve();
};
app.bind('health.MyLiveCheck').to(myLiveCheck).tag(HealthTags.LIVE_CHECK);

// Define a provider to check the liveness of a datasource
class DBLiveCheckProvider implements Provider<LiveCheck> {
  constructor(@inject('datasources.db') private ds: DataSource) {}

  value() {
    return () => this.ds.ping();
  }
}

app
  .bind('health.MyDBCheck')
  .toProvider(DBLiveCheckProvider)
  .tag(HealthTags.LIVE_CHECK);

const myReadyCheck: ReadyCheck = () => {
  return Promise.resolve();
};
app.bind('health.MyReadyCheck').to(myReadyCheck).tag(HealthTags.READY_CHECK);

Contributions

Tests

Run npm test from the root folder.

Contributors

See all contributors.

License

MIT