-
Notifications
You must be signed in to change notification settings - Fork 83
/
task.manager.go
64 lines (51 loc) · 1.13 KB
/
task.manager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package uploader
import (
"os/exec"
"github.com/go-olive/olive/engine/config"
"github.com/sirupsen/logrus"
)
var DefaultTaskMux = &defaultTaskMux
var defaultTaskMux TaskMux
type TaskMux struct {
m map[string]muxEntry
}
type muxEntry struct {
h TaskHandler
pattern string
}
func (mux *TaskMux) RegisterHandler(pattern string, handler TaskHandler) {
if pattern == "" {
panic("task: invalid pattern")
}
if handler == nil {
panic("task: nil handler")
}
if _, exist := mux.m[pattern]; exist {
panic("task: multiple registrations for " + pattern)
}
if mux.m == nil {
mux.m = make(map[string]muxEntry)
}
e := muxEntry{h: handler, pattern: pattern}
mux.m[pattern] = e
}
func (mux *TaskMux) MustGetHandler(pattern string) TaskHandler {
if handler, ok := mux.m[pattern]; ok {
return handler.h
}
return DefaultHandlerFunc
}
type Task struct {
log *logrus.Logger
cfg *config.Config
Filepath string
StopChan chan struct{}
Cmd *exec.Cmd
}
type TaskHandler interface {
Process(t *Task) error
}
type TaskHandlerFunc func(t *Task) error
func (f TaskHandlerFunc) Process(t *Task) error {
return f(t)
}