From d600c613333acc3772aa209b8f54759d032916a3 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 5 Jan 2024 12:00:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=8A=A0ip/=E7=9B=B4=E8=BF=9E=E8=8E=B7=E5=8F=96=E8=B6=85?= =?UTF-8?q?=E6=97=B6200=E6=AF=AB=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/fetch/fetch.go | 10 ++++---- .../network_element/controller/ne_info.go | 24 ++++++++++++++++++- .../network_element/service/ne_direct_link.go | 3 ++- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/framework/utils/fetch/fetch.go b/src/framework/utils/fetch/fetch.go index 38a8ec36..21504402 100644 --- a/src/framework/utils/fetch/fetch.go +++ b/src/framework/utils/fetch/fetch.go @@ -15,13 +15,13 @@ import ( ) // Get 发送 GET 请求 -// timeout 超时时间(秒) -func Get(url string, headers map[string]string, timeout uint8) ([]byte, error) { - if timeout < 1 || timeout > 180 { - timeout = 1 +// timeout 超时时间(毫秒) +func Get(url string, headers map[string]string, timeout int) ([]byte, error) { + if timeout < 100 || timeout > 180_000 { + timeout = 100 } client := &http.Client{ - Timeout: time.Duration(timeout) * time.Second, // 设置超时时间为 5 秒 + Timeout: time.Duration(timeout) * time.Millisecond, // 超时时间 } req, err := http.NewRequest("GET", url, nil) diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index b34116b5..7e21666f 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -1,6 +1,8 @@ package controller import ( + "fmt" + "ems.agt/src/framework/i18n" "ems.agt/src/framework/utils/ctx" "ems.agt/src/framework/utils/parse" @@ -23,6 +25,9 @@ type NeInfoController struct { neInfoService neService.INeInfo } +// neStateCacheMap 网元状态缓存最后一次成功的信息 +var neStateCacheMap map[string]map[string]any = make(map[string]map[string]any) + // 网元状态 // // GET /state @@ -42,14 +47,31 @@ func (s *NeInfoController) NeState(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } + neKey := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId) // 网元直连 resData, err := neService.NeState(neInfo) if err != nil { - c.JSON(200, result.ErrMsg("connection failure")) + // 异常取上次缓存 + if v, ok := neStateCacheMap[neKey]; ok && v != nil { + v["online"] = false + neStateCacheMap[neKey] = v + } else { + neStateCacheMap[neKey] = map[string]any{ + "online": false, + "neId": neInfo.NeId, + "neName": neInfo.NeName, + "neType": neInfo.NeType, + "neIP": neInfo.IP, + } + } + c.JSON(200, result.OkData(neStateCacheMap[neKey])) return } + // 存入缓存 + resData["online"] = true + neStateCacheMap[neKey] = resData c.JSON(200, result.OkData(resData)) } diff --git a/src/modules/network_element/service/ne_direct_link.go b/src/modules/network_element/service/ne_direct_link.go index ef29ed60..28025a88 100644 --- a/src/modules/network_element/service/ne_direct_link.go +++ b/src/modules/network_element/service/ne_direct_link.go @@ -15,7 +15,7 @@ import ( func NeState(neInfo model.NeInfo) (map[string]any, error) { // 网元直连 neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType)) - resBytes, err := fetch.Get(neUrl, nil, 1) + resBytes, err := fetch.Get(neUrl, nil, 200) if err != nil { logger.Warnf("NeState %s", err.Error()) return nil, err @@ -33,6 +33,7 @@ func NeState(neInfo model.NeInfo) (map[string]any, error) { "neType": neInfo.NeType, "neId": neInfo.NeId, "neName": neInfo.NeName, + "neIP": neInfo.IP, "refreshTime": time.Now().UnixMilli(), // 获取时间 "version": resData["version"], "capability": resData["capability"],