diff --git a/dashboard/app/bug.html b/dashboard/app/bug.html
index a58e41486ff..8ca0b5dd771 100644
--- a/dashboard/app/bug.html
+++ b/dashboard/app/bug.html
@@ -14,6 +14,8 @@
Last: {{formatTime .Bug.LastTime}}
Reporting: {{if .Bug.Link}}{{.Bug.Status}}{{else}}{{.Bug.Status}}{{end}}
Commits: {{.Bug.Commits}}
+ Patched on: {{.Bug.PatchedOn}}
+ Missing on: {{.Bug.MissingOn}}
Crashes:
diff --git a/dashboard/app/main.go b/dashboard/app/main.go
index 2261b317753..0fc24f501d9 100644
--- a/dashboard/app/main.go
+++ b/dashboard/app/main.go
@@ -55,6 +55,8 @@ type uiBug struct {
Status string
Link string
Commits string
+ PatchedOn []string
+ MissingOn []string
}
type uiCrash struct {
@@ -109,7 +111,11 @@ func handleBug(c context.Context, w http.ResponseWriter, r *http.Request) error
if err != nil {
return err
}
- uiBug := createUIBug(c, bug, state)
+ managers, err := managerList(c, bug.Namespace)
+ if err != nil {
+ return err
+ }
+ uiBug := createUIBug(c, bug, state, managers)
crashes, err := loadCrashesForBug(c, bug)
if err != nil {
return err
@@ -149,9 +155,17 @@ func fetchBugs(c context.Context) ([]*uiBugGroup, error) {
if err != nil {
return nil, err
}
+ managers := make(map[string][]string)
+ for ns := range config.Namespaces {
+ mgrs, err := managerList(c, ns)
+ if err != nil {
+ return nil, err
+ }
+ managers[ns] = mgrs
+ }
groups := make(map[string][]*uiBug)
for _, bug := range bugs {
- uiBug := createUIBug(c, bug, state)
+ uiBug := createUIBug(c, bug, state, managers[bug.Namespace])
groups[bug.Namespace] = append(groups[bug.Namespace], uiBug)
}
var res []*uiBugGroup
@@ -166,7 +180,7 @@ func fetchBugs(c context.Context) ([]*uiBugGroup, error) {
return res, nil
}
-func createUIBug(c context.Context, bug *Bug, state *ReportingState) *uiBug {
+func createUIBug(c context.Context, bug *Bug, state *ReportingState, managers []string) *uiBug {
_, _, _, reportingIdx, status, link, err := needReport(c, "", state, bug)
if err != nil {
status = err.Error()
@@ -185,7 +199,23 @@ func createUIBug(c context.Context, bug *Bug, state *ReportingState) *uiBug {
ReportingIndex: reportingIdx,
Status: status,
Link: link,
- Commits: fmt.Sprintf("%q", bug.Commits),
+ PatchedOn: bug.PatchedOn,
+ }
+ if len(bug.Commits) != 0 {
+ uiBug.Commits = fmt.Sprintf("%q", bug.Commits)
+ for _, mgr := range managers {
+ found := false
+ for _, mgr1 := range bug.PatchedOn {
+ if mgr == mgr1 {
+ found = true
+ break
+ }
+ }
+ if !found {
+ uiBug.MissingOn = append(uiBug.MissingOn, mgr)
+ }
+ }
+ sort.Strings(uiBug.MissingOn)
}
return uiBug
}
diff --git a/dashboard/app/main.html b/dashboard/app/main.html
index 4ea56c763ca..60c5493f354 100644
--- a/dashboard/app/main.html
+++ b/dashboard/app/main.html
@@ -7,6 +7,7 @@
Repro |
Last |
Status |
+ Patched |
{{range $b := $.Bugs}}
@@ -15,6 +16,7 @@
{{formatReproLevel $b.ReproLevel}} |
{{formatTime $b.LastTime}} |
{{if $b.Link}}{{$b.Status}}{{else}}{{$b.Status}}{{end}} |
+ {{if $b.Commits}}{{len $b.PatchedOn}}/{{len $b.MissingOn}}{{end}} |
{{end}}
diff --git a/dashboard/app/static/style.css b/dashboard/app/static/style.css
index a23ff5fd7bd..98bf1913b54 100644
--- a/dashboard/app/static/style.css
+++ b/dashboard/app/static/style.css
@@ -98,6 +98,10 @@ table td, table th {
max-width: 300pt;
}
+.list_table .patched {
+ text-align: center;
+}
+
.list_table .kernel {
width: 200pt;
max-width: 200pt;