From ffd58c0f2dcbd0bcfe3a24125bcc489330133ee0 Mon Sep 17 00:00:00 2001 From: wemeya Date: Wed, 1 Jun 2016 17:01:43 +0800 Subject: [PATCH] add api to list top 10 repos --- api/repository.go | 11 +++++++++++ dao/accesslog.go | 15 +++++++++++++++ ui/router.go | 1 + 3 files changed, 27 insertions(+) diff --git a/api/repository.go b/api/repository.go index a355d73..bb6a7e0 100644 --- a/api/repository.go +++ b/api/repository.go @@ -288,3 +288,14 @@ func (ra *RepositoryAPI) getUsername() (string, error) { return "", nil } + +//getTopTenRepos handles request GET /api/repositories/toprepos +func (ra *RepositoryAPI) GetTopTenRepos() { + repos, err := dao.GetTop10Repos() + if err != nil { + log.Errorf("error occured in get top 10 repos: v%", err) + ra.CustomAbort(http.StatusInternalServerError, "internal server error") + } + ra.Data["json"] = repos + ra.ServeJSON() +} diff --git a/dao/accesslog.go b/dao/accesslog.go index f50ad1f..5ab5777 100644 --- a/dao/accesslog.go +++ b/dao/accesslog.go @@ -18,6 +18,8 @@ package dao import ( "strings" + "github.com/astaxie/beego/orm" + "github.com/vmware/harbor/models" "github.com/vmware/harbor/utils/log" ) @@ -145,3 +147,16 @@ func GetRecentLogs(userID, linesNum int, startTime, endTime string) ([]models.Ac } return recentLogList, nil } + +//GetTop10Repos return top 10 accessed public repos +func GetTop10Repos() ([]orm.ParamsList, error) { + + o := GetOrmer() + sql := "select log_id, access_log.user_id, access_log.project_id, repo_name, repo_tag, GUID, operation, op_time, COUNT(repo_name) as access_count from access_log left join project on access_log.project_id=project.project_id where project.public=1 and access_log.operation<>'create' group by repo_name order by access_count desc limit 10" + var lists []orm.ParamsList + _, err := o.Raw(sql).ValuesList(&lists) + if err != nil { + return nil, err + } + return lists, nil +} diff --git a/ui/router.go b/ui/router.go index c110e22..e54851e 100644 --- a/ui/router.go +++ b/ui/router.go @@ -64,6 +64,7 @@ func initRouters() { beego.Router("/api/repositories", &api.RepositoryAPI{}) beego.Router("/api/repositories/tags", &api.RepositoryAPI{}, "get:GetTags") beego.Router("/api/repositories/manifests", &api.RepositoryAPI{}, "get:GetManifests") + beego.Router("/api/repositories/toprepos", &api.RepositoryAPI{}, "get:GetTopTenRepos") beego.Router("api/logs", &api.LogAPI{}) //external service that hosted on harbor process: