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/09 03:15:32 UTC

[incubator-devlake] branch main updated: fix(sonarqube): fix minor issues (#4364)

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 76fadf45e fix(sonarqube): fix minor issues (#4364)
76fadf45e is described below

commit 76fadf45ebaed9e77e006a0d9a5cd02504d5858a
Author: Warren Chen <yi...@merico.dev>
AuthorDate: Thu Feb 9 11:15:26 2023 +0800

    fix(sonarqube): fix minor issues (#4364)
---
 .../domainlayer/securitytesting/st_file_metrics.go |  2 +-
 .../securitytesting/st_issue_code_blocks.go        | 15 ++++---
 .../domainlayer/securitytesting/st_issues.go       | 46 +++++++++++-----------
 .../20230208_add_security_testing.go               |  2 +-
 .../migrationscripts/archived/st_file_metrics.go   |  4 +-
 .../archived/st_issue_code_blocks.go               | 15 ++++---
 .../models/migrationscripts/archived/st_issues.go  | 46 +++++++++++-----------
 backend/plugins/sonarqube/impl/impl.go             |  1 +
 .../migrationscripts/20230111_add_init_tables.go   |  2 +-
 .../archived/sonarqube_file_metrics.go             |  2 +-
 .../migrationscripts/archived/sonarqube_hotspot.go | 12 +++---
 .../migrationscripts/archived/sonarqube_issue.go   | 10 ++---
 .../archived/sonarqube_issue_code_block.go         |  2 +-
 .../sonarqube/models/sonarqube_file_metrics.go     |  2 +-
 .../plugins/sonarqube/models/sonarqube_hotspot.go  | 12 +++---
 .../plugins/sonarqube/models/sonarqube_issue.go    | 10 ++---
 .../sonarqube/models/sonarqube_issue_code_block.go |  8 ++--
 .../plugins/sonarqube/tasks/hotspots_convertor.go  | 29 ++++++++------
 .../sonarqube/tasks/issue_code_blocks_convertor.go | 21 +++++-----
 19 files changed, 122 insertions(+), 119 deletions(-)

diff --git a/backend/core/models/domainlayer/securitytesting/st_file_metrics.go b/backend/core/models/domainlayer/securitytesting/st_file_metrics.go
index b51ea665e..66513d3c5 100644
--- a/backend/core/models/domainlayer/securitytesting/st_file_metrics.go
+++ b/backend/core/models/domainlayer/securitytesting/st_file_metrics.go
@@ -25,10 +25,10 @@ type StFileMetrics struct {
 	domainlayer.DomainEntity
 	ComponentKey             string
 	Project                  string  `gorm:"index;type:varchar(255)"` //domain project key
+	BatchID                  string  `json:"batch_id"`
 	FileName                 string  `json:"file_name"`
 	FilePath                 string  `json:"file_path"`
 	FileLanguage             string  `json:"file_language"`
-	BatchID                  string  `json:"batch_id"`
 	CodeSmells               int     `json:"code_smells"`
 	SqaleIndex               string  `json:"sqale_index"`
 	SqaleRating              string  `json:"sqale_rating"`
diff --git a/backend/core/models/domainlayer/securitytesting/st_issue_code_blocks.go b/backend/core/models/domainlayer/securitytesting/st_issue_code_blocks.go
index 1fd94a90d..e34356b4b 100644
--- a/backend/core/models/domainlayer/securitytesting/st_issue_code_blocks.go
+++ b/backend/core/models/domainlayer/securitytesting/st_issue_code_blocks.go
@@ -21,14 +21,13 @@ import "github.com/apache/incubator-devlake/core/models/domainlayer"
 
 type StIssueCodeBlock struct {
 	domainlayer.DomainEntity
-	IssueCodeBlockId string `json:"issueCodeBlockId"`
-	IssueKey         string `json:"key" gorm:"index"`
-	Component        string `json:"component" gorm:"index"`
-	Msg              string `json:"msg" `
-	StartLine        int    `json:"startLine" `
-	EndLine          int    `json:"endLine" `
-	StartOffset      int    `json:"startOffset" `
-	EndOffset        int    `json:"endOffset" `
+	IssueKey    string `json:"key" gorm:"index"`
+	Component   string `json:"component" gorm:"index"`
+	StartLine   int    `json:"startLine" `
+	EndLine     int    `json:"endLine" `
+	StartOffset int    `json:"startOffset" `
+	EndOffset   int    `json:"endOffset" `
+	Msg         string `json:"msg" `
 }
 
 func (StIssueCodeBlock) TableName() string {
diff --git a/backend/core/models/domainlayer/securitytesting/st_issues.go b/backend/core/models/domainlayer/securitytesting/st_issues.go
index 6105224eb..6cfb2d0f7 100644
--- a/backend/core/models/domainlayer/securitytesting/st_issues.go
+++ b/backend/core/models/domainlayer/securitytesting/st_issues.go
@@ -24,28 +24,30 @@ import (
 
 type StIssue struct {
 	domainlayer.DomainEntity
-	BatchId           string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
-	Project           string           `gorm:"index;type:varchar(255)"`          //domain project key
-	Rule              string           `json:"rule" gorm:"type:varchar(255)"`
-	Severity          string           `json:"severity" gorm:"type:varchar(255)"`
-	Component         string           `json:"component" 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"`
+	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           `gorm:"index;type:varchar(255)"`          //domain project key
+	BatchId                  string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
+	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"`
+	VulnerabilityProbability string           `gorm:"type:varchar(100)"`
+	SecurityCategory         string           `gorm:"type:varchar(100)"`
+	CreationDate             *api.Iso8601Time `json:"creationDate"`
+	UpdateDate               *api.Iso8601Time `json:"updateDate"`
 }
 
 func (StIssue) TableName() string {
diff --git a/backend/core/models/migrationscripts/20230208_add_security_testing.go b/backend/core/models/migrationscripts/20230208_add_security_testing.go
index 9ece14f53..a4780ad13 100644
--- a/backend/core/models/migrationscripts/20230208_add_security_testing.go
+++ b/backend/core/models/migrationscripts/20230208_add_security_testing.go
@@ -37,7 +37,7 @@ func (u *addSecurityTesting) Up(basicRes context.BasicRes) errors.Error {
 }
 
 func (*addSecurityTesting) Version() uint64 {
-	return 20230208000008
+	return 20230208000013
 }
 
 func (*addSecurityTesting) Name() string {
diff --git a/backend/core/models/migrationscripts/archived/st_file_metrics.go b/backend/core/models/migrationscripts/archived/st_file_metrics.go
index b93b51f02..bf81ea6ff 100644
--- a/backend/core/models/migrationscripts/archived/st_file_metrics.go
+++ b/backend/core/models/migrationscripts/archived/st_file_metrics.go
@@ -19,12 +19,12 @@ package archived
 
 type StFileMetrics struct {
 	DomainEntity
-	ComponentKey             string  `json:"component_key"`
+	ComponentKey             string
 	Project                  string  `gorm:"index;type:varchar(255)"` //domain project key
+	BatchID                  string  `json:"batch_id"`
 	FileName                 string  `json:"file_name"`
 	FilePath                 string  `json:"file_path"`
 	FileLanguage             string  `json:"file_language"`
-	BatchID                  string  `json:"batch_id"`
 	CodeSmells               int     `json:"code_smells"`
 	SqaleIndex               string  `json:"sqale_index"`
 	SqaleRating              string  `json:"sqale_rating"`
diff --git a/backend/core/models/migrationscripts/archived/st_issue_code_blocks.go b/backend/core/models/migrationscripts/archived/st_issue_code_blocks.go
index 86044b90b..381710d9c 100644
--- a/backend/core/models/migrationscripts/archived/st_issue_code_blocks.go
+++ b/backend/core/models/migrationscripts/archived/st_issue_code_blocks.go
@@ -19,14 +19,13 @@ package archived
 
 type StIssueCodeBlock struct {
 	DomainEntity
-	IssueCodeBlockId string `json:"issueCodeBlockId"`
-	IssueKey         string `json:"key" gorm:"index"`
-	Component        string `json:"component" gorm:"index"`
-	Msg              string `json:"msg" `
-	StartLine        int    `json:"startLine" `
-	EndLine          int    `json:"endLine" `
-	StartOffset      int    `json:"startOffset" `
-	EndOffset        int    `json:"endOffset" `
+	IssueKey    string `json:"key" gorm:"index"`
+	Component   string `json:"component" gorm:"index"`
+	StartLine   int    `json:"startLine" `
+	EndLine     int    `json:"endLine" `
+	StartOffset int    `json:"startOffset" `
+	EndOffset   int    `json:"endOffset" `
+	Msg         string `json:"msg" `
 }
 
 func (StIssueCodeBlock) TableName() string {
diff --git a/backend/core/models/migrationscripts/archived/st_issues.go b/backend/core/models/migrationscripts/archived/st_issues.go
index 82f969801..7d5c3f0dc 100644
--- a/backend/core/models/migrationscripts/archived/st_issues.go
+++ b/backend/core/models/migrationscripts/archived/st_issues.go
@@ -23,28 +23,30 @@ import (
 
 type StIssue struct {
 	DomainEntity
-	BatchId           string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
-	Project           string           `gorm:"index;type:varchar(255)"`          //domain project key
-	Rule              string           `json:"rule" gorm:"type:varchar(255)"`
-	Severity          string           `json:"severity" gorm:"type:varchar(255)"`
-	Component         string           `json:"component" 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"`
+	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           `gorm:"index;type:varchar(255)"`          //domain project key
+	BatchId                  string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
+	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"`
+	VulnerabilityProbability string           `gorm:"type:varchar(100)"`
+	SecurityCategory         string           `gorm:"type:varchar(100)"`
+	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 b9412d891..58f44d901 100644
--- a/backend/plugins/sonarqube/impl/impl.go
+++ b/backend/plugins/sonarqube/impl/impl.go
@@ -68,6 +68,7 @@ func (p Sonarqube) SubTaskMetas() []plugin.SubTaskMeta {
 		tasks.ConvertIssueCodeBlocksMeta,
 		tasks.ConvertHotspotsMeta,
 		tasks.ConvertFileMetricsMeta,
+		tasks.ConvertAccountsMeta,
 	}
 }
 
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 4dd8e6238..09b682b50 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 20230207220021
+	return 20230207220022
 }
 
 func (*addInitTables) Name() string {
diff --git a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
index 6f17c2682..1466425c1 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
@@ -25,10 +25,10 @@ type SonarqubeFileMetrics struct {
 	ConnectionId             uint64  `gorm:"primaryKey"`
 	ComponentKey             string  `json:"component_key" gorm:"primaryKey"`
 	Project                  string  `json:"project" gorm:"index"`
+	BatchID                  string  `json:"batch_id"`
 	FileName                 string  `json:"file_name"`
 	FilePath                 string  `json:"file_path"`
 	FileLanguage             string  `json:"file_language"`
-	BatchID                  string  `json:"batch_id"`
 	CodeSmells               int     `json:"code_smells"`
 	SqaleIndex               string  `json:"sqale_index"`
 	SqaleRating              string  `json:"sqale_rating"`
diff --git a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
index f8259b654..3347f0936 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
@@ -25,19 +25,19 @@ import (
 type SonarqubeHotspot struct {
 	ConnectionId             uint64           `gorm:"primaryKey"`
 	Key                      string           `json:"key" gorm:"primaryKey"`
+	RuleKey                  string           `json:"ruleKey"`
+	Component                string           `json:"component" gorm:"index"`
 	Project                  string           `json:"project" gorm:"index"`
 	BatchId                  string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
-	Component                string           `json:"component" gorm:"index"`
-	SecurityCategory         string           `json:"securityCategory"`
-	VulnerabilityProbability string           `json:"vulnerabilityProbability"`
-	Status                   string           `json:"status"`
 	Line                     int              `json:"line"`
+	Status                   string           `json:"status"`
 	Message                  string           `json:"message"`
-	Assignee                 string           `json:"assignee"`
 	Author                   string           `json:"author"`
+	Assignee                 string           `json:"assignee"`
+	SecurityCategory         string           `json:"securityCategory"`
+	VulnerabilityProbability string           `json:"vulnerabilityProbability"`
 	CreationDate             *api.Iso8601Time `json:"creationDate"`
 	UpdateDate               *api.Iso8601Time `json:"updateDate"`
-	RuleKey                  string           `json:"ruleKey"`
 	archived.NoPKModel
 }
 
diff --git a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go
index 287a393ed..0b2c0f148 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go
@@ -24,12 +24,12 @@ import (
 
 type SonarqubeIssue struct {
 	ConnectionId uint64           `gorm:"primaryKey"`
-	BatchId      string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
 	Key          string           `json:"key" gorm:"primaryKey"`
-	Rule         string           `json:"rule"`
-	Severity     string           `json:"severity"`
-	Component    string           `json:"component"`
-	Project      string           `json:"project"`
+	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           `gorm:"index;type:varchar(255)"`          //domain project key
+	BatchId      string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
 	Line         int              `json:"line"`
 	Status       string           `json:"status"`
 	Message      string           `json:"message"`
diff --git a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go
index cab175c35..d94d911ea 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go
@@ -24,11 +24,11 @@ type SonarqubeIssueCodeBlock struct {
 	Id           string `gorm:"primaryKey"`
 	IssueKey     string `json:"key" gorm:"index"`
 	Component    string `json:"component" gorm:"index"`
-	Msg          string `json:"msg" `
 	StartLine    int    `json:"startLine" `
 	EndLine      int    `json:"endLine" `
 	StartOffset  int    `json:"startOffset" `
 	EndOffset    int    `json:"endOffset" `
+	Msg          string `json:"msg" `
 	archived.NoPKModel
 }
 
diff --git a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
index b0718e6e5..773dc7c58 100644
--- a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
+++ b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
@@ -25,10 +25,10 @@ type SonarqubeFileMetrics struct {
 	ConnectionId             uint64  `gorm:"primaryKey"`
 	ComponentKey             string  `json:"component_key" gorm:"primaryKey"`
 	Project                  string  `json:"project" gorm:"index"`
+	BatchID                  string  `json:"batch_id"`
 	FileName                 string  `json:"file_name"`
 	FilePath                 string  `json:"file_path"`
 	FileLanguage             string  `json:"file_language"`
-	BatchID                  string  `json:"batch_id"`
 	CodeSmells               int     `json:"code_smells"`
 	SqaleIndex               string  `json:"sqale_index"`
 	SqaleRating              string  `json:"sqale_rating"`
diff --git a/backend/plugins/sonarqube/models/sonarqube_hotspot.go b/backend/plugins/sonarqube/models/sonarqube_hotspot.go
index b8d62a63d..8e085515e 100644
--- a/backend/plugins/sonarqube/models/sonarqube_hotspot.go
+++ b/backend/plugins/sonarqube/models/sonarqube_hotspot.go
@@ -25,19 +25,19 @@ import (
 type SonarqubeHotspot struct {
 	ConnectionId             uint64           `gorm:"primaryKey"`
 	Key                      string           `json:"key" gorm:"primaryKey"`
-	BatchId                  string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
+	RuleKey                  string           `json:"ruleKey"`
 	Component                string           `json:"component" gorm:"index"`
 	Project                  string           `json:"project" gorm:"index"`
-	SecurityCategory         string           `json:"securityCategory"`
-	VulnerabilityProbability string           `json:"vulnerabilityProbability"`
-	Status                   string           `json:"status"`
+	BatchId                  string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
 	Line                     int              `json:"line"`
+	Status                   string           `json:"status"`
 	Message                  string           `json:"message"`
-	Assignee                 string           `json:"assignee"`
 	Author                   string           `json:"author"`
+	Assignee                 string           `json:"assignee"`
+	SecurityCategory         string           `json:"securityCategory"`
+	VulnerabilityProbability string           `json:"vulnerabilityProbability"`
 	CreationDate             *api.Iso8601Time `json:"creationDate"`
 	UpdateDate               *api.Iso8601Time `json:"updateDate"`
-	RuleKey                  string           `json:"ruleKey"`
 	common.NoPKModel
 }
 
diff --git a/backend/plugins/sonarqube/models/sonarqube_issue.go b/backend/plugins/sonarqube/models/sonarqube_issue.go
index d5de96cd3..b089b5b8e 100644
--- a/backend/plugins/sonarqube/models/sonarqube_issue.go
+++ b/backend/plugins/sonarqube/models/sonarqube_issue.go
@@ -24,12 +24,12 @@ import (
 
 type SonarqubeIssue struct {
 	ConnectionId uint64           `gorm:"primaryKey"`
-	BatchId      string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
 	Key          string           `json:"key" gorm:"primaryKey"`
-	Rule         string           `json:"rule"`
-	Severity     string           `json:"severity"`
-	Component    string           `json:"component"`
-	Project      string           `json:"project"`
+	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           `gorm:"index;type:varchar(255)"`          //domain project key
+	BatchId      string           `json:"batchId" gorm:"type:varchar(100)"` // from collection time
 	Line         int              `json:"line"`
 	Status       string           `json:"status"`
 	Message      string           `json:"message"`
diff --git a/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go b/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go
index d16939d3e..8e4e7ea86 100644
--- a/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go
+++ b/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go
@@ -17,21 +17,19 @@ limitations under the License.
 
 package models
 
-import (
-	"github.com/apache/incubator-devlake/core/models/common"
-)
+import "github.com/apache/incubator-devlake/core/models/common"
 
 type SonarqubeIssueCodeBlock struct {
-	common.NoPKModel
 	ConnectionId uint64 `gorm:"primaryKey"`
 	Id           string `gorm:"primaryKey"`
 	IssueKey     string `json:"key" gorm:"index"`
 	Component    string `json:"component" gorm:"index"`
-	Msg          string `json:"msg" `
 	StartLine    int    `json:"startLine" `
 	EndLine      int    `json:"endLine" `
 	StartOffset  int    `json:"startOffset" `
 	EndOffset    int    `json:"endOffset" `
+	Msg          string `json:"msg" `
+	common.NoPKModel
 }
 
 func (SonarqubeIssueCodeBlock) TableName() string {
diff --git a/backend/plugins/sonarqube/tasks/hotspots_convertor.go b/backend/plugins/sonarqube/tasks/hotspots_convertor.go
index 065367c05..50cb77c5f 100644
--- a/backend/plugins/sonarqube/tasks/hotspots_convertor.go
+++ b/backend/plugins/sonarqube/tasks/hotspots_convertor.go
@@ -56,19 +56,22 @@ func ConvertHotspots(taskCtx plugin.SubTaskContext) errors.Error {
 		Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
 			sonarqubeHotspot := inputRow.(*sonarqubeModels.SonarqubeHotspot)
 			domainHotspot := &securitytesting.StIssue{
-				DomainEntity:      domainlayer.DomainEntity{Id: issueIdGen.Generate(data.Options.ConnectionId, sonarqubeHotspot.Key)},
-				BatchId:           sonarqubeHotspot.BatchId,
-				Component:         sonarqubeHotspot.Component,
-				Project:           projectIdGen.Generate(data.Options.ConnectionId, 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",
+				DomainEntity:             domainlayer.DomainEntity{Id: issueIdGen.Generate(data.Options.ConnectionId, sonarqubeHotspot.Key)},
+				BatchId:                  sonarqubeHotspot.BatchId,
+				Component:                sonarqubeHotspot.Component,
+				Project:                  projectIdGen.Generate(data.Options.ConnectionId, sonarqubeHotspot.Project),
+				Line:                     sonarqubeHotspot.Line,
+				StartLine:                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",
+				VulnerabilityProbability: sonarqubeHotspot.VulnerabilityProbability,
+				Severity:                 sonarqubeHotspot.SecurityCategory,
 			}
 			return []interface{}{
 				domainHotspot,
diff --git a/backend/plugins/sonarqube/tasks/issue_code_blocks_convertor.go b/backend/plugins/sonarqube/tasks/issue_code_blocks_convertor.go
index 9d92ebea3..1676e3002 100644
--- a/backend/plugins/sonarqube/tasks/issue_code_blocks_convertor.go
+++ b/backend/plugins/sonarqube/tasks/issue_code_blocks_convertor.go
@@ -37,8 +37,8 @@ func ConvertIssueCodeBlocks(taskCtx plugin.SubTaskContext) errors.Error {
 
 	cursor, err := db.Cursor(
 		dal.From("_tool_sonarqube_issue_code_blocks icb"),
-		dal.Join("_tool_sonarqube_issues i on i.key = icb.issue_key"),
-		dal.Where("connection_id = ? and project = ?", data.Options.ConnectionId, data.Options.ProjectKey))
+		dal.Join("left join _tool_sonarqube_issues i on i.`key` = icb.issue_key"),
+		dal.Where("icb.connection_id = ? and project = ?", data.Options.ConnectionId, data.Options.ProjectKey))
 	if err != nil {
 		return err
 	}
@@ -53,15 +53,14 @@ func ConvertIssueCodeBlocks(taskCtx plugin.SubTaskContext) errors.Error {
 		Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
 			sonarqubeIssueCodeBlock := inputRow.(*models.SonarqubeIssueCodeBlock)
 			domainIssueCodeBlock := &securitytesting.StIssueCodeBlock{
-				DomainEntity:     domainlayer.DomainEntity{Id: idGen.Generate(data.Options.ConnectionId, sonarqubeIssueCodeBlock.Id)},
-				IssueCodeBlockId: sonarqubeIssueCodeBlock.Id,
-				IssueKey:         issueIdGen.Generate(data.Options.ConnectionId, sonarqubeIssueCodeBlock.IssueKey),
-				Component:        sonarqubeIssueCodeBlock.Component,
-				Msg:              sonarqubeIssueCodeBlock.Msg,
-				StartLine:        sonarqubeIssueCodeBlock.StartLine,
-				EndLine:          sonarqubeIssueCodeBlock.EndLine,
-				StartOffset:      sonarqubeIssueCodeBlock.StartOffset,
-				EndOffset:        sonarqubeIssueCodeBlock.EndOffset,
+				DomainEntity: domainlayer.DomainEntity{Id: idGen.Generate(data.Options.ConnectionId, sonarqubeIssueCodeBlock.Id)},
+				IssueKey:     issueIdGen.Generate(data.Options.ConnectionId, sonarqubeIssueCodeBlock.IssueKey),
+				Component:    sonarqubeIssueCodeBlock.Component,
+				Msg:          sonarqubeIssueCodeBlock.Msg,
+				StartLine:    sonarqubeIssueCodeBlock.StartLine,
+				EndLine:      sonarqubeIssueCodeBlock.EndLine,
+				StartOffset:  sonarqubeIssueCodeBlock.StartOffset,
+				EndOffset:    sonarqubeIssueCodeBlock.EndOffset,
 			}
 
 			return []interface{}{