package actions import ( "os/exec" "encoding/json" "github.com/k4lipso/gokill/internal" ) type Shutdown struct { Timeout string `json:"time"` ActionChan ActionResultChan } func (s Shutdown) DryExecute() { internal.LogDoc(s).Infof("shutdown -h %s", s.Timeout) internal.LogDoc(s).Info("Test Shutdown executed...") s.ActionChan <- nil } func (s Shutdown) Execute() { if err := exec.Command("shutdown", "-h", s.Timeout).Run(); err != nil { internal.LogDoc(s).Errorf("Failed to initiate shutdown: %s", err) } internal.LogDoc(s).Notice("Shutdown executed...") s.ActionChan <- nil } func (s Shutdown) Create(config internal.ActionConfig, c ActionResultChan) (Action, error) { result := Shutdown{ Timeout: "now", } err := json.Unmarshal(config.Options, &result) if err != nil { internal.LogDoc(s).Warning("Parsing Shutdown options failed.") return Shutdown{}, err } result.ActionChan = c return result, nil } func (p Shutdown) GetName() string { return "Shutdown" } func (p Shutdown) GetDescription() string { return "Shutsdown the machine by perfoming a ```shutdown -h now```" } func (p Shutdown) GetExample() string { return ` { "type": "Shutdown", "options": { "time": "+5" //wait 5 minutes before shutdown } } ` } func (p Shutdown) GetOptions() []internal.ConfigOption { return []internal.ConfigOption{ { Name: "time", Type: "string", Description: "TIME parameter passed to shutdown as follows ```shutdown -h TIME```", Default: "now", }, } }