diff --git a/src/chartserver/client.go b/src/chartserver/client.go index e7e1fb646..1ab153570 100644 --- a/src/chartserver/client.go +++ b/src/chartserver/client.go @@ -1,16 +1,16 @@ package chartserver import ( - "errors" "fmt" - commonhttp "github.com/goharbor/harbor/src/common/http" - hlog "github.com/goharbor/harbor/src/common/utils/log" "io" "io/ioutil" "net/http" "net/url" "strings" "time" + + commonhttp "github.com/goharbor/harbor/src/common/http" + "github.com/pkg/errors" ) const ( @@ -49,11 +49,13 @@ func NewChartClient(credential *Credential) *ChartClient { // Create http client func (cc *ChartClient) GetContent(addr string) ([]byte, error) { response, err := cc.sendRequest(addr, http.MethodGet, nil) if err != nil { + err = errors.Wrap(err, "get content failed") return nil, err } content, err := ioutil.ReadAll(response.Body) if err != nil { + err = errors.Wrap(err, "Read response body error") return nil, err } defer response.Body.Close() @@ -61,6 +63,7 @@ func (cc *ChartClient) GetContent(addr string) ([]byte, error) { if response.StatusCode != http.StatusOK { text, err := extractError(content) if err != nil { + err = errors.Wrap(err, "Extract content error failed") return nil, err } return nil, &commonhttp.Error{ @@ -106,7 +109,8 @@ func (cc *ChartClient) sendRequest(addr string, method string, body io.Reader) ( fullURI, err := url.Parse(addr) if err != nil { - return nil, fmt.Errorf("invalid url: %s", err.Error()) + err = errors.Wrap(err, "Invalid url") + return nil, err } request, err := http.NewRequest(method, addr, body) @@ -121,7 +125,7 @@ func (cc *ChartClient) sendRequest(addr string, method string, body io.Reader) ( response, err := cc.httpClient.Do(request) if err != nil { - hlog.Errorf("%s '%s' failed with error: %s", method, fullURI.Path, err) + err = errors.Wrap(err, fmt.Sprintf("send request %s %s failed", method, fullURI.Path)) return nil, err } diff --git a/src/chartserver/handler_manipulation.go b/src/chartserver/handler_manipulation.go index 9250f2476..bcec47731 100644 --- a/src/chartserver/handler_manipulation.go +++ b/src/chartserver/handler_manipulation.go @@ -2,19 +2,17 @@ package chartserver import ( "encoding/json" - "errors" "fmt" + "os" "strings" "github.com/ghodss/yaml" + "github.com/goharbor/harbor/src/common/utils/log" "github.com/goharbor/harbor/src/replication" rep_event "github.com/goharbor/harbor/src/replication/event" "github.com/goharbor/harbor/src/replication/model" + "github.com/pkg/errors" helm_repo "k8s.io/helm/pkg/repo" - - "os" - - "github.com/goharbor/harbor/src/common/utils/log" ) // ListCharts gets the chart list under the namespace diff --git a/src/common/api/base.go b/src/common/api/base.go index fba8c3621..928c37e08 100644 --- a/src/common/api/base.go +++ b/src/common/api/base.go @@ -20,12 +20,11 @@ import ( "net/http" "strconv" + "github.com/astaxie/beego" "github.com/astaxie/beego/validation" commonhttp "github.com/goharbor/harbor/src/common/http" "github.com/goharbor/harbor/src/common/utils/log" - - "errors" - "github.com/astaxie/beego" + "github.com/pkg/errors" ) const ( diff --git a/src/core/api/base.go b/src/core/api/base.go index bea127d0b..a3f3de4d3 100644 --- a/src/core/api/base.go +++ b/src/core/api/base.go @@ -15,9 +15,9 @@ package api import ( + "errors" "net/http" - "errors" "github.com/ghodss/yaml" "github.com/goharbor/harbor/src/common/api" "github.com/goharbor/harbor/src/common/security" diff --git a/src/core/api/project.go b/src/core/api/project.go index aaf0f2e02..e1441472d 100644 --- a/src/core/api/project.go +++ b/src/core/api/project.go @@ -18,6 +18,8 @@ import ( "fmt" "net/http" "regexp" + "strconv" + "time" "github.com/goharbor/harbor/src/common" "github.com/goharbor/harbor/src/common/dao" @@ -27,10 +29,7 @@ import ( errutil "github.com/goharbor/harbor/src/common/utils/error" "github.com/goharbor/harbor/src/common/utils/log" "github.com/goharbor/harbor/src/core/config" - - "errors" - "strconv" - "time" + "github.com/pkg/errors" ) type deletableResp struct { @@ -231,7 +230,10 @@ func (p *ProjectAPI) Get() { return } - p.populateProperties(p.project) + err := p.populateProperties(p.project) + if err != nil { + log.Errorf("populate project poroperties failed with : %+v", err) + } p.Data["json"] = p.project p.ServeJSON() @@ -401,15 +403,17 @@ func (p *ProjectAPI) List() { } for _, project := range result.Projects { - p.populateProperties(project) + err = p.populateProperties(project) + if err != nil { + log.Errorf("populate project properties failed %v", err) + } } - p.SetPaginationHeader(result.Total, page, size) p.Data["json"] = result.Projects p.ServeJSON() } -func (p *ProjectAPI) populateProperties(project *models.Project) { +func (p *ProjectAPI) populateProperties(project *models.Project) error { if p.SecurityCtx.IsAuthenticated() { roles := p.SecurityCtx.GetProjectRoles(project.ProjectID) if len(roles) != 0 { @@ -426,9 +430,8 @@ func (p *ProjectAPI) populateProperties(project *models.Project) { ProjectIDs: []int64{project.ProjectID}, }) if err != nil { - log.Errorf("failed to get total of repositories of project %d: %v", project.ProjectID, err) - p.SendInternalServerError(errors.New("")) - return + err = errors.Wrap(err, fmt.Sprintf("get repo count of project %d failed", project.ProjectID)) + return err } project.RepoCount = total @@ -437,13 +440,13 @@ func (p *ProjectAPI) populateProperties(project *models.Project) { if config.WithChartMuseum() { count, err := chartController.GetCountOfCharts([]string{project.Name}) if err != nil { - log.Errorf("Failed to get total of charts under project %s: %v", project.Name, err) - p.SendInternalServerError(errors.New("")) - return + err = errors.Wrap(err, fmt.Sprintf("get chart count of project %d failed", project.ProjectID)) + return err } project.ChartCount = count } + return nil } // Put ...