From edde9b1efce2aaacbfb6e9621c94d1bb30da5228 Mon Sep 17 00:00:00 2001 From: yuzuki999 Date: Fri, 12 Aug 2022 19:15:11 +0800 Subject: [PATCH] fix bug --- node/node.go | 68 +++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/node/node.go b/node/node.go index cf1901d..b7a938a 100644 --- a/node/node.go +++ b/node/node.go @@ -109,18 +109,16 @@ func (c *Node) Start() error { time.Sleep(time.Duration(c.config.UpdatePeriodic) * time.Second) _ = c.userReportPeriodic.Start() }() - if c.config.EnableIpRecorder { - c.onlineIpReportPeriodic = &task.Periodic{ - Interval: time.Duration(c.config.UpdatePeriodic) * 30, - Execute: c.onlineIpReport, - } - log.Printf("[%s: %d] Start report online ip", c.nodeInfo.NodeType, c.nodeInfo.NodeId) - // delay to start onlineIpReport - go func() { - time.Sleep(time.Duration(c.config.UpdatePeriodic) * time.Second) - _ = c.onlineIpReportPeriodic.Start() - }() + c.onlineIpReportPeriodic = &task.Periodic{ + Interval: time.Duration(c.config.UpdatePeriodic) * 30, + Execute: c.onlineIpReport, } + log.Printf("[%s: %d] Start report online ip", c.nodeInfo.NodeType, c.nodeInfo.NodeId) + // delay to start onlineIpReport + go func() { + time.Sleep(time.Duration(c.config.UpdatePeriodic) * time.Second) + _ = c.onlineIpReportPeriodic.Start() + }() runtime.GC() return nil } @@ -389,33 +387,37 @@ func (c *Node) userInfoMonitor() (err error) { } func (c *Node) onlineIpReport() (err error) { - onlineIp, err := c.server.GetOnlineIps(c.Tag) - if err != nil { - log.Print(err) - return nil - } - rsp, err := resty.New().SetTimeout(time.Duration(c.config.IpRecorderConfig.Timeout) * time.Second). - R(). - SetBody(onlineIp). - Post(c.config.IpRecorderConfig.Url + - "/api/v1/SyncOnlineIp?token=" + - c.config.IpRecorderConfig.Token) - if err != nil { - log.Print(err) - c.server.ClearOnlineIps(c.Tag) - return nil - } - log.Printf("[Node: %d] Report %d online ip", c.nodeInfo.NodeId, len(onlineIp)) - if rsp.StatusCode() == 200 { - onlineIp = []limiter.UserIp{} - err := json.Unmarshal(rsp.Body(), onlineIp) + if c.config.EnableIpRecorder { + onlineIp, err := c.server.GetOnlineIps(c.Tag) + if err != nil { + log.Print(err) + return nil + } + rsp, err := resty.New().SetTimeout(time.Duration(c.config.IpRecorderConfig.Timeout) * time.Second). + R(). + SetBody(onlineIp). + Post(c.config.IpRecorderConfig.Url + + "/api/v1/SyncOnlineIp?token=" + + c.config.IpRecorderConfig.Token) if err != nil { log.Print(err) c.server.ClearOnlineIps(c.Tag) return nil } - c.server.UpdateOnlineIps(c.Tag, onlineIp) - log.Printf("[Node: %d] Updated %d online ip", c.nodeInfo.NodeId, len(onlineIp)) + log.Printf("[Node: %d] Report %d online ip", c.nodeInfo.NodeId, len(onlineIp)) + if rsp.StatusCode() == 200 { + onlineIp = []limiter.UserIp{} + err := json.Unmarshal(rsp.Body(), onlineIp) + if err != nil { + log.Print(err) + c.server.ClearOnlineIps(c.Tag) + return nil + } + c.server.UpdateOnlineIps(c.Tag, onlineIp) + log.Printf("[Node: %d] Updated %d online ip", c.nodeInfo.NodeId, len(onlineIp)) + } else { + c.server.ClearOnlineIps(c.Tag) + } } else { c.server.ClearOnlineIps(c.Tag) }