@@ -40,7 +40,7 @@ cm_metric_pr_reviews <- function (path, end_date = Sys.Date ()) {
40
40
}
41
41
42
42
mean_to_na <- function (x ) {
43
- ifelse (length (x ) == 0L , NA , mean (x ))
43
+ ifelse (length (x ) == 0L , NA_real_ , mean (x ))
44
44
}
45
45
46
46
pr_duration <- difftime (prs $ closed_at , prs $ created_at , units = " days" )
@@ -88,3 +88,38 @@ cm_metric_pr_reviews <- function (path, end_date = Sys.Date ()) {
88
88
89
89
return (ret )
90
90
}
91
+
92
+ cm_metric_pr_review_duration <- function (path , end_date = Sys.Date ()) {
93
+
94
+ prs <- get_prs_in_period (path , end_date ) # in cm-metrics-change-req.R
95
+
96
+ prs $ created_at <- as.Date (prs $ created_at )
97
+ prs $ closed_at <- as.Date (prs $ closed_at )
98
+
99
+ index_approved <- which (prs $ review_decision == " APPROVED" )
100
+
101
+ cycle_dur <- vapply (prs $ reviews , function (i ) {
102
+ dates <- as.Date (i $ submitted_at )
103
+ ret <- NA_real_
104
+ if (length (dates ) > 1L ) {
105
+ dt <- diff (dates , units = " days" )
106
+ ret <- mean (as.integer (dt ))
107
+ }
108
+ return (ret )
109
+ }, numeric (1L ))
110
+ cycle_dur <- as.numeric (cycle_dur )
111
+ cycle_dur_mn <- mean (cycle_dur [index_approved ], na.rm = TRUE )
112
+ cycle_dur_md <- stats :: median (cycle_dur [index_approved ], na.rm = TRUE )
113
+
114
+ review_dur <- difftime (prs $ closed_at , prs $ created_at , units = " days" )
115
+ review_dur <- as.numeric (review_dur )
116
+ review_dur_mn <- mean (review_dur [index_approved ], na.rm = TRUE )
117
+ review_dur_md <- stats :: median (review_dur [index_approved ], na.rm = TRUE )
118
+
119
+ c (
120
+ cycle_dur_mn = cycle_dur_mn ,
121
+ cycle_dur_md = cycle_dur_md ,
122
+ review_dur_mn = review_dur_mn ,
123
+ review_dur_md = review_dur_md
124
+ )
125
+ }
0 commit comments