package tasksch import ( "sort" "time" ) var ( defTaskMan TaskMan ) type TaskMan struct { taskList map[string]*Task } func init() { defTaskMan.taskList = make(map[string]*Task) } func (m *TaskMan) RunTask(taskName string, isContinueWhenError bool, resultHandler ResultHandlerFunc, parallelCount, batchSize int, userName string, worker WorkFunc, itemList interface{}, params ...interface{}) *Task { task := RunTask(taskName, isContinueWhenError, resultHandler, parallelCount, batchSize, userName, worker, itemList, params...) m.taskList[task.ID] = task return task } func (m *TaskMan) GetTasks(taskID string, fromStatus, toStatus int, lastHours int) (taskList []*Task) { lastTime := time.Now().Add(time.Duration(-lastHours) * time.Hour).Unix() for k, v := range m.taskList { if !((taskID != "" && taskID != k) || v.Status < fromStatus || v.Status > toStatus || v.CreatedAt.Unix() < lastTime) { taskList = append(taskList, v) } } sort.Sort(TaskList(taskList)) return taskList } func RunManagedTask(taskName string, isContinueWhenError bool, resultHandler ResultHandlerFunc, parallelCount, batchSize int, userName string, worker WorkFunc, itemList interface{}, params ...interface{}) *Task { return defTaskMan.RunTask(taskName, isContinueWhenError, resultHandler, parallelCount, batchSize, userName, worker, itemList, params...) } func GetTasks(taskID string, fromStatus, toStatus int, lastHours int) (taskList []*Task) { return defTaskMan.GetTasks(taskID, fromStatus, toStatus, lastHours) }