From 148d48ba8437e7ea3e2730c6c6405d5408c5f42b Mon Sep 17 00:00:00 2001 From: Dmytro Vovk Date: Sun, 23 Mar 2025 16:40:08 +0000 Subject: [PATCH 1/4] upd ui --- api/websocket_handler.go | 9 +++++++++ go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/api/websocket_handler.go b/api/websocket_handler.go index 234c32b..a7a570b 100644 --- a/api/websocket_handler.go +++ b/api/websocket_handler.go @@ -151,8 +151,17 @@ func (h *APIHandler) HandleWebSocket(w http.ResponseWriter, r *http.Request) { }() for { + _, msg, err := conn.ReadMessage() if err != nil { + if websocket.IsCloseError(err, websocket.CloseNormalClosure) { + fmt.Println("Client closed connection") + break + } else if websocket.IsUnexpectedCloseError(err, websocket.CloseNormalClosure) { + fmt.Println("Client closed connection unexpectedly") + break + } + fmt.Println("Error reading message:", err) break } diff --git a/go.mod b/go.mod index 9058464..e711239 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( ) require ( - github.com/erigontech/erigonwatch v0.1.24 + github.com/erigontech/erigonwatch v0.1.25 github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect diff --git a/go.sum b/go.sum index ef66603..e5b8659 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/erigontech/erigonwatch v0.1.24 h1:o0Smm0IUg8Ak8sfo0BKht/jos8N9ht8wwqXJ13F5H0k= -github.com/erigontech/erigonwatch v0.1.24/go.mod h1:8vQ+VjvLu2gkPs8EwdPrOTAAo++WuLuBi54N7NuAF0I= +github.com/erigontech/erigonwatch v0.1.25 h1:NRCwI6Np4XHVoL/vfPoFH9cphqIAAtWkXArN+is5Cjs= +github.com/erigontech/erigonwatch v0.1.25/go.mod h1:8vQ+VjvLu2gkPs8EwdPrOTAAo++WuLuBi54N7NuAF0I= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= From bb7e53c59c0f0e2edb379fbf9b75a65eae500c9e Mon Sep 17 00:00:00 2001 From: Dmytro Vovk Date: Sun, 23 Mar 2025 18:41:21 +0000 Subject: [PATCH 2/4] fix --- api/main_handler.go | 1 + api/websocket_handler.go | 29 +++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/api/main_handler.go b/api/main_handler.go index b01c6ca..848aef0 100644 --- a/api/main_handler.go +++ b/api/main_handler.go @@ -40,6 +40,7 @@ func NewHandler(services APIServices) http.Handler { "allocs", "block", "mutex", + "txpool", "admin", } diff --git a/api/websocket_handler.go b/api/websocket_handler.go index a7a570b..c91f0fd 100644 --- a/api/websocket_handler.go +++ b/api/websocket_handler.go @@ -27,6 +27,7 @@ type WebsocketHandler struct { writeQueue chan []byte conn *websocket.Conn closeChan chan struct{} + closed bool } // **NewWebsocketHandler initializes WebsocketHandler** @@ -35,6 +36,7 @@ func NewWebsocketHandler(conn *websocket.Conn) *WebsocketHandler { writeQueue: make(chan []byte, 100), conn: conn, closeChan: make(chan struct{}), + closed: false, } go handler.startWriter() // Start dedicated writer goroutine @@ -79,6 +81,14 @@ func (h *WebsocketHandler) startWriter() { // **Close WebSocket connection and stop writer** func (h *WebsocketHandler) closeConnection() { + h.mu.Lock() + if h.closed { + h.mu.Unlock() + return + } + h.closed = true + h.mu.Unlock() + close(h.closeChan) h.conn.Close() } @@ -111,10 +121,14 @@ func (h *APIHandler) HandleWebSocket(w http.ResponseWriter, r *http.Request) { for { select { case <-r.Context().Done(): + handler.closeConnection() return case <-handler.closeChan: // Graceful shutdown return - case message := <-channel: + case message, ok := <-channel: + if !ok { + return + } handler.sendResponse(&ClientResponse{ Status: "success", Message: string(message), @@ -128,16 +142,20 @@ func (h *APIHandler) HandleWebSocket(w http.ResponseWriter, r *http.Request) { return nil }) - go func() { - ticker := time.NewTicker(10 * time.Second) - defer ticker.Stop() + pingTicker := time.NewTicker(10 * time.Second) + defer pingTicker.Stop() + go func() { for { select { case <-handler.closeChan: return - case <-ticker.C: + case <-pingTicker.C: handler.mu.Lock() + if handler.closed { + handler.mu.Unlock() + return + } err := conn.WriteMessage(websocket.PingMessage, nil) handler.mu.Unlock() @@ -151,7 +169,6 @@ func (h *APIHandler) HandleWebSocket(w http.ResponseWriter, r *http.Request) { }() for { - _, msg, err := conn.ReadMessage() if err != nil { if websocket.IsCloseError(err, websocket.CloseNormalClosure) { From e9eb97d02d6d80ff44552f9922181c46a867740f Mon Sep 17 00:00:00 2001 From: Dmytro Vovk Date: Fri, 4 Apr 2025 23:35:03 +0100 Subject: [PATCH 3/4] increased throughput --- api/websocket_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/websocket_handler.go b/api/websocket_handler.go index c91f0fd..702cbd7 100644 --- a/api/websocket_handler.go +++ b/api/websocket_handler.go @@ -33,7 +33,7 @@ type WebsocketHandler struct { // **NewWebsocketHandler initializes WebsocketHandler** func NewWebsocketHandler(conn *websocket.Conn) *WebsocketHandler { handler := &WebsocketHandler{ - writeQueue: make(chan []byte, 100), + writeQueue: make(chan []byte, 200), conn: conn, closeChan: make(chan struct{}), closed: false, From 28a16a41f6e633499a7b456b1cd6d845b59b6a68 Mon Sep 17 00:00:00 2001 From: Dmytro Vovk Date: Fri, 4 Apr 2025 23:37:31 +0100 Subject: [PATCH 4/4] upd UI deps --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e711239..2240e50 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( ) require ( - github.com/erigontech/erigonwatch v0.1.25 + github.com/erigontech/erigonwatch v0.1.26 github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect diff --git a/go.sum b/go.sum index e5b8659..1f0fe5c 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/erigontech/erigonwatch v0.1.25 h1:NRCwI6Np4XHVoL/vfPoFH9cphqIAAtWkXArN+is5Cjs= -github.com/erigontech/erigonwatch v0.1.25/go.mod h1:8vQ+VjvLu2gkPs8EwdPrOTAAo++WuLuBi54N7NuAF0I= +github.com/erigontech/erigonwatch v0.1.26 h1:6ZeB34SDFyTK3UDz+1tiVFUNyJNu9bJCB+xX413W6oY= +github.com/erigontech/erigonwatch v0.1.26/go.mod h1:8vQ+VjvLu2gkPs8EwdPrOTAAo++WuLuBi54N7NuAF0I= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=