This is an automated email from the ASF dual-hosted git repository.

zky pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 509444e49 feat: upgrade dora benchmarks to 2023 version (#6893)
509444e49 is described below

commit 509444e49665a1dc1f4f996eec713e9ed65989fa
Author: abeizn <[email protected]>
AuthorDate: Sun Feb 4 18:35:03 2024 +0800

    feat: upgrade dora benchmarks to 2023 version (#6893)
    
    * feat: upgrade dora benchmarks to 2023 version
    
    * feat: add 2021/2023 benchmark flag
    
    * feat: add 2021/2023 benchmark flag
---
 .../20240201_add_dora_2023_benchmark.go            | 193 ++++++++
 .../dora/models/migrationscripts/register.go       |   1 +
 grafana/dashboards/DORA.json                       | 493 ++++++++++++++++-----
 grafana/dashboards/DORAByTeam.json                 | 227 +++++++---
 4 files changed, 742 insertions(+), 172 deletions(-)

diff --git 
a/backend/plugins/dora/models/migrationscripts/20240201_add_dora_2023_benchmark.go
 
b/backend/plugins/dora/models/migrationscripts/20240201_add_dora_2023_benchmark.go
new file mode 100644
index 000000000..4bd655360
--- /dev/null
+++ 
b/backend/plugins/dora/models/migrationscripts/20240201_add_dora_2023_benchmark.go
@@ -0,0 +1,193 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package migrationscripts
+
+import (
+       "github.com/apache/incubator-devlake/core/context"
+       "github.com/apache/incubator-devlake/core/errors"
+       
"github.com/apache/incubator-devlake/core/models/migrationscripts/archived"
+       "github.com/apache/incubator-devlake/helpers/migrationhelper"
+)
+
+type adddoraBenchmark2023 struct{}
+
+type doraBenchmark2023 struct {
+       archived.Model
+       Metric     string `gorm:"type:varchar(255)"`
+       Low        string `gorm:"type:varchar(255)"`
+       Medium     string `gorm:"type:varchar(255)"`
+       High       string `gorm:"type:varchar(255)"`
+       Elite      string `gorm:"type:varchar(255)"`
+       Benchmarks string `gorm:"type:varchar(20)"`
+}
+
+func (doraBenchmark2023) TableName() string {
+       return "dora_benchmarks"
+}
+
+func (u *adddoraBenchmark2023) Up(baseRes context.BasicRes) errors.Error {
+       db := baseRes.GetDal()
+       err := db.DropTables(&doraBenchmark{})
+       if err != nil {
+               return err
+       }
+       err = migrationhelper.AutoMigrateTables(
+               baseRes,
+               &doraBenchmark2023{},
+       )
+       if err != nil {
+               return err
+       }
+
+       // 2021 benchmarks
+       doraBenchmark2021DF := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 1,
+               },
+               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)",
+               Elite:      "On-demand(elite)",
+               Benchmarks: "2021 report",
+       }
+       err = db.Create(doraBenchmark2021DF)
+       if err != nil {
+               return errors.Convert(err)
+       }
+       doraBenchmark2021LTC := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 2,
+               },
+               Metric:     "Lead time for changes",
+               Low:        "More than six months(low)",
+               Medium:     "Between one week and six months(medium)",
+               High:       "Less than one week(high)",
+               Elite:      "Less than one hour(elite)",
+               Benchmarks: "2021 report",
+       }
+       err = db.Create(doraBenchmark2021LTC)
+       if err != nil {
+               return errors.Convert(err)
+       }
+       doraBenchmark2021TTS := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 3,
+               },
+               Metric:     "Time to restore service",
+               Low:        "More than one week(low)",
+               Medium:     "Between one day and one week(medium)",
+               High:       "Less than one day(high)",
+               Elite:      "Less than one hour(elite)",
+               Benchmarks: "2021 report",
+       }
+       err = db.Create(doraBenchmark2021TTS)
+       if err != nil {
+               return errors.Convert(err)
+       }
+       doraBenchmark2021CFR := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 4,
+               },
+               Metric:     "Change failure rate",
+               Low:        "> 30%(low)",
+               Medium:     "21%-30%(medium)",
+               High:       "16%-20%(high)",
+               Elite:      "0-15%(elite)",
+               Benchmarks: "2021 report",
+       }
+       err = db.Create(doraBenchmark2021CFR)
+       if err != nil {
+               return errors.Convert(err)
+       }
+
+       // 2023 benchmarks
+       doraBenchmark2023DF := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 5,
+               },
+               Metric:     "Deployment frequency",
+               Low:        "Fewer than once per month(low)",
+               Medium:     "Between once per week and once per month(medium)",
+               High:       "Between once per day and once per week(high)",
+               Elite:      "On-demand(elite)",
+               Benchmarks: "2023 report",
+       }
+       err = db.Create(doraBenchmark2023DF)
+       if err != nil {
+               return errors.Convert(err)
+       }
+
+       doraBenchmark2023LTC := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 6,
+               },
+               Metric:     "Lead time for changes",
+               Low:        "More than one month(low)",
+               Medium:     "Between one week and one month(medium)",
+               High:       "Between one day and one week(high)",
+               Elite:      "Less than one day(elite)",
+               Benchmarks: "2023 report",
+       }
+       err = db.Create(doraBenchmark2023LTC)
+       if err != nil {
+               return errors.Convert(err)
+       }
+
+       doraBenchmark2023TTS := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 7,
+               },
+               Metric:     "Time to restore service",
+               Low:        "More than one week(low)",
+               Medium:     "Between one day and one week(medium)",
+               High:       "Less than one day(high)",
+               Elite:      "Less than one hour(elite)",
+               Benchmarks: "2023 report",
+       }
+       err = db.Create(doraBenchmark2023TTS)
+       if err != nil {
+               return errors.Convert(err)
+       }
+
+       doraBenchmark2023CFR := &doraBenchmark2023{
+               Model: archived.Model{
+                       ID: 8,
+               },
+               Metric:     "Change failure rate",
+               Low:        "> 15%(low)",
+               Medium:     "10%-15%(medium)",
+               High:       "5%-10%(high)",
+               Elite:      "0-5%(elite)",
+               Benchmarks: "2023 report",
+       }
+       err = db.Create(doraBenchmark2023CFR)
+       if err != nil {
+               return errors.Convert(err)
+       }
+
+       return nil
+}
+
+func (*adddoraBenchmark2023) Version() uint64 {
+       return 20240201000002
+}
+
+func (*adddoraBenchmark2023) Name() string {
+       return "add dora 2023 benchmark"
+}
diff --git a/backend/plugins/dora/models/migrationscripts/register.go 
b/backend/plugins/dora/models/migrationscripts/register.go
index 1d7fb7bf8..6a12d0719 100644
--- a/backend/plugins/dora/models/migrationscripts/register.go
+++ b/backend/plugins/dora/models/migrationscripts/register.go
@@ -26,5 +26,6 @@ func All() []plugin.MigrationScript {
        return []plugin.MigrationScript{
                new(addDoraBenchmark),
                new(fixDoraBenchmarkMetric),
+               new(adddoraBenchmark2023),
        }
 }
diff --git a/grafana/dashboards/DORA.json b/grafana/dashboards/DORA.json
index 89460d083..895ce9d1e 100644
--- a/grafana/dashboards/DORA.json
+++ b/grafana/dashboards/DORA.json
@@ -3,7 +3,10 @@
     "list": [
       {
         "builtIn": 1,
-        "datasource": "-- Grafana --",
+        "datasource": {
+          "type": "datasource",
+          "uid": "grafana"
+        },
         "enable": true,
         "hide": true,
         "iconColor": "rgba(0, 211, 255, 1)",
@@ -13,14 +16,17 @@
     ]
   },
   "editable": true,
-  "gnetId": null,
+  "fiscalYearStartMonth": 0,
   "graphTooltip": 0,
-  "id": 21,
-  "iteration": 1684326672244,
+  "id": 35,
   "links": [],
+  "liveNow": false,
   "panels": [
     {
-      "datasource": null,
+      "datasource": {
+        "type": "datasource",
+        "uid": "grafana"
+      },
       "gridPos": {
         "h": 6,
         "w": 24,
@@ -30,12 +36,21 @@
       "id": 16,
       "links": [],
       "options": {
+        "code": {
+          "language": "plaintext",
+          "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/ [...]
         "mode": "markdown"
       },
-      "pluginVersion": "8.0.6",
+      "pluginVersion": "9.5.15",
       "targets": [
         {
+          "datasource": {
+            "type": "datasource",
+            "uid": "grafana"
+          },
           "queryType": "randomWalk",
           "refId": "A"
         }
@@ -54,8 +69,11 @@
           },
           "custom": {
             "align": "auto",
-            "displayMode": "auto",
-            "filterable": false
+            "cellOptions": {
+              "type": "auto"
+            },
+            "filterable": false,
+            "inspect": false
           },
           "mappings": [],
           "noValue": "-",
@@ -77,8 +95,10 @@
             },
             "properties": [
               {
-                "id": "custom.displayMode",
-                "value": "color-text"
+                "id": "custom.cellOptions",
+                "value": {
+                  "type": "color-text"
+                }
               },
               {
                 "id": "color",
@@ -96,8 +116,10 @@
             },
             "properties": [
               {
-                "id": "custom.displayMode",
-                "value": "color-text"
+                "id": "custom.cellOptions",
+                "value": {
+                  "type": "color-text"
+                }
               },
               {
                 "id": "color",
@@ -115,8 +137,10 @@
             },
             "properties": [
               {
-                "id": "custom.displayMode",
-                "value": "color-text"
+                "id": "custom.cellOptions",
+                "value": {
+                  "type": "color-text"
+                }
               },
               {
                 "id": "color",
@@ -134,8 +158,10 @@
             },
             "properties": [
               {
-                "id": "custom.displayMode",
-                "value": "color-text"
+                "id": "custom.cellOptions",
+                "value": {
+                  "type": "color-text"
+                }
               },
               {
                 "id": "color",
@@ -157,18 +183,29 @@
       "id": 8,
       "links": [],
       "options": {
+        "cellHeight": "sm",
+        "footer": {
+          "countRows": false,
+          "fields": "",
+          "reducer": [
+            "sum"
+          ],
+          "show": false
+        },
         "showHeader": true,
         "sortBy": []
       },
-      "pluginVersion": "8.0.6",
+      "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": [
             [
@@ -180,6 +217,23 @@
               }
             ]
           ],
+          "sql": {
+            "columns": [
+              {
+                "parameters": [],
+                "type": "function"
+              }
+            ],
+            "groupBy": [
+              {
+                "property": {
+                  "type": "string"
+                },
+                "type": "groupBy"
+              }
+            ],
+            "limit": 50
+          },
           "table": "_devlake_blueprints",
           "timeColumn": "created_at",
           "timeColumnType": "timestamp",
@@ -205,24 +259,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": {
@@ -260,15 +333,17 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.0.6",
+      "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": [
             [
@@ -280,6 +355,23 @@
               }
             ]
           ],
+          "sql": {
+            "columns": [
+              {
+                "parameters": [],
+                "type": "function"
+              }
+            ],
+            "groupBy": [
+              {
+                "property": {
+                  "type": "string"
+                },
+                "type": "groupBy"
+              }
+            ],
+            "limit": 50
+          },
           "table": "_devlake_tasks",
           "timeColumn": "created_at",
           "timeColumnType": "timestamp",
@@ -305,24 +397,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": {
@@ -360,15 +471,17 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.0.6",
+      "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": [
             [
@@ -380,6 +493,23 @@
               }
             ]
           ],
+          "sql": {
+            "columns": [
+              {
+                "parameters": [],
+                "type": "function"
+              }
+            ],
+            "groupBy": [
+              {
+                "property": {
+                  "type": "string"
+                },
+                "type": "groupBy"
+              }
+            ],
+            "limit": 50
+          },
           "table": "_devlake_tasks",
           "timeColumn": "created_at",
           "timeColumnType": "timestamp",
@@ -405,24 +535,43 @@
           "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": {
@@ -464,15 +613,17 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.0.6",
+      "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 (${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": [
             [
@@ -484,6 +635,23 @@
               }
             ]
           ],
+          "sql": {
+            "columns": [
+              {
+                "parameters": [],
+                "type": "function"
+              }
+            ],
+            "groupBy": [
+              {
+                "property": {
+                  "type": "string"
+                },
+                "type": "groupBy"
+              }
+            ],
+            "limit": 50
+          },
           "table": "_devlake_tasks",
           "timeColumn": "created_at",
           "timeColumnType": "timestamp",
@@ -509,24 +677,43 @@
           "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": {
@@ -564,15 +751,17 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.0.6",
+      "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": [
             [
@@ -584,6 +773,23 @@
               }
             ]
           ],
+          "sql": {
+            "columns": [
+              {
+                "parameters": [],
+                "type": "function"
+              }
+            ],
+            "groupBy": [
+              {
+                "property": {
+                  "type": "string"
+                },
+                "type": "groupBy"
+              }
+            ],
+            "limit": 50
+          },
           "table": "_devlake_tasks",
           "timeColumn": "created_at",
           "timeColumnType": "timestamp",
@@ -607,6 +813,8 @@
             "mode": "palette-classic"
           },
           "custom": {
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
             "axisLabel": "",
             "axisPlacement": "auto",
             "axisSoftMin": 0,
@@ -617,7 +825,13 @@
               "tooltip": false,
               "viz": false
             },
-            "lineWidth": 1
+            "lineWidth": 1,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
           },
           "mappings": [],
           "thresholds": {
@@ -645,22 +859,30 @@
       "id": 2,
       "links": [],
       "options": {
+        "barRadius": 0,
         "barWidth": 0.6,
+        "fullHighlight": false,
         "groupWidth": 0.7,
         "legend": {
           "calcs": [],
           "displayMode": "list",
-          "placement": "bottom"
+          "placement": "bottom",
+          "showLegend": true
         },
         "orientation": "auto",
         "showValue": "auto",
+        "stacking": "none",
         "text": {},
         "tooltip": {
-          "mode": "single"
-        }
+          "mode": "single",
+          "sort": "none"
+        },
+        "xTickLabelRotation": 0,
+        "xTickLabelSpacing": 0
       },
       "targets": [
         {
+          "datasource": "mysql",
           "format": "table",
           "group": [],
           "metricColumn": "none",
@@ -702,6 +924,8 @@
             "mode": "palette-classic"
           },
           "custom": {
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
             "axisLabel": "Hours",
             "axisPlacement": "auto",
             "axisSoftMin": 0,
@@ -712,7 +936,13 @@
               "tooltip": false,
               "viz": false
             },
-            "lineWidth": 1
+            "lineWidth": 1,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
           },
           "mappings": [],
           "thresholds": {
@@ -736,23 +966,31 @@
       "id": 6,
       "links": [],
       "options": {
+        "barRadius": 0,
         "barWidth": 0.7,
+        "fullHighlight": false,
         "groupWidth": 0.7,
         "legend": {
           "calcs": [],
           "displayMode": "list",
-          "placement": "bottom"
+          "placement": "bottom",
+          "showLegend": true
         },
         "orientation": "auto",
         "showValue": "auto",
+        "stacking": "none",
         "text": {},
         "tooltip": {
-          "mode": "single"
-        }
+          "mode": "single",
+          "sort": "none"
+        },
+        "xTickLabelRotation": 0,
+        "xTickLabelSpacing": 0
       },
       "pluginVersion": "8.0.6",
       "targets": [
         {
+          "datasource": "mysql",
           "format": "table",
           "group": [],
           "hide": false,
@@ -782,8 +1020,6 @@
           ]
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
       "title": "Median Lead Time for Changes",
       "type": "barchart"
     },
@@ -796,6 +1032,8 @@
             "mode": "palette-classic"
           },
           "custom": {
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
             "axisLabel": "Hours",
             "axisPlacement": "auto",
             "axisSoftMin": 0,
@@ -806,15 +1044,20 @@
               "tooltip": false,
               "viz": false
             },
-            "lineWidth": 1
+            "lineWidth": 1,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
           },
           "mappings": [],
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
-                "value": null
+                "color": "green"
               },
               {
                 "color": "red",
@@ -851,23 +1094,31 @@
       "id": 9,
       "links": [],
       "options": {
+        "barRadius": 0,
         "barWidth": 0.6,
+        "fullHighlight": false,
         "groupWidth": 0.7,
         "legend": {
           "calcs": [],
           "displayMode": "list",
-          "placement": "bottom"
+          "placement": "bottom",
+          "showLegend": true
         },
         "orientation": "auto",
         "showValue": "auto",
+        "stacking": "none",
         "text": {},
         "tooltip": {
-          "mode": "single"
-        }
+          "mode": "single",
+          "sort": "none"
+        },
+        "xTickLabelRotation": 0,
+        "xTickLabelSpacing": 0
       },
       "pluginVersion": "8.0.6",
       "targets": [
         {
+          "datasource": "mysql",
           "format": "table",
           "group": [],
           "hide": false,
@@ -897,8 +1148,6 @@
           ]
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
       "title": "Median Time to Restore Service",
       "type": "barchart"
     },
@@ -911,6 +1160,8 @@
             "mode": "palette-classic"
           },
           "custom": {
+            "axisCenteredZero": false,
+            "axisColorMode": "text",
             "axisLabel": "",
             "axisPlacement": "auto",
             "axisSoftMin": 0,
@@ -921,7 +1172,13 @@
               "tooltip": false,
               "viz": false
             },
-            "lineWidth": 1
+            "lineWidth": 1,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
           },
           "mappings": [],
           "max": 1,
@@ -930,8 +1187,7 @@
             "mode": "percentage",
             "steps": [
               {
-                "color": "green",
-                "value": null
+                "color": "green"
               }
             ]
           },
@@ -964,25 +1220,33 @@
       "id": 5,
       "links": [],
       "options": {
+        "barRadius": 0,
         "barWidth": 0.6,
+        "fullHighlight": false,
         "groupWidth": 0.7,
         "legend": {
           "calcs": [],
           "displayMode": "list",
-          "placement": "bottom"
+          "placement": "bottom",
+          "showLegend": true
         },
         "orientation": "auto",
         "showValue": "auto",
+        "stacking": "none",
         "text": {
           "valueSize": 12
         },
         "tooltip": {
-          "mode": "single"
-        }
+          "mode": "single",
+          "sort": "none"
+        },
+        "xTickLabelRotation": 0,
+        "xTickLabelSpacing": 0
       },
       "pluginVersion": "8.0.6",
       "targets": [
         {
+          "datasource": "mysql",
           "format": "table",
           "group": [],
           "hide": false,
@@ -1012,14 +1276,12 @@
           ]
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
       "title": "Change Failure Rate",
       "type": "barchart"
     }
   ],
   "refresh": "",
