@@ -66,30 +66,21 @@ func newWebSocketClient(baseURL, username, password string) *webSocketClient {
6666}
6767
6868func (c * webSocketClient ) GetAvailableApps () ([]AvailableAppDTO , error ) {
69- var apps []AvailableAppDTO
70-
7169 cacheKey := fmt .Sprintf ("%s:%s:ws:app.query" , c .baseURL , c .username )
72- rawBytes := getFromCache (cacheKey , func () []byte {
73- result , err := c .fetchApps ()
74- if err != nil {
75- panic (err )
76- }
77-
78- b , err := json .Marshal (result )
70+ res , err := getFromCache (cacheKey , func () (* []AvailableAppDTO , error ) {
71+ res , err := c .fetchApps ()
7972 if err != nil {
80- panic ( err )
73+ return nil , err
8174 }
8275
83- return b
76+ return & res , nil
8477 })
8578
86- if rawBytes != nil {
87- if err := json .Unmarshal (rawBytes , & apps ); err != nil {
88- return nil , err
89- }
79+ if err != nil || res == nil {
80+ return nil , err
9081 }
9182
92- return apps , nil
83+ return * res , nil
9384}
9485
9586func (c * webSocketClient ) fetchApps () ([]AvailableAppDTO , error ) {
@@ -106,8 +97,13 @@ func (c *webSocketClient) fetchApps() ([]AvailableAppDTO, error) {
10697 //nolint:errcheck
10798 defer conn .Close ()
10899
109- if err = conn .SetReadDeadline (time .Now ().Add (wsTimeout )); err != nil {
110- return nil , fmt .Errorf ("truenas websocket: set deadline: %w" , err )
100+ deadline := time .Now ().Add (wsTimeout )
101+ if err = conn .SetReadDeadline (deadline ); err != nil {
102+ return nil , fmt .Errorf ("truenas websocket: set read deadline: %w" , err )
103+ }
104+
105+ if err = conn .SetWriteDeadline (deadline ); err != nil {
106+ return nil , fmt .Errorf ("truenas websocket: set write deadline: %w" , err )
111107 }
112108
113109 if err = conn .WriteMessage (websocket .TextMessage , []byte (ddpConnectMsg )); err != nil {
@@ -190,7 +186,10 @@ func convertWSApps(raw []wsAppDTO) []AvailableAppDTO {
190186}
191187
192188func (c * webSocketClient ) waitForMsg (conn * websocket.Conn , msgType string ) error {
193- for {
189+ remainingAttempts := 100
190+ for remainingAttempts > 0 {
191+ remainingAttempts --
192+
194193 _ , raw , err := conn .ReadMessage ()
195194 if err != nil {
196195 return err
@@ -205,10 +204,15 @@ func (c *webSocketClient) waitForMsg(conn *websocket.Conn, msgType string) error
205204 return nil
206205 }
207206 }
207+
208+ return errors .New ("truenas websocket: timeout" )
208209}
209210
210211func (c * webSocketClient ) waitForResult (conn * websocket.Conn , id string ) (json.RawMessage , error ) {
211- for {
212+ remainingAttempts := 100
213+ for remainingAttempts > 0 {
214+ remainingAttempts --
215+
212216 _ , raw , err := conn .ReadMessage ()
213217 if err != nil {
214218 return nil , err
@@ -227,6 +231,8 @@ func (c *webSocketClient) waitForResult(conn *websocket.Conn, id string) (json.R
227231 return msg .Result , nil
228232 }
229233 }
234+
235+ return nil , errors .New ("truenas websocket: timeout" )
230236}
231237
232238func buildWSURL (baseURL string ) (string , error ) {
0 commit comments