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 <[email protected]>
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},
 }
 

Reply via email to