| { |
| "annotations": { |
| "list": [ |
| { |
| "builtIn": 1, |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "enable": true, |
| "hide": true, |
| "iconColor": "rgba(0, 211, 255, 1)", |
| "name": "Annotations & Alerts", |
| "type": "dashboard" |
| } |
| ] |
| }, |
| "editable": true, |
| "fiscalYearStartMonth": 0, |
| "graphTooltip": 0, |
| "id": 7, |
| "links": [], |
| "liveNow": false, |
| "panels": [ |
| { |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "gridPos": { |
| "h": 3, |
| "w": 13, |
| "x": 0, |
| "y": 0 |
| }, |
| "id": 101, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Azure DevOps", |
| "url": "https://devlake.apache.org/docs/Plugins/azuredevops" |
| } |
| ], |
| "options": { |
| "code": { |
| "language": "plaintext", |
| "showLineNumbers": false, |
| "showMiniMap": false |
| }, |
| "content": "- Use Cases: This dashboard shows the basic Git and Code Review metrics from Azure DevOps.\n- Data Source Required: Azure DevOps", |
| "mode": "markdown" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "queryType": "randomWalk", |
| "refId": "A" |
| } |
| ], |
| "title": "Dashboard Introduction", |
| "type": "text" |
| }, |
| { |
| "collapsed": false, |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "gridPos": { |
| "h": 1, |
| "w": 24, |
| "x": 0, |
| "y": 3 |
| }, |
| "id": 83, |
| "panels": [], |
| "targets": [ |
| { |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "refId": "A" |
| } |
| ], |
| "title": "1. Contribution (PRs)", |
| "type": "row" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "thresholds" |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 0, |
| "y": 4 |
| }, |
| "id": 68, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Count", |
| "url": "https://devlake.apache.org/docs/Metrics/PRCount" |
| } |
| ], |
| "options": { |
| "colorMode": "value", |
| "graphMode": "area", |
| "justifyMode": "auto", |
| "orientation": "auto", |
| "reduceOptions": { |
| "calcs": [ |
| "lastNotNull" |
| ], |
| "fields": "", |
| "values": false |
| }, |
| "text": {}, |
| "textMode": "auto" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "select\n\tcount(distinct pr.id) as pull_request_count\nfrom \n\tpull_requests pr\nwhere\n $__timeFilter(created_date)\n\tand base_repo_id in (${repo_id})\n\t\n\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "1.1 Number of New Pull Requests [Selected Time Range]", |
| "type": "stat" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "", |
| "axisPlacement": "auto", |
| "axisSoftMin": 0, |
| "fillOpacity": 80, |
| "gradientMode": "none", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineWidth": 1, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 18, |
| "x": 6, |
| "y": 4 |
| }, |
| "id": 77, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Count", |
| "url": "https://devlake.apache.org/docs/Metrics/PRCount" |
| } |
| ], |
| "options": { |
| "barRadius": 0, |
| "barWidth": 0.5, |
| "fullHighlight": false, |
| "groupWidth": 0.7, |
| "legend": { |
| "calcs": [], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "orientation": "auto", |
| "showValue": "auto", |
| "stacking": "none", |
| "text": { |
| "valueSize": 12 |
| }, |
| "tooltip": { |
| "mode": "single", |
| "sort": "none" |
| }, |
| "xTickLabelRotation": 0, |
| "xTickLabelSpacing": 0 |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "with _prs as(\n SELECT\n DATE_ADD(date(created_date), INTERVAL -DAY(date(created_date))+1 DAY) as time,\n count(distinct id) as pr_count\n FROM pull_requests\n WHERE\n base_repo_id in (${repo_id})\n and $__timeFilter(created_date)\n and created_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)\n group by 1\n)\n\nSELECT \n date_format(time,'%M %Y') as month,\n pr_count as \"Pull Request Count\"\nFROM _prs\nORDER BY time\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "1.2 Total Number of New Pull Requests [Each Month]", |
| "type": "barchart" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "Merged PR Count", |
| "axisPlacement": "auto", |
| "axisSoftMin": 0, |
| "fillOpacity": 54, |
| "gradientMode": "none", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineWidth": 1, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| }, |
| "unit": "none" |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 24, |
| "x": 0, |
| "y": 10 |
| }, |
| "id": 59, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Count", |
| "url": "https://devlake.apache.org/docs/Metrics/PRCount" |
| } |
| ], |
| "options": { |
| "barRadius": 0, |
| "barWidth": 0.5, |
| "fullHighlight": false, |
| "groupWidth": 0.7, |
| "legend": { |
| "calcs": [], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "orientation": "auto", |
| "showValue": "auto", |
| "stacking": "none", |
| "text": { |
| "valueSize": 12 |
| }, |
| "tooltip": { |
| "mode": "multi", |
| "sort": "none" |
| }, |
| "xTickLabelRotation": 0, |
| "xTickLabelSpacing": 0 |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "-- The PR/MR statuses are standardized to DevLake's statuses 'OPEN', 'MERGED' and 'CLOSED'. You can check out the original status from the field `original_status`\nselect\n author_name,\n\tcount(distinct pr.id) as merged_pull_request_count\nfrom \n\tpull_requests pr\nwhere\n $__timeFilter(created_date)\n\tand base_repo_id in (${repo_id})\n\tand pr.status = 'MERGED'\ngroup by 1\norder by 2 desc\nlimit 20\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "1.3 Top Contributors By Merged PRs", |
| "type": "barchart" |
| }, |
| { |
| "collapsed": false, |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "gridPos": { |
| "h": 1, |
| "w": 24, |
| "x": 0, |
| "y": 16 |
| }, |
| "id": 85, |
| "panels": [], |
| "targets": [ |
| { |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "refId": "A" |
| } |
| ], |
| "title": "2. How PRs are handled?", |
| "type": "row" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "thresholds" |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| }, |
| "unit": "percentunit" |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 0, |
| "y": 17 |
| }, |
| "id": 66, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Merge Rate", |
| "url": "https://devlake.apache.org/docs/Metrics/PRMergeRate" |
| } |
| ], |
| "options": { |
| "colorMode": "value", |
| "graphMode": "area", |
| "justifyMode": "auto", |
| "orientation": "auto", |
| "reduceOptions": { |
| "calcs": [], |
| "fields": "", |
| "values": false |
| }, |
| "text": {}, |
| "textMode": "auto" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "-- The PR/MR statuses are standardized to DevLake's statuses 'OPEN', 'MERGED' and 'CLOSED'. You can check out the original status from the field `original_status`\nselect\n count(distinct case when status='CLOSED' then id else null end)/count(distinct case when status in ('MERGED','CLOSED') then id else null end) as ratio\nfrom \n\tpull_requests pr\nwhere\n $__timeFilter(created_date)\n\tand base_repo_id in (${repo_id})", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "2.1 Ratio of Non-merging Pull Requests of All Closed or Merged PRs", |
| "type": "stat" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "Pull Request Count", |
| "axisPlacement": "auto", |
| "barAlignment": 1, |
| "drawStyle": "bars", |
| "fillOpacity": 50, |
| "gradientMode": "opacity", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineInterpolation": "linear", |
| "lineWidth": 1, |
| "pointSize": 4, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "showPoints": "auto", |
| "spanNulls": false, |
| "stacking": { |
| "group": "A", |
| "mode": "normal" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 18, |
| "x": 6, |
| "y": 17 |
| }, |
| "id": 79, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Count", |
| "url": "https://devlake.apache.org/docs/Metrics/PRCount" |
| } |
| ], |
| "options": { |
| "legend": { |
| "calcs": [ |
| "sum" |
| ], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "tooltip": { |
| "mode": "multi", |
| "sort": "none" |
| } |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "format": "time_series", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "-- The PR/MR statuses are standardized to DevLake's statuses 'OPEN', 'MERGED' and 'CLOSED'. You can check out the original status from the field `original_status`\nSELECT\n DATE_ADD(date(created_date), INTERVAL -DAYOFMONTH(date(created_date))+1 DAY) as time,\n count(distinct case when status = 'OPEN' then id else null end) as \"PR: Open\",\n count(distinct case when status = 'CLOSED' then id else null end) as \"PR: Closed without merging\",\n count(distinct case when status = 'MERGED' then id else null end) as \"PR: Merged\"\nFROM pull_requests\nWHERE\n $__timeFilter(created_date)\n and base_repo_id in (${repo_id})\ngroup by 1\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "2.2 Pull Request Status Distribution [Each Month]", |
| "type": "timeseries" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "thresholds" |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 0, |
| "y": 23 |
| }, |
| "id": 80, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Count", |
| "url": "https://devlake.apache.org/docs/Metrics/PRCount" |
| } |
| ], |
| "options": { |
| "colorMode": "value", |
| "graphMode": "area", |
| "justifyMode": "auto", |
| "orientation": "auto", |
| "reduceOptions": { |
| "calcs": [ |
| "lastNotNull" |
| ], |
| "fields": "", |
| "values": false |
| }, |
| "text": {}, |
| "textMode": "auto" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "-- The PR/MR statuses are standardized to DevLake's statuses 'OPEN', 'MERGED' and 'CLOSED'. You can check out the original status from the field `original_status`\nselect\n\tcount(distinct pr.id) as merged_pull_request_count\nfrom \n\tpull_requests pr\nwhere\n $__timeFilter(created_date)\n\tand base_repo_id in (${repo_id})\n\tand pr.status = 'CLOSED'", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "2.3 Number of Pull Requests Closed without Merging [Selected Time Range]", |
| "type": "stat" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "Ratio", |
| "axisPlacement": "auto", |
| "barAlignment": 1, |
| "drawStyle": "line", |
| "fillOpacity": 50, |
| "gradientMode": "opacity", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineInterpolation": "linear", |
| "lineStyle": { |
| "fill": "solid" |
| }, |
| "lineWidth": 1, |
| "pointSize": 4, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "showPoints": "auto", |
| "spanNulls": false, |
| "stacking": { |
| "group": "A", |
| "mode": "normal" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| } |
| ] |
| }, |
| "unit": "percentunit" |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 18, |
| "x": 6, |
| "y": 23 |
| }, |
| "id": 81, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Merge Rate", |
| "url": "https://devlake.apache.org/docs/Metrics/PRMergeRate" |
| } |
| ], |
| "options": { |
| "legend": { |
| "calcs": [ |
| "mean" |
| ], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "tooltip": { |
| "mode": "multi", |
| "sort": "none" |
| } |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "format": "time_series", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "-- The PR/MR statuses are standardized to DevLake's statuses 'OPEN', 'MERGED' and 'CLOSED'. You can check out the original status from the field `original_status`\nSELECT\n DATE_ADD(date(created_date), INTERVAL -DAYOFMONTH(date(created_date))+1 DAY) as time,\n count(distinct case when status = 'CLOSED' then id else null end)/count(distinct case when status in ('MERGED', 'CLOSED') then id else null end) as ratio\nFROM pull_requests\nWHERE\n $__timeFilter(created_date)\n and base_repo_id in (${repo_id})\ngroup by 1\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "2.4 Ratio of Non-merging PRs of All Closed or Merged PRs [Each Month]", |
| "type": "timeseries" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "thresholds" |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 0, |
| "y": 29 |
| }, |
| "id": 72, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Time To Merge", |
| "url": "https://devlake.apache.org/docs/Metrics/PRTimeToMerge" |
| } |
| ], |
| "options": { |
| "colorMode": "value", |
| "graphMode": "area", |
| "justifyMode": "auto", |
| "orientation": "auto", |
| "reduceOptions": { |
| "calcs": [ |
| "lastNotNull" |
| ], |
| "fields": "", |
| "values": false |
| }, |
| "text": {}, |
| "textMode": "auto" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "select\n\tavg(TIMESTAMPDIFF(Minute,created_date,merged_date)/1440)\nfrom \n\tpull_requests\nwhere \n $__timeFilter(created_date)\n\tand base_repo_id in (${repo_id})\n\tand merged_date is not null\n\n\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "2.5 Mean Time to Merge of Pull Requests in Days [Selected Time Range]", |
| "type": "stat" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "", |
| "axisPlacement": "auto", |
| "axisSoftMin": 0, |
| "fillOpacity": 80, |
| "gradientMode": "none", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineWidth": 1, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 18, |
| "x": 6, |
| "y": 29 |
| }, |
| "id": 95, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "PR Time To Merge", |
| "url": "https://devlake.apache.org/docs/Metrics/PRTimeToMerge" |
| } |
| ], |
| "options": { |
| "barRadius": 0, |
| "barWidth": 0.5, |
| "fullHighlight": false, |
| "groupWidth": 0.7, |
| "legend": { |
| "calcs": [], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "orientation": "auto", |
| "showValue": "auto", |
| "stacking": "none", |
| "text": { |
| "valueSize": 12 |
| }, |
| "tooltip": { |
| "mode": "single", |
| "sort": "none" |
| }, |
| "xTickLabelRotation": 0, |
| "xTickLabelSpacing": 0 |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "with _prs as(\n SELECT\n DATE_ADD(date(created_date), INTERVAL -DAY(date(created_date))+1 DAY) as time,\n avg(TIMESTAMPDIFF(Minute,created_date,merged_date)/1440) as time_to_merge\n FROM pull_requests\n WHERE\n $__timeFilter(created_date)\n and base_repo_id in (${repo_id})\n and created_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)\n group by 1\n)\n\nSELECT \n date_format(time,'%M %Y') as month,\n time_to_merge as \"Time to Merge\"\nFROM _prs\nORDER BY time\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "2.6 Mean Time to Merge of Pull Requests in Days [Each Month]", |
| "type": "barchart" |
| }, |
| { |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "gridPos": { |
| "h": 2, |
| "w": 24, |
| "x": 0, |
| "y": 35 |
| }, |
| "id": 99, |
| "options": { |
| "code": { |
| "language": "plaintext", |
| "showLineNumbers": false, |
| "showMiniMap": false |
| }, |
| "content": "<br/>\n\nThis dashboard is created based on this [data schema](https://devlake.apache.org/docs/DataModels/DevLakeDomainLayerSchema). Want to add more metrics? Please follow the [guide](https://devlake.apache.org/docs/Configuration/Dashboards/GrafanaUserGuide).", |
| "mode": "markdown" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": { |
| "type": "datasource", |
| "uid": "grafana" |
| }, |
| "queryType": "randomWalk", |
| "refId": "A" |
| } |
| ], |
| "type": "text" |
| }, |
| { |
| "collapsed": false, |
| "gridPos": { |
| "h": 1, |
| "w": 24, |
| "x": 0, |
| "y": 37 |
| }, |
| "id": 102, |
| "panels": [], |
| "title": "3. CI/CD Metrics", |
| "type": "row" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "Number of Pipeline runs executed in the selected time range", |
| "fieldConfig": { |
| "defaults": { |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 0, |
| "y": 38 |
| }, |
| "id": 103, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Build Count", |
| "url": "https://devlake.apache.org/docs/Metrics/BuildCount" |
| } |
| ], |
| "options": { |
| "colorMode": "value", |
| "graphMode": "area", |
| "justifyMode": "auto", |
| "orientation": "auto", |
| "reduceOptions": { |
| "calcs": [ |
| "mean" |
| ], |
| "fields": "", |
| "values": false |
| }, |
| "text": {}, |
| "textMode": "auto" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "SELECT\n count(distinct id)\nFROM \n cicd_pipelines\nWHERE\n $__timeFilter(finished_date)\n and result = 'SUCCESS'\n and id like \"%azure%\"\n and cicd_scope_id in (${repo_id})\n -- the following condition will remove the month with incomplete data\n and finished_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "project_id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "gitlab_commits", |
| "timeColumn": "created_at", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "3.1 Total Number of Successful Pipeline runs [Selected Time Range]", |
| "type": "stat" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "Number of successful Pipeline runs / Number of total Pipeline runs", |
| "fieldConfig": { |
| "defaults": { |
| "mappings": [], |
| "max": 100, |
| "min": 0, |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "blue", |
| "value": null |
| } |
| ] |
| }, |
| "unit": "percentunit" |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 6, |
| "y": 38 |
| }, |
| "id": 104, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Build Success Rate", |
| "url": "https://devlake.apache.org/docs/Metrics/BuildSuccessRate" |
| } |
| ], |
| "options": { |
| "colorMode": "value", |
| "graphMode": "area", |
| "justifyMode": "auto", |
| "orientation": "auto", |
| "reduceOptions": { |
| "calcs": [ |
| "lastNotNull" |
| ], |
| "fields": "", |
| "values": false |
| }, |
| "text": {}, |
| "textMode": "auto" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "SELECT\n 1.0 * count(case when result = 'SUCCESS' then id else null end)/count(distinct id)\nFROM cicd_pipelines\nWHERE\n $__timeFilter(finished_date)\n and id like \"%azure%\"\n and cicd_scope_id in (${repo_id})\n -- the following condition will remove the month with incomplete data\n and finished_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "project_id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "gitlab_commits", |
| "timeColumn": "created_at", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "3.2 Mean Pipeline runs Success Rate", |
| "type": "stat" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| } |
| }, |
| "decimals": 0, |
| "mappings": [], |
| "unit": "none" |
| }, |
| "overrides": [ |
| { |
| "__systemRef": "hideSeriesFrom", |
| "matcher": { |
| "id": "byNames", |
| "options": { |
| "mode": "exclude", |
| "names": [ |
| "build_count", |
| "ABORT" |
| ], |
| "prefix": "All except:", |
| "readOnly": true |
| } |
| }, |
| "properties": [ |
| { |
| "id": "custom.hideFrom", |
| "value": { |
| "legend": false, |
| "tooltip": false, |
| "viz": true |
| } |
| } |
| ] |
| }, |
| { |
| "matcher": { |
| "id": "byName", |
| "options": "SUCCESS" |
| }, |
| "properties": [ |
| { |
| "id": "color", |
| "value": { |
| "fixedColor": "green", |
| "mode": "fixed" |
| } |
| } |
| ] |
| }, |
| { |
| "matcher": { |
| "id": "byName", |
| "options": "FAILURE" |
| }, |
| "properties": [ |
| { |
| "id": "color", |
| "value": { |
| "fixedColor": "red", |
| "mode": "fixed" |
| } |
| } |
| ] |
| }, |
| { |
| "matcher": { |
| "id": "byName", |
| "options": "ABORT" |
| }, |
| "properties": [ |
| { |
| "id": "color", |
| "value": { |
| "fixedColor": "rgba(205, 204, 206, 1)", |
| "mode": "fixed" |
| } |
| } |
| ] |
| } |
| ] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 12, |
| "y": 38 |
| }, |
| "id": 105, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Build Count", |
| "url": "https://devlake.apache.org/docs/Metrics/BuildCount" |
| } |
| ], |
| "options": { |
| "displayLabels": [ |
| "value", |
| "percent" |
| ], |
| "legend": { |
| "calcs": [], |
| "displayMode": "table", |
| "placement": "right", |
| "showLegend": true, |
| "values": [ |
| "percent", |
| "value" |
| ] |
| }, |
| "pieType": "donut", |
| "reduceOptions": { |
| "calcs": [ |
| "sum" |
| ], |
| "fields": "", |
| "values": true |
| }, |
| "tooltip": { |
| "mode": "single", |
| "sort": "none" |
| } |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "SELECT\n result,\n count(distinct id) as build_count\nFROM cicd_pipelines\nWHERE\n $__timeFilter(finished_date)\n and id like \"%azure%\"\n and cicd_scope_id in (${repo_id})\n -- the following condition will remove the month with incomplete data\n and finished_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)\nGROUP BY 1\nORDER BY 2 desc", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "project_id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "gitlab_commits", |
| "timeColumn": "created_at", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "3.3 Total Pipeline runs Result Distribution", |
| "type": "piechart" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "Number of successful Pipeline runs / Number of total Pipeline runs", |
| "fieldConfig": { |
| "defaults": { |
| "mappings": [], |
| "max": 100, |
| "min": 0, |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "light-orange", |
| "value": null |
| } |
| ] |
| }, |
| "unit": "none" |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 6, |
| "x": 18, |
| "y": 38 |
| }, |
| "id": 106, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Build Duration", |
| "url": "https://devlake.apache.org/docs/Metrics/BuildDuration" |
| } |
| ], |
| "options": { |
| "colorMode": "value", |
| "graphMode": "area", |
| "justifyMode": "auto", |
| "orientation": "auto", |
| "reduceOptions": { |
| "calcs": [], |
| "fields": "", |
| "values": false |
| }, |
| "text": {}, |
| "textMode": "auto" |
| }, |
| "pluginVersion": "9.5.15", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "SELECT\n avg(duration_sec/60) as duration_in_minutes\nFROM cicd_pipelines\nWHERE\n $__timeFilter(finished_date)\n and id like \"%azure%\"\n and cicd_scope_id in (${repo_id})\n -- the following condition will remove the month with incomplete data\n and finished_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "project_id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "gitlab_commits", |
| "timeColumn": "created_at", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "3.4 Mean Pipeline runs Duration in Minutes", |
| "type": "stat" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "Pipeline runs Count", |
| "axisPlacement": "auto", |
| "axisSoftMin": 0, |
| "fillOpacity": 80, |
| "gradientMode": "none", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineWidth": 1, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| } |
| }, |
| "overrides": [] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 12, |
| "x": 0, |
| "y": 44 |
| }, |
| "id": 107, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Build Count", |
| "url": "https://devlake.apache.org/docs/Metrics/BuildCount" |
| } |
| ], |
| "options": { |
| "barRadius": 0, |
| "barWidth": 0.5, |
| "fullHighlight": false, |
| "groupWidth": 0.7, |
| "legend": { |
| "calcs": [], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "orientation": "auto", |
| "showValue": "auto", |
| "stacking": "none", |
| "text": { |
| "valueSize": 12 |
| }, |
| "tooltip": { |
| "mode": "single", |
| "sort": "none" |
| }, |
| "xTickLabelRotation": 0, |
| "xTickLabelSpacing": 0 |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "WITH _builds as(\n SELECT\n DATE_ADD(date(finished_date), INTERVAL -DAYOFMONTH(date(finished_date))+1 DAY) as time,\n count(distinct id) as build_count\n FROM cicd_pipelines\n WHERE\n $__timeFilter(finished_date)\n and result = 'SUCCESS'\n and id like \"%azure%\"\n and cicd_scope_id in (${repo_id})\n -- the following condition will remove the month with incomplete data\n and finished_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)\n GROUP BY 1\n)\n\nSELECT \n date_format(time,'%M %Y') as month,\n build_count as \"Pipeline runs Count\"\nFROM _builds\nORDER BY time\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "3.1.1 Total Number of Successful Pipeline runs [Each Month]", |
| "type": "barchart" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "1. Mean Pipeline runs success rate over time.\n2. The Pipeline runs being calculated are filtered by \"Pipeline runs starting time\" (time filter at the upper-right corner) and \"Jira board\" (\"Choose Board\" filter at the upper-left corner)", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "Pipeline runs Success Rate(%)", |
| "axisPlacement": "auto", |
| "axisSoftMin": 0, |
| "fillOpacity": 80, |
| "gradientMode": "none", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineWidth": 1, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "green", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 80 |
| } |
| ] |
| }, |
| "unit": "percentunit" |
| }, |
| "overrides": [ |
| { |
| "matcher": { |
| "id": "byName", |
| "options": "Pipeline runs Success Rate" |
| }, |
| "properties": [ |
| { |
| "id": "color", |
| "value": { |
| "fixedColor": "blue", |
| "mode": "fixed" |
| } |
| } |
| ] |
| } |
| ] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 12, |
| "x": 12, |
| "y": 44 |
| }, |
| "id": 108, |
| "interval": "", |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Build Success Rate", |
| "url": "https://devlake.apache.org/docs/Metrics/BuildSuccessRate" |
| } |
| ], |
| "options": { |
| "barRadius": 0, |
| "barWidth": 0.5, |
| "fullHighlight": false, |
| "groupWidth": 0.7, |
| "legend": { |
| "calcs": [ |
| "mean" |
| ], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "orientation": "auto", |
| "showValue": "auto", |
| "stacking": "none", |
| "text": { |
| "valueSize": 12 |
| }, |
| "tooltip": { |
| "mode": "single", |
| "sort": "none" |
| }, |
| "xTickLabelRotation": 0, |
| "xTickLabelSpacing": 0 |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "WITH _build_success_rate as(\r\n SELECT\r\n DATE_ADD(date(finished_date), INTERVAL -DAYOFMONTH(date(finished_date))+1 DAY) as time,\r\n result,\r\n id\r\n FROM\r\n cicd_pipelines\r\n WHERE\r\n $__timeFilter(finished_date)\r\n and id like \"%azure%\"\r\n and cicd_scope_id in (${repo_id})\r\n -- the following condition will remove the month with incomplete data\r\n and finished_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)\r\n GROUP BY \r\n time, result, id\r\n)\r\n\r\nSELECT \r\n date_format(time,'%M %Y') as month,\r\n 1.0 * sum(case when result = 'SUCCESS' then 1 else 0 end)/ count(*) as \"Pipeline runs Success Rate\"\r\nFROM _build_success_rate\r\nGROUP BY time\r\nORDER BY time", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "progress" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "ca_analysis", |
| "timeColumn": "create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "3.2.1 Pipeline runs Success Rate [Each Month]", |
| "type": "barchart" |
| }, |
| { |
| "datasource": "mysql", |
| "description": "", |
| "fieldConfig": { |
| "defaults": { |
| "color": { |
| "mode": "palette-classic" |
| }, |
| "custom": { |
| "axisCenteredZero": false, |
| "axisColorMode": "text", |
| "axisLabel": "Pipeline runs Duration(minutes)", |
| "axisPlacement": "auto", |
| "axisSoftMin": 0, |
| "fillOpacity": 80, |
| "gradientMode": "none", |
| "hideFrom": { |
| "legend": false, |
| "tooltip": false, |
| "viz": false |
| }, |
| "lineWidth": 1, |
| "scaleDistribution": { |
| "type": "linear" |
| }, |
| "thresholdsStyle": { |
| "mode": "off" |
| } |
| }, |
| "mappings": [], |
| "thresholds": { |
| "mode": "absolute", |
| "steps": [ |
| { |
| "color": "purple", |
| "value": null |
| }, |
| { |
| "color": "red", |
| "value": 60 |
| } |
| ] |
| } |
| }, |
| "overrides": [ |
| { |
| "matcher": { |
| "id": "byName", |
| "options": "mean_duration_minutes" |
| }, |
| "properties": [ |
| { |
| "id": "color", |
| "value": { |
| "fixedColor": "light-orange", |
| "mode": "fixed" |
| } |
| } |
| ] |
| } |
| ] |
| }, |
| "gridPos": { |
| "h": 6, |
| "w": 24, |
| "x": 0, |
| "y": 50 |
| }, |
| "id": 109, |
| "links": [ |
| { |
| "targetBlank": true, |
| "title": "Build Duration", |
| "url": "https://devlake.apache.org/docs/Metrics/BuildDuration" |
| } |
| ], |
| "options": { |
| "barRadius": 0, |
| "barWidth": 0.5, |
| "fullHighlight": false, |
| "groupWidth": 0.7, |
| "legend": { |
| "calcs": [], |
| "displayMode": "list", |
| "placement": "bottom", |
| "showLegend": true |
| }, |
| "orientation": "auto", |
| "showValue": "auto", |
| "stacking": "none", |
| "text": { |
| "valueSize": 12 |
| }, |
| "tooltip": { |
| "mode": "single", |
| "sort": "none" |
| }, |
| "xTickLabelRotation": 0, |
| "xTickLabelSpacing": 0 |
| }, |
| "pluginVersion": "8.0.6", |
| "targets": [ |
| { |
| "datasource": "mysql", |
| "editorMode": "code", |
| "format": "table", |
| "group": [], |
| "hide": false, |
| "metricColumn": "none", |
| "rawQuery": true, |
| "rawSql": "WITH _builds as(\n SELECT\n DATE_ADD(date(finished_date), INTERVAL -DAYOFMONTH(date(finished_date))+1 DAY) as time,\n avg(duration_sec) as mean_duration_sec\n FROM \n cicd_pipelines\n WHERE\n $__timeFilter(finished_date)\n and id like \"%azure%\"\n and cicd_scope_id in (${repo_id})\n -- the following condition will remove the month with incomplete data\n and finished_date >= DATE_ADD(DATE_ADD($__timeFrom(), INTERVAL -DAY($__timeFrom())+1 DAY), INTERVAL +1 MONTH)\n GROUP BY 1\n)\n\nSELECT \n date_format(time,'%M %Y') as month,\n mean_duration_sec/60 as mean_duration_minutes\nFROM _builds\nORDER BY time\n", |
| "refId": "A", |
| "select": [ |
| [ |
| { |
| "params": [ |
| "id" |
| ], |
| "type": "column" |
| } |
| ] |
| ], |
| "sql": { |
| "columns": [ |
| { |
| "parameters": [], |
| "type": "function" |
| } |
| ], |
| "groupBy": [ |
| { |
| "property": { |
| "type": "string" |
| }, |
| "type": "groupBy" |
| } |
| ], |
| "limit": 50 |
| }, |
| "table": "ae_projects", |
| "timeColumn": "ae_create_time", |
| "timeColumnType": "timestamp", |
| "where": [ |
| { |
| "name": "$__timeFilter", |
| "params": [], |
| "type": "macro" |
| } |
| ] |
| } |
| ], |
| "title": "3.4.1 Mean Pipeline runs Duration in Minutes [Each Month]", |
| "type": "barchart" |
| } |
| ], |
| "refresh": "", |
| "schemaVersion": 38, |
| "style": "dark", |
| "tags": [ |
| "Data Source Dashboard" |
| ], |
| "templating": { |
| "list": [ |
| { |
| "allValue": "", |
| "current": { |
| "selected": true, |
| "text": [ |
| "All" |
| ], |
| "value": [ |
| "$__all" |
| ] |
| }, |
| "datasource": "mysql", |
| "definition": "select concat(name, '--', id) as text from repos where id like 'azure%'", |
| "hide": 0, |
| "includeAll": true, |
| "label": "Repo", |
| "multi": true, |
| "name": "repo_id", |
| "options": [], |
| "query": "select concat(name, '--', id) as text from repos where id like 'azure%'", |
| "refresh": 1, |
| "regex": "/^(?<text>.*)--(?<value>.*)$/", |
| "skipUrlSync": false, |
| "sort": 0, |
| "type": "query" |
| } |
| ] |
| }, |
| "time": { |
| "from": "now-6M", |
| "to": "now" |
| }, |
| "timepicker": {}, |
| "timezone": "", |
| "title": "Azure DevOps", |
| "uid": "ba7e3a95-80ed-4067-a54b-2a82758eb3dd", |
| "version": 3, |
| "weekStart": "" |
| } |