80 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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)
 | |
| }
 |