Просмотр исходного кода

logs backend with hijacking enabled on responsewriter

sunguroku 5 лет назад
Родитель
Сommit
a059d7db08
2 измененных файлов с 12 добавлено и 11 удалено
  1. 4 11
      server/api/k8s_handler.go
  2. 8 0
      server/requestlog/log_entry.go

+ 4 - 11
server/api/k8s_handler.go

@@ -78,7 +78,9 @@ func (app *App) HandleListNamespaces(w http.ResponseWriter, r *http.Request) {
 }
 
 // HandleGetPodLogs returns real-time logs of the pod via websockets
+// TODO: Refactor repeated calls.
 func (app *App) HandleGetPodLogs(w http.ResponseWriter, r *http.Request) {
+
 	// get session to retrieve correct kubeconfig
 	session, err := app.store.Get(r, app.cookieName)
 
@@ -123,11 +125,12 @@ func (app *App) HandleGetPodLogs(w http.ResponseWriter, r *http.Request) {
 		agent, err = kubernetes.GetAgentOutOfClusterConfig(form.OutOfClusterConfig)
 	}
 
-	// allow all hosts for now
+	// allow all hosts for now. TODO: Implement CORS
 	upgrader.CheckOrigin = func(r *http.Request) bool { return true }
 
 	// upgrade to websocket.
 	conn, err := upgrader.Upgrade(w, r, nil)
+
 	if err != nil {
 		app.handleErrorUpgradeWebsocket(err, w)
 	}
@@ -138,14 +141,4 @@ func (app *App) HandleGetPodLogs(w http.ResponseWriter, r *http.Request) {
 		app.handleErrorWebsocketWrite(err, w)
 		return
 	}
-
-	if err != nil {
-		app.handleErrorFormValidation(err, ErrK8sValidate, w)
-		return
-	}
-
-	if err := json.NewEncoder(w).Encode(logs); err != nil {
-		app.handleErrorFormDecoding(err, ErrK8sDecode, w)
-		return
-	}
 }

+ 8 - 0
server/requestlog/log_entry.go

@@ -1,6 +1,7 @@
 package requestlog
 
 import (
+	"bufio"
 	"errors"
 	"io"
 	"net"
@@ -91,6 +92,13 @@ func (r *responseStats) Write(p []byte) (n int, err error) {
 	r.wc.Write(p[:n])
 	return
 }
+func (r *responseStats) Hijack() (net.Conn, *bufio.ReadWriter, error) {
+	h, ok := r.w.(http.Hijacker)
+	if !ok {
+		return nil, nil, errors.New("ResponseWriter Interface does not support hijacking")
+	}
+	return h.Hijack()
+}
 func (r *responseStats) size() (hdr, body int64) {
 	if r.code == 0 {
 		return headerSize(r.w.Header()), 0