From 188f3a75e1064bb2e6e53ba5b4fef50a3bd8048f Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Mon, 2 Jan 2023 13:07:33 +0100 Subject: dashboard: factor out asset list extraction code It's useful not only during BugReporting creation, so extract it to a separate function and move to asset_storage.go. --- dashboard/app/asset_storage.go | 43 ++++++++++++++++++++++++++++++++++++++++++ dashboard/app/reporting.go | 39 +------------------------------------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/dashboard/app/asset_storage.go b/dashboard/app/asset_storage.go index 5849977ca..fba449223 100644 --- a/dashboard/app/asset_storage.go +++ b/dashboard/app/asset_storage.go @@ -7,10 +7,12 @@ import ( "errors" "fmt" "net/http" + "sort" "time" "github.com/google/syzkaller/dashboard/dashapi" "github.com/google/syzkaller/pkg/asset" + "github.com/google/syzkaller/sys/targets" "golang.org/x/net/context" "golang.org/x/sync/errgroup" "google.golang.org/appengine/v2" @@ -485,3 +487,44 @@ func queryLatestManagerAssets(c context.Context, ns string, assetType dashapi.As } return ret, nil } + +func createAssetList(build *Build, crash *Crash) []dashapi.Asset { + assetList := []dashapi.Asset{} + for _, reportAsset := range append(build.Assets, crash.Assets...) { + typeDescr := asset.GetTypeDescription(reportAsset.Type) + if typeDescr == nil || typeDescr.NoReporting { + continue + } + assetList = append(assetList, dashapi.Asset{ + Title: typeDescr.GetTitle(targets.Get(build.OS, build.Arch)), + DownloadURL: reportAsset.DownloadURL, + Type: reportAsset.Type, + }) + } + sort.SliceStable(assetList, func(i, j int) bool { + return asset.GetTypeDescription(assetList[i].Type).ReportingPrio < + asset.GetTypeDescription(assetList[j].Type).ReportingPrio + }) + handleDupAssetTitles(assetList) + return assetList +} + +// Convert asset lists like {"Mounted image", "Mounted image"} to {"Mounted image #1", "Mounted image #2"}. +func handleDupAssetTitles(assetList []dashapi.Asset) { + duplicates := map[string]bool{} + for _, asset := range assetList { + if _, ok := duplicates[asset.Title]; ok { + duplicates[asset.Title] = true + } else { + duplicates[asset.Title] = false + } + } + counts := map[string]int{} + for i, asset := range assetList { + if !duplicates[asset.Title] { + continue + } + counts[asset.Title]++ + assetList[i].Title = fmt.Sprintf("%s #%d", asset.Title, counts[asset.Title]) + } +} diff --git a/dashboard/app/reporting.go b/dashboard/app/reporting.go index 273ac3dec..bb595686b 100644 --- a/dashboard/app/reporting.go +++ b/dashboard/app/reporting.go @@ -13,7 +13,6 @@ import ( "time" "github.com/google/syzkaller/dashboard/dashapi" - "github.com/google/syzkaller/pkg/asset" "github.com/google/syzkaller/pkg/email" "github.com/google/syzkaller/pkg/html" "github.com/google/syzkaller/sys/targets" @@ -458,23 +457,7 @@ func crashBugReport(c context.Context, bug *Bug, crash *Crash, crashKey *db.Key, if !bugReporting.Reported.IsZero() { typ = dashapi.ReportRepro } - assetList := []dashapi.Asset{} - for _, reportAsset := range append(build.Assets, crash.Assets...) { - typeDescr := asset.GetTypeDescription(reportAsset.Type) - if typeDescr == nil || typeDescr.NoReporting { - continue - } - assetList = append(assetList, dashapi.Asset{ - Title: typeDescr.GetTitle(targets.Get(build.OS, build.Arch)), - DownloadURL: reportAsset.DownloadURL, - Type: reportAsset.Type, - }) - } - sort.SliceStable(assetList, func(i, j int) bool { - return asset.GetTypeDescription(assetList[i].Type).ReportingPrio < - asset.GetTypeDescription(assetList[j].Type).ReportingPrio - }) - handleDupAssetTitles(assetList) + assetList := createAssetList(build, crash) kernelRepo := kernelRepoInfo(build) rep := &dashapi.BugReport{ Type: typ, @@ -521,26 +504,6 @@ func crashBugReport(c context.Context, bug *Bug, crash *Crash, crashKey *db.Key, return rep, nil } -// Convert asset lists like {"Mounted image", "Mounted image"} to {"Mounted image #1", "Mounted image #2"}. -func handleDupAssetTitles(assetList []dashapi.Asset) { - duplicates := map[string]bool{} - for _, asset := range assetList { - if _, ok := duplicates[asset.Title]; ok { - duplicates[asset.Title] = true - } else { - duplicates[asset.Title] = false - } - } - counts := map[string]int{} - for i, asset := range assetList { - if !duplicates[asset.Title] { - continue - } - counts[asset.Title]++ - assetList[i].Title = fmt.Sprintf("%s #%d", asset.Title, counts[asset.Title]) - } -} - func loadReproSyz(c context.Context, crash *Crash) ([]byte, error) { reproSyz, _, err := getText(c, textReproSyz, crash.ReproSyz) if err != nil || len(reproSyz) == 0 { -- cgit mrf-deployment