Task reports

This commit is contained in:
2015-03-05 03:51:17 +07:00
parent 8ac16bb695
commit ed666552ef
8 changed files with 80 additions and 86 deletions
+10 -4
View File
@@ -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
}
-26
View File
@@ -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
View File
@@ -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()
}