task.go
1.35 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package admin
import (
"fmt"
"net/http"
)
var AdminTaskList map[string]Tasker
type Tasker interface {
GetStatus() string
Run() error
}
type Task struct {
Taskname string
Spec Schedule
Errlist []map[uint64]string //errtime:errinfo
ErrLimit int //max length for the errlist 0 stand for there' no limit
}
func (t *Task) GetStatus() string {
return ""
}
func (t *Task) Run() error {
return nil
}
func (t *Task) SetCron(spec string) {
}
type Schedule struct {
Second uint64
Minute uint64
Hour uint64
DOM uint64
Month uint64
DOW uint64
}
func StartTask() {
}
func StopTask() {
}
func AddTask(taskname string, t Tasker) {
AdminTaskList[taskname] = t
}
func TaskStatus(rw http.ResponseWriter, req *http.Request) {
for tname, t := range AdminTaskList {
fmt.Fprintf(rw, "%s:%s", tname, t.GetStatus())
}
}
//to run a Task by http from the querystring taskname
//url like /task?taskname=sendmail
func RunTask(rw http.ResponseWriter, req *http.Request) {
req.ParseForm()
taskname := req.Form.Get("taskname")
if t, ok := AdminTaskList[taskname]; ok {
err := t.Run()
if err != nil {
fmt.Fprintf(rw, "%v", err)
}
fmt.Fprintf(rw, "%s run success,Now the Status is %s", t.GetStatus())
} else {
fmt.Fprintf(rw, "there's no task which named:%s", taskname)
}
}
func init() {
AdminTaskList = make(map[string]Tasker)
}