Documentation
¶
Index ¶
- Constants
- type CtrlState
- type DefaultRunner
- type Event
- type Process
- func (p *Process) IsRunning() bool
- func (p *Process) IsStopped() bool
- func (p *Process) OutputChan() chan []byte
- func (p *Process) PID() int
- func (p *Process) Restart() error
- func (p *Process) Run()
- func (p *Process) SetRunner(r ProcessRunner)
- func (p *Process) Start() error
- func (p *Process) Status() string
- func (p *Process) Stop() error
- func (p *Process) Wait()
- type ProcessConfig
- type ProcessRunner
- type ProcessState
Constants ¶
const ( COMMAND_START int = iota COMMAND_STOP COMMAND_RESTART )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DefaultRunner ¶
type DefaultRunner struct{}
type Process ¶
type Process struct { // Process Name Name string `json:"name"` // Enabled indicates whether to run this process. A value of false will ensure // it is always stopped Enabled bool `json:"enabled"` // RunAtLoad key is used to control whether your process is launched once // at the time the config is loaded. The default is true. RunAtLoad bool // Last status code from this process exiting LastExitStatus int `json:"last_exit_status,int"` // Launch timeout Timeout time.Duration `json:"timeout"` // Command is the executable and arguments to run Command []string `json:"command"` // Environment is a hash of environment vars to set for this process Environment map[string]string `json:"environment"` // The time this process started StartedAt time.Time `json:"started_at"` // Signal to send to the process to gracefully exit KillSignal os.Signal `json:"kill_signal"` // Timeout to wait for process to exit gracefully before killing KillTimeout time.Duration `json:"kill_timeout"` // Throttle relaunching Throttle time.Duration `json:"throttle"` // Restart process it exits KeepAlive bool `json:"keep_alive"` // User and Group to switch to after exec UserName string `json:"user"` GroupName string `json:"group"` // WorkingDirectory is the directory to chdir to after forking WorkingDirectory string `json:"working_directory"` Events chan Event sync.Mutex // contains filtered or unexported fields }
Process represents a process running under command of Nord agent
func NewProcess ¶
NewProcess constructs a new Process instance which can be accepted by the management queue
func NewProcessFromConfig ¶
func NewProcessFromConfig(conf *ProcessConfig) *Process
NewProcessFromConfig creates a process from a ProcessConf
func (*Process) OutputChan ¶
func (*Process) SetRunner ¶
func (p *Process) SetRunner(r ProcessRunner)
SetRunner sets the process runner (useful for testing with a mock runner) FIXME(ivanvanderbyl): This probably doesn't need to be exported
type ProcessConfig ¶
type ProcessConfig struct { // Name is a required key that uniquely identifies the process to Watchdog. Name string `mapstructure:"name"` // Disables is an optional key that instructs Watchdog on whether to load and // run this process. If this is set to false, watchdog will stop the process // and not respond to commands to start it. This configuration file will still // be monitored for changes in the event it later gets set to true, which will // in turn launch the process if it is configured to do so. Disabled bool `mapstructure:"disabled"` // UserName is an optional key specifies the user to run the job as. // This key is only applicable when watchdog is running as root. UserName string `mapstructure:"user_name"` // GroupName is an optional key specifies the group to run the process as. // This key is only applicable when watchdog is running as root. // // If UserName is set and GroupName is not, the the group will be set to // the default group of the user GroupName string `mapstructure:"group_name"` // Program key maps to the first argument of exec.Command(). If this key is // missing, then the first element of the array of strings provided to the // ProgramArguments will be used instead. // // This key is required in the absence of the ProgramArguments key. Program string `mapstructure:"program"` // ProgramArguments key maps to the second and subsequent arguments of // exec.Command. This key is required in the absence of the Program key. ProgramArguments []string `mapstructure:"program_arguments"` // KeepAlive key is used to control whether Watchdog should restart this // process in the event that is exits early. If this key is set to false, // Watchdog will not restart the process unless you manually tell it to do so. KeepAlive bool `mapstructure:"keep_alive"` // RunAtLoad key is used to control whether your process is launched once // at the time the config is loaded. The default is true. RunAtLoad bool `mapstructure:"run_at_load"` // WorkingDirectory is an optional key that is used to specify a directory // to chdir(2) to before running the process. WorkingDirectory string `mapstructure:"working_directory"` // EnvironmentVariables key is used to specify additional environmental // variables to be set before running the process. EnvironmentVariables map[string]string `mapstructure:"environment_variables"` // KillSignal is used to specify which os.Signal to send to the process to // instruct it to exit gracefully. Default is SIGKILL. KillSignal string `mapstructure:"kill_signal"` // KillTimeout is used to specify the amount of time to wait for the process // to safely exit after sending KillSignal before sending a SIGTERM. The // default is 10s. KillTimeout string `mapstructure:"kill_timeout"` // ThrottleInterval specifies the amount of time to wait before respawning the // process after it exits, if it is set to KeepAlive. The default value is // 10s. ThrottleInterval string `mapstructure:"throttle_interval"` // PidFile specifies where to write a pid file for this process when it is // spawned. An empty value disables this function. PidFile string // Outlets specifies a an outlet type by key and value of configuration to // be passed to that outlet when being constructed. Outlets map[string]map[string]string }
ProcessConfig provides methods for loading and parsing configuration files into a struct which can be loaded as a process.
All exported fields in this struct are supported in a process configuration file.
func DecodeConfigFromJSON ¶
func DecodeConfigFromJSON(r io.Reader) (*ProcessConfig, error)
DecodeConfigFromJSON loads a ProcessConfig from a JSON file
func DecodeConfigFromProcfile ¶
func DecodeConfigFromProcfile(r io.Reader) (*ProcessConfig, error)
DecodeConfigFromProcfile will construct a minimal process configuration from a Foreman Procfile, starting it immediately and keeping it alive.
func DecodeConfigFromTOML ¶
func DecodeConfigFromTOML(r io.Reader) (*ProcessConfig, error)
DecodeConfigFromTOML loads a ProcessConfig from a TOML file
func LoadConfigFile ¶
func LoadConfigFile(path string) (*ProcessConfig, error)
LoadConfigFile loads a process configuration from a file on disk.
func (*ProcessConfig) IsValid ¶
func (p *ProcessConfig) IsValid() bool
IsValid returns whether the config is valid for starting a process.
type ProcessRunner ¶
ProcessRunner is an interface for running processes, used mainly for switching between a live runner and a test runner
type ProcessState ¶
type ProcessState int
const ( ProcessStopped ProcessState = iota ProcessStarting ProcessRunning ProcessStopping )
func (*ProcessState) String ¶
func (p *ProcessState) String() string