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
 }

Reply via email to