aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-10-02 09:55:21 +0200
committerTaras Madan <tarasmadan@google.com>2024-10-02 09:40:02 +0000
commite13d0f0baaeea41cc584c6333bbf0b788d7174b9 (patch)
tree586aeb0aa62c81705ae8158814c152417e7c1a52 /pkg
parentea2b66a65b01cd61336424457391310e8dd8b62b (diff)
pkg/cover: use timePeriods instead of civil.Date
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/heatmap.go66
-rw-r--r--pkg/cover/heatmap_test.go11
-rw-r--r--pkg/cover/templates/heatmap.html4
3 files changed, 41 insertions, 40 deletions
diff --git a/pkg/cover/heatmap.go b/pkg/cover/heatmap.go
index 7faea553a..246642c72 100644
--- a/pkg/cover/heatmap.go
+++ b/pkg/cover/heatmap.go
@@ -13,7 +13,6 @@ import (
"sort"
"strings"
- "cloud.google.com/go/civil"
"cloud.google.com/go/spanner"
"github.com/google/syzkaller/pkg/coveragedb"
_ "github.com/google/syzkaller/pkg/subsystem/lists"
@@ -31,18 +30,19 @@ type templateHeatmapRow struct {
Tooltips []string
builder map[string]*templateHeatmapRow
- instrumented map[civil.Date]int64
- covered map[civil.Date]int64
+ instrumented map[coveragedb.TimePeriod]int64
+ covered map[coveragedb.TimePeriod]int64
}
type templateHeatmap struct {
- Root *templateHeatmapRow
- Dates []string
+ Root *templateHeatmapRow
+ Periods []string
}
-func (thm *templateHeatmapRow) addParts(depth int, pathLeft []string, instrumented, covered int64, dateto civil.Date) {
- thm.instrumented[dateto] += instrumented
- thm.covered[dateto] += covered
+func (thm *templateHeatmapRow) addParts(depth int, pathLeft []string, instrumented, covered int64,
+ timePeriod coveragedb.TimePeriod) {
+ thm.instrumented[timePeriod] += instrumented
+ thm.covered[timePeriod] += covered
if len(pathLeft) == 0 {
return
}
@@ -54,14 +54,14 @@ func (thm *templateHeatmapRow) addParts(depth int, pathLeft []string, instrument
Depth: depth,
IsDir: isDir,
builder: make(map[string]*templateHeatmapRow),
- instrumented: make(map[civil.Date]int64),
- covered: make(map[civil.Date]int64),
+ instrumented: make(map[coveragedb.TimePeriod]int64),
+ covered: make(map[coveragedb.TimePeriod]int64),
}
}
- thm.builder[nextElement].addParts(depth+1, pathLeft[1:], instrumented, covered, dateto)
+ thm.builder[nextElement].addParts(depth+1, pathLeft[1:], instrumented, covered, timePeriod)
}
-func (thm *templateHeatmapRow) prepareDataFor(dates []civil.Date) {
+func (thm *templateHeatmapRow) prepareDataFor(timePeriods []coveragedb.TimePeriod) {
thm.Items = maps.Values(thm.builder)
sort.Slice(thm.Items, func(i, j int) bool {
if thm.Items[i].IsDir != thm.Items[j].IsDir {
@@ -69,21 +69,21 @@ func (thm *templateHeatmapRow) prepareDataFor(dates []civil.Date) {
}
return thm.Items[i].Name < thm.Items[j].Name
})
- for _, d := range dates {
+ for _, tp := range timePeriods {
var dateCoverage int64
- if thm.instrumented[d] != 0 {
- dateCoverage = 100 * thm.covered[d] / thm.instrumented[d]
+ if thm.instrumented[tp] != 0 {
+ dateCoverage = 100 * thm.covered[tp] / thm.instrumented[tp]
}
thm.Coverage = append(thm.Coverage, dateCoverage)
thm.Tooltips = append(thm.Tooltips, fmt.Sprintf("Instrumented:\t%d blocks\nCovered:\t%d blocks",
- thm.instrumented[d], thm.covered[d]))
+ thm.instrumented[tp], thm.covered[tp]))
}
- if len(dates) > 0 {
- lastDate := dates[len(dates)-1]
+ if len(timePeriods) > 0 {
+ lastDate := timePeriods[len(timePeriods)-1]
thm.LastDayInstrumented = thm.instrumented[lastDate]
}
for _, item := range thm.builder {
- item.prepareDataFor(dates)
+ item.prepareDataFor(timePeriods)
}
}
@@ -91,7 +91,7 @@ type fileCoverageWithDetails struct {
Filepath string
Instrumented int64
Covered int64
- Dateto civil.Date
+ TimePeriod coveragedb.TimePeriod `spanner:"-"`
Subsystems []string
}
@@ -99,29 +99,29 @@ func filesCoverageToTemplateData(fCov []*fileCoverageWithDetails) *templateHeatm
res := templateHeatmap{
Root: &templateHeatmapRow{
builder: map[string]*templateHeatmapRow{},
- instrumented: map[civil.Date]int64{},
- covered: map[civil.Date]int64{},
+ instrumented: map[coveragedb.TimePeriod]int64{},
+ covered: map[coveragedb.TimePeriod]int64{},
},
}
- dates := map[civil.Date]struct{}{}
+ timePeriods := map[coveragedb.TimePeriod]struct{}{}
for _, fc := range fCov {
res.Root.addParts(
0,
strings.Split(fc.Filepath, "/"),
fc.Instrumented,
fc.Covered,
- fc.Dateto)
- dates[fc.Dateto] = struct{}{}
+ fc.TimePeriod)
+ timePeriods[fc.TimePeriod] = struct{}{}
}
- sortedDates := maps.Keys(dates)
- sort.Slice(sortedDates, func(i, j int) bool {
- return sortedDates[i].Before(sortedDates[j])
+ sortedTimePeriods := maps.Keys(timePeriods)
+ sort.Slice(sortedTimePeriods, func(i, j int) bool {
+ return sortedTimePeriods[i].DateTo.Before(sortedTimePeriods[j].DateTo)
})
- for _, d := range sortedDates {
- res.Dates = append(res.Dates, d.String())
+ for _, tp := range sortedTimePeriods {
+ res.Periods = append(res.Periods, fmt.Sprintf("%s(%d)", tp.DateTo.String(), tp.Days))
}
- res.Root.prepareDataFor(sortedDates)
+ res.Root.prepareDataFor(sortedTimePeriods)
return &res
}
@@ -129,7 +129,6 @@ func filesCoverageWithDetailsStmt(ns, subsystem string, timePeriod coveragedb.Ti
stmt := spanner.Statement{
SQL: `
select
- dateto,
instrumented,
covered,
files.filepath,
@@ -179,6 +178,7 @@ func filesCoverageWithDetails(ctx context.Context, projectID, ns, subsystem stri
if err = row.ToStruct(&r); err != nil {
return nil, fmt.Errorf("failed to row.ToStruct() spanner DB: %w", err)
}
+ r.TimePeriod = timePeriod
res = append(res, &r)
}
}
@@ -257,7 +257,7 @@ func DoSubsystemsHeatMapStyleBodyJS(ctx context.Context, projectID, ns, subsyste
Filepath: ssName + "/" + cwd.Filepath,
Instrumented: cwd.Instrumented,
Covered: cwd.Covered,
- Dateto: cwd.Dateto,
+ TimePeriod: cwd.TimePeriod,
}
ssCovAndDates = append(ssCovAndDates, &newRecord)
}
diff --git a/pkg/cover/heatmap_test.go b/pkg/cover/heatmap_test.go
index f83b31191..be90493df 100644
--- a/pkg/cover/heatmap_test.go
+++ b/pkg/cover/heatmap_test.go
@@ -8,6 +8,7 @@ import (
"time"
"cloud.google.com/go/civil"
+ "github.com/google/syzkaller/pkg/coveragedb"
"github.com/stretchr/testify/assert"
)
@@ -33,7 +34,7 @@ func TestFilesCoverageToTemplateData(t *testing.T) {
Filepath: "file1",
Instrumented: 1,
Covered: 1,
- Dateto: civil.Date{Year: 2024, Month: time.July, Day: 1},
+ TimePeriod: coveragedb.TimePeriod{DateTo: civil.Date{Year: 2024, Month: time.July, Day: 1}, Days: 1},
},
},
want: &templateHeatmap{
@@ -60,7 +61,7 @@ func TestFilesCoverageToTemplateData(t *testing.T) {
"Instrumented:\t1 blocks\nCovered:\t1 blocks",
},
},
- Dates: []string{"2024-07-01"},
+ Periods: []string{"2024-07-01(1)"},
},
},
{
@@ -70,13 +71,13 @@ func TestFilesCoverageToTemplateData(t *testing.T) {
Filepath: "dir/file2",
Instrumented: 1,
Covered: 0,
- Dateto: civil.Date{Year: 2024, Month: time.July, Day: 2},
+ TimePeriod: coveragedb.TimePeriod{DateTo: civil.Date{Year: 2024, Month: time.July, Day: 2}, Days: 1},
},
{
Filepath: "dir/file1",
Instrumented: 1,
Covered: 1,
- Dateto: civil.Date{Year: 2024, Month: time.July, Day: 1},
+ TimePeriod: coveragedb.TimePeriod{DateTo: civil.Date{Year: 2024, Month: time.July, Day: 1}, Days: 1},
},
},
want: &templateHeatmap{
@@ -128,7 +129,7 @@ func TestFilesCoverageToTemplateData(t *testing.T) {
"Instrumented:\t1 blocks\nCovered:\t0 blocks",
},
},
- Dates: []string{"2024-07-01", "2024-07-02"},
+ Periods: []string{"2024-07-01(1)", "2024-07-02(1)"},
},
},
}
diff --git a/pkg/cover/templates/heatmap.html b/pkg/cover/templates/heatmap.html
index 622a27636..d72d3a02c 100644
--- a/pkg/cover/templates/heatmap.html
+++ b/pkg/cover/templates/heatmap.html
@@ -119,9 +119,9 @@
<div class="first_column bold">
date
</div>
- {{ range $date := .Dates }}
+ {{ range $period := .Periods }}
<div class="date_column bold">
- {{ $date }}
+ {{ $period }}
</div>
{{ end }}
</li>