overseer: github.com/jpillora/overseer Index | Files | Directories

package overseer

import "github.com/jpillora/overseer"

Package overseer implements daemonizable self-upgrading binaries in Go (golang).

Index

Package Files

graceful.go overseer.go proc_master.go proc_slave.go sys_posix.go sys_posix_mv.go

Variables

var (
    SIGUSR1 = syscall.SIGUSR1
    SIGUSR2 = syscall.SIGUSR2
    SIGTERM = syscall.SIGTERM
)
var (
    //DisabledState is a placeholder state for when
    //overseer is disabled and the program function
    //is run manually.
    DisabledState = State{Enabled: false}
)

func IsSupported Uses

func IsSupported() bool

IsSupported returns whether overseer is supported on the current OS.

func Restart Uses

func Restart()

Restart programmatically triggers a graceful restart. If NoRestart is enabled, then this will essentially be a graceful shutdown.

func Run Uses

func Run(c Config)

Run executes overseer, if an error is encountered, overseer fallsback to running the program directly (unless Required is set).

func RunErr Uses

func RunErr(c Config) error

RunErr allows manual handling of any overseer errors.

func SanityCheck Uses

func SanityCheck()

SanityCheck manually runs the check to ensure this binary is compatible with overseer. This tries to ensure that a restart is never performed against a bad binary, as it would require manual intervention to rectify. This is automatically done on overseer.Run() though it can be manually run prior whenever necessary.

type Config Uses

type Config struct {
    //Required will prevent overseer from fallback to running
    //running the program in the main process on failure.
    Required bool
    //Program's main function
    Program func(state State)
    //Program's zero-downtime socket listening address (set this or Addresses)
    Address string
    //Program's zero-downtime socket listening addresses (set this or Address)
    Addresses []string
    //RestartSignal will manually trigger a graceful restart. Defaults to SIGUSR2.
    RestartSignal os.Signal
    //TerminateTimeout controls how long overseer should
    //wait for the program to terminate itself. After this
    //timeout, overseer will issue a SIGKILL.
    TerminateTimeout time.Duration
    //MinFetchInterval defines the smallest duration between Fetch()s.
    //This helps to prevent unwieldy fetch.Interfaces from hogging
    //too many resources. Defaults to 1 second.
    MinFetchInterval time.Duration
    //PreUpgrade runs after a binary has been retrieved, user defined checks
    //can be run here and returning an error will cancel the upgrade.
    PreUpgrade func(tempBinaryPath string) error
    //Debug enables all [overseer] logs.
    Debug bool
    //NoWarn disables warning [overseer] logs.
    NoWarn bool
    //NoRestart disables all restarts, this option essentially converts
    //the RestartSignal into a "ShutdownSignal".
    NoRestart bool
    //NoRestartAfterFetch disables automatic restarts after each upgrade.
    //Though manual restarts using the RestartSignal can still be performed.
    NoRestartAfterFetch bool
    //Fetcher will be used to fetch binaries.
    Fetcher fetcher.Interface
}

Config defines overseer's run-time configuration

type State Uses

type State struct {
    //whether overseer is running enabled. When enabled,
    //this program will be running in a child process and
    //overseer will perform rolling upgrades.
    Enabled bool
    //ID is a SHA-1 hash of the current running binary
    ID  string
    //StartedAt records the start time of the program
    StartedAt time.Time
    //Listener is the first net.Listener in Listeners
    Listener net.Listener
    //Listeners are the set of acquired sockets by the master
    //process. These are all passed into this program in the
    //same order they are specified in Config.Addresses.
    Listeners []net.Listener
    //Program's first listening address
    Address string
    //Program's listening addresses
    Addresses []string
    //GracefulShutdown will be filled when its time to perform
    //a graceful shutdown.
    GracefulShutdown chan bool
    //Path of the binary currently being executed
    BinPath string
}

State contains the current run-time state of overseer

Directories

PathSynopsis
example
fetcher

Package overseer imports 20 packages (graph) and is imported by 16 packages. Updated 2019-04-27. Refresh now. Tools for package owners.