aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2024-05-27 09:15:01 +0200
committerDmitry Vyukov <dvyukov@google.com>2024-05-27 08:01:39 +0000
commitc3dd32eaf7b48ca490fa051501a84c532214d65e (patch)
tree694204b1e089cf37e371495fe5c077dcd5a081ad
parentc8bf4aa68a6a11cd01aba74008824123a746a69c (diff)
dashboard/app: improve bug lifetime graph
1. Use Fixed date for fixed bugs as X coord. This avoids the top part of the graph being skewed 45°. 2. Slightlyh randomize Y coord for dots near X axis. Currently they all are shown at +/-0.1 and blend together. 3. Randomize unfixed bugs a bit more (i%10 instead of i%7). There are lots of them and they blend together.
-rw-r--r--dashboard/app/graphs.go41
1 files changed, 26 insertions, 15 deletions
diff --git a/dashboard/app/graphs.go b/dashboard/app/graphs.go
index 6f0ad854b..f4789b682 100644
--- a/dashboard/app/graphs.go
+++ b/dashboard/app/graphs.go
@@ -271,39 +271,50 @@ func createBugsGraph(c context.Context, bugs []*Bug) *uiGraph {
func createBugLifetimes(c context.Context, bugs []*Bug, causeBisects map[string]*Job) []uiBugLifetime {
var res []uiBugLifetime
for i, bug := range bugs {
- ui := uiBugLifetime{
- // TODO: this is not the time when it was reported to the final reporting.
- Reported: bug.FirstTime,
- }
if bug.Status >= BugStatusInvalid {
continue
}
+ reported := bug.FirstTime
+ // Find reporting date to the last reporting stage (where it was reported),
+ // it's a more meaningful date b/c the bug could not be fixed before that.
+ for _, reporting := range bug.Reporting {
+ if reported.Before(reporting.Reported) {
+ reported = reporting.Reported
+ }
+ }
+ ui := uiBugLifetime{}
fixed := bug.FixTime
if fixed.IsZero() || bug.Status == BugStatusFixed && bug.Closed.Before(fixed) {
fixed = bug.Closed
}
+ fixedDaysAgo := max(0, float32(fixed.Sub(reported))/float32(24*time.Hour))
if !fixed.IsZero() {
- days := float32(fixed.Sub(ui.Reported)) / float32(24*time.Hour)
- if days > 365 {
+ // We use fixed date as the X coordiate (date) for fixed bugs to show
+ // how lifetime of bugs fixed at the given date (e.g. lately).
+ ui.Reported = fixed
+ if fixedDaysAgo > 365 {
+ // Cap Y coordinate to 365 to make Y coordinates with the first year
+ // distinguishable in presence of very large Y coordinates
+ // (e.g. if something was fixed/introduced in 5 years).
+ // Add small jitter to min/max values to make close dots distinguishable.
ui.Fixed1y = 365 + float32(i%7)
} else {
- if days <= 0 {
- days = 0.1
- }
- ui.Fixed = days
+ ui.Fixed = max(0.2*(1+float32(i%5)), fixedDaysAgo)
}
} else {
- ui.NotFixed = 400 - float32(i%7)
+ ui.Reported = reported
+ ui.NotFixed = 400 - float32(i%10)
+ }
+ res = append(res, ui)
+ ui = uiBugLifetime{
+ Reported: reported,
}
if job := causeBisects[bug.keyHash(c)]; job != nil {
days := float32(job.Commits[0].Date.Sub(ui.Reported)) / float32(24*time.Hour)
if days < -365 {
ui.Introduced1y = -365 - float32(i%7)
} else {
- if days >= 0 {
- days = -0.1
- }
- ui.Introduced = days
+ ui.Introduced = min(-0.2*(1+float32(i%5)), days)
}
}
res = append(res, ui)