kms

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 11, 2016 License: MIT Imports: 7 Imported by: 0

README

##KMS

Project status Build Status Coverage Status Go Report Card GoDoc License

KMS(Killing Me Softly) is a library that aids in graceful shutdown of a process/application.

Why does this even exist? Aren't there other graceful shutdown librarys?

Sure there are other libraries, but they are focused on handling graceful shutdown a specific portion of code such as graceful shutdown of an http server, but this library allows you to glue together multiple unrelated(or related) services running within the same process/application.

Doesn't Go 1.8 handle graceful shutdown?

Yes and No, it does not yet handle Hijacked connections, like WebSockets, see:

but this package does; furthermore this package isn't just for graceful http shutdown but graceful shutdown of anything and everything.

When Go 1.8 comes out I will transparently make changes to let the std lib handle idle connections as it has lower level access to them, but continue to handle Hijacked connections.

Installation

Use go get

go get -u github.com/go-playground/kms

Built In

There are a few built in graceful shutdown helpers using the kms package for:

  • TCP
  • Unix Sockets
  • HTTP(S) graceful shutdown.

Examples

see here for more

package main

import (
	"net/http"
	"time"

	"github.com/go-playground/kms"
	"github.com/go-playground/kms/kmsnet/kmshttp"
)

func main() {

	// listen for shutdown signal(s) with timeout, non-blocking
	kms.ListenTimeout(false, time.Minute*3)

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Home"))
	})

	kmshttp.ListenAndServe(":3007", nil)
}

Package Versioning

I'm jumping on the vendoring bandwagon, you should vendor this package as I will not be creating different version with gopkg.in like allot of my other libraries.

Why? because my time is spread pretty thin maintaining all of the libraries I have + LIFE, it is so freeing not to worry about it and will help me keep pouring out bigger and better things for you the community.

I am open versioning with gopkg.in should anyone request it, but this should be stable going forward.

Licenses

Documentation

Overview

Package kms (Killing Me Softly) is a library that aids in graceful shutdown of a process/application.

Example:

package main

import (
	"net/http"
	"time"

	"github.com/go-playground/kms"
	"github.com/go-playground/kms/kmsnet/kmshttp"
)

func main() {

	// listen for shutdown signal(s) with timeout, non-blocking
	kms.ListenTimeout(false, time.Minute*3)

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Home"))
	})

	kmshttp.ListenAndServe(":3007", nil)
}

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AllowSignalHardShutdown

func AllowSignalHardShutdown(allow bool)

AllowSignalHardShutdown allows you to set whether the application should allow hard shutdown of the application if two signals for shutdown should cause a hard shutdown. eg. user running application from the command line types CTRL + C, the application begins to shut down gracefully, if the user types another CTRL + C should the application shut down hard?

Default: true

func Done

func Done()

Done signifies that your application is done performing an operation. it is different from the chained version as it does not need to be connected the the wait object.

func Listen

func Listen(block bool)

Listen sets up signals to listen for interrupt or kill signals in an attempt to wait for all operations to complete before letting the process die.

func ListenTimeout

func ListenTimeout(block bool, wait time.Duration)

ListenTimeout sets up signals to listen for interrupt or kill signals in an attempt to wait for all operations to complete before letting the process die.

the wait duration is how long to wait before forcefully shutting everything down.

func SetSignalFn

func SetSignalFn(fn SignalFn)

SetSignalFn allows registering of a custom signal function if you wish to listen for different signals, or even your own custom logic not related to signals. By default this function listens for syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP

func ShutdownComplete

func ShutdownComplete() <-chan struct{}

ShutdownComplete returns a notification channel for the package which will be closed/notified once termination is imminent.

func ShutdownInitiated

func ShutdownInitiated() <-chan struct{}

ShutdownInitiated returns a notification channel for the package which will be closed/notified once a termination signal is received.

useful when other code, such as a custom TCP connection listener needs to be notified to stop listening for new connections.

Types

type KillingMeSoftly

type KillingMeSoftly interface {
	Done()
}

KillingMeSoftly interface contains all functions needed for operation and method chaining

func Wait

func Wait() KillingMeSoftly

Wait signifies that your application is busy performing an operation.

best to chain using defer kms.Wait().Done()

type SignalFn

type SignalFn func() <-chan os.Signal

SignalFn is the function type used to signal kms of a shutdown siganl. by default this library listens for syscall.SIGINT, syscall.SIGTERM and syscall.SIGHUP os.Signal's but you can override with whatever signals or logic you wish.

Directories

Path Synopsis
examples
rpc

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL