This is an automated email from the ASF dual-hosted git repository.
abeizn pushed a commit to branch release-v0.21
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/release-v0.21 by this push:
new 00a8af16c fix: deployment dora dashboard (#6931) (#6942)
00a8af16c is described below
commit 00a8af16c1c14321e5cbfbdee0d796116357c25a
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Feb 8 21:51:51 2024 +0800
fix: deployment dora dashboard (#6931) (#6942)
* fix: deployment dora dashboard
* fix: deployment dashbord add dora debug update
* fix: some note
* fix: adjust sql
* fix: mysql id lint
* fix: some bugs
* fix: some note
Co-authored-by: abeizn <[email protected]>
---
...mark.go => 20240207_add_dora_2023_benchmark.go} | 4 +-
grafana/dashboards/DORA.json | 16 +-
grafana/dashboards/DORAByTeam.json | 36 +-
grafana/dashboards/DORADebug.json | 411 ++++++++++++++-------
4 files changed, 307 insertions(+), 160 deletions(-)
diff --git
a/backend/plugins/dora/models/migrationscripts/20240201_add_dora_2023_benchmark.go
b/backend/plugins/dora/models/migrationscripts/20240207_add_dora_2023_benchmark.go
similarity index 98%
rename from
backend/plugins/dora/models/migrationscripts/20240201_add_dora_2023_benchmark.go
rename to
backend/plugins/dora/models/migrationscripts/20240207_add_dora_2023_benchmark.go
index 4bd655360..adaece2ba 100644
---
a/backend/plugins/dora/models/migrationscripts/20240201_add_dora_2023_benchmark.go
+++
b/backend/plugins/dora/models/migrationscripts/20240207_add_dora_2023_benchmark.go
@@ -62,7 +62,7 @@ func (u *adddoraBenchmark2023) Up(baseRes context.BasicRes)
errors.Error {
Metric: "Deployment frequency",
Low: "Fewer than once per six months(low)",
Medium: "Between once per month and once every 6
months(medium)",
- High: "Between once per week and once per month(high)",
+ High: "Between once per day and once per month(high)",
Elite: "On-demand(elite)",
Benchmarks: "2021 report",
}
@@ -185,7 +185,7 @@ func (u *adddoraBenchmark2023) Up(baseRes context.BasicRes)
errors.Error {
}
func (*adddoraBenchmark2023) Version() uint64 {
- return 20240201000002
+ return 20240207000002
}
func (*adddoraBenchmark2023) Name() string {
diff --git a/grafana/dashboards/DORA.json b/grafana/dashboards/DORA.json
index 895ce9d1e..835dc6c72 100644
--- a/grafana/dashboards/DORA.json
+++ b/grafana/dashboards/DORA.json
@@ -18,7 +18,7 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 35,
+ "id": 3,
"links": [],
"liveNow": false,
"panels": [
@@ -41,7 +41,7 @@
"showLineNumbers": false,
"showMiniMap": false
},
- "content": "- See [how to
config](https://devlake.apache.org/docs/DORA) this dashboard\n- Data Sources
Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action, webhook,
etc. \n - `Pull Requests` from GitHub PRs, GitLab MRs, BitBucket PRs, Azure
DevOps PRs, etc.\n - `Incidents` from Jira issues, GitHub issues, TAPD issues,
PagerDuty Incidents, etc. \n- Transformation Required: Define `deployments` and
`incidents` in [data transformations](https://devlake.apache.org/ [...]
+ "content": "- See [how to
config](https://devlake.apache.org/docs/DORA) this dashboard\n- Data Sources
Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action, webhook,
etc. \n - `Pull Requests` from GitHub PRs, GitLab MRs, BitBucket PRs, Azure
DevOps PRs, etc.\n - `Incidents` from Jira issues, GitHub issues, TAPD issues,
PagerDuty Incidents, etc. \n- Transformation Required: Define `deployments` and
`incidents` in [data transformations](https://devlake.apache.org/ [...]
"mode": "markdown"
},
"pluginVersion": "9.5.15",
@@ -205,7 +205,7 @@
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
+ "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
"refId": "A",
"select": [
[
@@ -343,7 +343,7 @@
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
+ "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
"refId": "A",
"select": [
[
@@ -481,7 +481,7 @@
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 2: median lead time for changes\nwith _pr_stats
as (\n-- get the cycle time of PRs deployed by the deployments finished in the
selected period\n\tSELECT\n\t\tdistinct
pr.id,\n\t\tppm.pr_cycle_time\n\tFROM\n\t\tpull_requests pr \n\t\tjoin
project_pr_metrics ppm on ppm.id = pr.id\n\t\tjoin project_mapping pm on
pr.base_repo_id = pm.row_id and pm.`table` = 'repos'\n\t\tjoin
cicd_deployment_commits cdc on ppm.deployment_commit_id = cdc.id\n\tWHERE\n\t
pm.proje [...]
+ "rawSql": "-- Metric 2: median lead time for changes\nwith _pr_stats
as (\n-- get the cycle time of PRs deployed by the deployments finished in the
selected period\n\tSELECT\n\t\tdistinct
pr.id,\n\t\tppm.pr_cycle_time\n\tFROM\n\t\tpull_requests pr \n\t\tjoin
project_pr_metrics ppm on ppm.id = pr.id\n\t\tjoin project_mapping pm on
pr.base_repo_id = pm.row_id and pm.`table` = 'repos'\n\t\tjoin
cicd_deployment_commits cdc on ppm.deployment_commit_id = cdc.id\n\tWHERE\n\t
pm.proje [...]
"refId": "A",
"select": [
[
@@ -623,7 +623,7 @@
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 3: Median time to restore service \nwith
_incidents as (\n-- get the incidents created within the selected time period
in the top-right corner\n\tSELECT\n\t distinct
i.id,\n\t\tcast(lead_time_minutes as signed) as
lead_time_minutes\n\tFROM\n\t\tissues i\n\t join board_issues bi on i.id =
bi.issue_id\n\t join boards b on bi.board_id = b.id\n\t join project_mapping
pm on b.id = pm.row_id and pm.`table` = 'boards'\n\tWHERE\n\t pm.project_name
in (${projec [...]
+ "rawSql": "-- Metric 3: Median time to restore service \nwith
_incidents as (\n-- get the incidents created within the selected time period
in the top-right corner\n\tSELECT\n\t distinct
i.id,\n\t\tcast(lead_time_minutes as signed) as
lead_time_minutes\n\tFROM\n\t\tissues i\n\t join board_issues bi on i.id =
bi.issue_id\n\t join boards b on bi.board_id = b.id\n\t join project_mapping
pm on b.id = pm.row_id and pm.`table` = 'boards'\n\tWHERE\n\t pm.project_name
in (${projec [...]
"refId": "A",
"select": [
[
@@ -761,7 +761,7 @@
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 4: change failure rate\nwith _deployments as
(\n-- When deploying multiple commits in one pipeline, GitLab and BitBucket may
generate more than one deployment. However, DevLake consider these deployments
as ONE production deployment and use the last one's finished_date as the
finished date.\n\tSELECT\n\t\tcdc.cicd_deployment_id as
deployment_id,\n\t\tmax(cdc.finished_date) as deployment_finished_date\n\tFROM
\n\t\tcicd_deployment_commits cdc\n\t\tJOIN proje [...]
+ "rawSql": "-- Metric 4: change failure rate\nwith _deployments as
(\n-- When deploying multiple commits in one pipeline, GitLab and BitBucket may
generate more than one deployment. However, DevLake consider these deployments
as ONE production deployment and use the last one's finished_date as the
finished date.\n\tSELECT\n\t\tcdc.cicd_deployment_id as
deployment_id,\n\t\tmax(cdc.finished_date) as deployment_finished_date\n\tFROM
\n\t\tcicd_deployment_commits cdc\n\t\tJOIN proje [...]
"refId": "A",
"select": [
[
@@ -1345,6 +1345,6 @@
"timezone": "",
"title": "DORA",
"uid": "qNo8_0M4z",
- "version": 37,
+ "version": 22,
"weekStart": ""
}
\ No newline at end of file
diff --git a/grafana/dashboards/DORAByTeam.json
b/grafana/dashboards/DORAByTeam.json
index 7f494562c..c5f2c0cd6 100644
--- a/grafana/dashboards/DORAByTeam.json
+++ b/grafana/dashboards/DORAByTeam.json
@@ -24,7 +24,7 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 36,
+ "id": 8,
"links": [],
"liveNow": false,
"panels": [
@@ -34,7 +34,7 @@
"uid": "grafana"
},
"gridPos": {
- "h": 6,
+ "h": 7,
"w": 24,
"x": 0,
"y": 0
@@ -47,7 +47,7 @@
"showLineNumbers": false,
"showMiniMap": false
},
- "content": "- See [how to
config](https://devlake.apache.org/docs/DORA) this dashboard\n- Data Sources
Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action, webhook,
etc. \n - `Pull Requests` from GitHub PRs, GitLab MRs, BitBucket PRs, Azure
DevOps PRs, etc.\n - `Incidents` from Jira issues, GitHub issues, TAPD issues,
PagerDuty Incidents, etc. \n- Transformation Required: Define `deployments` and
`incidents` in [data transformations](https://devlake.apache.org/ [...]
+ "content": "- See [how to
config](https://devlake.apache.org/docs/DORA) this dashboard\n- Data Sources
Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action, webhook,
etc. \n - `Pull Requests` from GitHub PRs, GitLab MRs, BitBucket PRs, Azure
DevOps PRs, etc.\n - `Incidents` from Jira issues, GitHub issues, TAPD issues,
PagerDuty Incidents, etc. \n- Transformation Required: Define `deployments` and
`incidents` in [data transformations](https://devlake.apache.org/ [...]
"mode": "markdown"
},
"pluginVersion": "9.5.15",
@@ -183,7 +183,7 @@
"h": 6,
"w": 24,
"x": 0,
- "y": 6
+ "y": 7
},
"id": 8,
"links": [],
@@ -208,7 +208,7 @@
"format": "table",
"hide": false,
"rawQuery": true,
- "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
+ "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
"refId": "A",
"sql": {
"columns": [
@@ -297,7 +297,7 @@
"h": 5,
"w": 6,
"x": 0,
- "y": 12
+ "y": 13
},
"id": 11,
"links": [],
@@ -326,7 +326,7 @@
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
+ "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
"refId": "A",
"select": [
[
@@ -435,7 +435,7 @@
"h": 5,
"w": 6,
"x": 6,
- "y": 12
+ "y": 13
},
"id": 12,
"links": [],
@@ -462,7 +462,7 @@
"format": "table",
"hide": false,
"rawQuery": true,
- "rawSql": "-- Metric 2: median lead time for changes\nwith _pr_stats
as (\n-- get the cycle time of PRs deployed by the deployments finished in the
selected period\n\tSELECT\n\t\tdistinct
pr.id,\n\t\tppm.pr_cycle_time\n\tFROM\n\t\tpull_requests pr\n\t\tjoin
user_accounts ua on pr.author_id = ua.account_id\n \tjoin users u on
ua.user_id = u.id\n \tjoin team_users tu on u.id = tu.user_id\n \tjoin
teams t on tu.team_id = t.id\n\t\tjoin project_pr_metrics ppm on ppm.id = p
[...]
+ "rawSql": "-- Metric 2: median lead time for changes\nwith _pr_stats
as (\n-- get the cycle time of PRs deployed by the deployments finished in the
selected period\n\tSELECT\n\t\tdistinct
pr.id,\n\t\tppm.pr_cycle_time\n\tFROM\n\t\tpull_requests pr\n\t\tjoin
user_accounts ua on pr.author_id = ua.account_id\n \tjoin users u on
ua.user_id = u.id\n \tjoin team_users tu on u.id = tu.user_id\n \tjoin
teams t on tu.team_id = t.id\n\t\tjoin project_pr_metrics ppm on ppm.id = p
[...]
"refId": "A",
"sql": {
"columns": [
@@ -555,7 +555,7 @@
"h": 5,
"w": 6,
"x": 12,
- "y": 12
+ "y": 13
},
"id": 13,
"links": [],
@@ -582,7 +582,7 @@
"format": "table",
"hide": false,
"rawQuery": true,
- "rawSql": "-- Metric 3: Median time to restore service \nwith
_incidents as (\n-- get the incidents created within the selected time period
in the top-right corner\n\tSELECT\n\t distinct
i.id,\n\t\tcast(lead_time_minutes as signed) as
lead_time_minutes\n\tFROM\n\t\tissues i\n\t join board_issues bi on i.id =
bi.issue_id\n\t join boards b on bi.board_id = b.id\n\t join project_mapping
pm on b.id = pm.row_id and pm.`table` = 'boards'\n\t join user_accounts ua on
i.assignee_i [...]
+ "rawSql": "-- Metric 3: Median time to restore service \nwith
_incidents as (\n-- get the incidents created within the selected time period
in the top-right corner\n\tSELECT\n\t distinct
i.id,\n\t\tcast(lead_time_minutes as signed) as
lead_time_minutes\n\tFROM\n\t\tissues i\n\t join board_issues bi on i.id =
bi.issue_id\n\t join boards b on bi.board_id = b.id\n\t join project_mapping
pm on b.id = pm.row_id and pm.`table` = 'boards'\n\t join user_accounts ua on
i.assignee_i [...]
"refId": "A",
"sql": {
"columns": [
@@ -671,7 +671,7 @@
"h": 5,
"w": 6,
"x": 18,
- "y": 12
+ "y": 13
},
"id": 14,
"links": [],
@@ -698,7 +698,7 @@
"format": "table",
"hide": false,
"rawQuery": true,
- "rawSql": "-- Metric 4: change failure rate\nwith _deployments as
(\n-- When deploying multiple commits in one pipeline, GitLab and BitBucket may
generate more than one deployment. However, DevLake consider these deployments
as ONE production deployment and use the last one's finished_date as the
finished date.\n\tSELECT\n\t\tcdc.cicd_deployment_id as
deployment_id,\n\t\tmax(cdc.finished_date) as deployment_finished_date\n\tFROM
\n\t\tcicd_deployment_commits cdc\n\t JOIN com [...]
+ "rawSql": "-- Metric 4: change failure rate\nwith _deployments as
(\n-- When deploying multiple commits in one pipeline, GitLab and BitBucket may
generate more than one deployment. However, DevLake consider these deployments
as ONE production deployment and use the last one's finished_date as the
finished date.\n\tSELECT\n\t\tcdc.cicd_deployment_id as
deployment_id,\n\t\tmax(cdc.finished_date) as deployment_finished_date\n\tFROM
\n\t\tcicd_deployment_commits cdc\n\t JOIN com [...]
"refId": "A",
"sql": {
"columns": [
@@ -771,7 +771,7 @@
"h": 8,
"w": 12,
"x": 0,
- "y": 17
+ "y": 18
},
"id": 2,
"links": [],
@@ -874,7 +874,7 @@
"h": 8,
"w": 12,
"x": 12,
- "y": 17
+ "y": 18
},
"id": 6,
"links": [],
@@ -998,7 +998,7 @@
"h": 8,
"w": 12,
"x": 0,
- "y": 25
+ "y": 26
},
"id": 9,
"links": [],
@@ -1120,7 +1120,7 @@
"h": 8,
"w": 12,
"x": 12,
- "y": 25
+ "y": 26
},
"id": 5,
"links": [],
@@ -1239,6 +1239,6 @@
"timezone": "",
"title": "DORA (by Team)",
"uid": "66YkL8y4z",
- "version": 6,
+ "version": 11,
"weekStart": ""
}
\ No newline at end of file
diff --git a/grafana/dashboards/DORADebug.json
b/grafana/dashboards/DORADebug.json
index b27f13e57..ba5224cd7 100644
--- a/grafana/dashboards/DORADebug.json
+++ b/grafana/dashboards/DORADebug.json
@@ -18,7 +18,7 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 5,
+ "id": 24,
"links": [],
"liveNow": false,
"panels": [
@@ -44,7 +44,7 @@
"content": "This dashboard is designed to validate the [DORA
dashboard](/grafana/d/qNo8_0M4z/dora?orgId=1).",
"mode": "markdown"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": {
@@ -105,7 +105,7 @@
"content": "- See the definition and calculation logic of [Deployment
Frequency](https://devlake.apache.org/docs/Metrics/DeploymentFrequency)\n- Data
Sources Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action,
BitBucket Pipelines, or Webhook, etc. \n- Transformation Required: Define
`deployments` in [data
transformations](https://devlake.apache.org/docs/Configuration/Tutorial#step-3---add-transformations-optional)
while configuring the blueprint of a project.",
"mode": "markdown"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": {
@@ -191,7 +191,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -237,24 +237,43 @@
"mappings": [
{
"options": {
- "Between once per month and once every 6 months": {
- "color": "yellow",
- "index": 1
- },
- "Between once per week and once per month": {
+ "pattern": ".*elite.*",
+ "result": {
+ "color": "purple",
+ "index": 0
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*high.*",
+ "result": {
"color": "green",
+ "index": 1
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*medium.*",
+ "result": {
+ "color": "yellow",
"index": 2
- },
- "Fewer than once per six months": {
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*low.*",
+ "result": {
"color": "red",
- "index": 0
- },
- "On-demand": {
- "color": "purple",
"index": 3
}
},
- "type": "value"
+ "type": "regex"
}
],
"thresholds": {
@@ -292,16 +311,17 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
+ "editorMode": "code",
"format": "table",
"group": [],
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
+ "rawSql": "-- Metric 1: Deployment Frequency\nwith
last_few_calendar_months as(\n-- construct the last few calendar months within
the selected time period in the top-right corner\n\tSELECT
CAST((SYSDATE()-INTERVAL (H+T+U) DAY) AS date) day\n\tFROM ( SELECT 0
H\n\t\t\tUNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300\n\t\t)
H CROSS JOIN ( SELECT 0 T\n\t\t\tUNION ALL SELECT 10 UNION ALL SELECT 20
UNION ALL SELECT 30\n\t\t\tUNION ALL SELECT 40 UNION ALL SELECT 50 [...]
"refId": "A",
"select": [
[
@@ -313,6 +333,23 @@
}
]
],
+ "sql": {
+ "columns": [
+ {
+ "parameters": [],
+ "type": "function"
+ }
+ ],
+ "groupBy": [
+ {
+ "property": {
+ "type": "string"
+ },
+ "type": "groupBy"
+ }
+ ],
+ "limit": 50
+ },
"table": "_devlake_tasks",
"timeColumn": "created_at",
"timeColumnType": "timestamp",
@@ -401,7 +438,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -628,7 +665,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -746,7 +783,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -864,7 +901,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -947,7 +984,7 @@
"content": "- See the definition and calculation logic of [Median Lead
Time for
Changes](https://devlake.apache.org/docs/Metrics/LeadTimeForChanges)\n- Data
Sources Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action,
BitBucket Pipelines, or Webhook, etc. \n - `Pull Requests` from GitHub PRs,
GitLab MRs, BitBucket PRs, Azure DevOps PRs, etc.\n- Transformation Required:
Define `deployments` in [data
transformations](https://devlake.apache.org/docs/Configuration/T [...]
"mode": "markdown"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": {
@@ -1010,7 +1047,7 @@
},
"showHeader": true
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -1056,24 +1093,43 @@
"mappings": [
{
"options": {
- "Between one week and six months": {
- "color": "yellow",
- "index": 1
- },
- "Less than one hour": {
+ "pattern": ".*elite.*",
+ "result": {
"color": "purple",
- "index": 3
- },
- "Less than one week": {
+ "index": 0
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*high.*",
+ "result": {
"color": "green",
+ "index": 1
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*medium.*",
+ "result": {
+ "color": "yellow",
"index": 2
- },
- "More than six months": {
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*low.*",
+ "result": {
"color": "red",
- "index": 0
+ "index": 3
}
},
- "type": "value"
+ "type": "regex"
}
],
"thresholds": {
@@ -1111,16 +1167,17 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
+ "editorMode": "code",
"format": "table",
"group": [],
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 2: median lead time for changes\nwith _pr_stats
as (\n-- get the cycle time of PRs deployed by the deployments finished in the
selected period\n\tSELECT\n\t\tdistinct
pr.id,\n\t\tppm.pr_cycle_time\n\tFROM\n\t\tpull_requests pr \n\t\tjoin
project_pr_metrics ppm on ppm.id = pr.id\n\t\tjoin project_mapping pm on
pr.base_repo_id = pm.row_id and pm.`table` = 'repos'\n\t\tjoin
cicd_deployment_commits cdc on ppm.deployment_commit_id = cdc.id\n\tWHERE\n\t
pm.proje [...]
+ "rawSql": "-- Metric 2: median lead time for changes\nwith _pr_stats
as (\n-- get the cycle time of PRs deployed by the deployments finished in the
selected period\n\tSELECT\n\t\tdistinct
pr.id,\n\t\tppm.pr_cycle_time\n\tFROM\n\t\tpull_requests pr \n\t\tjoin
project_pr_metrics ppm on ppm.id = pr.id\n\t\tjoin project_mapping pm on
pr.base_repo_id = pm.row_id and pm.`table` = 'repos'\n\t\tjoin
cicd_deployment_commits cdc on ppm.deployment_commit_id = cdc.id\n\tWHERE\n\t
pm.proje [...]
"refId": "A",
"select": [
[
@@ -1132,6 +1189,23 @@
}
]
],
+ "sql": {
+ "columns": [
+ {
+ "parameters": [],
+ "type": "function"
+ }
+ ],
+ "groupBy": [
+ {
+ "property": {
+ "type": "string"
+ },
+ "type": "groupBy"
+ }
+ ],
+ "limit": 50
+ },
"table": "_devlake_tasks",
"timeColumn": "created_at",
"timeColumnType": "timestamp",
@@ -1179,8 +1253,7 @@
"mode": "absolute",
"steps": [
{
- "color": "red",
- "value": null
+ "color": "red"
}
]
}
@@ -1216,8 +1289,7 @@
"mode": "absolute",
"steps": [
{
- "color": "red",
- "value": null
+ "color": "red"
},
{
"color": "green",
@@ -1265,7 +1337,7 @@
},
"showHeader": true
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -1335,8 +1407,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -1434,8 +1505,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -1463,7 +1533,7 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -1573,8 +1643,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -1602,7 +1671,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -1670,8 +1739,7 @@
"mode": "absolute",
"steps": [
{
- "color": "red",
- "value": null
+ "color": "red"
}
]
}
@@ -1699,8 +1767,7 @@
"mode": "absolute",
"steps": [
{
- "color": "red",
- "value": null
+ "color": "red"
},
{
"color": "green",
@@ -1762,7 +1829,7 @@
},
"showHeader": true
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -1834,8 +1901,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -1863,7 +1929,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -1911,8 +1977,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -1944,7 +2009,7 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2022,8 +2087,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -2051,7 +2115,7 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2129,8 +2193,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -2158,7 +2221,7 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2236,8 +2299,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -2265,7 +2327,7 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2343,8 +2405,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -2372,7 +2433,7 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2428,8 +2489,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -2510,7 +2570,7 @@
},
"showHeader": true
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2593,7 +2653,7 @@
"content": "- See the definition and calculation logic of [Median Time
to Restore Service](https://devlake.apache.org/docs/Metrics/MTTR)\n- Data
Sources Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action,
BitBucket Pipelines, or Webhook, etc. \n - `Incidents` from Jira issues,
GitHub issues, TAPD issues, PagerDuty Incidents, etc. \n- Transformation
Required: Define `deployments` and `incidents` in [data
transformations](https://devlake.apache.org/docs/Configura [...]
"mode": "markdown"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": {
@@ -2627,7 +2687,7 @@
"content": "- See the definition and calculation logic of [Change
Failure Rate](https://devlake.apache.org/docs/Metrics/CFR)\n- Data Sources
Required: \n - `Deployments` from Jenkins, GitLab CI, GitHub Action, BitBucket
Pipelines, or Webhook, etc. \n - `Incidents` from Jira issues, GitHub issues,
TAPD issues, PagerDuty Incidents, etc. \n- Transformation Required: Define
`deployments` and `incidents` in [data
transformations](https://devlake.apache.org/docs/Configuration/Tutoria [...]
"mode": "markdown"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": {
@@ -2675,8 +2735,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -2704,7 +2763,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2750,32 +2809,50 @@
"mappings": [
{
"options": {
- "Between one day and one week": {
- "color": "yellow",
- "index": 1
- },
- "Less than one day": {
+ "pattern": ".*elite.*",
+ "result": {
+ "color": "purple",
+ "index": 0
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*high.*",
+ "result": {
"color": "green",
+ "index": 1
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*medium.*",
+ "result": {
+ "color": "yellow",
"index": 2
- },
- "Less than one hour": {
- "color": "purple",
- "index": 3
- },
- "More than one week": {
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*low.*",
+ "result": {
"color": "red",
- "index": 0
+ "index": 3
}
},
- "type": "value"
+ "type": "regex"
}
],
"thresholds": {
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -2809,16 +2886,17 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
+ "editorMode": "code",
"format": "table",
"group": [],
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 3: Median time to restore service \nwith
_incidents as (\n-- get the incidents created within the selected time period
in the top-right corner\n\tSELECT\n\t distinct
i.id,\n\t\tcast(lead_time_minutes as signed) as
lead_time_minutes\n\tFROM\n\t\tissues i\n\t join board_issues bi on i.id =
bi.issue_id\n\t join boards b on bi.board_id = b.id\n\t join project_mapping
pm on b.id = pm.row_id and pm.`table` = 'boards'\n\tWHERE\n\t pm.project_name
in ($project [...]
+ "rawSql": "-- Metric 3: Median time to restore service \nwith
_incidents as (\n-- get the incidents created within the selected time period
in the top-right corner\n\tSELECT\n\t distinct
i.id,\n\t\tcast(lead_time_minutes as signed) as
lead_time_minutes\n\tFROM\n\t\tissues i\n\t join board_issues bi on i.id =
bi.issue_id\n\t join boards b on bi.board_id = b.id\n\t join project_mapping
pm on b.id = pm.row_id and pm.`table` = 'boards'\n\tWHERE\n\t pm.project_name
in (${projec [...]
"refId": "A",
"select": [
[
@@ -2830,6 +2908,23 @@
}
]
],
+ "sql": {
+ "columns": [
+ {
+ "parameters": [],
+ "type": "function"
+ }
+ ],
+ "groupBy": [
+ {
+ "property": {
+ "type": "string"
+ },
+ "type": "groupBy"
+ }
+ ],
+ "limit": 50
+ },
"table": "_devlake_tasks",
"timeColumn": "created_at",
"timeColumnType": "timestamp",
@@ -2880,8 +2975,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -2909,7 +3003,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -2967,7 +3061,7 @@
"content": "<img src =
'https://devlake.apache.org/assets/images/cfr-definition-94d92cc75f857f183443ad5390d31d65.png'
/>\n\nIn this case:\n\n- Deployment-1 maps to Incident-1\n- Deployment-3 maps
to Incident-2 and Incident-3\n- Deployment-2,4,5 doesn't map to any Incident",
"mode": "markdown"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": {
@@ -3015,8 +3109,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
},
{
"color": "red",
@@ -3120,32 +3213,50 @@
"mappings": [
{
"options": {
- "0-15%": {
+ "pattern": ".*elite.*",
+ "result": {
"color": "purple",
- "index": 3
- },
- "16%-20%": {
+ "index": 0
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*high.*",
+ "result": {
"color": "green",
- "index": 2
- },
- "21%-30%": {
- "color": "yellow",
"index": 1
- },
- "> 30%": {
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*medium.*",
+ "result": {
+ "color": "yellow",
+ "index": 2
+ }
+ },
+ "type": "regex"
+ },
+ {
+ "options": {
+ "pattern": ".*low.*",
+ "result": {
"color": "red",
- "index": 0
+ "index": 3
}
},
- "type": "value"
+ "type": "regex"
}
],
"thresholds": {
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -3175,16 +3286,17 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
+ "editorMode": "code",
"format": "table",
"group": [],
"metricColumn": "none",
"queryType": "randomWalk",
"rawQuery": true,
- "rawSql": "-- Metric 4: change failure rate\nwith _deployments as
(\n-- When deploying multiple commits in one pipeline, GitLab and BitBucket may
generate more than one deployment. However, DevLake consider these deployments
as ONE production deployment and use the last one's finished_date as the
finished date.\n\tSELECT\n\t\tcdc.cicd_deployment_id as
deployment_id,\n\t\tmax(cdc.finished_date) as deployment_finished_date\n\tFROM
\n\t\tcicd_deployment_commits cdc\n\t\tJOIN proje [...]
+ "rawSql": "-- Metric 4: change failure rate\nwith _deployments as
(\n-- When deploying multiple commits in one pipeline, GitLab and BitBucket may
generate more than one deployment. However, DevLake consider these deployments
as ONE production deployment and use the last one's finished_date as the
finished date.\n\tSELECT\n\t\tcdc.cicd_deployment_id as
deployment_id,\n\t\tmax(cdc.finished_date) as deployment_finished_date\n\tFROM
\n\t\tcicd_deployment_commits cdc\n\t\tJOIN proje [...]
"refId": "A",
"select": [
[
@@ -3196,6 +3308,23 @@
}
]
],
+ "sql": {
+ "columns": [
+ {
+ "parameters": [],
+ "type": "function"
+ }
+ ],
+ "groupBy": [
+ {
+ "property": {
+ "type": "string"
+ },
+ "type": "groupBy"
+ }
+ ],
+ "limit": 50
+ },
"table": "_devlake_tasks",
"timeColumn": "created_at",
"timeColumnType": "timestamp",
@@ -3247,8 +3376,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -3276,7 +3404,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -3348,8 +3476,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
}
@@ -3377,7 +3504,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.5.2",
+ "pluginVersion": "9.5.15",
"targets": [
{
"datasource": "mysql",
@@ -3467,8 +3594,7 @@
"mode": "percentage",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
},
@@ -3594,8 +3720,8 @@
{
"current": {
"selected": false,
- "text":
"https://github.com/apache/incubator-devlake-website/pull/121",
- "value": "github:GithubPullRequest:1:1000234032"
+ "text": "https://github.com/apache/incubator-devlake/pull/5799",
+ "value": "github:GithubPullRequest:1:1460714136"
},
"datasource": "mysql",
"definition": "select concat(Url, '--', id) from pull_requests",
@@ -3611,6 +3737,27 @@
"skipUrlSync": false,
"sort": 0,
"type": "query"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "2023 report",
+ "value": "2023 report"
+ },
+ "datasource": "mysql",
+ "definition": "select benchmarks from dora_benchmarks",
+ "hide": 0,
+ "includeAll": false,
+ "label": "Benchmarks",
+ "multi": false,
+ "name": "benchmarks",
+ "options": [],
+ "query": "select benchmarks from dora_benchmarks",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
}
]
},
@@ -3622,6 +3769,6 @@
"timezone": "",
"title": "DORA Validation",
"uid": "KGkUnV-Vz",
- "version": 2,
+ "version": 4,
"weekStart": ""
}
\ No newline at end of file