diff --git a/NuGetClientPRHealth/DashboardService.cs b/NuGetClientPRHealth/DashboardService.cs index 90bd904..46e379a 100644 --- a/NuGetClientPRHealth/DashboardService.cs +++ b/NuGetClientPRHealth/DashboardService.cs @@ -66,18 +66,22 @@ private async Task> EnrichAsync(List prs) private static DashboardMetrics ComputeMetrics(List prs) { - if (prs.Count == 0) return new DashboardMetrics(0, 0, 0, 0); + if (prs.Count == 0) return new DashboardMetrics(0, 0, 0, 0, 0, 0); var sorted = prs.Select(p => p.HoursToMerge).OrderBy(x => x).ToList(); var n = sorted.Count; var median = n % 2 == 0 ? (sorted[n / 2 - 1] + sorted[n / 2]) / 2.0 : sorted[n / 2]; - var reviewed = prs.Where(p => p.FirstApprovalHours.HasValue).ToList(); + var approved = prs.Where(p => p.FirstApprovalHours.HasValue).ToList(); + var withReview = prs.Where(p => p.FirstReviewHours.HasValue).ToList(); return new DashboardMetrics( TotalPRs: prs.Count, MedianHoursToComplete: Math.Round(median, 1), - PercentApprovedUnder24h: reviewed.Count > 0 - ? Math.Round((double)reviewed.Count(p => p.FirstApprovalHours! < 24) / reviewed.Count * 100, 1) : 0, - PercentMergedUnder24h: Math.Round((double)prs.Count(p => p.HoursToMerge < 24) / prs.Count * 100, 1)); + PercentApprovedUnder24h: approved.Count > 0 + ? Math.Round((double)approved.Count(p => p.FirstApprovalHours! < 24) / approved.Count * 100, 1) : 0, + PercentReviewedUnder24h: withReview.Count > 0 + ? Math.Round((double)withReview.Count(p => p.FirstReviewHours! < 24) / withReview.Count * 100, 1) : 0, + PercentMergedUnder24h: Math.Round((double)prs.Count(p => p.HoursToMerge < 24) / prs.Count * 100, 1), + PercentMergedUnder48h: Math.Round((double)prs.Count(p => p.HoursToMerge < 48) / prs.Count * 100, 1)); } } diff --git a/NuGetClientPRHealth/HtmlGenerator.cs b/NuGetClientPRHealth/HtmlGenerator.cs index dbe412e..07a4f37 100644 --- a/NuGetClientPRHealth/HtmlGenerator.cs +++ b/NuGetClientPRHealth/HtmlGenerator.cs @@ -31,7 +31,9 @@ public static void Generate(DashboardData data, string outputPath) sb.AppendLine($"Total number of PRs in range{data.Metrics.TotalPRs}"); sb.AppendLine($"Median: Hours to complete{data.Metrics.MedianHoursToComplete:F1}"); sb.AppendLine($"Percentage of PRs approved under 24 hrs{data.Metrics.PercentApprovedUnder24h:F1}%"); + sb.AppendLine($"Percentage of PRs reviewed under 24 hrs{data.Metrics.PercentReviewedUnder24h:F1}%"); sb.AppendLine($"Percentage of PRs completed under 24 hrs{data.Metrics.PercentMergedUnder24h:F1}%"); + sb.AppendLine($"Percentage of PRs completed under 48 hrs{data.Metrics.PercentMergedUnder48h:F1}%"); sb.AppendLine(""); // Slow PRs diff --git a/NuGetClientPRHealth/Models.cs b/NuGetClientPRHealth/Models.cs index 91e69e5..b65848d 100644 --- a/NuGetClientPRHealth/Models.cs +++ b/NuGetClientPRHealth/Models.cs @@ -17,7 +17,9 @@ public record DashboardMetrics( int TotalPRs, double MedianHoursToComplete, double PercentApprovedUnder24h, - double PercentMergedUnder24h); + double PercentReviewedUnder24h, + double PercentMergedUnder24h, + double PercentMergedUnder48h); public record DashboardData( string DateRange,