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-website.git


The following commit(s) were added to refs/heads/main by this push:
     new f0bf91d6ef docs: sonarqube configure docs (#450)
f0bf91d6ef is described below

commit f0bf91d6ef1257d8bf11c983a8b5d59d51bc2411
Author: abeizn <[email protected]>
AuthorDate: Wed Mar 1 10:00:01 2023 +0800

    docs: sonarqube configure docs (#450)
    
    * docs: sonarqube configure docs
    ---------
    
    Co-authored-by: Louis.z <[email protected]>
---
 docs/Configuration/AdvancedMode.md                 |  29 +++-
 docs/Configuration/GitLab.md                       |   2 +-
 docs/Configuration/SonarQube.md                    |  62 +++++++
 docs/Configuration/TeamConfiguration.md            |   2 +-
 docs/Configuration/webhook.md                      |   2 +-
 docs/DataModels/DevLakeDomainLayerSchema.md        | 180 +++++++++++++++------
 docs/Overview/SupportedDataSources.md              | 173 +++++++++++---------
 docs/Plugins/sonarqube.md                          |  56 +++++++
 .../ConfigUI/sonarqube-add-data-connections.png    | Bin 0 -> 76693 bytes
 static/img/ConfigUI/sonarqube-set-data-scope.png   | Bin 0 -> 70719 bytes
 10 files changed, 376 insertions(+), 130 deletions(-)

diff --git a/docs/Configuration/AdvancedMode.md 
b/docs/Configuration/AdvancedMode.md
index 6377d51644..aaf51ceb74 100644
--- a/docs/Configuration/AdvancedMode.md
+++ b/docs/Configuration/AdvancedMode.md
@@ -1,6 +1,6 @@
 ---
 title: "Blueprint Advanced Mode"
-sidebar_position: 8
+sidebar_position: 9
 description: >
   Using the advanced mode of Config-UI
 ---
@@ -304,6 +304,7 @@ You must choose at least one of `productId`, `projectId` 
and `executionId`.
 2. Then the number in the red square above is `ExecutionId`
 
 ### 9. BitBucket
+
 Below is an example for collecting a bitbucket repo.
 
 ```json
@@ -325,6 +326,32 @@ Below is an example for collecting a bitbucket repo.
 - `owner`: the owner of the repository.
 - `repo`: the bitbucket repository name.
 
+### 10. SonarQube
+
+Below is an example for collecting a SonarQube project.
+
+```json
+[
+  [
+    {
+      "plugin": "sonarqube",
+      "options": {
+        "connectionId": 1,
+        "projectKey": "testDevLake"
+      }
+    }
+  ]
+]
+```
+
+- `connectionId`: The ID of your SonarQube connection at page 
http://localhost:4000/connections/sonarqube.
+- `projectKey`: The project key of the SonarQube. To find the project key in 
SonarQube, please follow the steps:
+  - 1. Log in to the SonarQube management page.
+  - 2. Find the project for which you want to find the project key.
+  - 3. Click on the project name to enter the project homepage.
+  - 4. In the top menu bar of the project homepage, select "Project 
Information".
+  - 5. On the "Project Information" page, you will see the project key.
+
 ## Editing a Blueprint (Advanced Mode)
 
 This section is for editing a Blueprint in the Advanced Mode. To edit in the 
Normal mode, please refer to [this 
guide](Tutorial.md#editing-a-blueprint-normal-mode).
diff --git a/docs/Configuration/GitLab.md b/docs/Configuration/GitLab.md
index 69558b2974..3f45b6d9d3 100644
--- a/docs/Configuration/GitLab.md
+++ b/docs/Configuration/GitLab.md
@@ -62,7 +62,7 @@ Click `Test Connection`, if the connection is successful, 
click `Save Connection
 
 #### Projects
 
-Choose the Gitlab projects to collect. Limited by GitLab API, You need to type 
more than 2 characters to search.
+Choose the GitLab projects to collect. Limited by GitLab API, You need to type 
more than 2 characters to search.
 
 - If you want to collect public repositories in GitLab, please uncheck "Only 
search my repositories" to search all repositories.
 
diff --git a/docs/Configuration/SonarQube.md b/docs/Configuration/SonarQube.md
new file mode 100644
index 0000000000..69f6c1e6ef
--- /dev/null
+++ b/docs/Configuration/SonarQube.md
@@ -0,0 +1,62 @@
+---
+title: "SonarQube"
+sidebar_position: 7
+description: Config UI instruction for SonarQube
+---
+
+Visit config-ui: `http://localhost:4000`.
+
+### Step 1 - Add Data Connections
+
+![sonarqube-add-data-connections](/img/ConfigUI/sonarqube-add-data-connections.png)
+
+#### Connection Name
+
+Name your connection.
+
+#### Endpoint URL
+
+This should be a valid REST API endpoint
+
+- `https://YOUR_DOMAIN:YOUR_PORT/api/`
+
+The endpoint url should end with `/`.
+
+#### Auth Token(s)
+
+SonarQube personal access tokens are required to add a connection. Learn about 
[how to create a SonarQube personal access 
token](https://sonarqube.inria.fr/sonarqube/documentation/user-guide/user-token/).
+
+#### Proxy URL (Optional)
+
+If you are behind a corporate firewall or VPN you may need to utilize a proxy 
server. Enter a valid proxy server address on your network, e.g. 
`http://your-proxy-server.com:1080`
+
+#### Fixed Rate Limit (Optional)
+
+DevLake uses a dynamic rate limit at around 18,000 requests/hour to collect 
SonarQube data. You can adjust the rate limit if you want to increase or lower 
the speed.
+
+#### Test and Save Connection
+
+Click `Test Connection`, if the connection is successful, click `Save 
Connection` to add the connection.
+
+### Step 2 - Setting Data Scope
+
+![sonarqube-set-data-scope](/img/ConfigUI/sonarqube-set-data-scope.png)
+
+#### Projects
+
+Choose the SonarQube projects to collect.
+
+#### Data Entities
+
+Usually, you don't have to modify this part. However, if you don't want to 
collect certain SonarQube entities, you can unselect some entities to 
accerlerate the collection speed.
+
+- Code Quality Domain: SonarQube issues, issue code blocks, file metrics, 
hotspots, etc.
+- Cross Domain: SonarQube accounts, etc.
+
+### Step 3 - Setting Sync Frequency
+
+You can choose how often you would like to sync your data in this step by 
selecting a sync frequency option or enter a cron code to specify your prefered 
schedule.
+
+## Troubleshooting
+
+If you run into any problem, please check the 
[Troubleshooting](/Troubleshooting/Configuration.md) or [create an 
issue](https://github.com/apache/incubator-devlake/issues)
diff --git a/docs/Configuration/TeamConfiguration.md 
b/docs/Configuration/TeamConfiguration.md
index 8457fd76a0..0df678875d 100644
--- a/docs/Configuration/TeamConfiguration.md
+++ b/docs/Configuration/TeamConfiguration.md
@@ -1,6 +1,6 @@
 ---
 title: "Team Configuration"
-sidebar_position: 9
+sidebar_position: 10
 description: >
   Team Configuration
 ---
diff --git a/docs/Configuration/webhook.md b/docs/Configuration/webhook.md
index 97540285bb..16f681fdd6 100644
--- a/docs/Configuration/webhook.md
+++ b/docs/Configuration/webhook.md
@@ -1,6 +1,6 @@
 ---
 title: "Incoming Webhook"
-sidebar_position: 7
+sidebar_position: 8
 description: Config UI instruction for Webhook
 ---
 
diff --git a/docs/DataModels/DevLakeDomainLayerSchema.md 
b/docs/DataModels/DevLakeDomainLayerSchema.md
index 5138b28bbb..5ebe9682b4 100644
--- a/docs/DataModels/DevLakeDomainLayerSchema.md
+++ b/docs/DataModels/DevLakeDomainLayerSchema.md
@@ -64,7 +64,7 @@ Apache DevLake provides 2 plugins:
 An `issue` is the abstraction of Jira/Github/GitLab/TAPD/... issues.
 
 | **field**                   | **type** | **length** | **description**        
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-|:----------------------------|:---------|:-----------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [...]
+| :-------------------------- | :------- | :--------- | 
:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [...]
 | `id`                        | varchar  | 255        | An issue's `id` is 
composed of < plugin >:< Entity >:< PK0 >[:PK1]..." <ul><li>For Github issues, 
a Github issue's id is like "github:GithubIssues:< GithubIssueId >". Eg. 
'github:GithubIssues:1049355647'</li> <li>For Jira issues, a Github repo's id 
is like "jira:JiraIssues:< JiraSourceId >:< JiraIssueId >". Eg. 
'jira:JiraIssues:1:10063'. < JiraSourceId > is used to identify which jira 
source the issue came from, since DevLake users  [...]
 | `issue_key`                 | varchar  | 255        | The key of this issue. 
For example, the key of this Github 
[issue](https://github.com/apache/incubator-devlake/issues/1145) is 1145.       
                                                                                
                                                                                
                                                                                
                                                          [...]
 | `url`                       | varchar  | 255        | The url of the issue. 
It's a web address in most cases.                                               
                                                                                
                                                                                
                                                                                
                                                                                
               [...]
@@ -152,7 +152,7 @@ This table shows the work logged under issues. Usually, an 
issue has multiple wo
 A `board` is an issue list or a collection of issues. It's the abstraction of 
a Jira board, a Jira project, a [GitHub issue 
list](https://github.com/apache/incubator-devlake/issues) or a GitLab issue 
list. This table can be used to filter issues by the boards they belong to.
 
 | **field**      | **type** | **length** | **description**                     
                                                                                
                                                                                
                                                                                
                                                                                
                                                     | **key** |
-| :------------- | :------- | :--------- 
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 :------ |
+| :------------- | :------- | :--------- | 
:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | :------ |
 | `id`           | varchar  | 255        | A board's `id` is composed of "< 
plugin >:< Entity >:< PK0 >[:PK1]..." <ul><li>For a Github repo's issue list, 
the board id is like "< github >:< GithubRepos >:< ConnectionId >:< 
GithubRepoId >". Eg. "github:GithubRepo:384111310"</li> <li>For a Jira Board, 
the id is like the board id is like "< jira >:< JiraSourceId >< JiraBoards >:< 
ConnectionId >:< JiraBoardsId >". Eg. "jira:1:JiraBoards:1:12"</li></ul> | PK   
   |
 | `name`         | varchar  | 255        | The name of the board. Note: the 
board name of a Github project 'apache/incubator-devlake' is 
'apache/incubator-devlake', representing the [default issue 
list](https://github.com/apache/incubator-devlake/issues).                      
                                                                                
                                                                                
               |         |
 | `description`  | varchar  | 255        | The description of the board.       
                                                                                
                                                                                
                                                                                
                                                                                
                                                     |         |
@@ -214,7 +214,7 @@ This table shows the relation between sprints and issues 
that have been added to
 Information about GitHub or Gitlab repositories. A repository is always owned 
by a user.
 
 | **field**      | **type** | **length** | **description**                     
                                                                                
                                                                                
                   | **key**        |
-| :------------- | :------- | :--------- 
|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 :------------- |
+| :------------- | :------- | :--------- | 
:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | :------------- |
 | `id`           | varchar  | 255        | A repo's `id` is composed of "< 
plugin >:< Entity >:< PK0 >[:PK1]..."<br/>For example, a Github repo's id is 
like "< github >:< GithubRepos >:< ConnectionId >:< GithubRepoId >". Eg. 
'github:GithubRepos:1:384111310' | PK             |
 | `name`         | varchar  | 255        | The name of repo.                   
                                                                                
                                                                                
                   |                |
 | `description`  | varchar  | 255        | The description of repo.            
                                                                                
                                                                                
                   |                |
@@ -438,19 +438,19 @@ Events of pull requests.
 #### cicd_scopes
 
 Information about Jenkins Job, GitHub Action or Gitlab CI.
+
 - For GitHub: a GitHub repo is converted to a cicd_scope
 - For Jenkins: a GitLab project is converted to a cicd_scope
 - For GitLab: a Jenkins job is converted to a cicd_scope
 
-| **field**      | **type** | **length** | **description**                     
                                                                                
                                                                                
                               | **key**        |
-| :------------- | :------- | :--------- 
|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 :------------- |
-| `id`           | varchar  | 255        | A cicd_scope's `id` is composed of 
"< plugin >:< Entity >:< PK0 >[:PK1]..."<br/>For example, a Github cicd_scope's 
id is like "< github >:< GithubRepos >:< ConnectionId >:< GithubRepoId >". Eg. 
'github:GithubRepos:1:384111310' | PK             |
-| `name`         | varchar  | 255        | The name of cicd_scope.             
                                                                                
                                                                                
                               |                |
-| `description`  | varchar  | 255        | The description of cicd_scope.      
                                                                                
                                                                                
                               |                |
-| `url`          | varchar  | 255        | The url of cicd_scope. Eg. 
https://github.com/apache/incubator-devlake or 
https://jenkins.xxx.cn/view/PROD/job/OPS_releasev2/                             
                                                                         |      
          |
-| `created_date` | datetime | 3          | cicd_scope creation date            
                                                                                
                                                                                
                               |                |
-| `updated_date` | datetime | 3          | Date of the last data collection 
for this cicd_scope                                                             
                                                                                
                                  |                |
-
+| **field**      | **type** | **length** | **description**                     
                                                                                
                                                                                
                               | **key** |
+| :------------- | :------- | :--------- | 
:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | :------ |
+| `id`           | varchar  | 255        | A cicd_scope's `id` is composed of 
"< plugin >:< Entity >:< PK0 >[:PK1]..."<br/>For example, a Github cicd_scope's 
id is like "< github >:< GithubRepos >:< ConnectionId >:< GithubRepoId >". Eg. 
'github:GithubRepos:1:384111310' | PK      |
+| `name`         | varchar  | 255        | The name of cicd_scope.             
                                                                                
                                                                                
                               |         |
+| `description`  | varchar  | 255        | The description of cicd_scope.      
                                                                                
                                                                                
                               |         |
+| `url`          | varchar  | 255        | The url of cicd_scope. Eg. 
https://github.com/apache/incubator-devlake or 
https://jenkins.xxx.cn/view/PROD/job/OPS_releasev2/                             
                                                                         |      
   |
+| `created_date` | datetime | 3          | cicd_scope creation date            
                                                                                
                                                                                
                               |         |
+| `updated_date` | datetime | 3          | Date of the last data collection 
for this cicd_scope                                                             
                                                                                
                                  |         |
 
 #### cicd_pipelines
 
@@ -496,30 +496,118 @@ A cicd_task is a single job of ci/cd.
 | `finished_date` | datetime        | 3          | when did this task finish   
                                    |         |
 | `environment`   | varchar         | 255        | To indicate the environment 
in which the task is running        |         |
 
+### Domain 5 - Code Quality
+
+The names of tables in the 'Code Quality' domain will start with a prefix cq\_
+
+#### cq_projects
+
+| **field**            | **type** | **length** | **description**               
                                                      | **key** |
+| :------------------- | :------- | :--------- | 
:----------------------------------------------------------------------------------
 | :------ |
+| `id`                 | varchar  | 255        | This key is generated based 
on details from the original plugin                     | PK      |
+| `name`               | varchar  | 255        | The name of the project in 
SonarQube                                                |         |
+| `qualifier`          | varchar  | 255        | The type of project. Examples 
include "TRK" for regular projects and "VW" for views |         |
+| `visibility`         | varchar  | 64         | The visibility of the 
project. Examples include "public" and "private"              |         |
+| `last_analysis_date` | datatime | 3          | The date and time of the most 
recent analysis of the project                        |         |
+| `commit_sha`         | varchar  | 128        | It represents the version 
number or code version identifier of a project            |         |
+
+#### cq_issues
+
+| **field**                   | **type** | **length** | **description**        
                                                 | **key** |
+| :-------------------------- | :------- | :--------- | 
:---------------------------------------------------------------------- | 
:------ |
+| `id`                        | varchar  | 255        | This key is generated 
based on details from the original plugin         | PK      |
+| `rule`                      | varchar  | 255        | The key of the rule 
that the issue is violating                         |         |
+| `severity`                  | varchar  | 255        | The severity level of 
the issue                                         |         |
+| `component`                 | varchar  | 255        | The name of the 
component where the issue was found                     |         |
+| `project_key`               | varchar  | 255        | The key of the project 
that the issue belongs to                        |         |
+| `line`                      | bigint   |            | The line number where 
the issue was found                               |         |
+| `status`                    | varchar  | 255        | The status of the 
issue                                                 |         |
+| `message`                   | longtext |            | The message associated 
with the issue                                   |         |
+| `debt`                      | bigint   |            | The estimated time 
required to fix the issue                            |         |
+| `effort`                    | bigint   |            | The effort required to 
fix the issue                                    |         |
+| `commit_author_email`       | varchar  | 255        | The email address of 
the author of the commit that introduced the issue |         |
+| `assignee`                  | varchar  | 255        | The person assigned to 
fix the issue                                    |         |
+| `hash`                      | varchar  | 255        | A hash code for the 
issue                                               |         |
+| `tags`                      | varchar  | 255        | Any tags associated 
with the issue                                      |         |
+| `type`                      | varchar  | 255        | The type of the issue  
                                                 |         |
+| `scope`                     | varchar  | 128        | The scope of the issue 
                                                 |         |
+| `start_line`                | bigint   | 255        | The starting line of 
the issue                                          |         |
+| `end_line`                  | bigint   | 255        | The ending line of the 
issue                                            |         |
+| `start_offset`              | bigint   | 255        | The starting offset of 
the issue                                        |         |
+| `end_offset`                | bigint   | 255        | The ending offset of 
the issue                                          |         |
+| `vulnerability_probability` | varchar  | 100        | The probability of the 
issue being a vulnerability                      |         |
+| `security_category`         | varchar  | 100        | The security category 
of the issue                                      |         |
+| `created_date`              | datetime | 3          | The time when the 
issue was created                                     |         |
+| `updated_date`              | datetime | 3          | The time when the 
issue was last updated                                |         |
+
+#### cq_issue_code_blocks
+
+| **field**      | **type** | **length** | **description**                     
                                                  | **key** |
+| :------------- | :------- | :--------- | 
:------------------------------------------------------------------------------------
 | :------ |
+| `id`           | varchar  | 255        | This key is generated based on 
details from the original plugin                       | PK      |
+| `issue_key`    | varchar  | 255        | A string that stores the key of the 
issue that the code block is associated with      |         |
+| `component`    | varchar  | 255        | A string that stores the name of 
the component that the code block is associated with |         |
+| `start_line`   | bigint   | 255        | An integer that stores the line 
number where the code block starts                    |         |
+| `end_line`     | bigint   | 255        | An integer that stores the line 
number where the code block ends                      |         |
+| `start_offset` | bigint   | 255        | An integer that stores the offset 
where the code block starts                         |         |
+| `end_offset`   | bigint   | 255        | An integer that stores the offset 
where the code block ends                           |         |
+| `msg`          | longtext |            | A long text field that stores the 
message associated with the code block              |         |
+
+#### cq_file_metrics
+
+| **field**                                  | **type** | **length** | 
**description**                                                 | **key** |
+| :----------------------------------------- | :------- | :--------- | 
:-------------------------------------------------------------- | :------ |
+| `id`                                       | varchar  | 255        | This 
key is generated based on details from the original plugin | PK      |
+| `project_key`                              | varchar  | 255        | The key 
of the project that the issue belongs to                | PK      |
+| `file_name`                                | longtext |            | 
longtext fields that store the name of the file                 |         |
+| `file_path`                                | longtext |            | 
longtext fields that store the path of the file                 |         |
+| `file_language`                            | longtext |            | 
longtext fields that store the language of the file             |         |
+| `code_smells`                              | bigint   |            | Code 
smells of this file                                        |         |
+| `sqale_index`                              | bigint   |            | Sqale 
index of the file                                         |         |
+| `sqale_rating`                             | double   |            | Sqale 
rating of the file                                        |         |
+| `bugs`                                     | bigint   |            | Bugs 
rating of the file                                         |         |
+| `reliability_rating`                       | longtext |            | 
Reliability rating of the file                                  |         |
+| `vulnerabilities`                          | bigint   |            | 
Vulnerabilities of the file                                     |         |
+| `security_rating`                          | longtext |            | 
Security rating of the file                                     |         |
+| `security_hotspots`                        | bigint   |            | 
Security hotspots of the file                                   |         |
+| `security_hotspots_reviewed`               | double   |            | 
Security hotspots reviewed of the file                          |         |
+| `security_review_rating`                   | longtext |            | 
Security review rating of the file                              |         |
+| `ncloc`                                    | bigint   |            | Ncloc 
of the file                                               |         |
+| `coverage`                                 | double   |            | 
Ncoverage of the file                                           |         |
+| `lines_to_cover`                           | bigint   |            | Lines 
to cover of the file                                      |         |
+| `duplicated_lines_density`                 | double   |            | 
Duplicated lines density of the file                            |         |
+| `duplicated_blocks`                        | bigint   |            | 
Duplicated blocks of the file                                   |         |
+| `duplicated_files`                         | bigint   |            | 
Duplicated files of the file                                    |         |
+| `duplicated_lines`                         | bigint   |            | 
Duplicated lines of the file                                    |         |
+| `effort_to_reach_maintainability_rating_a` | bigint   |            | Effort 
to reach maintainability rating a of the file            |         |
+| `complexity`                               | bigint   |            | 
Complexity of the file                                          |         |
+| `cognitive_complexity`                     | bigint   |            | 
Cognitive complexity of the file                                |         |
+| `num_of_lines`                             | bigint   |            | Num of 
lines of the file                                        |         |
+
 ### Project Metric Entities
 
 #### project_pr_metrics
 
-| **field** | **type** | **length** | **description**                          
                                              | **key** |
-| :-------- | :-------- 
|:-----------|:---------------------------------------------------------------------------------------|
 :-------- |
-| `id` | varchar | 255        | Id of PR                                       
                                        | PK |
-| `project_name` | varchar | 100        | The project that this PR belongs to  
                                                  | PK |
-| `first_review_id` | longtext |            | The id of the first review on 
this pr                                                  |  |
-| `first_commit_sha` | longtext |            | The sha of the first commit     
                                                       |  |
-| `pr_coding_time` | bigint |            | The time it takes from the first 
commit until a PR is issued                           |  |
-| `pr_pickup_time` | bigint |            | The time it takes from when a PR is 
issued until the first comment is added to that PR |  |
-| `pr_review_time` | bigint |            | The time it takes to complete a 
code review of a PR before it gets merged              |  |
-| `deployment_id` | longtext |            | The id of cicd_task which deploy 
the commits of this PR                                |  |
-| `pr_deploy_time` | bigint |            | The time it takes from when a PR is 
merged to when it is deployed                      |  |
-| `pr_cycle_time` | bigint |            | The total time from the first commit 
to when the PR is deployed                        |  |
+| **field**          | **type** | **length** | **description**                 
                                                       | **key** |
+| :----------------- | :------- | :--------- | 
:-------------------------------------------------------------------------------------
 | :------ |
+| `id`               | varchar  | 255        | Id of PR                        
                                                       | PK      |
+| `project_name`     | varchar  | 100        | The project that this PR 
belongs to                                                    | PK      |
+| `first_review_id`  | longtext |            | The id of the first review on 
this pr                                                  |         |
+| `first_commit_sha` | longtext |            | The sha of the first commit     
                                                       |         |
+| `pr_coding_time`   | bigint   |            | The time it takes from the 
first commit until a PR is issued                           |         |
+| `pr_pickup_time`   | bigint   |            | The time it takes from when a 
PR is issued until the first comment is added to that PR |         |
+| `pr_review_time`   | bigint   |            | The time it takes to complete a 
code review of a PR before it gets merged              |         |
+| `deployment_id`    | longtext |            | The id of cicd_task which 
deploy the commits of this PR                                |         |
+| `pr_deploy_time`   | bigint   |            | The time it takes from when a 
PR is merged to when it is deployed                      |         |
+| `pr_cycle_time`    | bigint   |            | The total time from the first 
commit to when the PR is deployed                        |         |
 
 #### project_issue_metrics
 
-| **field** | **type** | **length** | **description**                          
   | **key** |
-| :-------- | :-------- 
|:-----------|:--------------------------------------------| :-------- |
-| `id` | varchar | 255        | Id of Issue                                 | 
PK |
-| `project_name` | varchar | 100        | The project that this Issue belongs 
to      | PK |
-| `deployment_id` | longtext |            | The id of cicd_task which cause an 
incident |  |
+| **field**       | **type** | **length** | **description**                    
         | **key** |
+| :-------------- | :------- | :--------- | 
:------------------------------------------ | :------ |
+| `id`            | varchar  | 255        | Id of Issue                        
         | PK      |
+| `project_name`  | varchar  | 100        | The project that this Issue 
belongs to      | PK      |
+| `deployment_id` | longtext |            | The id of cicd_task which cause an 
incident |         |
 
 ### Cross-Domain Entities
 
@@ -612,29 +700,29 @@ metrics, such as _'No. of Issue closed by contributor', 
'No. of commits by contr
 
 #### project
 
-|   **field**   | **type** | **length** | **description**               | 
**key** |
-| ------------- | -------- | ---------- | ----------------------------- | 
------- |
-| `name`        | varchar  | 255        | name for project              | PK   
   |
-| `description` | longtext |            | description of the project    |      
   |
-| `created_at`  | datetime | 3          | created time of project       |      
   |
-| `updated_at`  | datetime | 3          | last updated time of project  |      
   | 
+| **field**     | **type** | **length** | **description**              | 
**key** |
+| ------------- | -------- | ---------- | ---------------------------- | 
------- |
+| `name`        | varchar  | 255        | name for project             | PK    
  |
+| `description` | longtext |            | description of the project   |       
  |
+| `created_at`  | datetime | 3          | created time of project      |       
  |
+| `updated_at`  | datetime | 3          | last updated time of project |       
  |
 
 #### project_metric_settings
 
-|    **field**    | **type** | **length** | **description**                    
                        | **key** |
-| --------------- | -------- | ---------- | 
---------------------------------------------------------- | ------- |
-| `project_name`  | varchar  | 255        | name for project                   
                        | PK      |
-| `plugin_name`   | varchar  | 255        | name for plugin                    
                        | PK      |
-| `plugin_option` | longtext |            | check if metric plugins have been 
enabled by the project   |         |
-| `enable`        | tinyint  | 1          | if the metric plugins is enabled   
                        |         |
+| **field**       | **type** | **length** | **description**                    
                      | **key** |
+| --------------- | -------- | ---------- | 
-------------------------------------------------------- | ------- |
+| `project_name`  | varchar  | 255        | name for project                   
                      | PK      |
+| `plugin_name`   | varchar  | 255        | name for plugin                    
                      | PK      |
+| `plugin_option` | longtext |            | check if metric plugins have been 
enabled by the project |         |
+| `enable`        | tinyint  | 1          | if the metric plugins is enabled   
                      |         |
 
 #### project_mapping
 
-|   **field**    | **type** | **length** | **description**                     
                          | **key** |
-| -------------- | -------- | ---------- | 
------------------------------------------------------------- | ------- |
-| `project_name` | varchar  | 255        | name for project                    
                          | PK      |
-| `table`        | varchar  | 255        | the table name of 
[Scope](../Overview/KeyConcepts.md#data-scope)          | PK      |
-| `row_id`       | varchar  | 255        | the row_id in the 
[Scope](../Overview/KeyConcepts.md#data-scope) table    | PK      |
+| **field**      | **type** | **length** | **description**                     
                                   | **key** |
+| -------------- | -------- | ---------- | 
---------------------------------------------------------------------- | 
------- |
+| `project_name` | varchar  | 255        | name for project                    
                                   | PK      |
+| `table`        | varchar  | 255        | the table name of 
[Scope](../Overview/KeyConcepts.md#data-scope)       | PK      |
+| `row_id`       | varchar  | 255        | the row_id in the 
[Scope](../Overview/KeyConcepts.md#data-scope) table | PK      |
 
 <br/>
 
diff --git a/docs/Overview/SupportedDataSources.md 
b/docs/Overview/SupportedDataSources.md
index 20e6fbea3c..608ca2a6b6 100644
--- a/docs/Overview/SupportedDataSources.md
+++ b/docs/Overview/SupportedDataSources.md
@@ -9,21 +9,20 @@ sidebar_position: 5
 
 Apache DevLake(incubating) supports the following data sources. The data from 
each data source is collected with one or more plugins. Detailed plugin docs 
can be found [here](/docs/Plugins).
 
-| Data Source      | Domain(s)                                                 
                  | Supported Versions                   | Config UI 
Availability | Triggered Plugins           | Collection Mode                    
                            |
-|------------------|-----------------------------------------------------------------------------|--------------------------------------|------------------------|-----------------------------|----------------------------------------------------------------|
-| GitHub           | Source Code Management, Code Review, Issue Tracking, 
CI/CD (GitHub Actions) | Cloud                                | Available       
       | `github`, `gitextractor`    | Full Refresh                             
                      |
-| GitLab           | Source Code Management, Code Review, Issue Tracking, 
CI/CD (GitLab CI)      | Cloud, Community Edition 13.x+       | Available       
       | `gitlab`, `gitextractor`    | Full Refresh, Incremental Sync(for 
`issues`,`MRs`)             |
-| Jira             | Issue Tracking                                            
                  | Cloud, Server 7.x+, Data Center 7.x+ | Available            
  | `jira`                      | Full Refresh, Incremental Sync(for `issues` 
and related)       |
-| Jenkins          | CI/CD                                                     
                  | 2.263.x+                             | Available            
  | `jenkins`                   | Full Refresh                                  
                 |
-| BitBucket (Beta) | Source Code Management, Code Review                       
                  | Cloud                                | Advanced Mode 
Available                    | `bitbucket`, `gitextractor` | Full Refresh       
                                            |
-| TAPD (Beta)      | Issue Tracking                                            
                  | Cloud                                | Advanced Mode 
Available          | `tapd`                      | Full Refresh, Incremental 
Sync(for `stories`, `bugs`, `tasks`) |
-| Zentao (Beta)    | Issue Tracking                                            
                  | Cloud                                | Advanced Mode 
Available          | `zentao`                    | Full Refresh                 
                                  |
-| Gitee (WIP)      | Source Code Management, Code Review, Issue Tracking       
                  | Cloud                                | Not Available        
  | `gitee`, `gitextractor`     | Full Refresh, Incremental Sync(for 
`issues`,`MRs`)             |
-| PagerDuty (WIP)  | Issue Tracking                                            
                  | Cloud                                | Not Available        
  | `pagerduty`                 | Full Refresh                                  
                 |
-| Feishu (WIP)     | Calendar                                                  
                  | Cloud                                | Not Available        
  | `feishu`                    | Full Refresh                                  
                 |
-| AE               | Source Code Management                                    
                  | On-prem                              | Not Available        
  | `ae`                        | Full Refresh                                  
                 |
-
-
+| Data Source      | Domain(s)                                                 
                  | Supported Versions                   | Config UI 
Availability  | Triggered Plugins           | Collection Mode                   
                             |
+| ---------------- | 
--------------------------------------------------------------------------- | 
------------------------------------ | ----------------------- | 
--------------------------- | 
-------------------------------------------------------------- |
+| GitHub           | Source Code Management, Code Review, Issue Tracking, 
CI/CD (GitHub Actions) | Cloud                                | Available       
        | `github`, `gitextractor`    | Full Refresh                            
                       |
+| GitLab           | Source Code Management, Code Review, Issue Tracking, 
CI/CD (GitLab CI)      | Cloud, Community Edition 13.x+       | Available       
        | `gitlab`, `gitextractor`    | Full Refresh, Incremental Sync(for 
`issues`,`MRs`)             |
+| Jira             | Issue Tracking                                            
                  | Cloud, Server 7.x+, Data Center 7.x+ | Available            
   | `jira`                      | Full Refresh, Incremental Sync(for `issues` 
and related)       |
+| Jenkins          | CI/CD                                                     
                  | 2.263.x+                             | Available            
   | `jenkins`                   | Full Refresh                                 
                  |
+| BitBucket (Beta) | Source Code Management, Code Review                       
                  | Cloud                                | Advanced Mode 
Available | `bitbucket`, `gitextractor` | Full Refresh                          
                         |
+| TAPD (Beta)      | Issue Tracking                                            
                  | Cloud                                | Advanced Mode 
Available | `tapd`                      | Full Refresh, Incremental Sync(for 
`stories`, `bugs`, `tasks`) |
+| Zentao (Beta)    | Issue Tracking                                            
                  | Cloud                                | Advanced Mode 
Available | `zentao`                    | Full Refresh                          
                         |
+| Gitee (WIP)      | Source Code Management, Code Review, Issue Tracking       
                  | Cloud                                | Not Available        
   | `gitee`, `gitextractor`     | Full Refresh, Incremental Sync(for 
`issues`,`MRs`)             |
+| PagerDuty (WIP)  | Issue Tracking                                            
                  | Cloud                                | Not Available        
   | `pagerduty`                 | Full Refresh                                 
                  |
+| Feishu (WIP)     | Calendar                                                  
                  | Cloud                                | Not Available        
   | `feishu`                    | Full Refresh                                 
                  |
+| AE               | Source Code Management                                    
                  | On-prem                              | Not Available        
   | `ae`                        | Full Refresh                                 
                  |
+| Sonarqube        | CODE QUALITY                                              
                  | SonarQube(Server)                    | Available            
   | `sonarqube`                 | Full Refresh                                 
                  |
 
 ## Data Collection Scope By Each Plugin
 
@@ -31,55 +30,59 @@ This table shows the entities collected by each plugin. 
Domain layer entities in
 ✅ : Collect by default.
 💪 : Collect not by default. You need to add the corresponding subtasks to 
collect these entities in the [advanced mode](../Configuration/AdvancedMode.md).
 
-| Domain Layer Entities                                                        
               | ae  | dora | gitextractor | incoming webhook | github | gitlab 
| jenkins | jira | refdiff | tapd |
-| 
-------------------------------------------------------------------------------------------
 | --- | ---- | ------------ | ---------------- | ------ | ------ | ------- | 
---- | ------- | ---- |
-| [accounts](../DataModels/DevLakeDomainLayerSchema.md/#accounts)              
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         | ✅   |
-| [board_issues](../DataModels/DevLakeDomainLayerSchema.md/#board_issues)      
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         | ✅   |
-| [board_repos](../DataModels/DevLakeDomainLayerSchema.md/#board_repos)        
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         |      |
-| [board_sprints](../DataModels/DevLakeDomainLayerSchema.md/#board_sprints)    
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |
-| [boards](../DataModels/DevLakeDomainLayerSchema.md/#boards)                  
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         | ✅   |
-| 
[cicd_pipeline_commits](../DataModels/DevLakeDomainLayerSchema.md/#cicd_pipeline_commits)
   |     | ✅   |              |                  | ✅     | ✅     | ✅      |     
 |         |      |
-| [cicd_pipelines](../DataModels/DevLakeDomainLayerSchema.md/#cicd_pipelines)  
               |     | ✅   |              |                  | ✅     | ✅     | 
✅      |      |         |      |
-| [cicd_scopes](../DataModels/DevLakeDomainLayerSchema.md/#cicd_scopes)        
               |     | ✅   |              |                  | ✅     | ✅     | 
✅      |      |         |      |
-| [cicd_tasks](../DataModels/DevLakeDomainLayerSchema.md/#cicd_tasks)          
               |     | ✅   |              | 💪               | ✅     | ✅     | ✅ 
     |      |         |      |
-| 
[commit_file_components](../DataModels/DevLakeDomainLayerSchema.md/#commit_file_components)
 |     |      | ✅           |                  |        |        |         |    
  |         |      |
-| [commit_files](../DataModels/DevLakeDomainLayerSchema.md/#commit_files)      
               |     |      | ✅           |                  |        |        
|         |      |         |      |
-| 
[commit_line_change](../DataModels/DevLakeDomainLayerSchema.md/#commit_line_change)
         |     |      | ✅           |                  |        |        |      
   |      |         |      |
-| [commit_parents](../DataModels/DevLakeDomainLayerSchema.md/#commit_parents)  
               |     |      | ✅           |                  |        |        
|         |      |         |      |
-| [commits](../DataModels/DevLakeDomainLayerSchema.md/#commits)                
               | ✅  |      | ✅           |                  | 💪     | 💪     |   
      |      |         |      |
-| [commits_diffs](../DataModels/DevLakeDomainLayerSchema.md/#commits_diffs)    
               |     |      |              |                  |        |        
|         |      | ✅      |      |
-| [components](../DataModels/DevLakeDomainLayerSchema.md/#components)          
               |     |      |              |                  |        |        
|         |      |         |      |
-| 
[finished_commits_diffs](../DataModels/DevLakeDomainLayerSchema.md/#finished_commits_diffs)
 |     |      |              |                  |        |        |         |   
   |         |      |
-| 
[issue_changelogs](../DataModels/DevLakeDomainLayerSchema.md/#issue_changelogs) 
            |     |      |              |                  |        |        |  
       | ✅   |         | ✅   |
-| 
[issue_comments](../DataModels/DevLakeDomainLayerSchema.md/#issue_commentswip)  
            |     |      |              |                  | ✅     |        |   
      |      |         | ✅   |
-| [issue_commits](../DataModels/DevLakeDomainLayerSchema.md/#issue_commits)    
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   |
-| [issue_labels](../DataModels/DevLakeDomainLayerSchema.md/#issue_labels)      
               |     |      |              |                  | ✅     | ✅     | 
        |      |         | ✅   |
-| 
[issue_repo_commits](../DataModels/DevLakeDomainLayerSchema.md/#issue_repo_commits)
         |     |      |              |                  |        |        |     
    | ✅   |         |      |
-| [issue_worklogs](../DataModels/DevLakeDomainLayerSchema.md/#issue_worklogs)  
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   |
-| [issues](../DataModels/DevLakeDomainLayerSchema.md/#issues)                  
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |
-| 
[project_issue_metrics](../DataModels/DevLakeDomainLayerSchema.md/#project_issue_metrics)
   |     | ✅   |              |                  | ✅     | ✅     |         | ✅  
 |         | ✅   |
-| 
[project_mapping](../DataModels/DevLakeDomainLayerSchema.md/#project_mapping)   
            |     | ✅   |              |                  | ✅     | ✅     | ✅   
   | ✅   |         | ✅   |
-| 
[project_metrics](../DataModels/DevLakeDomainLayerSchema.md/#project_metrics)   
            |     | ✅   |              |                  | ✅     | ✅     | ✅   
   | ✅   |         | ✅   |
-| 
[project_pr_metrics](../DataModels/DevLakeDomainLayerSchema.md/#project_pr_metrics)
         |     | ✅   |              |                  | ✅     | ✅     |        
 |      |         | ✅   |
-| [projects](../DataModels/DevLakeDomainLayerSchema.md/#project)               
               |     | ✅   |              |                  | ✅     | ✅     | 
✅      | ✅   |         | ✅   |
-| 
[pull_request_comments](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_comments)
   |     |      |              |                  | ✅     | ✅     |         |   
   |         |      |
-| 
[pull_request_commits](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_commits)
     |     |      |              |                  | ✅     | ✅     |         | 
     |         |      |
-| 
[pull_request_issues](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_issues)
       |     |      |              |                  | ✅     |        |        
 |      |         |      |
-| 
[pull_request_labels](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_labels)
       |     |      |              |                  | ✅     | ✅     |         
|      |         |      |
-| [pull_requests](../DataModels/DevLakeDomainLayerSchema.md/#pull_requests)    
               |     |      |              |                  | ✅     | ✅     | 
        |      |         |      |
-| [ref_commits](../DataModels/DevLakeDomainLayerSchema.md/#ref_commits)        
               |     |      |              |                  |        |        
|         |      | ✅      |      |
-| [refs](../DataModels/DevLakeDomainLayerSchema.md/#refs)                      
               |     |      | ✅           |                  |        |        
|         |      | ✅      |      |
-| 
[refs_issues_diffs](../DataModels/DevLakeDomainLayerSchema.md/#refs_issues_diffs)
           |     |      |              |                  |        |        |   
      |      | ✅      |      |
-| 
[ref_pr_cherry_picks](../DataModels/DevLakeDomainLayerSchema.md/#ref_pr_cherry_picks)
       |     |      |              |                  |        |        |       
  |      | ✅      |      |
-| [repo_commits](../DataModels/DevLakeDomainLayerSchema.md/#repo_commits)      
               |     |      | ✅           |                  | 💪     | 💪     |  
       |      |         |      |
-| [repo_snapshot](../DataModels/DevLakeDomainLayerSchema.md/#repo_snapshot)    
               |     |      | ✅           |                  |        |        
|         |      |         |      |
-| [repos](../DataModels/DevLakeDomainLayerSchema.md/#repos)                    
               |     |      |              |                  | ✅     | ✅     | 
        |      |         |      |
-| [sprint_issues](../DataModels/DevLakeDomainLayerSchema.md/#sprint_issues)    
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |
-| [sprints](../DataModels/DevLakeDomainLayerSchema.md/#sprints)                
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |
-| [team_users](../DataModels/DevLakeDomainLayerSchema.md/#team_users)          
               |     |      |              |                  |        |        
|         |      |         |      |
-| [teams](../DataModels/DevLakeDomainLayerSchema.md/#teams)                    
               |     |      |              |                  |        |        
|         |      |         |      |
-| [user_account](../DataModels/DevLakeDomainLayerSchema.md/#user_accounts)     
               |     |      |              |                  |        |        
|         |      |         |      |
-| [users](../DataModels/DevLakeDomainLayerSchema.md/#users)                    
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   |
+| Domain Layer Entities                                                        
               | ae  | dora | gitextractor | incoming webhook | github | gitlab 
| jenkins | jira | refdiff | tapd | sonarqube |
+| 
-------------------------------------------------------------------------------------------
 | --- | ---- | ------------ | ---------------- | ------ | ------ | ------- | 
---- | ------- | ---- | --------- |
+| [accounts](../DataModels/DevLakeDomainLayerSchema.md/#accounts)              
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         | ✅   | ✅        |
+| [board_issues](../DataModels/DevLakeDomainLayerSchema.md/#board_issues)      
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         | ✅   |           |
+| [board_repos](../DataModels/DevLakeDomainLayerSchema.md/#board_repos)        
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         |      |           |
+| [board_sprints](../DataModels/DevLakeDomainLayerSchema.md/#board_sprints)    
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |           |
+| [boards](../DataModels/DevLakeDomainLayerSchema.md/#boards)                  
               |     |      |              |                  | ✅     | ✅     | 
        | ✅   |         | ✅   |           |
+| 
[cicd_pipeline_commits](../DataModels/DevLakeDomainLayerSchema.md/#cicd_pipeline_commits)
   |     | ✅   |              |                  | ✅     | ✅     | ✅      |     
 |         |      |           |
+| [cicd_pipelines](../DataModels/DevLakeDomainLayerSchema.md/#cicd_pipelines)  
               |     | ✅   |              |                  | ✅     | ✅     | 
✅      |      |         |      |           |
+| [cicd_scopes](../DataModels/DevLakeDomainLayerSchema.md/#cicd_scopes)        
               |     | ✅   |              |                  | ✅     | ✅     | 
✅      |      |         |      |           |
+| [cicd_tasks](../DataModels/DevLakeDomainLayerSchema.md/#cicd_tasks)          
               |     | ✅   |              | 💪               | ✅     | ✅     | ✅ 
     |      |         |      |           |
+| 
[commit_file_components](../DataModels/DevLakeDomainLayerSchema.md/#commit_file_components)
 |     |      | ✅           |                  |        |        |         |    
  |         |      |           |
+| [commit_files](../DataModels/DevLakeDomainLayerSchema.md/#commit_files)      
               |     |      | ✅           |                  |        |        
|         |      |         |      |           |
+| 
[commit_line_change](../DataModels/DevLakeDomainLayerSchema.md/#commit_line_change)
         |     |      | ✅           |                  |        |        |      
   |      |         |      |           |
+| [commit_parents](../DataModels/DevLakeDomainLayerSchema.md/#commit_parents)  
               |     |      | ✅           |                  |        |        
|         |      |         |      |           |
+| [commits](../DataModels/DevLakeDomainLayerSchema.md/#commits)                
               | ✅  |      | ✅           |                  | 💪     | 💪     |   
      |      |         |      |           |
+| [commits_diffs](../DataModels/DevLakeDomainLayerSchema.md/#commits_diffs)    
               |     |      |              |                  |        |        
|         |      | ✅      |      |           |
+| [components](../DataModels/DevLakeDomainLayerSchema.md/#components)          
               |     |      |              |                  |        |        
|         |      |         |      |           |
+| 
[finished_commits_diffs](../DataModels/DevLakeDomainLayerSchema.md/#finished_commits_diffs)
 |     |      |              |                  |        |        |         |   
   |         |      |           |
+| 
[issue_changelogs](../DataModels/DevLakeDomainLayerSchema.md/#issue_changelogs) 
            |     |      |              |                  |        |        |  
       | ✅   |         | ✅   |           |
+| 
[issue_comments](../DataModels/DevLakeDomainLayerSchema.md/#issue_commentswip)  
            |     |      |              |                  | ✅     |        |   
      |      |         | ✅   |           |
+| [issue_commits](../DataModels/DevLakeDomainLayerSchema.md/#issue_commits)    
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   |           |
+| [issue_labels](../DataModels/DevLakeDomainLayerSchema.md/#issue_labels)      
               |     |      |              |                  | ✅     | ✅     | 
        |      |         | ✅   |           |
+| 
[issue_repo_commits](../DataModels/DevLakeDomainLayerSchema.md/#issue_repo_commits)
         |     |      |              |                  |        |        |     
    | ✅   |         |      |           |
+| [issue_worklogs](../DataModels/DevLakeDomainLayerSchema.md/#issue_worklogs)  
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   |           |
+| [issues](../DataModels/DevLakeDomainLayerSchema.md/#issues)                  
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |           |
+| 
[project_issue_metrics](../DataModels/DevLakeDomainLayerSchema.md/#project_issue_metrics)
   |     | ✅   |              |                  | ✅     | ✅     |         | ✅  
 |         | ✅   |           |
+| 
[project_mapping](../DataModels/DevLakeDomainLayerSchema.md/#project_mapping)   
            |     | ✅   |              |                  | ✅     | ✅     | ✅   
   | ✅   |         | ✅   |           |
+| 
[project_metrics](../DataModels/DevLakeDomainLayerSchema.md/#project_metrics)   
            |     | ✅   |              |                  | ✅     | ✅     | ✅   
   | ✅   |         | ✅   |           |
+| 
[project_pr_metrics](../DataModels/DevLakeDomainLayerSchema.md/#project_pr_metrics)
         |     | ✅   |              |                  | ✅     | ✅     |        
 |      |         | ✅   |           |
+| [projects](../DataModels/DevLakeDomainLayerSchema.md/#project)               
               |     | ✅   |              |                  | ✅     | ✅     | 
✅      | ✅   |         | ✅   |           |
+| 
[pull_request_comments](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_comments)
   |     |      |              |                  | ✅     | ✅     |         |   
   |         |      |           |
+| 
[pull_request_commits](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_commits)
     |     |      |              |                  | ✅     | ✅     |         | 
     |         |      |           |
+| 
[pull_request_issues](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_issues)
       |     |      |              |                  | ✅     |        |        
 |      |         |      |           |
+| 
[pull_request_labels](../DataModels/DevLakeDomainLayerSchema.md/#pull_request_labels)
       |     |      |              |                  | ✅     | ✅     |         
|      |         |      |           |
+| [pull_requests](../DataModels/DevLakeDomainLayerSchema.md/#pull_requests)    
               |     |      |              |                  | ✅     | ✅     | 
        |      |         |      |           |
+| [ref_commits](../DataModels/DevLakeDomainLayerSchema.md/#ref_commits)        
               |     |      |              |                  |        |        
|         |      | ✅      |      |           |
+| [refs](../DataModels/DevLakeDomainLayerSchema.md/#refs)                      
               |     |      | ✅           |                  |        |        
|         |      | ✅      |      |           |
+| 
[refs_issues_diffs](../DataModels/DevLakeDomainLayerSchema.md/#refs_issues_diffs)
           |     |      |              |                  |        |        |   
      |      | ✅      |      |           |
+| 
[ref_pr_cherry_picks](../DataModels/DevLakeDomainLayerSchema.md/#ref_pr_cherry_picks)
       |     |      |              |                  |        |        |       
  |      | ✅      |      |           |
+| [repo_commits](../DataModels/DevLakeDomainLayerSchema.md/#repo_commits)      
               |     |      | ✅           |                  | 💪     | 💪     |  
       |      |         |      |           |
+| [repo_snapshot](../DataModels/DevLakeDomainLayerSchema.md/#repo_snapshot)    
               |     |      | ✅           |                  |        |        
|         |      |         |      |           |
+| [repos](../DataModels/DevLakeDomainLayerSchema.md/#repos)                    
               |     |      |              |                  | ✅     | ✅     | 
        |      |         |      |           |
+| [sprint_issues](../DataModels/DevLakeDomainLayerSchema.md/#sprint_issues)    
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |           |
+| [sprints](../DataModels/DevLakeDomainLayerSchema.md/#sprints)                
               |     |      |              |                  | ✅     |        
|         | ✅   |         | ✅   |           |
+| [team_users](../DataModels/DevLakeDomainLayerSchema.md/#team_users)          
               |     |      |              |                  |        |        
|         |      |         |      |           |
+| [teams](../DataModels/DevLakeDomainLayerSchema.md/#teams)                    
               |     |      |              |                  |        |        
|         |      |         |      |           |
+| [user_account](../DataModels/DevLakeDomainLayerSchema.md/#user_accounts)     
               |     |      |              |                  |        |        
|         |      |         |      |           |
+| [users](../DataModels/DevLakeDomainLayerSchema.md/#users)                    
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   |           |
+| [cq_projects](../DataModels/DevLakeDomainLayerSchema.md/#cq_projects)        
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   | ✅        |
+| [cq_issues](../DataModels/DevLakeDomainLayerSchema.md/#cq_issues)            
               |     |      |              |                  |        |        
|         | ✅   |         | ✅   | ✅        |
+| 
[cq_issue_code_blocks](../DataModels/DevLakeDomainLayerSchema.md/#cq_issue_code_blocks)
     |     |      |              |                  |        |        |         
| ✅   |         | ✅   | ✅        |
+| 
[cq_file_metrics](../DataModels/DevLakeDomainLayerSchema.md/#cq_file_metrics)   
            |     |      |              |                  |        |        |  
       | ✅   |         | ✅   | ✅        |
 
 ## Data Sync Policy
 
@@ -125,24 +128,24 @@ This table shows the entities collected by each plugin. 
Domain layer entities in
 | Subtask Name                       | Estimated Max Number of Request     | 
Does It support Incremental Collection? | Does It Support Time Filter? |
 | ---------------------------------- | ----------------------------------- | 
--------------------------------------- | ---------------------------- |
 | ---------------------------------  | Common                              | 
-----------------------                 |                              |
-| CollectMilestonesMeta              | ≈10                                 | ✅ 
                                      | ❌                            |
-| CollectRunsMeta                    | <10^4                               | ✅ 
                                      | ✅                            |
-| CollectApiCommentsMeta             | 400 (max page that GitHub supports) | ✅ 
                                      | ✅                            |
-| **CollectApiEventsMeta**           | 400 (max page that GitHub supports) | ❌ 
                                      | ❌                            |
-| CollectApiPullRequestReviewsMeta   | <10^5                               | ✅ 
                                      | ✅                            |
+| CollectMilestonesMeta              | ≈10                                 | ✅ 
                                     | ❌                           |
+| CollectRunsMeta                    | <10^4                               | ✅ 
                                     | ✅                           |
+| CollectApiCommentsMeta             | 400 (max page that GitHub supports) | ✅ 
                                     | ✅                           |
+| **CollectApiEventsMeta**           | 400 (max page that GitHub supports) | ❌ 
                                     | ❌                           |
+| CollectApiPullRequestReviewsMeta   | <10^5                               | ✅ 
                                     | ✅                           |
 | ---------------------------------  | Graphql Only (Default)              | 
-----------------------                 |                              |
-| CollectIssueMeta                   | ≈10^4                               | ❌ 
                                      | ✅                            |
-| CollectPrMeta                      | ≈10^3                               | ❌ 
                                      | ✅                            |
-| CollectCheckRunMeta                | <10^4                               | ❌ 
                                      | ✅                            |
-| CollectAccountMeta                 | ≈10^2                               | ❌ 
                                      | -                            |
+| CollectIssueMeta                   | ≈10^4                               | ❌ 
                                     | ✅                           |
+| CollectPrMeta                      | ≈10^3                               | ❌ 
                                     | ✅                           |
+| CollectCheckRunMeta                | <10^4                               | ❌ 
                                     | ✅                           |
+| CollectAccountMeta                 | ≈10^2                               | ❌ 
                                     | -                            |
 | ---------------------------------  | Restful Only (Not by Default)       | 
-----------------------                 |                              |
-| CollectApiIssuesMeta               | ≈10^4                               | ✅ 
                                      | ❌                            |
-| CollectApiPullRequestsMeta         | ≈10^2                               | ❌ 
                                      | ❌                            |
-| CollectApiPullRequestCommitsMeta   | ≈10^4                               | ✅ 
                                      | ✅                            |
-| **CollectApiPrReviewCommentsMeta** | ≈10^4                               | ✅ 
                                      | ✅                            |
-| **CollectAccountsMeta**            | ≈10^4                               | ❌ 
                                      | ❌                            |
-| **CollectAccountOrgMeta**          | ≈10^4                               | ❌ 
                                      | ❌                            |
-| CollectJobsMeta                    | <10^6                               | ❌ 
                                      | ✅                            |
+| CollectApiIssuesMeta               | ≈10^4                               | ✅ 
                                     | ❌                           |
+| CollectApiPullRequestsMeta         | ≈10^2                               | ❌ 
                                     | ❌                           |
+| CollectApiPullRequestCommitsMeta   | ≈10^4                               | ✅ 
                                     | ✅                           |
+| **CollectApiPrReviewCommentsMeta** | ≈10^4                               | ✅ 
                                     | ✅                           |
+| **CollectAccountsMeta**            | ≈10^4                               | ❌ 
                                     | ❌                           |
+| **CollectAccountOrgMeta**          | ≈10^4                               | ❌ 
                                     | ❌                           |
+| CollectJobsMeta                    | <10^6                               | ❌ 
                                     | ✅                           |
 | CollectApiCommitsMeta              | Not enabled                         | - 
                                      | -                            |
 | CollectApiCommitStatsMeta          | Not enabled                         | - 
                                      | -                            |
 
@@ -177,3 +180,13 @@ This table shows the entities collected by each plugin. 
Domain layer entities in
 | **CollectApiPullRequestCommitsMeta** | ≈10^5                           | ❌   
                                   | ❌                           |
 | **CollectApiPullRequestReviewsMeta** | ≈10^5                           | ❌   
                                   | ❌                           |
 | **\*CollectApiCommitStatsMeta\***    | ≈10^6 (Not enable)              | ❌   
                                   | ❌                           |
+
+### SonarQube
+
+| Subtask Name                 | Estimated Max Number of Request | Does It 
support Incremental Collection? | Does It Support Time Filter? |
+| ---------------------------- | ------------------------------- | 
--------------------------------------- | ---------------------------- |
+| CollectAccounts              | <10^4                           | ❌           
                           | ❌                           |
+| CollectIssues                | <10^4                           | ❌           
                           | ❌                           |
+| CollectHotspots              | <10^4                           | ❌           
                           | ❌                           |
+| CollectFilemetrics           | <10^4                           | ❌           
                           | ❌                           |
+| CollectAdditionalFilemetrics | <10^4                           | ❌           
                           | ❌                           |
diff --git a/docs/Plugins/sonarqube.md b/docs/Plugins/sonarqube.md
new file mode 100644
index 0000000000..811b039135
--- /dev/null
+++ b/docs/Plugins/sonarqube.md
@@ -0,0 +1,56 @@
+---
+title: "SonarQube"
+description: >
+  SonarQube Plugin
+---
+
+## Summary
+
+This plugin collects SonarQube data through its REST APIs. SonarQube is a tool 
for static code analysis and code quality management. It can help you discover 
potential problems and defects in your code, and provide suggestions and 
solutions.
+
+## Entities
+
+Check out the [SonarQube 
entities](/Overview/SupportedDataSources.md#data-collection-scope-by-each-plugin)
 collected by this plugin.
+
+## Data Refresh Policy
+
+Check out the [data refresh 
policy](/Overview/SupportedDataSources.md#sonarqube) of this plugin.
+
+## Metrics
+
+Most of SonarQube metrics are collected and can be found in DevLake's 
SonarQube dashboard.
+
+## Configuration
+
+- Configuring SonarQube via [config-ui](/Configuration/SonarQube.md).
+- Configuring SonarQube via Config UI's [advanced 
mode](/Configuration/AdvancedMode.md#10-sonarqube).
+
+## API Sample Request
+
+You can trigger data collection by making a POST request to `/pipelines`.
+
+```
+curl 'http://localhost:8080/pipelines' \
+--header 'Content-Type: application/json' \
+--data-raw '
+{
+  "name": "project1-BLUEPRINT",
+  "blueprintId": 1,
+  "plan": [
+    [
+      {
+        "plugin": "sonarqube",
+        "options": {
+          "connectionId": 1,
+           "projectKey": "testDevLake"
+        }
+      }
+    ]
+  ]
+}
+'
+```
+
+## References
+
+- [references](/DeveloperManuals/DeveloperSetup.md#references)
diff --git a/static/img/ConfigUI/sonarqube-add-data-connections.png 
b/static/img/ConfigUI/sonarqube-add-data-connections.png
new file mode 100644
index 0000000000..544f6bc26a
Binary files /dev/null and 
b/static/img/ConfigUI/sonarqube-add-data-connections.png differ
diff --git a/static/img/ConfigUI/sonarqube-set-data-scope.png 
b/static/img/ConfigUI/sonarqube-set-data-scope.png
new file mode 100644
index 0000000000..a828fd369b
Binary files /dev/null and b/static/img/ConfigUI/sonarqube-set-data-scope.png 
differ

Reply via email to