From 09371f141f89f6528a557dbf82a597af491bb4a6 Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Sun, 5 Dec 2021 17:01:35 +0300 Subject: [PATCH] Revert "Fix the selected entry behavior by propagating the `focusedEntryId` through WebSocket (before #452) TRA-3983 (#513)" This reverts commit 873f252544d0f7e3829070570b0f09e5be5b3c4d. --- agent/pkg/api/socket_routes.go | 127 ++++++++---------- agent/pkg/models/models.go | 15 --- shared/models.go | 6 +- ui/src/components/EntryDetailed.tsx | 2 +- .../EntryListItem/EntryListItem.tsx | 9 +- ui/src/components/TrafficPage.tsx | 14 -- 6 files changed, 65 insertions(+), 108 deletions(-) diff --git a/agent/pkg/api/socket_routes.go b/agent/pkg/api/socket_routes.go index b82c7c338..8feccebac 100644 --- a/agent/pkg/api/socket_routes.go +++ b/agent/pkg/api/socket_routes.go @@ -6,7 +6,6 @@ import ( "fmt" "mizuserver/pkg/models" "net/http" - "strconv" "sync" "time" @@ -95,8 +94,6 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even startTimeBytes, _ := models.CreateWebsocketStartTimeMessage(startTime) SendToSocket(socketId, startTimeBytes) - queryRecieved := false - for { _, msg, err := ws.ReadMessage() if err != nil { @@ -104,75 +101,65 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even break } - if !queryRecieved { - if !isTapper && !isQuerySet { - queryRecieved = true - query := string(msg) - err = basenine.Validate(shared.BasenineHost, shared.BaseninePort, query) - if err != nil { - toastBytes, _ := models.CreateWebsocketToastMessage(&models.ToastMessage{ - Type: "error", - AutoClose: 5000, - Text: fmt.Sprintf("Syntax error: %s", err.Error()), - }) - SendToSocket(socketId, toastBytes) - break - } - - isQuerySet = true - - handleDataChannel := func(c *basenine.Connection, data chan []byte) { - for { - bytes := <-data - - if string(bytes) == basenine.CloseChannel { - return - } - - var dataMap map[string]interface{} - err = json.Unmarshal(bytes, &dataMap) - - base := dataMap["base"].(map[string]interface{}) - base["id"] = uint(dataMap["id"].(float64)) - - baseEntryBytes, _ := models.CreateBaseEntryWebSocketMessage(base) - SendToSocket(socketId, baseEntryBytes) - } - } - - handleMetaChannel := func(c *basenine.Connection, meta chan []byte) { - for { - bytes := <-meta - - if string(bytes) == basenine.CloseChannel { - return - } - - var metadata *basenine.Metadata - err = json.Unmarshal(bytes, &metadata) - if err != nil { - logger.Log.Debugf("Error recieving metadata: %v", err.Error()) - } - - metadataBytes, _ := models.CreateWebsocketQueryMetadataMessage(metadata) - SendToSocket(socketId, metadataBytes) - } - } - - go handleDataChannel(connection, data) - go handleMetaChannel(connection, meta) - - connection.Query(query, data, meta) - } else { - eventHandlers.WebSocketMessage(socketId, msg) - } - } else { - id, err := strconv.Atoi(string(msg)) + if !isTapper && !isQuerySet { + query := string(msg) + err = basenine.Validate(shared.BasenineHost, shared.BaseninePort, query) if err != nil { - continue + toastBytes, _ := models.CreateWebsocketToastMessage(&models.ToastMessage{ + Type: "error", + AutoClose: 5000, + Text: fmt.Sprintf("Syntax error: %s", err.Error()), + }) + SendToSocket(socketId, toastBytes) + break } - focusEntryBytes, _ := models.CreateWebsocketFocusEntry(id) - SendToSocket(socketId, focusEntryBytes) + + isQuerySet = true + + handleDataChannel := func(c *basenine.Connection, data chan []byte) { + for { + bytes := <-data + + if string(bytes) == basenine.CloseChannel { + return + } + + var dataMap map[string]interface{} + err = json.Unmarshal(bytes, &dataMap) + + base := dataMap["base"].(map[string]interface{}) + base["id"] = uint(dataMap["id"].(float64)) + + baseEntryBytes, _ := models.CreateBaseEntryWebSocketMessage(base) + SendToSocket(socketId, baseEntryBytes) + } + } + + handleMetaChannel := func(c *basenine.Connection, meta chan []byte) { + for { + bytes := <-meta + + if string(bytes) == basenine.CloseChannel { + return + } + + var metadata *basenine.Metadata + err = json.Unmarshal(bytes, &metadata) + if err != nil { + logger.Log.Debugf("Error recieving metadata: %v", err.Error()) + } + + metadataBytes, _ := models.CreateWebsocketQueryMetadataMessage(metadata) + SendToSocket(socketId, metadataBytes) + } + } + + go handleDataChannel(connection, data) + go handleMetaChannel(connection, meta) + + connection.Query(query, data, meta) + } else { + eventHandlers.WebSocketMessage(socketId, msg) } } } diff --git a/agent/pkg/models/models.go b/agent/pkg/models/models.go index 9094ae5b1..84f8e9842 100644 --- a/agent/pkg/models/models.go +++ b/agent/pkg/models/models.go @@ -70,11 +70,6 @@ type WebSocketStartTimeMessage struct { Data int64 `json:"data"` } -type WebSocketFocusEntryMessage struct { - *shared.WebSocketMessageMetadata - Id int `json:"id"` -} - func CreateBaseEntryWebSocketMessage(base map[string]interface{}) ([]byte, error) { message := &WebSocketEntryMessage{ WebSocketMessageMetadata: &shared.WebSocketMessageMetadata{ @@ -135,16 +130,6 @@ func CreateWebsocketStartTimeMessage(base int64) ([]byte, error) { return json.Marshal(message) } -func CreateWebsocketFocusEntry(id int) ([]byte, error) { - message := &WebSocketFocusEntryMessage{ - WebSocketMessageMetadata: &shared.WebSocketMessageMetadata{ - MessageType: shared.WebSocketMessageFocusEntry, - }, - Id: id, - } - return json.Marshal(message) -} - // ExtendedHAR is the top level object of a HAR log. type ExtendedHAR struct { Log *ExtendedLog `json:"log"` diff --git a/shared/models.go b/shared/models.go index 59ba6c085..1d3893274 100644 --- a/shared/models.go +++ b/shared/models.go @@ -1,12 +1,11 @@ package shared import ( - "io/ioutil" - "strings" - "github.com/op/go-logging" "github.com/up9inc/mizu/shared/logger" "github.com/up9inc/mizu/tap/api" + "io/ioutil" + "strings" "gopkg.in/yaml.v3" ) @@ -22,7 +21,6 @@ const ( WebSocketMessageTypeToast WebSocketMessageType = "toast" WebSocketMessageTypeQueryMetadata WebSocketMessageType = "queryMetadata" WebSocketMessageTypeStartTime WebSocketMessageType = "startTime" - WebSocketMessageFocusEntry WebSocketMessageType = "focusEntry" ) type Resources struct { diff --git a/ui/src/components/EntryDetailed.tsx b/ui/src/components/EntryDetailed.tsx index 72f8ba5c7..995c1223f 100644 --- a/ui/src/components/EntryDetailed.tsx +++ b/ui/src/components/EntryDetailed.tsx @@ -75,10 +75,10 @@ const EntrySummary: React.FC = ({data, updateQuery}) => { return ; }; diff --git a/ui/src/components/EntryListItem/EntryListItem.tsx b/ui/src/components/EntryListItem/EntryListItem.tsx index 40d94e99f..2ef2d2702 100644 --- a/ui/src/components/EntryListItem/EntryListItem.tsx +++ b/ui/src/components/EntryListItem/EntryListItem.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, {useState} from "react"; import styles from './EntryListItem.module.sass'; import StatusCode, {getClassification, StatusCodeClassification} from "../UI/StatusCode"; import Protocol, {ProtocolInterface} from "../UI/Protocol" @@ -38,16 +38,16 @@ interface Rules { interface EntryProps { entry: Entry; - focusedEntryId: string; setFocusedEntryId: (id: string) => void; style: object; updateQuery: any; + forceSelect: boolean; headingMode: boolean; } -export const EntryItem: React.FC = ({entry, focusedEntryId, setFocusedEntryId, style, updateQuery, headingMode}) => { +export const EntryItem: React.FC = ({entry, setFocusedEntryId, style, updateQuery, forceSelect, headingMode}) => { - const isSelected = focusedEntryId === entry.id.toString(); + const [isSelected, setIsSelected] = useState(!forceSelect ? false : true); const classification = getClassification(entry.statusCode) const numberOfRules = entry.rules.numberOfRules @@ -126,6 +126,7 @@ export const EntryItem: React.FC = ({entry, focusedEntryId, setFocus ${isSelected && !rule && !contractEnabled ? styles.rowSelected : additionalRulesProperties}`} onClick={() => { if (!setFocusedEntryId) return; + setIsSelected(!isSelected); setFocusedEntryId(entry.id.toString()); }} style={{ diff --git a/ui/src/components/TrafficPage.tsx b/ui/src/components/TrafficPage.tsx index 4a3d5d48b..d8c022a23 100644 --- a/ui/src/components/TrafficPage.tsx +++ b/ui/src/components/TrafficPage.tsx @@ -175,15 +175,6 @@ export const TrafficPage: React.FC = ({setAnalyzeStatus, onTLS case "startTime": setStartTime(message.data); break; - case "focusEntry": - // To achieve selecting only one entry, render all elements in the buffer - // with the current `focusedEntryId` value. - // entries.forEach((entry: any, i: number) => { - // entries[i] = React.cloneElement(entry, { - // focusedEntryId: focusedEntryId - // }); - // }); - break; default: console.error(`unsupported websocket message type, Got: ${message.messageType}`) } @@ -209,11 +200,6 @@ export const TrafficPage: React.FC = ({setAnalyzeStatus, onTLS useEffect(() => { if (!focusedEntryId) return; setSelectedEntryData(null); - - if (ws.current.readyState === WebSocket.OPEN) { - ws.current.send(focusedEntryId); - } - (async () => { try { const entryData = await api.getEntry(focusedEntryId);