1.0.3 • Published 2 years ago

simply-graceful v1.0.3

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

simply-graceful :hibiscus: npm version

A simple utility that provides asynchronous liveness and readiness probe management. It also handles graceful server close/process exiting to allow current requests in flight to complete in a best effort.

Installation

npm i simply-graceful

or

yarn add simply-graceful

Usage

import express from "express";
import type { Server } from "http";
import SimplyGraceful from "simply-graceful";
import { someMiddleware, anotherMiddleware } from "./middlewares";

export default async function CreateServer(): Promise<Server> {
  const { PORT = 3000, ENV = "development" } = process.env;

  const app = express();

  const graceful = new SimplyGraceful({
    app,
    skipProcessSignals: ENV !== "production",
    logger: console,
    livePath: "/.live",
    readyPath: "/.ready",
    grace: 5_000,
    delay: 30_000,
  });

  // someMiddleware here may do async stuff, so we have it return a callback
  // to signal ready when it's done
  graceful.waitForReady("someMiddleware"); // wait for someMiddleware to signal ready
  app.use(
    someMiddleware(() => {
      graceful.signalReady("someMiddleware"); // signal ready when someMiddleware is ready
    })
  );

  // similarly, anotherMiddleware may do async stuff, but we'll use a promise pattern
  // instead of a callback (just to illustrate)
  graceful.waitForReady("anotherMiddleware");
  app.use(
    anotherMiddleware().then(() => {
      graceful.signalReady("anotherMiddleware"); // signal ready when anotherMiddleware is ready
    })
  );

  const server = app.listen({ port: PORT }, (): void => {
    console.log(`🚀  Server ready at http://localhost:${PORT}/`);
  });

  // Pass `server` to graceful so it can shutdown when it receives a signal
  graceful.setServer(server);

  return server;
}

Config

Configuration options can be seen in SimplyGracefulConfig type. More docs TK.