Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions src/main/java/org/keycloak/dashboard/beans/Bugs.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
public class Bugs {

private final List<GitHubIssue> issues;
private final List<GitHubIssue> privateIssues;
private final List<String> activeStreams;
private String nextRelease;

Expand Down Expand Up @@ -43,11 +44,13 @@ public Bugs(GitHubData data, Teams teams) {

flakyTestCountsByTeam = convertToTeamCount(flakyTests, teams);

stats = convertToBugStat(issues, data, teams);
privateIssues = data.getPrivateIssues() != null ? data.getPrivateIssues() : Collections.emptyList();

stats = convertToBugStat(issues, data, teams, privateIssues);
areaStats = convertToAreaStats(issues);
teamStats = convertToTeamStats(issues, teams);
teamCveStats = convertToTeamCveStats(issues, teams);
privateTeamCveStats = convertToPrivateTeamCveStats(data.getPrivateIssues(), teams);
privateTeamCveStats = convertToPrivateTeamCveStats(privateIssues, teams);
teamBackportStats = convertToTeamBackportStats(issues, teams);
}

Expand All @@ -66,7 +69,7 @@ private Map<String, Integer> convertToTeamCount(List<FlakyTest> flakyTests, Team
return counts;
}

private List<BugStat> convertToBugStat(List<GitHubIssue> issues, GitHubData data, Teams teams) {
private List<BugStat> convertToBugStat(List<GitHubIssue> issues, GitHubData data, Teams teams, List<GitHubIssue> privateIssues) {
List<BugStat> stats = new LinkedList<>();
FilteredIssues filteredIssues = FilteredIssues.create(issues);

Expand All @@ -80,6 +83,9 @@ private List<BugStat> convertToBugStat(List<GitHubIssue> issues, GitHubData data
.issues(filteredIssues.clone().openBug().triage(true).missingInformation(false).createdBefore(DateUtil.minusdays(Config.getInt("bugs.TriageOverdue.days")))));
stats.add(BugStat.global("CVE")
.issues(filteredIssues.clone().openCve()));
FilteredIssues privateCves = FilteredIssues.createPrivate(privateIssues);
stats.add(BugStat.global("CVE: Missing Information").warnErrorKey("CveMissingInformation")
.issues(privateCves.clone().openIssue().missingInformation(true)));
stats.add(BugStat.global("Weakness")
.issues(filteredIssues.clone().openBug().label("area/weakness")));
stats.add(BugStat.global("Blocker")
Expand Down Expand Up @@ -194,7 +200,7 @@ private List<CveTeamStat> convertToTeamCveStats(List<GitHubIssue> issues, Teams
}

private List<PrivateCveTeamStat> convertToPrivateTeamCveStats(List<GitHubIssue> privateIssues, Teams teams) {
if (privateIssues == null || privateIssues.isEmpty()) {
if (privateIssues.isEmpty()) {
return Collections.emptyList();
}

Expand Down
9 changes: 7 additions & 2 deletions src/main/java/org/keycloak/dashboard/beans/CveTeamStat.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,18 @@ public CveTeamStat(String team, FilteredIssues issues, String nextRelease) {
.issues(issues.clone().triage(true)));

columns.add(BugStat.team("Triage Overdue")
.issues(issues.clone().triage(true).createdBefore(DateUtil.minusdays(Config.getInt("bugs.TriageOverdue.days")))));
.issues(issues.clone().triage(true).ready(false)
.createdBefore(DateUtil.minusdays(Config.getInt("bugs.TriageOverdue.days")))));

columns.add(BugStat.team("Open").warnErrorKey("CveOpen")
.issues(issues.clone().triage(false)));

columns.add(BugStat.team("Open Overdue").warnErrorKey("CveOpenOverdue")
.issues(issues.clone().triage(false).createdBefore(DateUtil.minusdays(Config.getInt("bugs.CveOverdue.days")))));
.issues(issues.clone().triage(false).ready(false)
.createdBefore(DateUtil.minusdays(Config.getInt("bugs.CveOverdue.days")))));

columns.add(BugStat.team("Blocked External").warnErrorKey("CveBlockedExternal")
.issues(issues.clone().blockedExternal(true)));

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,19 @@ public PrivateCveTeamStat(String team, FilteredIssues allIssues) {
.issues(triageBase.clone()));

columns.add(BugStat.team("Triage Overdue").warnErrorKey("PrivateTriageOverdue")
.issues(triageBase.clone().severityTriageOverdue(importantBizDays, moderateBizDays, lowDays)));
.issues(triageBase.clone().ready(false).severityTriageOverdue(importantBizDays, moderateBizDays, lowDays)));

FilteredIssues cveOpen = allIssues.clone().openCve().triage(false);

columns.add(BugStat.team("Open").warnErrorKey("CveOpen")
.issues(cveOpen.clone()));

columns.add(BugStat.team("Open Overdue").warnErrorKey("CveOpenOverdue")
.issues(cveOpen.clone().createdBefore(
.issues(cveOpen.clone().ready(false).createdBefore(
DateUtil.minusdays(Config.getInt("bugs.CveOverdue.days")))));

columns.add(BugStat.team("Blocked External").warnErrorKey("CveBlockedExternal")
.issues(allIssues.clone().openIssue().blockedExternal(true)));
}

public String getTitle() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,11 @@ public FilteredIssues missingInformation(boolean include) {
return this;
}

public FilteredIssues ready(boolean include) {
filters.add(new ReadyFilter(include));
return this;
}

public FilteredIssues missingTeam(Teams teams) {
filters.add(new MissingTeamFilter(teams));
return this;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.keycloak.dashboard.beans.filters;

class ReadyFilter extends LabelFilter {

public ReadyFilter(boolean include) {
super("status/ready", include);
}

}
2 changes: 1 addition & 1 deletion src/main/java/org/keycloak/dashboard/gh/GitHubLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ private static GitHubIssue sanitize(GitHubIssue issue) {
sanitized.setNumber(issue.getNumber());
sanitized.setClosedAt(issue.getClosedAt());
sanitized.setCreatedAt(issue.getCreatedAt());
sanitized.setLabels(issue.getLabels().stream().filter(l -> l.startsWith("team/") || l.startsWith("kind/") || l.equals("status/triage")).toList());
sanitized.setLabels(issue.getLabels().stream().filter(l -> l.startsWith("team/") || l.startsWith("kind/") || l.startsWith("severity/") || l.equals("status/triage") || l.equals("status/blocked-external") || l.equals("status/missing-information") || l.equals("status/ready")).toList());
sanitized.setCommentsCount(issue.getCommentsCount());
sanitized.setUpdatedAt(issue.getUpdatedAt());
return sanitized;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/keycloak/dashboard/util/DateUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ private static Calendar getCalendarUTC() {
}

public static java.util.Date minusBusinessDays(int businessDays) {
Calendar cal = Calendar.getInstance();
Calendar cal = getCalendarUTC();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Expand Down
20 changes: 12 additions & 8 deletions src/main/resources/config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ bugs.Low.warn=-1
bugs.Low.error=-1
bugs.CVE.warn=5
bugs.CVE.error=10
bugs.CveMissingInformation.warn=-1
bugs.CveMissingInformation.error=-1
bugs.Milestone.warn=-1
bugs.Milestone.error=-1
bugs.MissingArea.warn=-1
Expand Down Expand Up @@ -60,23 +62,25 @@ bugs.team.ImportantOverdue.warn=1
bugs.team.ImportantOverdue.error=25
bugs.team.Normal.warn=-1
bugs.team.Normal.error=-1
bugs.team.CveOpen.warn=1
bugs.team.CveOpen.warn=3
bugs.team.CveOpen.error=5
bugs.team.CveOpenOverdue.warn=1
bugs.team.CveOpenOverdue.error=1
bugs.team.PrivateTriage.warn=1
bugs.team.PrivateTriage.error=5
bugs.team.CveOpenOverdue.error=4
bugs.team.PrivateTriage.warn=3
bugs.team.PrivateTriage.error=8
bugs.team.PrivateTriageOverdue.warn=1
bugs.team.PrivateTriageOverdue.error=1
bugs.team.PrivateTriageOverdue.error=4
bugs.team.CveBlockedExternal.warn=-1
bugs.team.CveBlockedExternal.error=-1

bugs.team.Low.warn=-1
bugs.team.Low.error=-1
bugs.team.Backport.warn=5
bugs.team.Backport.error=10

private.triage.ImportantOverdue.businessDays=2
private.triage.ModerateOverdue.businessDays=7
private.triage.LowOverdue.days=15
private.triage.ImportantOverdue.businessDays=3
private.triage.ModerateOverdue.businessDays=10
private.triage.LowOverdue.days=21

bugs.area.Milestone.warn=10
bugs.area.Milestone.error=20
Expand Down
Loading