This is an automated email from the ASF dual-hosted git repository. abeizn pushed a commit to branch release-v1.0 in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
commit acc754516b5e5c34cddd4ad2b88bf946af0ea54b Author: abeizn <[email protected]> AuthorDate: Wed Mar 27 18:13:58 2024 +0800 fix: plugins sort and update progress percentage calculation (#7224) * fix: plugins sort * fix: update progress percentage calculation * fix: plugin sort logic * fix: plugin sort logic * fix: some subtasks records is 0 --- backend/core/runner/run_task.go | 1 - .../plugins/github/tasks/milestone_converter.go | 2 +- backend/server/services/task.go | 28 ++++++++++++---------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/backend/core/runner/run_task.go b/backend/core/runner/run_task.go index 0f7428d66..7dbbe5549 100644 --- a/backend/core/runner/run_task.go +++ b/backend/core/runner/run_task.go @@ -345,7 +345,6 @@ func UpdateProgressDetail(basicRes context.BasicRes, taskId uint64, progressDeta } case plugin.SubTaskSetProgress: progressDetail.TotalRecords = p.Total - progressDetail.FinishedRecords = p.Current case plugin.SubTaskIncProgress: progressDetail.FinishedRecords = p.Current case plugin.SetCurrentSubTask: diff --git a/backend/plugins/github/tasks/milestone_converter.go b/backend/plugins/github/tasks/milestone_converter.go index 5261c7674..fee9a5670 100644 --- a/backend/plugins/github/tasks/milestone_converter.go +++ b/backend/plugins/github/tasks/milestone_converter.go @@ -36,7 +36,7 @@ func init() { } var ConvertMilestonesMeta = plugin.SubTaskMeta{ - Name: "Cnvert Milestones", + Name: "Convert Milestones", EntryPoint: ConvertMilestones, EnabledByDefault: true, Description: "Convert tool layer table github_milestones into domain layer table milestones", diff --git a/backend/server/services/task.go b/backend/server/services/task.go index 565442756..9ad7494a4 100644 --- a/backend/server/services/task.go +++ b/backend/server/services/task.go @@ -244,17 +244,21 @@ func GetSubTasksInfo(pipelineId uint64, shouldSanitize bool, tx dal.Dal) (*model tx = db } var tasks []*models.Task - err := tx.All(&tasks, dal.Where("pipeline_id = ?", pipelineId)) + err := tx.All(&tasks, dal.Where("pipeline_id = ?", pipelineId), dal.Orderby("id")) if err != nil { return nil, err } - filterTasks := filterTasks(tasks) + + lastTasks := filterTasksWithLastStatus(tasks) var subtasksInfo []models.SubtasksInfo var totalSubtasksCount int64 var totalFinishedSubTasksCount int64 var count int64 var status []string - for _, task := range filterTasks { + for _, task := range lastTasks { + if task.Plugin == "org" { + continue + } subTaskResult := models.SubtasksInfo{ ID: task.ID, PipelineID: task.PipelineId, @@ -302,9 +306,9 @@ func GetSubTasksInfo(pipelineId uint64, shouldSanitize bool, tx dal.Dal) (*model } subtasksInfo = append(subtasksInfo, subTaskResult) - collectSubtasksCount := errors.Must1(tx.Count(dal.From("_devlake_subtasks"), dal.Where("task_id = ?", task.ID))) + collectSubtasksCount := errors.Must1(tx.Count(dal.From("_devlake_subtasks"), dal.Where("task_id = ? and is_collector = 1", task.ID))) totalSubtasksCount += collectSubtasksCount - finishedSubTasksCount := errors.Must1(tx.Count(dal.From("_devlake_subtasks"), dal.Where("task_id = ? and finished_at is not null", task.ID))) + finishedSubTasksCount := errors.Must1(tx.Count(dal.From("_devlake_subtasks"), dal.Where("task_id = ? and is_collector = 1 and finished_at is not null", task.ID))) totalFinishedSubTasksCount += finishedSubTasksCount count++ @@ -312,9 +316,9 @@ func GetSubTasksInfo(pipelineId uint64, shouldSanitize bool, tx dal.Dal) (*model } subTasksOuput := &models.SubTasksOuput{} + subTasksOuput.SubtasksInfo = subtasksInfo subTasksOuput.Count = totalSubtasksCount - completionRateFloat := float64(totalFinishedSubTasksCount) / float64(totalSubtasksCount) roundedCompletionRate := math.Round(completionRateFloat*100) / 100 subTasksOuput.CompletionRate = roundedCompletionRate @@ -325,14 +329,11 @@ func GetSubTasksInfo(pipelineId uint64, shouldSanitize bool, tx dal.Dal) (*model return subTasksOuput, nil } -func filterTasks(tasks []*models.Task) []*models.Task { +// filterTasksWithLastStatus returns the latest task for each plugin +func filterTasksWithLastStatus(tasks []*models.Task) []*models.Task { taskMap := make(map[string]*models.Task) - + sortedTasks := tasks for _, task := range tasks { - if task.Plugin == "org" { - continue - } - if existingTask, ok := taskMap[task.Plugin]; ok { if task.BeganAt != nil && (existingTask.BeganAt == nil || task.BeganAt.After(*existingTask.BeganAt)) { taskMap[task.Plugin] = task @@ -346,6 +347,9 @@ func filterTasks(tasks []*models.Task) []*models.Task { for _, task := range taskMap { filteredTasks = append(filteredTasks, task) } + for i, task := range sortedTasks { + filteredTasks[i] = taskMap[task.Plugin] + } return filteredTasks }
