Skip to content

Commit

Permalink
ADM-1005 [frontend][backend]: re-calculate lead time for changes when…
Browse files Browse the repository at this point in the history
… exist pipeline configuration and source control configuration (#1613)

* ADM-1005 [frontend]: fix the bug when pipeline settings exist in the redux but user select Other in the pipeline configuration

* ADM-1005 [frontend]: fix test coverage

* ADM-1005 [frontend][backend]: update the pipeline csv file

* ADM-1005 [frontend][backend]: fix test

* ADM-1005 [frontend]: fix e2e test

* ADM-1005 [frontend]: add a test for with pipeline and source control configuration

* ADM-1005 [frontend]: format

* ADM-1005 [frontend]: format
  • Loading branch information
zhou-yinyuan authored Sep 26, 2024
1 parent 1f65550 commit 48fb4b3
Show file tree
Hide file tree
Showing 21 changed files with 520 additions and 113 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ public class DeploymentEnvironment {

private String step;

private String repoName;

@Nullable
private String repository;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ private PipelineCSVInfo getPipelineCSVInfo(String startTime, String endTime,

return PipelineCSVInfo.builder()
.organizationName(deploymentEnvironment.getOrgName())
.repoName(deploymentEnvironment.getRepoName())
.pipeLineName(deploymentEnvironment.getName())
.stepName(deployInfo.getJobName())
.valid(deployInfo.getJobName().equals(deploymentEnvironment.getStep()))
Expand Down
19 changes: 19 additions & 0 deletions frontend/__tests__/containers/ReportStep/ReportStep.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import {
updateDateRange,
updateJiraVerifyResponse,
updateMetrics,
updatePipelineTool,
updatePipelineToolVerifyResponse,
} from '@src/context/config/configSlice';
import { act, render, renderHook, screen, waitFor, within } from '@testing-library/react';
Expand Down Expand Up @@ -230,6 +231,24 @@ describe('Report Step', () => {
expect(screen.getByText('Pipeline Mean Time To Recovery')).toBeInTheDocument();
});

it('should call startToRequestData with no pipeline settings when pipeline configuration select Other', () => {
store.dispatch(
updatePipelineTool({
type: 'Other',
token: '',
}),
);
setup([LEAD_TIME_FOR_CHANGES], [emptyValueDateRange]);

expect(useGenerateReportEffect().startToRequestData).toBeCalledWith(
expect.objectContaining({
buildKiteSetting: expect.objectContaining({
deploymentEnvList: [],
}),
}),
);
});

it('should render loading page when report data is empty', () => {
setup(REQUIRED_DATA_LIST, [emptyValueDateRange]);

Expand Down
1 change: 1 addition & 0 deletions frontend/__tests__/fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ export const MOCK_GENERATE_REPORT_REQUEST_PARAMS: ReportRequestDTO = {
name: 'mockPipelineName',
orgId: 'mockOrgId',
orgName: 'mockOrgName',
repoName: 'mockRepoName',
repository: 'mockRep',
step: 'step',
branches: [],
Expand Down
20 changes: 10 additions & 10 deletions frontend/e2e/fixtures/create-new/pipeline-20240812-20240818.csv
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
"Organization","Pipeline Name","Repo Name","Pipeline Step","Valid","Build Number","Pull Number","Code Committer","Build Creator","First Code Committed Time In PR","PR Created Time","PR Merged Time","No PR Committed Time","Job Start Time","Pipeline Start Time","Pipeline Finish Time","Non-Workdays (Hours)","Total Lead Time (HH:mm:ss)","PR Lead Time (HH:mm:ss)","Pipeline Lead Time (HH:mm:ss)","Status","Branch","Revert"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4185","1579","zhou-yinyuan",,"2024-08-16T09:34:03Z","2024-08-16T09:34:35Z","2024-08-16T09:42:39Z",,"2024-08-16T10:05:48Z","2024-08-16T09:42:39Z","2024-08-16T10:06:16.456Z","0","0:32:13","0:8:36","0:23:37","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4183","1578","zhou-yinyuan",,"2024-08-16T09:11:02Z","2024-08-16T09:11:32Z","2024-08-16T09:16:37Z",,"2024-08-16T09:40:33Z","2024-08-16T09:16:37Z","2024-08-16T09:41:01.451Z","0","0:29:59","0:5:35","0:24:24","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4181","1577","zhou-yinyuan","heartbeat-user","2024-08-15T07:40:45Z","2024-08-15T07:41:18Z","2024-08-16T03:27:54Z",,"2024-08-16T03:50:27Z","2024-08-16T03:27:54Z","2024-08-16T03:50:58.880Z","0","20:10:13","19:47:9","0:23:4","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4175",,"guzhongren",,,,,,,,"2024-08-15T00:54:47.563Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4173","1576","zhou-yinyuan",,"2024-08-14T07:07:54Z","2024-08-14T09:21:18Z","2024-08-14T09:29:12Z",,"2024-08-14T09:52:23Z","2024-08-14T09:29:12Z","2024-08-14T09:52:49.797Z","0","2:44:55","2:21:18","0:23:37","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4170","1575","zhou-yinyuan",,"2024-08-14T07:07:54Z","2024-08-14T07:08:40Z","2024-08-14T07:13:45Z",,"2024-08-14T07:37:14Z","2024-08-14T07:13:45Z","2024-08-14T07:37:42.686Z","0","0:29:48","0:5:51","0:23:57","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4168","1574","zhou-yinyuan",,"2024-08-14T02:18:08Z","2024-08-14T02:18:46Z","2024-08-14T02:25:41Z",,"2024-08-14T02:51:00Z","2024-08-14T02:25:41Z","2024-08-14T02:51:29.410Z","0","0:33:21","0:7:33","0:25:48","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4165","1573","zhou-yinyuan",,"2024-08-12T02:58:15Z","2024-08-13T06:09:53Z","2024-08-13T07:00:49Z",,"2024-08-13T07:28:33Z","2024-08-13T07:00:49Z","2024-08-13T07:29:05.011Z","0","28:30:50","28:2:34","0:28:16","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4162","1572","zhou-yinyuan",,"2024-08-12T02:58:15Z","2024-08-12T02:59:01Z","2024-08-13T05:56:53Z",,"2024-08-13T06:24:55Z","2024-08-13T05:56:53Z","2024-08-13T06:25:32.138Z","0","27:27:17","26:58:38","0:28:39","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4153","1571","zhou-yinyuan",,"2024-08-09T03:54:06Z","2024-08-09T07:16:19Z","2024-08-12T01:08:39Z",,"2024-08-12T01:36:41Z","2024-08-12T01:08:39Z","2024-08-12T01:37:13.163Z","48","21:43:7","21:14:33","0:28:34","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4185","1579","zhou-yinyuan",,"2024-08-16T09:34:03Z","2024-08-16T09:34:35Z","2024-08-16T09:42:39Z",,"2024-08-16T10:05:48Z","2024-08-16T09:42:39Z","2024-08-16T10:06:16.456Z","0","0:32:13","0:8:36","0:23:37","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4183","1578","zhou-yinyuan",,"2024-08-16T09:11:02Z","2024-08-16T09:11:32Z","2024-08-16T09:16:37Z",,"2024-08-16T09:40:33Z","2024-08-16T09:16:37Z","2024-08-16T09:41:01.451Z","0","0:29:59","0:5:35","0:24:24","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4181","1577","zhou-yinyuan","heartbeat-user","2024-08-15T07:40:45Z","2024-08-15T07:41:18Z","2024-08-16T03:27:54Z",,"2024-08-16T03:50:27Z","2024-08-16T03:27:54Z","2024-08-16T03:50:58.880Z","0","20:10:13","19:47:9","0:23:4","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4175",,"guzhongren",,,,,,,,"2024-08-15T00:54:47.563Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4173","1576","zhou-yinyuan",,"2024-08-14T07:07:54Z","2024-08-14T09:21:18Z","2024-08-14T09:29:12Z",,"2024-08-14T09:52:23Z","2024-08-14T09:29:12Z","2024-08-14T09:52:49.797Z","0","2:44:55","2:21:18","0:23:37","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4170","1575","zhou-yinyuan",,"2024-08-14T07:07:54Z","2024-08-14T07:08:40Z","2024-08-14T07:13:45Z",,"2024-08-14T07:37:14Z","2024-08-14T07:13:45Z","2024-08-14T07:37:42.686Z","0","0:29:48","0:5:51","0:23:57","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4168","1574","zhou-yinyuan",,"2024-08-14T02:18:08Z","2024-08-14T02:18:46Z","2024-08-14T02:25:41Z",,"2024-08-14T02:51:00Z","2024-08-14T02:25:41Z","2024-08-14T02:51:29.410Z","0","0:33:21","0:7:33","0:25:48","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4165","1573","zhou-yinyuan",,"2024-08-12T02:58:15Z","2024-08-13T06:09:53Z","2024-08-13T07:00:49Z",,"2024-08-13T07:28:33Z","2024-08-13T07:00:49Z","2024-08-13T07:29:05.011Z","0","28:30:50","28:2:34","0:28:16","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4162","1572","zhou-yinyuan",,"2024-08-12T02:58:15Z","2024-08-12T02:59:01Z","2024-08-13T05:56:53Z",,"2024-08-13T06:24:55Z","2024-08-13T05:56:53Z","2024-08-13T06:25:32.138Z","0","27:27:17","26:58:38","0:28:39","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4153","1571","zhou-yinyuan",,"2024-08-09T03:54:06Z","2024-08-09T07:16:19Z","2024-08-12T01:08:39Z",,"2024-08-12T01:36:41Z","2024-08-12T01:08:39Z","2024-08-12T01:37:13.163Z","48","21:43:7","21:14:33","0:28:34","passed","main","false"
12 changes: 6 additions & 6 deletions frontend/e2e/fixtures/create-new/pipeline-20240819-20240825.csv
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"Organization","Pipeline Name","Repo Name","Pipeline Step","Valid","Build Number","Pull Number","Code Committer","Build Creator","First Code Committed Time In PR","PR Created Time","PR Merged Time","No PR Committed Time","Job Start Time","Pipeline Start Time","Pipeline Finish Time","Non-Workdays (Hours)","Total Lead Time (HH:mm:ss)","PR Lead Time (HH:mm:ss)","Pipeline Lead Time (HH:mm:ss)","Status","Branch","Revert"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy e2e","false","4224",,"zhou-yinyuan","heartbeat-user",,,,,,,"2024-08-25T00:50:29.642Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4221",,"Unknown","heartbeat-user",,,,,,,"2024-08-25T00:49:05.117Z","0",,,,"failed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4207",,"zhou-yinyuan",,,,,,,,"2024-08-21T09:48:48.575Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4201","1583","zhou-yinyuan",,"2024-08-21T03:04:10Z","2024-08-21T03:04:36Z","2024-08-21T03:16:16Z",,"2024-08-21T03:39:02Z","2024-08-21T03:16:16Z","2024-08-21T03:39:31.606Z","0","0:35:21","0:12:6","0:23:15","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4197","1582","zhou-yinyuan",,"2024-08-20T01:58:55Z","2024-08-20T01:59:41Z","2024-08-20T09:34:31Z",,"2024-08-20T10:02:47Z","2024-08-20T09:34:31Z","2024-08-20T10:03:29.671Z","0","8:4:34","7:35:36","0:28:58","passed","main","false"
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4188",,"renovate[bot]",,,,,,,,"2024-08-20T00:53:29.705Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy e2e","false","4224",,"zhou-yinyuan","heartbeat-user",,,,,,,"2024-08-25T00:50:29.642Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4221",,"Unknown","heartbeat-user",,,,,,,"2024-08-25T00:49:05.117Z","0",,,,"failed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4207",,"zhou-yinyuan",,,,,,,,"2024-08-21T09:48:48.575Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4201","1583","zhou-yinyuan",,"2024-08-21T03:04:10Z","2024-08-21T03:04:36Z","2024-08-21T03:16:16Z",,"2024-08-21T03:39:02Z","2024-08-21T03:16:16Z","2024-08-21T03:39:31.606Z","0","0:35:21","0:12:6","0:23:15","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4197","1582","zhou-yinyuan",,"2024-08-20T01:58:55Z","2024-08-20T01:59:41Z","2024-08-20T09:34:31Z",,"2024-08-20T10:02:47Z","2024-08-20T09:34:31Z","2024-08-20T10:03:29.671Z","0","8:4:34","7:35:36","0:28:58","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4188",,"renovate[bot]",,,,,,,,"2024-08-20T00:53:29.705Z","0",,,,"passed","main",""
10 changes: 5 additions & 5 deletions frontend/e2e/fixtures/create-new/pipeline-20240826-20240902.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"Organization","Pipeline Name","Repo Name","Pipeline Step","Valid","Build Number","Pull Number","Code Committer","Build Creator","First Code Committed Time In PR","PR Created Time","PR Merged Time","No PR Committed Time","Job Start Time","Pipeline Start Time","Pipeline Finish Time","Non-Workdays (Hours)","Total Lead Time (HH:mm:ss)","PR Lead Time (HH:mm:ss)","Pipeline Lead Time (HH:mm:ss)","Status","Branch","Revert"
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4259",,"renovate[bot]",,,,,,,,"2024-08-30T10:17:49.663Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4255",,"renovate[bot]",,,,,,,,"2024-08-30T09:10:56.484Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4249",,"guzhongren",,,,,,,,"2024-08-29T11:34:06.071Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Run e2e","false","4240",,"Zhongren GU","heartbeat-user",,,,,,,"2024-08-27T15:40:47.556Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat",,":rocket: Deploy prod","true","4230","1589","zhou-yinyuan",,"2024-08-26T01:56:02Z","2024-08-26T01:56:46Z","2024-08-26T02:02:59Z",,"2024-08-26T02:26:28Z","2024-08-26T02:02:59Z","2024-08-26T02:26:56.722Z","0","0:30:54","0:6:57","0:23:57","passed","main","false"
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4259",,"renovate[bot]",,,,,,,,"2024-08-30T10:17:49.663Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4255",,"renovate[bot]",,,,,,,,"2024-08-30T09:10:56.484Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4249",,"guzhongren",,,,,,,,"2024-08-29T11:34:06.071Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Run e2e","false","4240",,"Zhongren GU","heartbeat-user",,,,,,,"2024-08-27T15:40:47.556Z","0",,,,"passed","main",""
"Heartbeat-backup","Heartbeat","au-heartbeat/Heartbeat",":rocket: Deploy prod","true","4230","1589","zhou-yinyuan",,"2024-08-26T01:56:02Z","2024-08-26T01:56:46Z","2024-08-26T02:02:59Z",,"2024-08-26T02:26:28Z","2024-08-26T02:02:59Z","2024-08-26T02:26:56.722Z","0","0:30:54","0:6:57","0:23:57","passed","main","false"
48 changes: 45 additions & 3 deletions frontend/e2e/fixtures/create-new/report-result.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ export interface IBoardMetricsResult {
reworkThroughput: string;
}
export interface IDoraMetricsResultItem {
prLeadTime: string;
pipelineLeadTime: string;
totalLeadTime: string;
prLeadTime: string | string[];
pipelineLeadTime: string | string[];
totalLeadTime: string | string[];
deploymentTimes?: string;
deploymentFrequency?: string;
failureRate?: string;
Expand Down Expand Up @@ -821,6 +821,48 @@ export const DORA_METRICS_RESULT_FOR_SOURCE_CONTROL: IDoraMetricsResultItem[] =
},
];

export const DORA_METRICS_RESULT_WITH_PIPELINE_AND_SOURCE_CONTROL: IDoraMetricsResultItem[] = [
{
prLeadTime: '2.33',
pipelineLeadTime: '0.20',
totalLeadTime: '2.53',
deploymentFrequency: '0.60',
deploymentTimes: '6',
failureRate: '14.29% (1/7)',
pipelineMeanTimeToRecovery: '25.63',
},
{
prLeadTime: '29.05',
pipelineLeadTime: '0.22',
totalLeadTime: '29.28',
deploymentFrequency: '2.00',
deploymentTimes: '20',
failureRate: '9.09% (2/22)',
pipelineMeanTimeToRecovery: '1.10',
},
];

export const DORA_METRICS_RESULT_WITH_PIPELINE_AND_SOURCE_CONTROL_DETAIL: IDoraMetricsResultItem[] = [
{
prLeadTime: ['4.66', '0.00', '2.33'],
pipelineLeadTime: ['0.41', '0.00', '0.20'],
totalLeadTime: ['5.06', '0.00', '2.53'],
deploymentFrequency: '0.60',
deploymentTimes: '6',
failureRate: '14.29% (1/7)',
pipelineMeanTimeToRecovery: '25.63',
},
{
prLeadTime: ['12.96', '45.14', '29.05'],
pipelineLeadTime: ['0.45', '0.00', '0.22'],
totalLeadTime: ['13.41', '45.14', '29.28'],
deploymentFrequency: '2.00',
deploymentTimes: '20',
failureRate: '9.09% (2/22)',
pipelineMeanTimeToRecovery: '1.10',
},
];

export const CYCLE_TIME_WITH_ANALYSIS_STATUS_PROJECT_BOARD_METRICS_RESULT: IBoardMetricsResult = {
velocity: '8',
throughput: '3',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
"Group","Metrics","Value"
"Deployment frequency","Heartbeat / Deploy prod / Deployment frequency(Deployments/Day)","2.00"
"Deployment frequency","Heartbeat / Deploy prod / Deployment frequency(Deployment times)","20"
"Lead time for changes","Heartbeat / Deploy prod / PR Lead Time","12.96"
"Lead time for changes","Heartbeat / Deploy prod / Pipeline Lead Time","0.45"
"Lead time for changes","Heartbeat / Deploy prod / Total Lead Time","13.41"
"Lead time for changes","MYOB-Technology / AD-Framework / PR Lead Time","45.14"
"Lead time for changes","MYOB-Technology / AD-Framework / Pipeline Lead Time","0"
"Lead time for changes","MYOB-Technology / AD-Framework / Total Lead Time","45.14"
"Lead time for changes","Average / PR Lead Time","29.05"
"Lead time for changes","Average / Pipeline Lead Time","0.22"
"Lead time for changes","Average / Total Lead Time","29.28"
"Pipeline change failure rate","Heartbeat / Deploy prod / Pipeline change failure rate(%)","9.09"
"Pipeline mean time to recovery","Heartbeat / Deploy prod / Pipeline mean time to recovery","1.10"
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
"Group","Metrics","Value"
"Deployment frequency","Heartbeat / Deploy prod / Deployment frequency(Deployments/Day)","0.60"
"Deployment frequency","Heartbeat / Deploy prod / Deployment frequency(Deployment times)","6"
"Lead time for changes","Heartbeat / Deploy prod / PR Lead Time","4.66"
"Lead time for changes","Heartbeat / Deploy prod / Pipeline Lead Time","0.41"
"Lead time for changes","Heartbeat / Deploy prod / Total Lead Time","5.06"
"Lead time for changes","MYOB-Technology / AD-Framework / PR Lead Time","0"
"Lead time for changes","MYOB-Technology / AD-Framework / Pipeline Lead Time","0"
"Lead time for changes","MYOB-Technology / AD-Framework / Total Lead Time","0"
"Lead time for changes","Average / PR Lead Time","2.33"
"Lead time for changes","Average / Pipeline Lead Time","0.20"
"Lead time for changes","Average / Total Lead Time","2.53"
"Pipeline change failure rate","Heartbeat / Deploy prod / Pipeline change failure rate(%)","14.29"
"Pipeline mean time to recovery","Heartbeat / Deploy prod / Pipeline mean time to recovery","25.63"
Loading

0 comments on commit 48fb4b3

Please sign in to comment.