From f016dd113c7ea729ff747d6e2cafc8d8f5e06c22 Mon Sep 17 00:00:00 2001 From: Tan Jiang Date: Wed, 14 Jun 2017 21:02:59 +0800 Subject: [PATCH] GET tags api includes scan overview --- src/common/models/scan_job.go | 6 +++--- src/ui/api/repository.go | 31 +++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/common/models/scan_job.go b/src/common/models/scan_job.go index 343ffb233..207eae53a 100644 --- a/src/common/models/scan_job.go +++ b/src/common/models/scan_job.go @@ -58,10 +58,10 @@ type ImgScanOverview struct { JobID int64 `orm:"column(scan_job_id)" json:"job_id"` Sev int `orm:"column(severity)" json:"severity"` CompOverviewStr string `orm:"column(components_overview)" json:"-"` - CompOverview *ComponentsOverview `orm:"-" json:"components"` + CompOverview *ComponentsOverview `orm:"-" json:"components,omitempty"` DetailsKey string `orm:"column(details_key)" json:"details_key"` - 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"` + CreationTime time.Time `orm:"column(creation_time);auto_now_add" json:"creation_time,omitempty"` + UpdateTime time.Time `orm:"column(update_time);auto_now" json:"update_time,omitempty"` } //TableName ... diff --git a/src/ui/api/repository.go b/src/ui/api/repository.go index 0c5aa8244..98cc7bee0 100644 --- a/src/ui/api/repository.go +++ b/src/ui/api/repository.go @@ -27,10 +27,10 @@ import ( "github.com/vmware/harbor/src/common/dao" "github.com/vmware/harbor/src/common/models" "github.com/vmware/harbor/src/common/utils" + registry_error "github.com/vmware/harbor/src/common/utils/error" "github.com/vmware/harbor/src/common/utils/log" "github.com/vmware/harbor/src/common/utils/notary" "github.com/vmware/harbor/src/common/utils/registry" - registry_error "github.com/vmware/harbor/src/common/utils/error" "github.com/vmware/harbor/src/ui/config" ) @@ -64,7 +64,8 @@ type tag struct { type tagResp struct { tag - Signature *notary.Target `json:"signature"` + Signature *notary.Target `json:"signature"` + ScanOverview *models.ImgScanOverview `json:"scan_overview,omitempty"` } type manifestResp struct { @@ -353,6 +354,8 @@ func (ra *RepositoryAPI) GetTags() { tagResp := &tagResp{ tag: *tag, } + //TODO: only when deployed with Clair... + tagResp.ScanOverview = getScanOverview(tag.Digest, tag.Name) // compare both digest and tag if signature, ok := signatures[tag.Digest]; ok { @@ -636,3 +639,27 @@ func getSignatures(repository, username string) (map[string]*notary.Target, erro return signatures, nil } + +//will return nil when it failed to get data. The parm "tag" is for logging only. +func getScanOverview(digest string, tag string) *models.ImgScanOverview { + data, err := dao.GetImgScanOverview(digest) + if err != nil { + log.Errorf("Failed to get scan result for tag:%s, digest: %s, error: %v", tag, digest, err) + } + if data == nil { + return nil + } + job, err := dao.GetScanJob(data.JobID) + if err != nil { + log.Errorf("Failed to get scan job for id:%d, error: %v", data.JobID, err) + return nil + } + data.Status = job.Status + if data.Status != models.JobFinished { + log.Debugf("Unsetting vulnerable related historical values, job status: %s", data.Status) + data.Sev = 0 + data.CompOverview = nil + data.DetailsKey = "" + } + return data +}