Refactored crawler to use task dispatcher
This commit is contained in:
47
internal/task.go
Normal file
47
internal/task.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user