Refactored crawler to use task dispatcher
This commit is contained in:
64
internal/base_task.go
Normal file
64
internal/base_task.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/renstrom/shortuuid"
|
||||
)
|
||||
|
||||
type BaseTask struct {
|
||||
state TaskState
|
||||
data TaskData
|
||||
err error
|
||||
id string
|
||||
}
|
||||
|
||||
func NewBaseTask() *BaseTask {
|
||||
return &BaseTask{
|
||||
data: make(TaskData),
|
||||
id: shortuuid.New(),
|
||||
}
|
||||
}
|
||||
|
||||
func (t *BaseTask) SetState(state TaskState) {
|
||||
t.state = state
|
||||
}
|
||||
|
||||
func (t *BaseTask) SetData(key, val string) {
|
||||
if t.data == nil {
|
||||
t.data = make(TaskData)
|
||||
}
|
||||
t.data[key] = val
|
||||
}
|
||||
|
||||
func (t *BaseTask) Done() {
|
||||
if t.err != nil {
|
||||
t.state = TaskStateFailed
|
||||
} else {
|
||||
t.state = TaskStateComplete
|
||||
}
|
||||
}
|
||||
|
||||
func (t *BaseTask) Fail(err error) error {
|
||||
t.err = err
|
||||
return err
|
||||
}
|
||||
|
||||
func (t *BaseTask) Result() TaskResult {
|
||||
stateStr := t.state.String()
|
||||
errStr := ""
|
||||
if t.err != nil {
|
||||
errStr = t.err.Error()
|
||||
}
|
||||
|
||||
return TaskResult{
|
||||
State: stateStr,
|
||||
Error: errStr,
|
||||
Data: t.data,
|
||||
}
|
||||
}
|
||||
|
||||
func (t *BaseTask) String() string { return fmt.Sprintf("%T: %s", t, t.ID()) }
|
||||
func (t *BaseTask) ID() string { return t.id }
|
||||
func (t *BaseTask) State() TaskState { return t.state }
|
||||
func (t *BaseTask) Error() error { return t.err }
|
||||
Reference in New Issue
Block a user