Documentation ¶
Overview ¶
Package overseer implements daemonizable self-upgrading binaries in Go (golang).
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( //DisabledState is a placeholder state for when //overseer is disabled and the program function //is run manually. DisabledState = State{Enabled: false} )
Functions ¶
func IsSupported ¶
func IsSupported() bool
IsSupported returns whether overseer is supported on the current OS.
func Restart ¶
func Restart()
Restart programmatically triggers a graceful restart. If NoRestart is enabled, then this will essentially be a graceful shutdown.
func Run ¶
func Run(c Config)
Run executes overseer, if an error is encountered, overseer fallsback to running the program directly (unless Required is set).
func SanityCheck ¶
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.
Types ¶
type Config ¶
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 OverseerListener ¶
gracefully closing net.Listener
func (*OverseerListener) File ¶
func (l *OverseerListener) File() *os.File
type State ¶
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