@loopback/extension-health

An extension exposes health check related endpoints with LoopBack 4

Usage no npm install needed!

<script type="module">
  import loopbackExtensionHealth from 'https://cdn.skypack.dev/@loopback/extension-health';
</script>

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