Move jobs raw definition to their own namespace and the cascading fallout
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"local/firestormy/config/ns"
|
||||
"local/firestormy/logger"
|
||||
"local/logb"
|
||||
"local/storage"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -19,7 +20,6 @@ type Job struct {
|
||||
Title string
|
||||
Name string
|
||||
Schedule string
|
||||
Raw string
|
||||
Runner Runner
|
||||
Disabled bool
|
||||
foo func()
|
||||
@@ -42,10 +42,13 @@ func newBashJob(schedule, sh string, title ...string) (*Job, error) {
|
||||
if !validCron(schedule) {
|
||||
return nil, ErrBadCron
|
||||
}
|
||||
key := uuid.New().String()
|
||||
if err := config.Store.Set(key, []byte(sh), ns.JobsRaw...); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
j := &Job{
|
||||
Name: uuid.New().String(),
|
||||
Name: key,
|
||||
Schedule: schedule,
|
||||
Raw: sh,
|
||||
Runner: Bash,
|
||||
}
|
||||
if len(title) == 0 || len(title[0]) == 0 {
|
||||
@@ -54,31 +57,70 @@ func newBashJob(schedule, sh string, title ...string) (*Job, error) {
|
||||
j.Title = title[0]
|
||||
}
|
||||
j.foo = func() {
|
||||
logb.Debugf("[sched] run %s/%s? %v", j.Title, j.Name, j.Disabled)
|
||||
if j.Disabled {
|
||||
return
|
||||
do := func() ([]byte, error) {
|
||||
logb.Debugf("[sched] run %s/%s? %v", j.Title, j.Name, j.Disabled)
|
||||
if j.Disabled {
|
||||
return nil, nil
|
||||
}
|
||||
sh, err := config.Store.Get(j.Name, ns.JobsRaw...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cmd := exec.Command("bash", "-c", string(sh))
|
||||
j.LastRun = time.Now()
|
||||
start := time.Now()
|
||||
out, err := cmd.CombinedOutput()
|
||||
j.LastRuntime = time.Since(start)
|
||||
if cmd != nil && cmd.ProcessState != nil {
|
||||
j.LastStatus = cmd.ProcessState.ExitCode()
|
||||
} else {
|
||||
j.LastStatus = 1
|
||||
}
|
||||
return out, err
|
||||
}
|
||||
cmd := exec.Command("bash", "-c", sh)
|
||||
j.LastRun = time.Now()
|
||||
start := time.Now()
|
||||
out, err := cmd.CombinedOutput()
|
||||
j.LastRuntime = time.Since(start)
|
||||
b, err := do()
|
||||
logb.Debugf("[sched] run %s: (%v) %s", j.Name, err, b)
|
||||
if err != nil {
|
||||
out = []byte(fmt.Sprintf("error running command: %v: %s", err, out))
|
||||
b = []byte(fmt.Sprintf("err running command: %s: %s", err.Error(), b))
|
||||
}
|
||||
j.LastOutput = strings.TrimSpace(string(out))
|
||||
if cmd != nil && cmd.ProcessState != nil {
|
||||
j.LastStatus = cmd.ProcessState.ExitCode()
|
||||
}
|
||||
b, err := j.Encode()
|
||||
j.LastOutput = strings.TrimSpace(string(b))
|
||||
b2, err := j.Encode()
|
||||
if err == nil {
|
||||
config.Store.Set(j.Name, b, ns.Jobs...)
|
||||
err = config.Store.Set(j.Name, b2, ns.Jobs...)
|
||||
}
|
||||
logger.New().Info("result", fmt.Sprintf("%+v", j))
|
||||
logger.New().Info("result", fmt.Sprintf("(%v) %s", err, b))
|
||||
}
|
||||
return j, nil
|
||||
}
|
||||
|
||||
func (j *Job) Rename(name string) error {
|
||||
sh, err := config.Store.Get(j.Name, ns.JobsRaw...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
b, err := j.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := config.Store.Set(name, sh, ns.JobsRaw...); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := config.Store.Set(name, b, ns.Jobs...); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := config.Store.Set(j.Name, nil, ns.Jobs...); err != nil && err != storage.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
if err := config.Store.Set(j.Name, nil, ns.JobsRaw...); err != nil && err != storage.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
|
||||
j.Name = name
|
||||
return nil
|
||||
}
|
||||
|
||||
func (j *Job) Run() {
|
||||
j.foo()
|
||||
}
|
||||
@@ -97,8 +139,10 @@ func (j *Job) Decode(b []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
k, err := NewJob(j.Runner, j.Schedule, j.Raw)
|
||||
k, err := NewJob(j.Runner, j.Schedule, "")
|
||||
if err == nil {
|
||||
config.Store.Set(k.Name, nil, ns.JobsRaw...)
|
||||
config.Store.Set(k.Name, nil, ns.Jobs...)
|
||||
k.Name = j.Name
|
||||
k.Title = j.Title
|
||||
k.LastStatus = j.LastStatus
|
||||
|
||||
Reference in New Issue
Block a user