# Terminus

Terminus is a package to adds graceful shutdown and Kubernetes readiness / liveness checks for any HTTP applications. This tutorial will show you how to install and use Terminus with Ts.ED.

# Installation

Before using terminus, we need to install the terminus (opens new window) module.

npm install --save @godaddy/terminus @tsed/terminus
1

Then import @tsed/terminus and add the following configuration in your Server.ts:

    # Options

    terminus configuration options waiting the same option description in the official Terminus documentation here (opens new window). The following the options are managed by the @tsed/terminus package:

    • healthChecks
    • onSignal
    • onSendFailureDuringShutdown
    • onShutdown
    • beforeShutdown
    • onSigterm
    export type TerminusSettings = Omit<
    TerminusOptions,
    "healthChecks" | "onSignal" | "onSendFailureDuringShutdown" | "onShutdown" | "beforeShutdown" | "onSigterm"
    >;
    
    1
    2
    3
    4

    # Usage

    # Readiness / liveness checks

    To create a readiness / liveness checks use the @Health decorator.

    import { Health } from "@tsed/terminus";
    
    @Controller("/mongo")
    class MongoCtrl {
      @Health("/health")
      health() {
        // Here check the mongo health
        return Promise.resolve();
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    You can also create an HealthCheckError when an error appear during your check.

    import { Health } from "@tsed/terminus";
    import { HealthCheckError } from "@godaddy/terminus";
    
    @Controller("/redis")
    class Redis {
      @Health("/health")
      health() {
        // Here check the redis health
        return Promise.reject(new HealthCheckError('failed', {
          redis: 'down',
        }));
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # Graceful shutdown

    @tsed/terminus package give some decorators to handle Terminus hooks. These hooks allow you to adds graceful shutdown. Here is the list of decorators:

    Example:

    import { BeforeShutdown, OnSendFailureDuringShutdown, OnShutdown, OnSignal } from "@tsed/terminus";
    
    @Controller("/redis")
    class RedisCtrl {
      @BeforeShutdown()
      beforeShutdow() {
        console.log('called before shutdown');
      }
    
      @OnSignal()
      OnSignal() {
        console.log('called on signal');
      }
    
      @OnShutdown()
      OnShutdown() {
        console.log('called on shutdown');
      }
    
      @OnSendFailureDuringShutdown()
      OnSendFailureDuringShutdown() {
        console.log('on send failure during shutdown');
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

    # Author

      # Maintainers

        Last Updated: 9/17/2021, 8:57:54 AM

        Other topics