makeomatic/mservice

View on GitHub
packages/plugin-router/src/actions/health.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { HttpStatusError } from 'common-errors'
import {
  Microfleet,
  HealthStatus,
  PLUGIN_STATUS_FAIL
} from '@microfleet/core'

import { ServiceRequest } from '../types/router'

const kUnhealthy = new HttpStatusError(500, 'unhealthy')

export default async function genericHealthCheck(this: Microfleet, request: ServiceRequest): Promise<{ data: HealthStatus }> {
  const data = await this.getHealthStatus()

  if (PLUGIN_STATUS_FAIL === data.status) {
    switch (request.transport) {
      case 'amqp':
      case 'internal': {
        const plugins = data.failed.map(it => it.name).join(', ')
        throw new HttpStatusError(500, `Unhealthy due to following plugins: ${plugins}`)
      }

      default:
        this.log.error({ data }, 'health check failed')
        throw kUnhealthy
    }
  }

  return { data }
}