internal/daemon/manager.go (40 lines of code) (raw):

package daemon import "context" type DaemonStatus string const ( DaemonStatusRunning DaemonStatus = "running" DaemonStatusStopped DaemonStatus = "stopped" DaemonStatusUnknown DaemonStatus = "unknown" ) type DaemonManager interface { // StartDaemon starts the daemon with the given name. // If the daemon is already running, this is a no-op. StartDaemon(name string) error // StopDaemon stops the daemon with the given name. // If the daemon is not running, this is a no-op. StopDaemon(name string) error // RestartDaemon restarts the daemon with the given name. // If the daemon is not running, it will be started. RestartDaemon(ctx context.Context, name string, opts ...OperationOption) error // GetDaemonStatus returns the status of the daemon with the given name. GetDaemonStatus(name string) (DaemonStatus, error) // EnableDaemon enables the daemon with the given name. // If the daemon is already enabled, this is a no-op. EnableDaemon(name string) error // DisableDaemon disables the daemon with the given name. // If the daemon is not enabled, this is a no-op. DisableDaemon(name string) error // DaemonReload will reload all the daemons DaemonReload() error // Close cleans up any underlying resources used by the daemon manager. Close() } // OperationOptions allows to customize the behavior of a daemon operation. type OperationOptions struct { Result chan<- OperationResult Mode string } // ApplyAll allows OperationOptions to be used as an OperationOption. func (o *OperationOptions) ApplyAll(in *OperationOptions) { if o.Result != nil { in.Result = o.Result } if o.Mode != "" { in.Mode = o.Mode } } // OperationOption is a function that modifies the OperationOptions. type OperationOption func(*OperationOptions) // OperationResult represents the result of a daemon operation. type OperationResult string const ( // TODO(gaslor): ideally we should decouple the OperationResult values from the dbus library. // For now this is just returning the same strings as the dbus library. // However, this breaks the daemon manager abstraction, as it leaks the dbus library // implementation details, forcing other possible implementations to mimic the // same behavior. // Done indicates successful execution of a job. Done OperationResult = "done" // Canceled indicates that a job has been canceled before it finished execution. Canceled OperationResult = "canceled" // Timeout indicates that the job timeout was reached. Timeout OperationResult = "timeout" // Failed indicates that the job failed. Failed OperationResult = "failed" // Dependency indicates that a job this job has been depending on failed and the job hence has been removed too. Dependency OperationResult = "dependency" // Skipped indicates that a job was skipped because it didn't apply to the units current state. Skipped OperationResult = "skipped" )