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/27 11:36:09 UTC

[incubator-devlake] branch main updated: fix(sonarqube): add num of lines (#4532)

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 cc47d5653 fix(sonarqube): add num of lines (#4532)
cc47d5653 is described below

commit cc47d5653fdbe5948c4f1aa9c30f0ef63c48c6ad
Author: Warren Chen <yi...@merico.dev>
AuthorDate: Mon Feb 27 19:36:05 2023 +0800

    fix(sonarqube): add num of lines (#4532)
---
 .../domainlayer/codequality/cq_file_metrics.go     | 10 +++++----
 .../migrationscripts/20230208_add_code_quality.go  |  2 +-
 .../migrationscripts/archived/cq_file_metrics.go   | 10 +++++----
 .../raw_tables/_raw_sonarqube_api_filemetrics.csv  | 12 +++++------
 .../_raw_sonarqube_api_filemetrics_additional.csv  | 12 +++++------
 .../_tool_sonarqube_filemetrics.csv                | 14 ++++++------
 .../sonarqube/e2e/snapshot_tables/filemetrics.csv  | 14 ++++++------
 .../migrationscripts/20230111_add_init_tables.go   |  2 +-
 .../archived/sonarqube_file_metrics.go             |  2 ++
 .../sonarqube/models/sonarqube_file_metrics.go     |  8 +++++--
 .../tasks/filemetrics_additional_collector.go      |  2 +-
 .../sonarqube/tasks/filemetrics_collector.go       |  2 +-
 .../sonarqube/tasks/filemetrics_convertor.go       |  2 ++
 backend/plugins/sonarqube/tasks/shared.go          | 25 ++++++++++++++++------
 14 files changed, 70 insertions(+), 47 deletions(-)

diff --git a/backend/core/models/domainlayer/codequality/cq_file_metrics.go b/backend/core/models/domainlayer/codequality/cq_file_metrics.go
index 4f70dd533..c83a79813 100644
--- a/backend/core/models/domainlayer/codequality/cq_file_metrics.go
+++ b/backend/core/models/domainlayer/codequality/cq_file_metrics.go
@@ -37,16 +37,18 @@ type CqFileMetrics struct {
 	SecurityHotspots                    int
 	SecurityHotspotsReviewed            float64
 	SecurityReviewRating                string `gorm:"type:varchar(20)"`
-	Ncloc                               int    `json:"ncloc"`
+	Ncloc                               int
 	UncoveredLines                      int
-	LinesToCover                        int     `json:"lines_to_cover"`
-	DuplicatedLinesDensity              float64 `json:"duplicated_lines_density"`
-	DuplicatedBlocks                    int     `json:"duplicated_blocks"`
+	Coverage                            float64
+	LinesToCover                        int
+	DuplicatedLinesDensity              float64
+	DuplicatedBlocks                    int
 	DuplicatedFiles                     int
 	DuplicatedLines                     int
 	EffortToReachMaintainabilityRatingA int
 	Complexity                          int
 	CognitiveComplexity                 int
+	NumOfLines                          int
 }
 
 func (CqFileMetrics) TableName() string {
diff --git a/backend/core/models/migrationscripts/20230208_add_code_quality.go b/backend/core/models/migrationscripts/20230208_add_code_quality.go
index 4cb43071e..6bdbc81e1 100644
--- a/backend/core/models/migrationscripts/20230208_add_code_quality.go
+++ b/backend/core/models/migrationscripts/20230208_add_code_quality.go
@@ -46,7 +46,7 @@ func (u *addCodeQuality) Up(basicRes context.BasicRes) errors.Error {
 }
 
 func (*addCodeQuality) Version() uint64 {
-	return 20230221000077
+	return 20230227000081
 }
 
 func (*addCodeQuality) Name() string {
diff --git a/backend/core/models/migrationscripts/archived/cq_file_metrics.go b/backend/core/models/migrationscripts/archived/cq_file_metrics.go
index fcda4f55a..e2ee56d2d 100644
--- a/backend/core/models/migrationscripts/archived/cq_file_metrics.go
+++ b/backend/core/models/migrationscripts/archived/cq_file_metrics.go
@@ -33,16 +33,18 @@ type CqFileMetrics struct {
 	SecurityHotspots                    int
 	SecurityHotspotsReviewed            float64
 	SecurityReviewRating                string `gorm:"type:varchar(20)"`
-	Ncloc                               int    `json:"ncloc"`
+	Ncloc                               int
+	Coverage                            float64
 	UncoveredLines                      int
-	LinesToCover                        int     `json:"lines_to_cover"`
-	DuplicatedLinesDensity              float64 `json:"duplicated_lines_density"`
-	DuplicatedBlocks                    int     `json:"duplicated_blocks"`
+	LinesToCover                        int
+	DuplicatedLinesDensity              float64
+	DuplicatedBlocks                    int
 	DuplicatedFiles                     int
 	DuplicatedLines                     int
 	EffortToReachMaintainabilityRatingA int
 	Complexity                          int
 	CognitiveComplexity                 int
+	NumOfLines                          int
 }
 
 func (CqFileMetrics) TableName() string {
diff --git a/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics.csv b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics.csv
index ce5bb1cc5..ae9e81968 100644
--- a/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics.csv
+++ b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics.csv
@@ -1,7 +1,7 @@
 "id","params","data","url","input","created_at"
-23927,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSH_"",""key"":""testDevLake:backend/plugins/jenkins/tasks/api_client.go"",""name"":""api_client.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/tasks/api_client.go"",""language"":""go"",""measures"":[{""metric"":""ncloc"",""value"":""25""},{""metric"":""lines_to_cover"",""value"":""8""},{""metric"":""uncovered_lines"",""value"":""8"",""bestValue"":false},{""metric"":""sqale_rating"",""va [...]
-24194,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI-"",""key"":""testDevLake:backend/plugins/gitlab/e2e/issues_test.go"",""name"":""issues_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/issues_test.go"",""language"":""go"",""measures"":[{""metric"":""ncloc"",""value"":""117""},{""metric"":""lines_to_cover"",""value"":""18""},{""metric"":""uncovered_lines"",""value"":""18"",""bestValue"":false},{""metric"":""duplicated_blocks"" [...]
-24712,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI1"",""key"":""testDevLake:backend/plugins/jenkins/impl/impl.go"",""name"":""impl.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/impl/impl.go"",""language"":""go"",""measures"":[{""metric"":""ncloc"",""value"":""234""},{""metric"":""lines_to_cover"",""value"":""92""},{""metric"":""uncovered_lines"",""value"":""92"",""bestValue"":false},{""metric"":""sqale_rating"",""value"":""1.0"",""b [...]
-24093,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI4"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go"",""name"":""mr_commits_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_commits_test.go"",""language"":""go"",""measures"":[{""metric"":""ncloc"",""value"":""139""},{""metric"":""lines_to_cover"",""value"":""24""},{""metric"":""uncovered_lines"",""value"":""24"",""bestValue"":false},{""metric"":""duplica [...]
-24107,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI5"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_test.go"",""name"":""mr_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_test.go"",""language"":""go"",""measures"":[{""metric"":""ncloc"",""value"":""103""},{""metric"":""lines_to_cover"",""value"":""15""},{""metric"":""uncovered_lines"",""value"":""15"",""bestValue"":false},{""metric"":""duplicated_blocks"",""value"":" [...]
-24154,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI6"",""key"":""testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go"",""name"":""pipelines_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/pipelines_test.go"",""language"":""go"",""measures"":[{""metric"":""ncloc"",""value"":""64""},{""metric"":""lines_to_cover"",""value"":""15""},{""metric"":""uncovered_lines"",""value"":""15"",""bestValue"":false},{""metric"":""sqale_ratin [...]
+31657,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSH_"",""key"":""testDevLake:backend/plugins/jenkins/tasks/api_client.go"",""name"":""api_client.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/tasks/api_client.go"",""language"":""go"",""measures"":[{""metric"":""security_review_rating"",""value"":""1.0"",""bestValue"":true},{""metric"":""lines_to_cover"",""value"":""8""},{""metric"":""ncloc"",""value"":""25""},{""metric"":""reliability [...]
+31024,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI-"",""key"":""testDevLake:backend/plugins/gitlab/e2e/issues_test.go"",""name"":""issues_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/issues_test.go"",""language"":""go"",""measures"":[{""metric"":""security_review_rating"",""value"":""1.0"",""bestValue"":true},{""metric"":""lines_to_cover"",""value"":""18""},{""metric"":""ncloc"",""value"":""117""},{""metric"":""reliability_ [...]
+30976,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI1"",""key"":""testDevLake:backend/plugins/jenkins/impl/impl.go"",""name"":""impl.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/impl/impl.go"",""language"":""go"",""measures"":[{""metric"":""security_review_rating"",""value"":""1.0"",""bestValue"":true},{""metric"":""lines_to_cover"",""value"":""92""},{""metric"":""ncloc"",""value"":""234""},{""metric"":""reliability_rating"",""value" [...]
+31223,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI4"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go"",""name"":""mr_commits_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_commits_test.go"",""language"":""go"",""measures"":[{""metric"":""security_review_rating"",""value"":""1.0"",""bestValue"":true},{""metric"":""lines_to_cover"",""value"":""24""},{""metric"":""ncloc"",""value"":""139""},{""metric"":"" [...]
+31237,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI5"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_test.go"",""name"":""mr_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_test.go"",""language"":""go"",""measures"":[{""metric"":""security_review_rating"",""value"":""1.0"",""bestValue"":true},{""metric"":""lines_to_cover"",""value"":""15""},{""metric"":""ncloc"",""value"":""103""},{""metric"":""reliability_rating"",""v [...]
+31284,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI6"",""key"":""testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go"",""name"":""pipelines_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/pipelines_test.go"",""language"":""go"",""measures"":[{""metric"":""security_review_rating"",""value"":""1.0"",""bestValue"":true},{""metric"":""lines_to_cover"",""value"":""15""},{""metric"":""ncloc"",""value"":""64""},{""metric"":""reli [...]
diff --git a/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics_additional.csv b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics_additional.csv
index aa78b18ca..f53f3d857 100644
--- a/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics_additional.csv
+++ b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_api_filemetrics_additional.csv
@@ -1,7 +1,7 @@
 "id","params","data","url","input","created_at"
-13765,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSH_"",""key"":""testDevLake:backend/plugins/jenkins/tasks/api_client.go"",""name"":""api_client.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/tasks/api_client.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""3""},{""metric"":""cognitive_complexity"",""value"":""2"",""bestValue"":false},{""metric"":""duplicated_lines"",""value"":""10"",""bestValue"":true},{" [...]
-13832,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI-"",""key"":""testDevLake:backend/plugins/gitlab/e2e/issues_test.go"",""name"":""issues_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/issues_test.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""1""},{""metric"":""duplicated_lines"",""value"":""46"",""bestValue"":false},{""metric"":""duplicated_files"",""value"":""1"",""bestValue"":false},{""metri [...]
-13484,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI1"",""key"":""testDevLake:backend/plugins/jenkins/impl/impl.go"",""name"":""impl.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/impl/impl.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""39""},{""metric"":""cognitive_complexity"",""value"":""24"",""bestValue"":false},{""metric"":""duplicated_lines"",""value"":""2"",""bestValue"":true},{""metric"":""duplica [...]
-13531,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI4"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go"",""name"":""mr_commits_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_commits_test.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""1""},{""metric"":""duplicated_lines"",""value"":""53"",""bestValue"":false},{""metric"":""duplicated_files"",""value"":""1"",""bestValue"":fal [...]
-13545,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI5"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_test.go"",""name"":""mr_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_test.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""1""},{""metric"":""duplicated_lines"",""value"":""48"",""bestValue"":false},{""metric"":""duplicated_files"",""value"":""1"",""bestValue"":false},{""metric"":""cognit [...]
-13592,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI6"",""key"":""testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go"",""name"":""pipelines_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/pipelines_test.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""1""},{""metric"":""cognitive_complexity"",""value"":""2"",""bestValue"":true},{""metric"":""duplicated_lines"",""value"":""4"",""bestValue"":true [...]
+20995,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSH_"",""key"":""testDevLake:backend/plugins/jenkins/tasks/api_client.go"",""name"":""api_client.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/tasks/api_client.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""3""},{""metric"":""lines"",""value"":""49""},{""metric"":""cognitive_complexity"",""value"":""2"",""bestValue"":false},{""metric"":""duplicated_lines"" [...]
+20662,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI-"",""key"":""testDevLake:backend/plugins/gitlab/e2e/issues_test.go"",""name"":""issues_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/issues_test.go"",""language"":""go"",""measures"":[{""metric"":""duplicated_lines"",""value"":""46"",""bestValue"":false},{""metric"":""complexity"",""value"":""1""},{""metric"":""lines"",""value"":""147""},{""metric"":""duplicated_lines_densit [...]
+21114,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI1"",""key"":""testDevLake:backend/plugins/jenkins/impl/impl.go"",""name"":""impl.go"",""qualifier"":""FIL"",""path"":""backend/plugins/jenkins/impl/impl.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""39""},{""metric"":""lines"",""value"":""289""},{""metric"":""cognitive_complexity"",""value"":""24"",""bestValue"":false},{""metric"":""duplicated_lines"",""value"":""7"", [...]
+20861,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI4"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go"",""name"":""mr_commits_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_commits_test.go"",""language"":""go"",""measures"":[{""metric"":""duplicated_lines"",""value"":""53"",""bestValue"":false},{""metric"":""complexity"",""value"":""1""},{""metric"":""lines"",""value"":""175""},{""metric"":""duplicated_ [...]
+20875,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI5"",""key"":""testDevLake:backend/plugins/gitlab/e2e/mr_test.go"",""name"":""mr_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/mr_test.go"",""language"":""go"",""measures"":[{""metric"":""duplicated_lines"",""value"":""48"",""bestValue"":false},{""metric"":""complexity"",""value"":""1""},{""metric"":""lines"",""value"":""132""},{""metric"":""duplicated_lines_density"",""value" [...]
+20922,"{""connectionId"":2,""ProjectKey"":""testDevLake""}","{""id"":""AYZ8ryX-vqC8Tm0EnSI6"",""key"":""testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go"",""name"":""pipelines_test.go"",""qualifier"":""FIL"",""path"":""backend/plugins/gitlab/e2e/pipelines_test.go"",""language"":""go"",""measures"":[{""metric"":""complexity"",""value"":""1""},{""metric"":""lines"",""value"":""93""},{""metric"":""cognitive_complexity"",""value"":""7"",""bestValue"":true},{""metric"":""duplicated_li [...]
diff --git a/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv
index 6035d4348..f38bf08e6 100644
--- a/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv
+++ b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv
@@ -1,7 +1,7 @@
-connection_id,file_metrics_key,project_key,file_name,file_path,file_language,code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,uncovered_lines,lines_to_cover,duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines,effort_to_reach_maintainability_rating_a,complexity,cognitive_complexity
-2,testDevLake:backend/plugins/gitlab/e2e/issues_test.go,testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,0,0,1,0,A,0,A,0,0,A,117,18,18,31.299999237060547,1,1,46,3,1,50
-2,testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go,testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,0,0,1,0,A,0,A,0,0,A,139,24,24,30.299999237060547,2,1,53,21,1,20
-2,testDevLake:backend/plugins/gitlab/e2e/mr_test.go,testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,0,0,1,0,A,0,A,0,0,A,103,15,15,36.400001525878906,1,1,48,21,1,30
-2,testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go,testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,0,0,1,0,A,0,A,0,0,A,64,15,15,0,0,10,4,3,1,2
-2,testDevLake:backend/plugins/jenkins/impl/impl.go,testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,0,0,1,0,A,0,A,0,0,A,234,92,92,0,0,40,2,11,39,24
-2,testDevLake:backend/plugins/jenkins/tasks/api_client.go,testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,0,0,1,0,A,0,A,0,0,A,25,8,8,0,0,50,10,2,3,2
+connection_id,file_metrics_key,project_key,file_name,file_path,file_language,code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,coverage,uncovered_lines,lines_to_cover,duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines,effort_to_reach_maintainability_rating_a,complexity,cognitive_complexity,num_of_lines
+2,testDevLake:backend/plugins/gitlab/e2e/issues_test.go,testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,7,7,1,7,A,7,A,7,0,A,117,0,18,18,31.299999237060547,1,1,46,7,1,7,147
+2,testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go,testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,7,7,1,7,A,7,A,7,0,A,139,0,24,24,30.299999237060547,2,1,53,7,1,7,175
+2,testDevLake:backend/plugins/gitlab/e2e/mr_test.go,testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,7,7,1,7,A,7,A,7,0,A,103,0,15,15,36.400001525878906,1,1,48,7,1,7,132
+2,testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go,testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,7,7,1,7,A,7,A,7,0,A,64,0,15,15,0,7,7,7,7,1,7,93
+2,testDevLake:backend/plugins/jenkins/impl/impl.go,testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,7,7,1,7,A,7,A,7,0,A,234,0,92,92,0,7,7,7,7,39,24,289
+2,testDevLake:backend/plugins/jenkins/tasks/api_client.go,testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,5,7,1,6,A,7,A,7,0,A,25,0,8,8,0,7,7,7,7,3,2,49
diff --git a/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv b/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv
index 613598cfe..520630ce5 100644
--- a/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv
+++ b/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv
@@ -1,7 +1,7 @@
-id,project_key,file_name,file_path,file_language,code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,uncovered_lines,lines_to_cover,duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines,effort_to_reach_maintainability_rating_a,complexity,cognitive_complexity
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/issues_test.go,sonarqube:SonarqubeProject:2:testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,0,0,1,0,A,0,A,0,0,A,117,18,18,31.299999237060547,1,1,46,3,1,50
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go,sonarqube:SonarqubeProject:2:testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,0,0,1,0,A,0,A,0,0,A,139,24,24,30.299999237060547,2,1,53,21,1,20
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/mr_test.go,sonarqube:SonarqubeProject:2:testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,0,0,1,0,A,0,A,0,0,A,103,15,15,36.400001525878906,1,1,48,21,1,30
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go,sonarqube:SonarqubeProject:2:testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,0,0,1,0,A,0,A,0,0,A,64,15,15,0,0,10,4,3,1,2
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/jenkins/impl/impl.go,sonarqube:SonarqubeProject:2:testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,0,0,1,0,A,0,A,0,0,A,234,92,92,0,0,40,2,11,39,24
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/jenkins/tasks/api_client.go,sonarqube:SonarqubeProject:2:testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,0,0,1,0,A,0,A,0,0,A,25,8,8,0,0,50,10,2,3,2
+id,project_key,file_name,file_path,file_language,code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,uncovered_lines,coverage,lines_to_cover,duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines,effort_to_reach_maintainability_rating_a,complexity,cognitive_complexity,num_of_lines
+sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/issues_test.go,sonarqube:SonarqubeProject:2:testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,7,7,1,7,A,7,A,7,0,A,117,18,0,18,31.299999237060547,1,1,46,7,1,7,147
+sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go,sonarqube:SonarqubeProject:2:testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,7,7,1,7,A,7,A,7,0,A,139,24,0,24,30.299999237060547,2,1,53,7,1,7,175
+sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/mr_test.go,sonarqube:SonarqubeProject:2:testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,7,7,1,7,A,7,A,7,0,A,103,15,0,15,36.400001525878906,1,1,48,7,1,7,132
+sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go,sonarqube:SonarqubeProject:2:testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,7,7,1,7,A,7,A,7,0,A,64,15,0,15,0,7,7,7,7,1,7,93
+sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/jenkins/impl/impl.go,sonarqube:SonarqubeProject:2:testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,7,7,1,7,A,7,A,7,0,A,234,92,0,92,0,7,7,7,7,39,24,289
+sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/jenkins/tasks/api_client.go,sonarqube:SonarqubeProject:2:testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,5,7,1,6,A,7,A,7,0,A,25,8,0,8,0,7,7,7,7,3,2,49
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 ad18fb3f0..56de7271a 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
@@ -51,7 +51,7 @@ func (*addInitTables) Up(basicRes context.BasicRes) errors.Error {
 }
 
 func (*addInitTables) Version() uint64 {
-	return 20230221220066
+	return 20230227220071
 }
 
 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 42bac7b2f..867336239 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
@@ -39,6 +39,7 @@ type SonarqubeFileMetrics struct {
 	SecurityHotspotsReviewed float64
 	SecurityReviewRating     string `gorm:"type:varchar(20)"`
 	Ncloc                    int
+	Coverage                 float64
 	UncoveredLines           int
 	LinesToCover             int
 	DuplicatedLinesDensity   float64
@@ -49,6 +50,7 @@ type SonarqubeFileMetrics struct {
 	EffortToReachMaintainabilityRatingA int
 	Complexity                          int
 	CognitiveComplexity                 int
+	NumOfLines                          int
 	archived.NoPKModel
 }
 
diff --git a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
index 72a011460..c2e36f2fb 100644
--- a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
+++ b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
@@ -39,10 +39,9 @@ type SonarqubeFileMetrics struct {
 	SecurityHotspotsReviewed float64
 	SecurityReviewRating     string
 	Ncloc                    int
+	Coverage                 float64
 	UncoveredLines           int
 	LinesToCover             int
-	DuplicatedLinesDensity   float64
-	DuplicatedBlocks         int
 	common.NoPKModel
 }
 
@@ -58,6 +57,9 @@ type SonarqubeAdditionalFileMetrics struct {
 	EffortToReachMaintainabilityRatingA int
 	Complexity                          int
 	CognitiveComplexity                 int
+	NumOfLines                          int
+	DuplicatedLinesDensity              float64
+	DuplicatedBlocks                    int
 	common.NoPKModel
 }
 
@@ -83,6 +85,7 @@ type SonarqubeWholeFileMetrics struct {
 	SecurityHotspotsReviewed            float64
 	SecurityReviewRating                string `gorm:"type:varchar(20)"`
 	Ncloc                               int
+	Coverage                            float64
 	UncoveredLines                      int
 	LinesToCover                        int
 	DuplicatedLinesDensity              float64
@@ -92,6 +95,7 @@ type SonarqubeWholeFileMetrics struct {
 	EffortToReachMaintainabilityRatingA int
 	Complexity                          int
 	CognitiveComplexity                 int
+	NumOfLines                          int
 	common.NoPKModel
 }
 
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_additional_collector.go b/backend/plugins/sonarqube/tasks/filemetrics_additional_collector.go
index 6fe73b88e..945338dbb 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_additional_collector.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_additional_collector.go
@@ -43,7 +43,7 @@ func CollectAdditionalFilemetrics(taskCtx plugin.SubTaskContext) errors.Error {
 			query := url.Values{}
 			query.Set("component", data.Options.ProjectKey)
 			query.Set("qualifiers", "FIL")
-			query.Set("metricKeys", "duplicated_lines, duplicated_files, complexity, cognitive_complexity, effort_to_reach_maintainability_rating_a")
+			query.Set("metricKeys", "duplicated_lines_density,duplicated_blocks,duplicated_lines, duplicated_files, complexity, cognitive_complexity, effort_to_reach_maintainability_rating_a, lines")
 			query.Set("p", fmt.Sprintf("%v", reqData.Pager.Page))
 			query.Set("ps", fmt.Sprintf("%v", reqData.Pager.Size))
 			return query, nil
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_collector.go b/backend/plugins/sonarqube/tasks/filemetrics_collector.go
index d5bc51222..e42fe3fe0 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_collector.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_collector.go
@@ -47,7 +47,7 @@ func CollectFilemetrics(taskCtx plugin.SubTaskContext) errors.Error {
 			query := url.Values{}
 			query.Set("component", data.Options.ProjectKey)
 			query.Set("qualifiers", "FIL")
-			query.Set("metricKeys", "code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,uncovered_lines,lines_to_cover,duplicated_lines_density,duplicated_blocks")
+			query.Set("metricKeys", "code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,coverage,uncovered_lines,lines_to_cover")
 			query.Set("p", fmt.Sprintf("%v", reqData.Pager.Page))
 			query.Set("ps", fmt.Sprintf("%v", reqData.Pager.Size))
 			return query, nil
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_convertor.go b/backend/plugins/sonarqube/tasks/filemetrics_convertor.go
index b7b464664..80d9725cb 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_convertor.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_convertor.go
@@ -81,6 +81,8 @@ func ConvertFileMetrics(taskCtx plugin.SubTaskContext) errors.Error {
 				EffortToReachMaintainabilityRatingA: sonarqubeFileMetric.EffortToReachMaintainabilityRatingA,
 				Complexity:                          sonarqubeFileMetric.Complexity,
 				CognitiveComplexity:                 sonarqubeFileMetric.CognitiveComplexity,
+				NumOfLines:                          sonarqubeFileMetric.NumOfLines,
+				Coverage:                            sonarqubeFileMetric.Coverage,
 			}
 			return []interface{}{
 				domainFileMetric,
diff --git a/backend/plugins/sonarqube/tasks/shared.go b/backend/plugins/sonarqube/tasks/shared.go
index b11c51dc5..4439af992 100644
--- a/backend/plugins/sonarqube/tasks/shared.go
+++ b/backend/plugins/sonarqube/tasks/shared.go
@@ -212,13 +212,8 @@ func setMetrics(fileMetrics *models.SonarqubeFileMetrics, metricsList []Measure)
 			if err != nil {
 				return err
 			}
-		case "duplicated_blocks":
-			fileMetrics.DuplicatedBlocks, err = errors.Convert01(strconv.Atoi(v.Value))
-			if err != nil {
-				return err
-			}
-		case "duplicated_lines_density":
-			fileMetrics.DuplicatedLinesDensity, err = errors.Convert01(strconv.ParseFloat(v.Value, 32))
+		case "coverage":
+			fileMetrics.Coverage, err = errors.Convert01(strconv.ParseFloat(v.Value, 32))
 			if err != nil {
 				return err
 			}
@@ -232,6 +227,11 @@ func setAdditionalMetrics(fileMetrics *models.SonarqubeAdditionalFileMetrics, me
 	var err errors.Error
 	for _, v := range metricsList {
 		switch v.Metric {
+		case "duplicated_blocks":
+			fileMetrics.DuplicatedBlocks, err = errors.Convert01(strconv.Atoi(v.Value))
+			if err != nil {
+				return err
+			}
 		case "duplicated_lines":
 			fileMetrics.DuplicatedLines, err = errors.Convert01(strconv.Atoi(v.Value))
 			if err != nil {
@@ -242,6 +242,11 @@ func setAdditionalMetrics(fileMetrics *models.SonarqubeAdditionalFileMetrics, me
 			if err != nil {
 				return err
 			}
+		case "duplicated_lines_density":
+			fileMetrics.DuplicatedLinesDensity, err = errors.Convert01(strconv.ParseFloat(v.Value, 32))
+			if err != nil {
+				return err
+			}
 		case "complexity":
 			fileMetrics.Complexity, err = errors.Convert01(strconv.Atoi(v.Value))
 			if err != nil {
@@ -257,6 +262,12 @@ func setAdditionalMetrics(fileMetrics *models.SonarqubeAdditionalFileMetrics, me
 			if err != nil {
 				return err
 			}
+		case "lines":
+			fileMetrics.NumOfLines, err = errors.Convert01(strconv.Atoi(v.Value))
+			if err != nil {
+				return err
+			}
+
 		}
 	}
 	return nil