Task reports
This commit is contained in:
+10
-4
@@ -2,14 +2,18 @@ package job
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/fatih/structs"
|
||||
"github.com/localhots/steward/db"
|
||||
)
|
||||
|
||||
type (
|
||||
Job struct {
|
||||
Name string
|
||||
actor func(Task)
|
||||
actor func(*db.Task)
|
||||
workers map[string]*worker
|
||||
tasks chan Task
|
||||
tasks chan *db.Task
|
||||
wg sync.WaitGroup
|
||||
}
|
||||
)
|
||||
@@ -19,11 +23,13 @@ func New(name string, actor func()) *Job {
|
||||
Name: name,
|
||||
actor: actor,
|
||||
workers: make(map[string]*worker),
|
||||
tasks: make(chan Task),
|
||||
tasks: make(chan *db.Task, 1000),
|
||||
}
|
||||
}
|
||||
|
||||
func (j *Job) Perform(t Task) {
|
||||
func (j *Job) Perform(t *db.Task) {
|
||||
t.Job = structs.Name(t)
|
||||
t.CreatedAt = time.Now()
|
||||
j.tasks <- t
|
||||
}
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
package job
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"code.google.com/p/go-uuid/uuid"
|
||||
"github.com/fatih/structs"
|
||||
)
|
||||
|
||||
type (
|
||||
Task struct{}
|
||||
report struct {
|
||||
duration time.Duration
|
||||
err error
|
||||
}
|
||||
)
|
||||
|
||||
func newID() string {
|
||||
return uuid.New()
|
||||
}
|
||||
|
||||
func (t *Task) report(rep report) {
|
||||
meta := structs.Map(t)
|
||||
meta["duration"] = rep.duration
|
||||
meta["error"] = rep.err
|
||||
}
|
||||
+13
-6
@@ -2,6 +2,9 @@ package job
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"code.google.com/p/go-uuid/uuid"
|
||||
"github.com/localhots/steward/db"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -24,15 +27,19 @@ func (w *worker) workHard() {
|
||||
}
|
||||
}
|
||||
|
||||
func (w *worker) perform(t Task) {
|
||||
start := time.Now()
|
||||
func (w *worker) perform(t *db.Task) {
|
||||
t.Worker = w.id
|
||||
t.StartedAt = time.Now()
|
||||
defer func() {
|
||||
err := recover()
|
||||
t.report(report{
|
||||
duration: time.Since(start),
|
||||
success: err,
|
||||
})
|
||||
t.Duration = time.Since(t.StartedAt).Nanoseconds()
|
||||
t.Error = err.String()
|
||||
t.Save()
|
||||
}()
|
||||
|
||||
w.job.actor(t)
|
||||
}
|
||||
|
||||
func newID() string {
|
||||
return uuid.New()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user