# 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
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"
>;
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();
}
}
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"
})
);
}
}
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:
- BeforeShutdown : Use this hook if you deploy your application with Kubernetes (see more details here (opens new window)),
- OnSignal : cleanup hook, returning a promise (used to be onSigterm),
- OnShutdown : called right before exiting,
- OnSendFailureDuringShutdown : called before sending each 503 during shutdowns.
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");
}
}
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
- Session & cookies
- Passport.js
- Keycloak
- Prisma
- TypeORM
- MikroORM
- Mongoose
- GraphQL
- Socket.io
- Swagger
- AJV
- Multer
- Serve static files
- Templating
- Serverless HTTP
- Seq
- OIDC
- Stripe
- Agenda
- Terminus
- Serverless
- Controllers
- Providers
- Model
- JsonMapper
- Middlewares
- Pipes
- Interceptors
- Authentication
- Hooks
- Exceptions
- Throw HTTP Exceptions
- Cache
- Command
- Response Filter
- Injection scopes
- Custom providers
- Lazy-loading provider
- Custom endpoint decorator
- Testing
- Customize 404