-  "schemaVersion": 30,
+  "schemaVersion": 38,
   "style": "dark",
   "tags": [
     "Engineering Leads Dashboard",
@@ -1028,7 +1290,6 @@
   "templating": {
     "list": [
       {
-        "allValue": null,
         "current": {
           "selected": true,
           "text": [
@@ -1040,8 +1301,6 @@
         },
         "datasource": "mysql",
         "definition": "select distinct name from projects",
-        "description": null,
-        "error": null,
         "hide": 0,
         "includeAll": true,
         "label": "Project",
@@ -1054,6 +1313,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"
       }
     ]
   },
@@ -1065,5 +1345,6 @@
   "timezone": "",
   "title": "DORA",
   "uid": "qNo8_0M4z",
-  "version": 11
+  "version": 37,
+  "weekStart": ""
 }
\ No newline at end of file
diff --git a/grafana/dashboards/DORAByTeam.json 
b/grafana/dashboards/DORAByTeam.json
index d66f4b526..7f494562c 100644
--- a/grafana/dashboards/DORAByTeam.json
+++ b/grafana/dashboards/DORAByTeam.json
@@ -24,7 +24,7 @@
   "editable": true,
   "fiscalYearStartMonth": 0,
   "graphTooltip": 0,
-  "id": 8,
+  "id": 36,
   "links": [],
   "liveNow": false,
   "panels": [
@@ -50,7 +50,7 @@
         "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.1",
+      "pluginVersion": "9.5.15",
       "targets": [
         {
           "datasource": {
@@ -200,7 +200,7 @@
         "showHeader": true,
         "sortBy": []
       },
-      "pluginVersion": "9.5.1",
+      "pluginVersion": "9.5.15",
       "targets": [
         {
           "datasource": "mysql",
@@ -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": [
@@ -242,24 +242,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": {
@@ -297,7 +316,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "9.5.1",
+      "pluginVersion": "9.5.15",
       "targets": [
         {
           "datasource": "mysql",
@@ -307,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": [
             [
@@ -361,24 +380,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": {
@@ -416,7 +454,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "9.5.1",
+      "pluginVersion": "9.5.15",
       "targets": [
         {
           "datasource": "mysql",
@@ -424,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": [
@@ -458,24 +496,43 @@
           "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": {
@@ -517,7 +574,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "9.5.1",
+      "pluginVersion": "9.5.15",
       "targets": [
         {
           "datasource": "mysql",
@@ -525,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": [
@@ -559,24 +616,43 @@
           "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": {
@@ -614,7 +690,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "9.5.1",
+      "pluginVersion": "9.5.15",
       "targets": [
         {
           "datasource": "mysql",
@@ -622,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": [
@@ -890,8 +966,7 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
-                "value": null
+                "color": "green"
               },
               {
                 "color": "red",
@@ -1017,8 +1092,7 @@
             "mode": "percentage",
             "steps": [
               {
-                "color": "green",
-                "value": null
+                "color": "green"
               }
             ]
           },
@@ -1133,6 +1207,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"
       }
     ]
   },
@@ -1144,6 +1239,6 @@
   "timezone": "",
   "title": "DORA (by Team)",
   "uid": "66YkL8y4z",
-  "version": 33,
+  "version": 6,
   "weekStart": ""
 }
\ No newline at end of file

Reply via email to