Refactored crawler to use task dispatcher

This commit is contained in:
James Mills
2021-02-02 13:13:12 +10:00
parent 4970b16d61
commit 26df009e8f
13 changed files with 578 additions and 51 deletions

47
internal/task.go Normal file
View File

@@ -0,0 +1,47 @@
package internal
import "fmt"
type TaskState int
const (
TaskStatePending TaskState = iota
TaskStateRunning
TaskStateComplete
TaskStateFailed
)
func (t TaskState) String() string {
switch t {
case TaskStatePending:
return "pending"
case TaskStateRunning:
return "running"
case TaskStateComplete:
return "complete"
case TaskStateFailed:
return "failed"
default:
return "unknown"
}
}
type TaskData map[string]string
type TaskResult struct {
State string `json:"state"`
Error string `json:"error"`
Data TaskData `json:"data"`
}
// Task is an interface that represents a single task to be executed by a
// worker. Any object can implement a `Task` if it implements the interface.
type Task interface {
fmt.Stringer
ID() string
State() TaskState
Result() TaskResult
Error() error
Run() error
}