diff --git a/CHANGELOG.md b/CHANGELOG.md index 85a6d318..fa3f20f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # developing - [Fix 4984: random expire cache](https://github.com/beego/beego/pull/4984) - [Fix 4907: make admin serve HTTP only](https://github.com/beego/beego/pull/5005) +- [Feat 4999: add get all tasks function](https://github.com/beego/beego/pull/4999) # v2.0.4 diff --git a/go.sum b/go.sum index e7508019..150fb98a 100644 --- a/go.sum +++ b/go.sum @@ -567,6 +567,7 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= diff --git a/task/task.go b/task/task.go index 09a08144..7001b9ed 100644 --- a/task/task.go +++ b/task/task.go @@ -465,11 +465,16 @@ func DeleteTask(taskName string) { globalTaskManager.DeleteTask(taskName) } -// ClearTask clear all tasks +// ClearTask clear all tasks func ClearTask() { globalTaskManager.ClearTask() } +// GetAllTasks get all tasks +func GetAllTasks() []Tasker { + return globalTaskManager.GetAllTasks() +} + // GracefulShutdown wait all task done func GracefulShutdown() <-chan struct{} { return globalTaskManager.GracefulShutdown() @@ -635,7 +640,7 @@ func (m *taskManager) DeleteTask(taskname string) { } } -// ClearTask clear all tasks +// ClearTask clear all tasks func (m *taskManager) ClearTask() { isChanged := false @@ -653,6 +658,20 @@ func (m *taskManager) ClearTask() { } } +// GetAllTasks get all tasks +func (m *taskManager) GetAllTasks() []Tasker { + m.taskLock.RLock() + + l := make([]Tasker, 0, len(m.adminTaskList)) + + for _, t := range m.adminTaskList { + l = append(l, t) + } + m.taskLock.RUnlock() + + return l +} + // MapSorter sort map for tasker type MapSorter struct { Keys []string diff --git a/task/task_test.go b/task/task_test.go index 8d274e8f..1fdfd4b9 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -206,3 +206,24 @@ func wait(wg *sync.WaitGroup) chan bool { }() return ch } + +func TestGetAllTasks(t *testing.T) { + m := newTaskManager() + defer m.ClearTask() + + tk := NewTask("task1", "0/30 * * * * *", func(ctx context.Context) error { + return nil + }) + + tk2 := NewTask("task2", "0/40 * * * * *", func(ctx context.Context) error { + return nil + }) + + m.AddTask("task1", tk) + m.AddTask("task2", tk2) + + tasks := m.GetAllTasks() + total := len(tasks) + + assert.Equal(t, 2, total) +}