npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-shutdown

v1.0.9

Published

Safely shutdown NodeJS

Downloads

13

Readme

Description

A library to safely shutdown your NodeJS app

Usage

var shutdown = require("node-shutdown");

shutdown.configure({
                        port: "MyApp.sock",
                        pid_file: "MyApp.pid"
                        grace_period: 10 // In seconds. default is 120 (2 minutes)
                    });

shutdown.on("shutdown", MyShutdownFunc); // NOTE: This is not an event emitter kind. calling this multiple times will cause the previous value to be overwritten.  In short, there can only be one, and it supports promise

function MyShutdownFunc(params) {
    http.close(); // stop accepting HTTP requests

    // or you're using express
    app.use(function(req, res, next) {
        if (shutdown.shutting_down) {
            res.send(503); // tell load balancer to forward the request to another node
        }
        else {
            next();
        }
    });

    // stop accepting more incoming requests

    var timer_id = setInterval(function() {
        if (shutdown.shutting_down) {
            if (tasks.length == 0) {
                clearInterval(timer_id); // stop processing more background task or wait for all to finish
            }
            else {
                if (shutdown.time_remaining < 10) { // if you need more time
                    shutdown.shutdown(10); // extend the timer for 10 more seconds
                }
            }
        }
    }, 1000);
}

In other modules

var shutdown = require("node-shutdown"); // it's a singleton!

if (shutdown.shutting_down) {
    // do something great!
}

Shutdown through socket -- in your terminal

// shutdown in 120 seconds (default)
$ echo shutdown | nc -U MyApp.sock

// shutdown in 10 seconds
$ echo shutdown 10 | nc -U MyApp.sock

// the shutdown command can be called repeatedly and it will reset the timer to the new one mentioned

Use case

Safely shutdown your app by stop accepting incoming requests.

Precaution

It is recommended to not close database connections so that pending tasks should be able to complete accordingly

Bonus feature

shutdown.on("maintenance", maintananceFunc); // set your app to maintenance mode!

shutdown.on("yet_another_function", makeSomethingGreatHappen); // set your app to maintenance mode!

in your terminal

$ echo maintenance | nc -U MyApp.sock

$ echo yet_another_function | nc -U MyApp.sock