aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/cover/manager_to_ci.go
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-03-20 15:36:37 +0100
committerTaras Madan <tarasmadan@google.com>2024-03-21 16:38:22 +0000
commit0a84219ec0829db2fb2d804eb0a9cbc0c5e6b4b1 (patch)
tree586e697f7e99058baf4bc7f3b25d5ae208a94817 /pkg/cover/manager_to_ci.go
parentc2b3b7068cafe4a798f6cf1d9e65bf105b7e33fc (diff)
syz-ci, pkg/cover: stream coverage from manager to gcs
Diffstat (limited to 'pkg/cover/manager_to_ci.go')
-rw-r--r--pkg/cover/manager_to_ci.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/pkg/cover/manager_to_ci.go b/pkg/cover/manager_to_ci.go
new file mode 100644
index 000000000..4b6f1d9ef
--- /dev/null
+++ b/pkg/cover/manager_to_ci.go
@@ -0,0 +1,51 @@
+// Copyright 2024 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+package cover
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+)
+
+// CIDetails fields will be added to every CSV line.
+type CIDetails struct {
+ Version int `json:"version"`
+ Timestamp string `json:"timestamp"`
+ FuzzingMinutes int `json:"fuzzing_minutes"`
+ Arch string `json:"arch"`
+ BuildID string `json:"build_id"`
+ Manager string `json:"manager"`
+ KernelRepo string `json:"kernel_repo"`
+ KernelBranch string `json:"kernel_branch"`
+ KernelCommit string `json:"kernel_commit"`
+}
+
+type dbCoverageRecord struct {
+ CIDetails
+ CoverageInfo
+}
+
+func writeJSLine(w io.Writer, covInfo dbCoverageRecord) error {
+ bs, err := json.Marshal(covInfo)
+ if err != nil {
+ return fmt.Errorf("failed to marshal covInfo: %w", err)
+ }
+ bs = append(bs, '\n')
+ if _, err = w.Write(bs); err != nil {
+ return fmt.Errorf("failed to write js data: %w", err)
+ }
+ return nil
+}
+
+func WriteCIJSONLine(w io.Writer, managerCover CoverageInfo, ciDetails CIDetails) error {
+ dbLine := dbCoverageRecord{
+ CIDetails: ciDetails,
+ CoverageInfo: managerCover,
+ }
+ if err := writeJSLine(w, dbLine); err != nil {
+ return fmt.Errorf("failed to serialize func line: %w", err)
+ }
+ return nil
+}