You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by ab...@apache.org on 2023/02/08 07:53:14 UTC

[incubator-devlake] branch main updated: feat(sonarqube): add hotspot convertor (#4358)

This is an automated email from the ASF dual-hosted git repository.

abeizn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 65e3149ba feat(sonarqube): add hotspot convertor (#4358)
65e3149ba is described below

commit 65e3149bab734ea37da6f8f1198f21dd6604155a
Author: Warren Chen <yi...@merico.dev>
AuthorDate: Wed Feb 8 15:53:08 2023 +0800

    feat(sonarqube): add hotspot convertor (#4358)
---
 .../domainlayer/securitytesting/st_issues.go       | 46 ++++++++---------
 backend/plugins/sonarqube/impl/impl.go             |  1 +
 .../migrationscripts/20230111_add_init_tables.go   |  2 +-
 .../migrationscripts/archived/sonarqube_hotspot.go |  2 +-
 .../plugins/sonarqube/models/sonarqube_hotspot.go  |  2 +-
 .../{issues_convertor.go => hotspots_convertor.go} | 59 +++++++++-------------
 .../plugins/sonarqube/tasks/issues_convertor.go    |  2 +-
 7 files changed, 53 insertions(+), 61 deletions(-)

diff --git a/backend/core/models/domainlayer/securitytesting/st_issues.go b/backend/core/models/domainlayer/securitytesting/st_issues.go
index 952b33d10..1d99451c4 100644
--- a/backend/core/models/domainlayer/securitytesting/st_issues.go
+++ b/backend/core/models/domainlayer/securitytesting/st_issues.go
@@ -24,29 +24,29 @@ import (
 
 type StIssue struct {
 	domainlayer.DomainEntity
-	BatchId      string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
-	Key          string           `json:"key" gorm:"primaryKey"`
-	Rule         string           `json:"rule" gorm:"type:varchar(255)"`
-	Severity     string           `json:"severity" gorm:"type:varchar(255)"`
-	Component    string           `json:"component" gorm:"type:varchar(255)"`
-	Project      string           `json:"project" gorm:"type:varchar(255)"`
-	Line         int              `json:"line"`
-	Status       string           `json:"status" gorm:"type:varchar(255)"`
-	Message      string           `json:"message"`
-	Debt         string           `json:"debt" gorm:"type:varchar(255)"`
-	Effort       string           `json:"effort" gorm:"type:varchar(255)"`
-	CommitAuthorEmail       string           `json:"author" gorm:"type:varchar(255)"`
-	Assignee     string           `json:"assignee" gorm:"type:varchar(255)"`
-	Hash         string           `json:"hash" gorm:"type:varchar(255)"`
-	Tags         string           `json:"tags" gorm:"type:varchar(255)"`
-	Type         string           `json:"type" gorm:"type:varchar(255)"`
-	Scope        string           `json:"scope" gorm:"type:varchar(255)"`
-	StartLine    int              `json:"startLine"`
-	EndLine      int              `json:"endLine"`
-	StartOffset  int              `json:"startOffset"`
-	EndOffset    int              `json:"endOffset"`
-	CreationDate *api.Iso8601Time `json:"creationDate"`
-	UpdateDate   *api.Iso8601Time `json:"updateDate"`
+	BatchId           string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
+	Key               string           `json:"key" gorm:"primaryKey"`
+	Rule              string           `json:"rule" gorm:"type:varchar(255)"`
+	Severity          string           `json:"severity" gorm:"type:varchar(255)"`
+	Component         string           `json:"component" gorm:"type:varchar(255)"`
+	Project           string           `json:"project" gorm:"type:varchar(255)"`
+	Line              int              `json:"line"`
+	Status            string           `json:"status" gorm:"type:varchar(255)"`
+	Message           string           `json:"message"`
+	Debt              string           `json:"debt" gorm:"type:varchar(255)"`
+	Effort            string           `json:"effort" gorm:"type:varchar(255)"`
+	CommitAuthorEmail string           `json:"author" gorm:"type:varchar(255)"`
+	Assignee          string           `json:"assignee" gorm:"type:varchar(255)"`
+	Hash              string           `json:"hash" gorm:"type:varchar(255)"`
+	Tags              string           `json:"tags" gorm:"type:varchar(255)"`
+	Type              string           `json:"type" gorm:"type:varchar(255)"`
+	Scope             string           `json:"scope" gorm:"type:varchar(255)"`
+	StartLine         int              `json:"startLine"`
+	EndLine           int              `json:"endLine"`
+	StartOffset       int              `json:"startOffset"`
+	EndOffset         int              `json:"endOffset"`
+	CreationDate      *api.Iso8601Time `json:"creationDate"`
+	UpdateDate        *api.Iso8601Time `json:"updateDate"`
 }
 
 func (StIssue) TableName() string {
diff --git a/backend/plugins/sonarqube/impl/impl.go b/backend/plugins/sonarqube/impl/impl.go
index 010baa712..ce9d168b0 100644
--- a/backend/plugins/sonarqube/impl/impl.go
+++ b/backend/plugins/sonarqube/impl/impl.go
@@ -65,6 +65,7 @@ func (p Sonarqube) SubTaskMetas() []plugin.SubTaskMeta {
 		tasks.ExtractAccountsMeta,
 		tasks.ConvertProjectsMeta,
 		tasks.ConvertIssuesMeta,
+		tasks.ConvertHotspotsMeta,
 	}
 }
 
diff --git a/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go b/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
index b917af525..3bbc09ad6 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
@@ -40,7 +40,7 @@ func (*addInitTables) Up(basicRes context.BasicRes) errors.Error {
 }
 
 func (*addInitTables) Version() uint64 {
-	return 20230207220015
+	return 20230207220016
 }
 
 func (*addInitTables) Name() string {
diff --git a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
index db42c28d7..a94aeac94 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
@@ -24,7 +24,7 @@ import (
 
 type SonarqubeHotspot struct {
 	ConnectionId             uint64           `gorm:"primaryKey"`
-	IssueKey                 string           `json:"key" gorm:"primaryKey"`
+	Key                      string           `json:"key" gorm:"primaryKey"`
 	BatchId                  string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
 	Component                string           `json:"component" gorm:"index"`
 	Project                  string           `json:"project" gorm:"index"`
diff --git a/backend/plugins/sonarqube/models/sonarqube_hotspot.go b/backend/plugins/sonarqube/models/sonarqube_hotspot.go
index e048b01cc..b8d62a63d 100644
--- a/backend/plugins/sonarqube/models/sonarqube_hotspot.go
+++ b/backend/plugins/sonarqube/models/sonarqube_hotspot.go
@@ -24,7 +24,7 @@ import (
 
 type SonarqubeHotspot struct {
 	ConnectionId             uint64           `gorm:"primaryKey"`
-	IssueKey                 string           `json:"key" gorm:"primaryKey"`
+	Key                      string           `json:"key" gorm:"primaryKey"`
 	BatchId                  string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
 	Component                string           `json:"component" gorm:"index"`
 	Project                  string           `json:"project" gorm:"index"`
diff --git a/backend/plugins/sonarqube/tasks/issues_convertor.go b/backend/plugins/sonarqube/tasks/hotspots_convertor.go
similarity index 56%
copy from backend/plugins/sonarqube/tasks/issues_convertor.go
copy to backend/plugins/sonarqube/tasks/hotspots_convertor.go
index d30a92b9b..7367bffee 100644
--- a/backend/plugins/sonarqube/tasks/issues_convertor.go
+++ b/backend/plugins/sonarqube/tasks/hotspots_convertor.go
@@ -29,58 +29,49 @@ import (
 	"reflect"
 )
 
-var ConvertIssuesMeta = plugin.SubTaskMeta{
-	Name:             "convertIssues",
-	EntryPoint:       ConvertIssues,
+var ConvertHotspotsMeta = plugin.SubTaskMeta{
+	Name:             "convertHotspots",
+	EntryPoint:       ConvertHotspots,
 	EnabledByDefault: true,
-	Description:      "Convert tool layer table sonarqube_issues into  domain layer table issues",
+	Description:      "Convert tool layer table sonarqube_hotspots into  domain layer table st_hotspots",
 	DomainTypes:      []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
 }
 
-func ConvertIssues(taskCtx plugin.SubTaskContext) errors.Error {
+func ConvertHotspots(taskCtx plugin.SubTaskContext) errors.Error {
 	db := taskCtx.GetDal()
 	rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_PROJECTS_TABLE)
-	cursor, err := db.Cursor(dal.From(sonarqubeModels.SonarqubeIssue{}),
+	cursor, err := db.Cursor(dal.From(sonarqubeModels.SonarqubeHotspot{}),
 		dal.Where("connection_id = ? and project = ?", data.Options.ConnectionId, data.Options.ProjectKey))
 	if err != nil {
 		return err
 	}
 	defer cursor.Close()
 
-	accountIdGen := didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeIssue{})
+	accountIdGen := didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeHotspot{})
 	converter, err := api.NewDataConverter(api.DataConverterArgs{
-		InputRowType:       reflect.TypeOf(sonarqubeModels.SonarqubeIssue{}),
+		InputRowType:       reflect.TypeOf(sonarqubeModels.SonarqubeHotspot{}),
 		Input:              cursor,
 		RawDataSubTaskArgs: *rawDataSubTaskArgs,
 		Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
-			sonarqubeIssue := inputRow.(*sonarqubeModels.SonarqubeIssue)
-			domainIssue := &securitytesting.StIssue{
-				DomainEntity:      domainlayer.DomainEntity{Id: accountIdGen.Generate(data.Options.ConnectionId, sonarqubeIssue.Key)},
-				BatchId:           sonarqubeIssue.BatchId,
-				Key:               sonarqubeIssue.Key,
-				Rule:              sonarqubeIssue.Rule,
-				Severity:          sonarqubeIssue.Severity,
-				Component:         sonarqubeIssue.Component,
-				Project:           sonarqubeIssue.Project,
-				Line:              sonarqubeIssue.Line,
-				Status:            sonarqubeIssue.Status,
-				Message:           sonarqubeIssue.Message,
-				Debt:              sonarqubeIssue.Debt,
-				Effort:            sonarqubeIssue.Effort,
-				CommitAuthorEmail: sonarqubeIssue.Author,
-				Hash:              sonarqubeIssue.Hash,
-				Tags:              sonarqubeIssue.Tags,
-				Type:              sonarqubeIssue.Type,
-				Scope:             sonarqubeIssue.Scope,
-				StartLine:         sonarqubeIssue.StartLine,
-				EndLine:           sonarqubeIssue.EndLine,
-				StartOffset:       sonarqubeIssue.StartOffset,
-				EndOffset:         sonarqubeIssue.EndOffset,
-				CreationDate:      sonarqubeIssue.CreationDate,
-				UpdateDate:        sonarqubeIssue.UpdateDate,
+			sonarqubeHotspot := inputRow.(*sonarqubeModels.SonarqubeHotspot)
+			domainHotspot := &securitytesting.StIssue{
+				DomainEntity:      domainlayer.DomainEntity{Id: accountIdGen.Generate(data.Options.ConnectionId, sonarqubeHotspot.Key)},
+				BatchId:           sonarqubeHotspot.BatchId,
+				Key:               sonarqubeHotspot.Key,
+				Component:         sonarqubeHotspot.Component,
+				Project:           sonarqubeHotspot.Project,
+				Line:              sonarqubeHotspot.Line,
+				Status:            sonarqubeHotspot.Status,
+				Message:           sonarqubeHotspot.Message,
+				CommitAuthorEmail: sonarqubeHotspot.Author,
+				Assignee:          sonarqubeHotspot.Assignee,
+				Rule:              sonarqubeHotspot.RuleKey,
+				CreationDate:      sonarqubeHotspot.CreationDate,
+				UpdateDate:        sonarqubeHotspot.UpdateDate,
+				Type:              "HOTSPOTS",
 			}
 			return []interface{}{
-				domainIssue,
+				domainHotspot,
 			}, nil
 		},
 	})
diff --git a/backend/plugins/sonarqube/tasks/issues_convertor.go b/backend/plugins/sonarqube/tasks/issues_convertor.go
index d30a92b9b..c942038cc 100644
--- a/backend/plugins/sonarqube/tasks/issues_convertor.go
+++ b/backend/plugins/sonarqube/tasks/issues_convertor.go
@@ -33,7 +33,7 @@ var ConvertIssuesMeta = plugin.SubTaskMeta{
 	Name:             "convertIssues",
 	EntryPoint:       ConvertIssues,
 	EnabledByDefault: true,
-	Description:      "Convert tool layer table sonarqube_issues into  domain layer table issues",
+	Description:      "Convert tool layer table sonarqube_issues into  domain layer table st_issues",
 	DomainTypes:      []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
 }