# 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
    14
    15

    # 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: 5/19/2022, 2:53:00 PM

        Other topics