mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
cb3fa7c293
* add sonarqube measurements * fetch measurements from API * add api for fetching issue counts * add debug outputs * add further severities * log number of issues * report failure * expose method to send request * Fixed what was broken. * add debug output * wip * correct opaque property * push client handling to apiClient.go * use correct API URL * correct log outputs * remove logging * remove option validation * extend search options * restructure * rename api client file * simplify client usage * simplify issue client * write sonar values to influx * extract issue service * reorder imports * add sonar integration test * allow unknown fields * add test case * add test case * remove * fix * Update http.go * Apply suggestions from code review * Update cmd/sonarExecuteScan.go * rework test cases * use explicit returns * add task service * add waitfortask * fix typo * remove fixme * expose poll interval * rename test cases * add test cases * use newAPIClient method * use waitForTask * rename services * finalize code * handle error * move defer * move types * add test case * use http.status... * add test case * expose api endpoint names * extract api client * adjust test cases * Update integration-tests-pr.yaml * Update integration-tests.yaml * improve require message * Update integration-tests-pr.yaml * Update integration-tests-pr.yaml
105 lines
3.0 KiB
Go
105 lines
3.0 KiB
Go
package sonar
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
sonargo "github.com/magicsong/sonargo/sonar"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// EndpointIssuesSearch API endpoint for https://sonarcloud.io/web_api/api/issues/search
|
|
const EndpointIssuesSearch = "issues/search"
|
|
|
|
// IssueService ...
|
|
type IssueService struct {
|
|
Organization string
|
|
Project string
|
|
Branch string
|
|
PullRequest string
|
|
apiClient *Requester
|
|
}
|
|
|
|
// SearchIssues ...
|
|
func (service *IssueService) SearchIssues(options *IssuesSearchOption) (*sonargo.IssuesSearchObject, *http.Response, error) {
|
|
request, err := service.apiClient.create("GET", EndpointIssuesSearch, options)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
// use custom HTTP client to send request
|
|
response, err := service.apiClient.send(request)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
// reuse response verrification from sonargo
|
|
err = sonargo.CheckResponse(response)
|
|
if err != nil {
|
|
return nil, response, err
|
|
}
|
|
// decode JSON response
|
|
result := new(sonargo.IssuesSearchObject)
|
|
err = service.apiClient.decode(response, result)
|
|
if err != nil {
|
|
return nil, response, err
|
|
}
|
|
return result, response, nil
|
|
}
|
|
|
|
func (service *IssueService) getIssueCount(severity issueSeverity) (int, error) {
|
|
options := &IssuesSearchOption{
|
|
ComponentKeys: service.Project,
|
|
Severities: severity.ToString(),
|
|
Resolved: "false",
|
|
Ps: "1",
|
|
}
|
|
if len(service.Branch) > 0 {
|
|
options.Branch = service.Branch
|
|
}
|
|
if len(service.Organization) > 0 {
|
|
options.Organization = service.Organization
|
|
}
|
|
if len(service.PullRequest) > 0 {
|
|
options.PullRequest = service.PullRequest
|
|
}
|
|
result, _, err := service.SearchIssues(options)
|
|
if err != nil {
|
|
return -1, errors.Wrapf(err, "failed to fetch the numer of '%s' issues", severity)
|
|
}
|
|
return result.Total, nil
|
|
}
|
|
|
|
// GetNumberOfBlockerIssues returns the number of issue with BLOCKER severity.
|
|
func (service *IssueService) GetNumberOfBlockerIssues() (int, error) {
|
|
return service.getIssueCount(blocker)
|
|
}
|
|
|
|
// GetNumberOfCriticalIssues returns the number of issue with CRITICAL severity.
|
|
func (service *IssueService) GetNumberOfCriticalIssues() (int, error) {
|
|
return service.getIssueCount(critical)
|
|
}
|
|
|
|
// GetNumberOfMajorIssues returns the number of issue with MAJOR severity.
|
|
func (service *IssueService) GetNumberOfMajorIssues() (int, error) {
|
|
return service.getIssueCount(major)
|
|
}
|
|
|
|
// GetNumberOfMinorIssues returns the number of issue with MINOR severity.
|
|
func (service *IssueService) GetNumberOfMinorIssues() (int, error) {
|
|
return service.getIssueCount(minor)
|
|
}
|
|
|
|
// GetNumberOfInfoIssues returns the number of issue with INFO severity.
|
|
func (service *IssueService) GetNumberOfInfoIssues() (int, error) {
|
|
return service.getIssueCount(info)
|
|
}
|
|
|
|
// NewIssuesService returns a new instance of a service for the issues API endpoint.
|
|
func NewIssuesService(host, token, project, organization, branch, pullRequest string, client Sender) *IssueService {
|
|
return &IssueService{
|
|
Organization: organization,
|
|
Project: project,
|
|
Branch: branch,
|
|
PullRequest: pullRequest,
|
|
apiClient: NewAPIClient(host, token, client),
|
|
}
|
|
}
|