From f1d741126875d32a7a2ec654db64d3b2c1f21a2e Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 12 May 2026 09:55:05 +0000 Subject: [PATCH] appview/pipelines: do validations before upgrading to wss once upgraded, its only possible to return websocket errors Signed-off-by: oppiliappan --- appview/pipelines/pipelines.go | 36 ++++++++++++++++++------------------ 1 file(s) changed, 18 insertion(s)(+), 18 deletion(s)(-) diff --git a/appview/pipelines/pipelines.go b/appview/pipelines/pipelines.go --- a/appview/pipelines/pipelines.go +++ b/appview/pipelines/pipelines.go @@ -181,23 +181,6 @@ func (p *Pipelines) Logs(w http.ResponseWriter, r *http.Request) { l := p.logger.With("handler", "logs") - clientConn, err := upgrader.Upgrade(w, r, nil) - if err != nil { - l.Error("websocket upgrade failed", "err", err) - return - } - defer func() { - _ = clientConn.WriteControl( - websocket.CloseMessage, - websocket.FormatCloseMessage(websocket.CloseNormalClosure, "log stream complete"), - time.Now().Add(time.Second), - ) - clientConn.Close() - }() - - ctx, cancel := context.WithCancel(r.Context()) - defer cancel() - f, err := p.repoResolver.Resolve(r) if err != nil { l.Error("failed to get repo and knot", "err", err) @@ -241,12 +224,29 @@ } url := scheme + "://" + strings.Join([]string{spindle, "logs", knot, rkey, workflow}, "/") l = l.With("url", url) + + clientConn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + l.Error("websocket upgrade failed", "err", err) + return + } + defer func() { + _ = clientConn.WriteControl( + websocket.CloseMessage, + websocket.FormatCloseMessage(websocket.CloseNormalClosure, "log stream complete"), + time.Now().Add(time.Second), + ) + clientConn.Close() + }() + + ctx, cancel := context.WithCancel(r.Context()) + defer cancel() + l.Info("logs endpoint hit") spindleConn, _, err := websocket.DefaultDialer.Dial(url, nil) if err != nil { l.Error("websocket dial failed", "err", err) - http.Error(w, "failed to connect to log stream", http.StatusBadGateway) return } defer spindleConn.Close() -- tangled.sh