2013-11-17 15:10:21 +00:00
|
|
|
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)
|
|
|
|
}
|