mirror of
https://github.com/goharbor/harbor.git
synced 2024-09-29 22:07:32 +02:00
Merge pull request #445 from ywk253100/filter_job_by_time
filter jobs by time
This commit is contained in:
commit
fa7e3b4666
@ -21,6 +21,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/vmware/harbor/dao"
|
"github.com/vmware/harbor/dao"
|
||||||
"github.com/vmware/harbor/models"
|
"github.com/vmware/harbor/models"
|
||||||
@ -59,6 +60,7 @@ func (ra *RepJobAPI) Prepare() {
|
|||||||
func (ra *RepJobAPI) List() {
|
func (ra *RepJobAPI) List() {
|
||||||
var policyID int64
|
var policyID int64
|
||||||
var repository, status string
|
var repository, status string
|
||||||
|
var startTime, endTime *time.Time
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
policyIDStr := ra.GetString("policy_id")
|
policyIDStr := ra.GetString("policy_id")
|
||||||
@ -69,10 +71,36 @@ func (ra *RepJobAPI) List() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
endTimeStr := ra.GetString("end_time")
|
||||||
|
if len(endTimeStr) != 0 {
|
||||||
|
i, err := strconv.ParseInt(endTimeStr, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
ra.CustomAbort(http.StatusBadRequest, "invalid end_time")
|
||||||
|
}
|
||||||
|
t := time.Unix(i, 0)
|
||||||
|
endTime = &t
|
||||||
|
}
|
||||||
|
|
||||||
|
startTimeStr := ra.GetString("start_time")
|
||||||
|
if len(startTimeStr) != 0 {
|
||||||
|
i, err := strconv.ParseInt(startTimeStr, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
ra.CustomAbort(http.StatusBadRequest, "invalid start_time")
|
||||||
|
}
|
||||||
|
t := time.Unix(i, 0)
|
||||||
|
startTime = &t
|
||||||
|
}
|
||||||
|
|
||||||
|
if startTime == nil && endTime == nil {
|
||||||
|
// if start_time and end_time are both null, list jobs of last 10 days
|
||||||
|
t := time.Now().UTC().AddDate(0, 0, -10)
|
||||||
|
startTime = &t
|
||||||
|
}
|
||||||
|
|
||||||
repository = ra.GetString("repository")
|
repository = ra.GetString("repository")
|
||||||
status = ra.GetString("status")
|
status = ra.GetString("status")
|
||||||
|
|
||||||
jobs, err := dao.FilterRepJobs(policyID, repository, status)
|
jobs, err := dao.FilterRepJobs(policyID, repository, status, startTime, endTime, 1000)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("failed to filter jobs according policy ID %d, repository %s, status %s: %v", policyID, repository, status, err)
|
log.Errorf("failed to filter jobs according policy ID %d, repository %s, status %s: %v", policyID, repository, status, err)
|
||||||
ra.RenderError(http.StatusInternalServerError, "Failed to query job")
|
ra.RenderError(http.StatusInternalServerError, "Failed to query job")
|
||||||
|
@ -1180,7 +1180,7 @@ func TestDeleteRepJob(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestFilterRepJobs(t *testing.T) {
|
func TestFilterRepJobs(t *testing.T) {
|
||||||
jobs, err := FilterRepJobs(policyID, "", "")
|
jobs, err := FilterRepJobs(policyID, "", "", nil, nil, 1000)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Error occured in FilterRepJobs: %v, policy ID: %d", err, policyID)
|
log.Errorf("Error occured in FilterRepJobs: %v, policy ID: %d", err, policyID)
|
||||||
return
|
return
|
||||||
|
@ -311,7 +311,8 @@ func GetRepJobByPolicy(policyID int64) ([]*models.RepJob, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FilterRepJobs filters jobs by repo and policy ID
|
// FilterRepJobs filters jobs by repo and policy ID
|
||||||
func FilterRepJobs(policyID int64, repository, status string) ([]*models.RepJob, error) {
|
func FilterRepJobs(policyID int64, repository, status string, startTime,
|
||||||
|
endTime *time.Time, limit int) ([]*models.RepJob, error) {
|
||||||
o := GetOrmer()
|
o := GetOrmer()
|
||||||
|
|
||||||
qs := o.QueryTable(new(models.RepJob))
|
qs := o.QueryTable(new(models.RepJob))
|
||||||
@ -324,6 +325,21 @@ func FilterRepJobs(policyID int64, repository, status string) ([]*models.RepJob,
|
|||||||
if len(status) != 0 {
|
if len(status) != 0 {
|
||||||
qs = qs.Filter("Status__icontains", status)
|
qs = qs.Filter("Status__icontains", status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if startTime != nil {
|
||||||
|
fmt.Printf("%v\n", startTime)
|
||||||
|
qs = qs.Filter("CreationTime__gte", startTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
if endTime != nil {
|
||||||
|
fmt.Printf("%v\n", endTime)
|
||||||
|
qs = qs.Filter("CreationTime__lte", endTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
if limit != 0 {
|
||||||
|
qs = qs.Limit(limit)
|
||||||
|
}
|
||||||
|
|
||||||
qs = qs.OrderBy("-CreationTime")
|
qs = qs.OrderBy("-CreationTime")
|
||||||
|
|
||||||
var jobs []*models.RepJob
|
var jobs []*models.RepJob
|
||||||
|
Loading…
Reference in New Issue
Block a user