Health indicator

Health indicator kit for server-side monitoring and balancing.
Inspired by Part V. Spring Boot Actuator: Production-ready feature 47.6.2 Writing custom HealthIndicators
Install
npm i @qiwi/health-indicator
yarn add @qiwi/health-indicator
Usage
import express from 'express'
import {SemaphoreIndicator, Endpoint} from '@qiwi/health-indicator'
const app = express()
const indicator = new SemaphoreIndicator()
const endpoint = new Endpoint(indicator)
indicator.getStatus = () => {
...
return 'GREEN'
}
indicator.status = 'RED'
app.get('/health', endpoint.middleware)
Indicator composes aggregator logic, so its health status may be resolved from deps.
const dep1 = new SemaphoreIndicator({status: 'RED', critical: true})
const dep2 = new SemaphoreIndicator({status: 'GREEN'})
const dep3 = new SemaphoreIndicator({deps: {dep1, dep2}})
const indicator = new SemaphoreIndicator({deps: {dep3}})
indicator.health()
Customization
The lib exports only a couple of indicator implementations:
StandardIndicator (DOWN, OUT_OF_SERVICE, UNKNOWN, UP)
SemaphoreIndicator (RED, BROKEN, GREEN)
To declare any CustomIndicator you may easily extend the AbstractIndicator
import {AbstractIndicator} from '@qiwi/health-indicator'
const OK = 200
const SERVICE_UNAVAILABLE = 503
export const GREEN = 'GREEN'
export const RED = 'RED'
export const BROKEN = 'BROKEN'
export const STATUS_MAP = {GREEN, BROKEN, RED}
export const SEVERITY_ORDER = [RED, BROKEN, GREEN]
export const DEFAULT_HTTP_CODE = OK
export const HTTP_MAP = {[GREEN]: OK, [RED]: SERVICE_UNAVAILABLE, [BROKEN]: SERVICE_UNAVAILABLE}
export default class SemaphoreIndicator extends AbstractIndicator {
static getDefaultStatus (): string {
return BROKEN
}
static getDefaultHttpCode (): number {
return DEFAULT_HTTP_CODE
}
static getHttpMap (): Object {
return HTTP_MAP
}
static getStatusMap (): Object {
return STATUS_MAP
}
static getSeverityOrder (): string[] {
return SEVERITY_ORDER
}
}
License
MIT