task.go 1.35 KB
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)
}