From 9ae512880049a61eb04dee27846f22a4cf9a20cd Mon Sep 17 00:00:00 2001 From: leandrofars Date: Sat, 13 Apr 2024 15:30:45 -0300 Subject: [PATCH] fix: return general data info when a mtp is down --- .../services/controller/internal/api/info.go | 16 ++++------ .../controller/internal/bridge/bridge.go | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/backend/services/controller/internal/api/info.go b/backend/services/controller/internal/api/info.go index 737d904..a96af6b 100644 --- a/backend/services/controller/internal/api/info.go +++ b/backend/services/controller/internal/api/info.go @@ -73,28 +73,24 @@ func (a *Api) generalInfo(w http.ResponseWriter, r *http.Request) { result.ProductClassCount = productclasscount.Msg now := time.Now() - _, err = bridge.NatsReq[time.Duration]( + _, err = bridge.NatsReqWithoutHttpSet[time.Duration]( local.NATS_WS_ADAPTER_SUBJECT_PREFIX+"rtt", []byte(""), - w, a.nc, ) - if err != nil { - return + if err == nil { + result.WebsocketsRtt = time.Until(now).String() } - result.WebsocketsRtt = time.Until(now).String() now = time.Now() - _, err = bridge.NatsReq[time.Duration]( + _, err = bridge.NatsReqWithoutHttpSet[time.Duration]( local.NATS_MQTT_ADAPTER_SUBJECT_PREFIX+"rtt", []byte(""), - w, a.nc, ) - if err != nil { - return + if err == nil { + result.MqttRtt = time.Until(now).String() } - result.MqttRtt = time.Until(now).String() err = json.NewEncoder(w).Encode(result) if err != nil { diff --git a/backend/services/controller/internal/bridge/bridge.go b/backend/services/controller/internal/bridge/bridge.go index 6f3a66d..af3bc1a 100644 --- a/backend/services/controller/internal/bridge/bridge.go +++ b/backend/services/controller/internal/bridge/bridge.go @@ -172,3 +172,35 @@ func NatsReq[T entity.DataType]( return answer, nil } + +func NatsReqWithoutHttpSet[T entity.DataType]( + subj string, + body []byte, + nc *nats.Conn, +) (*entity.MsgAnswer[T], error) { + + var answer *entity.MsgAnswer[T] + + msg, err := nc.Request(subj, body, local.NATS_REQUEST_TIMEOUT) + if err != nil { + log.Println(err) + return nil, err + } + + err = json.Unmarshal(msg.Data, &answer) + if err != nil { + + var errMsg *entity.MsgAnswer[*string] + err = json.Unmarshal(msg.Data, &errMsg) + + if err != nil { + log.Println("Bad answer message formatting: ", err.Error()) + return nil, err + } + + log.Printf("Error message received, msg: %s, code: %d", *errMsg.Msg, errMsg.Code) + return nil, errNatsMsgReceivedWithErrorData + } + + return answer, nil +}