Merge pull request #349 from ywk253100/new_ui

filter jobs by policy ID and repository
This commit is contained in:
Wenkai Yin 2016-06-17 11:55:45 +08:00 committed by GitHub
commit 38388b25cb
4 changed files with 91 additions and 34 deletions

View File

@ -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
} }

View File

@ -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{

View File

@ -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

View File

@ -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")