diff --git a/dao/dao_test.go b/dao/dao_test.go index 5a17986fc..699224700 100644 --- a/dao/dao_test.go +++ b/dao/dao_test.go @@ -1139,24 +1139,40 @@ func TestGetRepPolicyByProject(t *testing.T) { func TestGetRepJobByPolicy(t *testing.T) { jobs, err := GetRepJobByPolicy(999) if err != nil { - log.Errorf("Error occured in GetRepJobByPolicy: %v, policy ID: %d", err, 999) + t.Errorf("Error occured in GetRepJobByPolicy: %v, policy ID: %d", err, 999) return } if len(jobs) > 0 { - log.Errorf("Unexpected length of jobs, expected: 0, in fact: %d", len(jobs)) + t.Errorf("Unexpected length of jobs, expected: 0, in fact: %d", len(jobs)) return } jobs, err = GetRepJobByPolicy(policyID) if err != nil { - log.Errorf("Error occured in GetRepJobByPolicy: %v, policy ID: %d", err, policyID) + t.Errorf("Error occured in GetRepJobByPolicy: %v, policy ID: %d", err, policyID) return } if len(jobs) != 1 { - log.Errorf("Unexpected length of jobs, expected: 1, in fact: %d", len(jobs)) + t.Errorf("Unexpected length of jobs, expected: 1, in fact: %d", len(jobs)) return } if jobs[0].ID != jobID { - log.Errorf("Unexpected job ID in the result, expected: %d, in fact: %d", jobID, jobs[0].ID) + t.Errorf("Unexpected job ID in the result, expected: %d, in fact: %d", jobID, jobs[0].ID) + return + } +} + +func TestFilterRepJobs(t *testing.T) { + jobs, err := FilterRepJobs(policyID, "", "", nil, nil, 1000) + if err != nil { + t.Errorf("Error occured in FilterRepJobs: %v, policy ID: %d", err, policyID) + return + } + if len(jobs) != 1 { + t.Errorf("Unexpected length of jobs, expected: 1, in fact: %d", len(jobs)) + return + } + if jobs[0].ID != jobID { + t.Errorf("Unexpected job ID in the result, expected: %d, in fact: %d", jobID, jobs[0].ID) return } } @@ -1179,22 +1195,6 @@ func TestDeleteRepJob(t *testing.T) { } } -func TestFilterRepJobs(t *testing.T) { - jobs, err := FilterRepJobs(policyID, "", "", nil, nil, 1000) - if err != nil { - log.Errorf("Error occured in FilterRepJobs: %v, policy ID: %d", err, policyID) - return - } - if len(jobs) != 1 { - log.Errorf("Unexpected length of jobs, expected: 1, in fact: %d", len(jobs)) - return - } - if jobs[0].ID != jobID { - log.Errorf("Unexpected job ID in the result, expected: %d, in fact: %d", jobID, jobs[0].ID) - return - } -} - func TestGetRepoJobToStop(t *testing.T) { jobs := [...]models.RepJob{ models.RepJob{ @@ -1265,7 +1265,7 @@ func TestDeleteRepTarget(t *testing.T) { func TestFilterRepPolicies(t *testing.T) { _, err := FilterRepPolicies("name", 0) if err != nil { - t.Fatalf("failed to filter policy") + t.Fatalf("failed to filter policy: %v", err) } } diff --git a/dao/replication_job.go b/dao/replication_job.go index f0d4782cd..adc47391c 100644 --- a/dao/replication_job.go +++ b/dao/replication_job.go @@ -150,10 +150,13 @@ func FilterRepPolicies(name string, projectID int64) ([]*models.RepPolicy, error sql := `select rp.id, rp.project_id, p.name as project_name, rp.target_id, rt.name as target_name, rp.name, rp.enabled, rp.description, - rp.cron_str, rp.start_time, rp.creation_time, rp.update_time + rp.cron_str, rp.start_time, rp.creation_time, rp.update_time, + count(rj.status) as error_job_count from replication_policy rp - join project p on rp.project_id=p.project_id - join replication_target rt on rp.target_id=rt.id ` + left join project p on rp.project_id=p.project_id + left join replication_target rt on rp.target_id=rt.id + left join replication_job rj on rp.id=rj.policy_id and (rj.status="error" + or rj.status="retrying") ` if len(name) != 0 && projectID != 0 { sql += `where rp.name like ? and rp.project_id = ? ` @@ -167,7 +170,7 @@ func FilterRepPolicies(name string, projectID int64) ([]*models.RepPolicy, error args = append(args, projectID) } - sql += `order by rp.creation_time` + sql += `group by rp.id order by rp.creation_time` var policies []*models.RepPolicy if _, err := o.Raw(sql, args).QueryRows(&policies); err != nil { diff --git a/models/replication_job.go b/models/replication_job.go index 59c2ad375..8d847f9b0 100644 --- a/models/replication_job.go +++ b/models/replication_job.go @@ -56,12 +56,13 @@ type RepPolicy struct { TargetName string `json:"target_name,omitempty"` Name string `orm:"column(name)" json:"name"` // Target RepTarget `orm:"-" json:"target"` - Enabled int `orm:"column(enabled)" json:"enabled"` - Description string `orm:"column(description)" json:"description"` - CronStr string `orm:"column(cron_str)" json:"cron_str"` - StartTime time.Time `orm:"column(start_time)" json:"start_time"` - CreationTime time.Time `orm:"column(creation_time);auto_now_add" json:"creation_time"` - UpdateTime time.Time `orm:"column(update_time);auto_now" json:"update_time"` + Enabled int `orm:"column(enabled)" json:"enabled"` + Description string `orm:"column(description)" json:"description"` + CronStr string `orm:"column(cron_str)" json:"cron_str"` + StartTime time.Time `orm:"column(start_time)" json:"start_time"` + CreationTime time.Time `orm:"column(creation_time);auto_now_add" json:"creation_time"` + UpdateTime time.Time `orm:"column(update_time);auto_now" json:"update_time"` + ErrorJobCount int `json:"error_job_count"` } // Valid ...