diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-04-10 15:22:58 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-04-11 10:07:50 +0000 |
| commit | 12ba9c21547f0ea81d8ca844847dd4d25fdb1a83 (patch) | |
| tree | 66190fd9e5f7f335e8bff4445994ee7f422d91f6 /syz-cluster/dashboard | |
| parent | d9f74b68bb55efb3daf03a6ad1f54cf505ea8874 (diff) | |
syz-cluster/dashboard: share test step artifacts
If the test artifacts are present, let the user download them.
Diffstat (limited to 'syz-cluster/dashboard')
| -rw-r--r-- | syz-cluster/dashboard/handler.go | 16 | ||||
| -rw-r--r-- | syz-cluster/dashboard/templates/series.html | 3 |
2 files changed, 18 insertions, 1 deletions
diff --git a/syz-cluster/dashboard/handler.go b/syz-cluster/dashboard/handler.go index fe9129373..c18436978 100644 --- a/syz-cluster/dashboard/handler.go +++ b/syz-cluster/dashboard/handler.go @@ -58,6 +58,7 @@ func (h *dashboardHandler) Mux() *http.ServeMux { mux := http.NewServeMux() mux.HandleFunc("/sessions/{id}/log", errToStatus(h.sessionLog)) mux.HandleFunc("/sessions/{id}/test_logs", errToStatus(h.sessionTestLog)) + mux.HandleFunc("/sessions/{id}/test_artifacts", errToStatus(h.sessionTestArtifacts)) mux.HandleFunc("/series/{id}", errToStatus(h.seriesInfo)) mux.HandleFunc("/patches/{id}", errToStatus(h.patchContent)) mux.HandleFunc("/findings/{id}/{key}", errToStatus(h.findingInfo)) @@ -254,11 +255,24 @@ func (h *dashboardHandler) sessionTestLog(w http.ResponseWriter, r *http.Request if err != nil { return err } else if test == nil { - return fmt.Errorf("%w: test log", errNotFound) + return fmt.Errorf("%w: test", errNotFound) } return h.streamBlob(w, test.LogURI) } +func (h *dashboardHandler) sessionTestArtifacts(w http.ResponseWriter, r *http.Request) error { + test, err := h.sessionTestRepo.Get(r.Context(), r.PathValue("id"), r.FormValue("name")) + if err != nil { + return err + } else if test == nil { + return fmt.Errorf("%w: test", errNotFound) + } + filename := fmt.Sprintf("%s_%s.tar.gz", test.SessionID, test.TestName) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename)) + w.Header().Set("Content-Type", "application/octet-stream") + return h.streamBlob(w, test.ArtifactsArchiveURI) +} + func (h *dashboardHandler) streamBlob(w http.ResponseWriter, uri string) error { if uri == "" { return nil diff --git a/syz-cluster/dashboard/templates/series.html b/syz-cluster/dashboard/templates/series.html index daaad8ae8..754bfe9e2 100644 --- a/syz-cluster/dashboard/templates/series.html +++ b/syz-cluster/dashboard/templates/series.html @@ -130,6 +130,9 @@ {{if .LogURI}} <a href="/sessions/{{.SessionID}}/test_logs?name={{.TestName}}" class="modal-link-raw">[Log]</a> {{end}} + {{if .ArtifactsArchiveURI}} + <a href="/sessions/{{.SessionID}}/test_artifacts?name={{.TestName}}">[Artifacts]</a> + {{end}} </th> </tr> {{if .Findings}} |
