mirror of
https://github.com/goharbor/harbor.git
synced 2025-01-05 15:38:20 +01:00
Merge pull request #349 from ywk253100/new_ui
filter jobs by policy ID and repository
This commit is contained in:
commit
38388b25cb
@ -1,16 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package api
|
package api
|
||||||
@ -55,17 +55,25 @@ func (ra *RepJobAPI) Prepare() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get gets all the jobs according to the policy
|
// List filters jobs according to the policy and repository
|
||||||
func (ra *RepJobAPI) Get() {
|
func (ra *RepJobAPI) List() {
|
||||||
policyID, err := ra.GetInt64("policy_id")
|
var policyID int64
|
||||||
if err != nil {
|
var repository string
|
||||||
log.Errorf("Failed to get policy id, error: %v", err)
|
var err error
|
||||||
ra.RenderError(http.StatusBadRequest, "Invalid policy id")
|
|
||||||
return
|
policyIDStr := ra.GetString("policy_id")
|
||||||
|
if len(policyIDStr) != 0 {
|
||||||
|
policyID, err = strconv.ParseInt(policyIDStr, 10, 64)
|
||||||
|
if err != nil || policyID <= 0 {
|
||||||
|
ra.CustomAbort(http.StatusBadRequest, fmt.Sprintf("invalid policy ID: %s", policyIDStr))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
jobs, err := dao.GetRepJobByPolicy(policyID)
|
|
||||||
|
repository = ra.GetString("repository")
|
||||||
|
|
||||||
|
jobs, err := dao.FilterRepJobs(repository, policyID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to query job from db, error: %v", err)
|
log.Errorf("failed to filter jobs according policy ID %d and repository %s: %v", policyID, repository, err)
|
||||||
ra.RenderError(http.StatusInternalServerError, "Failed to query job")
|
ra.RenderError(http.StatusInternalServerError, "Failed to query job")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -1107,6 +1107,22 @@ func TestGetRepJobByPolicy(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFilterRepJobs(t *testing.T) {
|
||||||
|
jobs, err := FilterRepJobs("", policyID)
|
||||||
|
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) {
|
func TestGetRepoJobToStop(t *testing.T) {
|
||||||
jobs := [...]models.RepJob{
|
jobs := [...]models.RepJob{
|
||||||
models.RepJob{
|
models.RepJob{
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dao
|
package dao
|
||||||
@ -273,6 +273,38 @@ func GetRepJobByPolicy(policyID int64) ([]*models.RepJob, error) {
|
|||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FilterRepJobs filters jobs by repo and policy ID
|
||||||
|
func FilterRepJobs(repo string, policyID int64) ([]*models.RepJob, error) {
|
||||||
|
o := GetOrmer()
|
||||||
|
|
||||||
|
var args []interface{}
|
||||||
|
|
||||||
|
sql := `select * from replication_job `
|
||||||
|
|
||||||
|
if len(repo) != 0 && policyID != 0 {
|
||||||
|
sql += `where repository like ? and policy_id = ? `
|
||||||
|
args = append(args, "%"+repo+"%")
|
||||||
|
args = append(args, policyID)
|
||||||
|
} else if len(repo) != 0 {
|
||||||
|
sql += `where repository like ? `
|
||||||
|
args = append(args, "%"+repo+"%")
|
||||||
|
} else if policyID != 0 {
|
||||||
|
sql += `where policy_id = ? `
|
||||||
|
args = append(args, policyID)
|
||||||
|
}
|
||||||
|
|
||||||
|
sql += `order by creation_time`
|
||||||
|
|
||||||
|
var jobs []*models.RepJob
|
||||||
|
if _, err := o.Raw(sql, args).QueryRows(&jobs); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
genTagListForJob(jobs...)
|
||||||
|
|
||||||
|
return jobs, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetRepJobToStop get jobs that are possibly being handled by workers of a certain policy.
|
// GetRepJobToStop get jobs that are possibly being handled by workers of a certain policy.
|
||||||
func GetRepJobToStop(policyID int64) ([]*models.RepJob, error) {
|
func GetRepJobToStop(policyID int64) ([]*models.RepJob, error) {
|
||||||
var res []*models.RepJob
|
var res []*models.RepJob
|
||||||
|
@ -66,7 +66,8 @@ func initRouters() {
|
|||||||
beego.Router("/api/repositories", &api.RepositoryAPI{})
|
beego.Router("/api/repositories", &api.RepositoryAPI{})
|
||||||
beego.Router("/api/repositories/tags", &api.RepositoryAPI{}, "get:GetTags")
|
beego.Router("/api/repositories/tags", &api.RepositoryAPI{}, "get:GetTags")
|
||||||
beego.Router("/api/repositories/manifests", &api.RepositoryAPI{}, "get:GetManifests")
|
beego.Router("/api/repositories/manifests", &api.RepositoryAPI{}, "get:GetManifests")
|
||||||
beego.Router("/api/jobs/replication/?:id([0-9]+)", &api.RepJobAPI{})
|
beego.Router("/api/jobs/replication/", &api.RepJobAPI{}, "get:List")
|
||||||
|
beego.Router("/api/jobs/replication/:id([0-9]+)", &api.RepJobAPI{})
|
||||||
beego.Router("/api/jobs/replication/:id([0-9]+)/log", &api.RepJobAPI{}, "get:GetLog")
|
beego.Router("/api/jobs/replication/:id([0-9]+)/log", &api.RepJobAPI{}, "get:GetLog")
|
||||||
beego.Router("/api/policies/replication/:id([0-9]+)", &api.RepPolicyAPI{})
|
beego.Router("/api/policies/replication/:id([0-9]+)", &api.RepPolicyAPI{})
|
||||||
beego.Router("/api/policies/replication", &api.RepPolicyAPI{}, "get:List")
|
beego.Router("/api/policies/replication", &api.RepPolicyAPI{}, "get:List")
|
||||||
|
Loading…
Reference in New Issue
Block a user