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} )
var (
Timeout = 3 * time.Second
)
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 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
type Win32_Process ¶
type Win32_Process struct { Name string ExecutablePath *string CommandLine *string Priority uint32 CreationDate *time.Time ProcessID uint32 ThreadCount uint32 Status *string ReadOperationCount uint64 ReadTransferCount uint64 WriteOperationCount uint64 WriteTransferCount uint64 CSCreationClassName string CSName string Caption *string CreationClassName string Description *string ExecutionState *uint16 HandleCount uint32 KernelModeTime uint64 MaximumWorkingSetSize *uint32 MinimumWorkingSetSize *uint32 OSCreationClassName string OSName string OtherOperationCount uint64 OtherTransferCount uint64 PageFaults uint32 PageFileUsage uint32 ParentProcessID uint32 PeakPageFileUsage uint32 PeakVirtualSize uint64 PeakWorkingSetSize uint32 PrivatePageCount uint64 TerminationDate *time.Time UserModeTime uint64 WorkingSetSize uint64 }
func GetWin32Proc ¶
func GetWin32Proc(pid int32) ([]Win32_Process, error)
func GetWin32ProcWithContext ¶
func GetWin32ProcWithContext(ctx context.Context, pid int32) ([]Win32_Process, error)