aboutsummaryrefslogtreecommitdiffstats
path: root/dashboard/dashapi/dashapi.go
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-12-16 16:08:49 +0100
committerTaras Madan <tarasmadan@google.com>2024-12-17 14:31:15 +0000
commita0626d3a05d5e31af100787b6749f0b89416c171 (patch)
tree592ff26f4d5c4c757ccda267e8b70fcd71f2d235 /dashboard/dashapi/dashapi.go
parentc8c15bb214509bafc8fe1a1e3abb8ccf90b3306e (diff)
dashboard/app: upload coverage using GCS bucket
Diffstat (limited to 'dashboard/dashapi/dashapi.go')
-rw-r--r--dashboard/dashapi/dashapi.go29
1 files changed, 24 insertions, 5 deletions
diff --git a/dashboard/dashapi/dashapi.go b/dashboard/dashapi/dashapi.go
index 64361e155..0fc3651cc 100644
--- a/dashboard/dashapi/dashapi.go
+++ b/dashboard/dashapi/dashapi.go
@@ -8,6 +8,7 @@ package dashapi
import (
"bytes"
"compress/gzip"
+ "context"
"encoding/json"
"fmt"
"io"
@@ -20,6 +21,7 @@ import (
"cloud.google.com/go/civil"
"github.com/google/syzkaller/pkg/auth"
"github.com/google/syzkaller/pkg/coveragedb"
+ "github.com/google/syzkaller/pkg/gcs"
)
type Dashboard struct {
@@ -706,12 +708,29 @@ type SaveCoverageReq struct {
// SaveCoverage returns amount of records created in db.
func (dash *Dashboard) SaveCoverage(req *SaveCoverageReq) (int, error) {
- resp := new(int)
- if err := dash.Query("save_coverage", req, resp); err != nil {
- return 0, err
- } else {
- return *resp, err
+ uploadURL := new(string)
+ if err := dash.Query("create_upload_url", req, uploadURL); err != nil {
+ return 0, fmt.Errorf("create_upload_url: %w", err)
}
+
+ gcsClient, err := gcs.NewClient(context.Background())
+ if err != nil {
+ return 0, fmt.Errorf("gcs.NewClient: %w", err)
+ }
+ w, err := gcsClient.FileWriter(*uploadURL)
+ if err != nil {
+ return 0, fmt.Errorf("gcsClient.FileWriter: %w", err)
+ }
+ defer w.Close()
+ if err := json.NewEncoder(gzip.NewWriter(w)).Encode(req); err != nil {
+ return 0, fmt.Errorf("json.NewEncoder(gzip.NewWriter(w)).Encode: %w", err)
+ }
+
+ rowsWritten := new(int)
+ if err := dash.Query("save_coverage", *uploadURL, rowsWritten); err != nil {
+ return 0, fmt.Errorf("save_coverage: %w", err)
+ }
+ return *rowsWritten, nil
}
type TestPatchRequest struct {