empact/job/worker.go

44 lines
584 B
Go
Raw Normal View History

2015-03-04 18:43:44 +07:00
package job
import (
2015-03-05 19:57:36 +07:00
"sync"
2015-03-04 18:43:44 +07:00
"time"
2015-03-05 03:51:17 +07:00
2015-03-05 19:57:36 +07:00
"github.com/localhots/empact/task"
2015-03-04 18:43:44 +07:00
)
type (
worker struct {
2015-03-05 19:57:36 +07:00
id string
job *Job
wg *sync.WaitGroup
2015-03-04 18:43:44 +07:00
}
)
func (w *worker) workHard() {
defer w.wg.Done()
for {
select {
2015-03-05 19:57:36 +07:00
case <-w.job.orders:
2015-03-05 02:08:36 +07:00
return
case t := <-w.job.tasks:
w.perform(t)
2015-03-04 18:43:44 +07:00
}
}
}
2015-03-05 19:57:36 +07:00
func (w *worker) perform(t task.Tasker) {
dt := t.T()
dt.Worker = w.id
dt.StartedAt = time.Now()
2015-03-04 18:43:44 +07:00
defer func() {
2015-03-05 19:57:36 +07:00
if err := recover(); err != nil {
// dt.Error = err.(string)
}
dt.Duration = time.Since(dt.StartedAt).Nanoseconds()
dt.Save()
2015-03-04 18:43:44 +07:00
}()
2015-03-05 02:08:36 +07:00
w.job.actor(t)
2015-03-04 18:43:44 +07:00
}