refactor ipRecorder

This commit is contained in:
yuzuki999
2022-10-21 11:07:04 +08:00
parent 068c2fef1f
commit 3cc2a3810f
8 changed files with 85 additions and 34 deletions

View File

@@ -155,6 +155,8 @@ func buildInbound(config *conf.ControllerConfig, nodeInfo *panel.NodeInfo, tag s
OcspStapling: 3600})
nodeInfo.V2ray.Inbounds[0].StreamSetting.XTLSSettings = xtlsSettings
}
} else if nodeInfo.NodeType == "V2ray" {
nodeInfo.V2ray.Inbounds[0].StreamSetting.Security = "none"
}
// Support ProxyProtocol for any transport protocol
if *nodeInfo.V2ray.Inbounds[0].StreamSetting.Network != "tcp" &&

View File

@@ -3,6 +3,7 @@ package controller
import (
"errors"
"fmt"
"github.com/Yuzuki616/V2bX/api/iprecoder"
"github.com/Yuzuki616/V2bX/api/panel"
"github.com/Yuzuki616/V2bX/conf"
"github.com/Yuzuki616/V2bX/core"
@@ -19,6 +20,7 @@ type Node struct {
nodeInfo *panel.NodeInfo
Tag string
userList []panel.UserInfo
ipRecorder iprecoder.IpRecorder
nodeInfoMonitorPeriodic *task.Periodic
userReportPeriodic *task.Periodic
onlineIpReportPeriodic *task.Periodic
@@ -99,6 +101,11 @@ func (c *Node) Start() error {
_ = c.userReportPeriodic.Start()
}()
if c.config.EnableIpRecorder {
switch c.config.IpRecorderConfig.Type {
case "Record":
c.ipRecorder = iprecoder.New(c.config.IpRecorderConfig.RecorderConfig)
case "RedisConfig":
}
// report and fetch online ip list task
c.onlineIpReportPeriodic = &task.Periodic{
Interval: time.Duration(c.config.IpRecorderConfig.Periodic) * time.Second,

View File

@@ -3,10 +3,7 @@ package controller
import (
"fmt"
"github.com/Yuzuki616/V2bX/api/panel"
"github.com/Yuzuki616/V2bX/core/app/dispatcher"
"github.com/Yuzuki616/V2bX/node/controller/legoCmd"
"github.com/go-resty/resty/v2"
"github.com/goccy/go-json"
"github.com/xtls/xray-core/common/protocol"
"log"
"reflect"
@@ -254,33 +251,16 @@ func (c *Node) reportOnlineIp() (err error) {
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)
onlineIp, err = c.ipRecorder.SyncOnlineIp(onlineIp)
if err != nil {
log.Print(err)
log.Print("Report online ip error: ", err)
c.server.ClearOnlineIp(c.Tag)
return nil
}
if c.config.IpRecorderConfig.EnableIpSync {
c.server.UpdateOnlineIp(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 = []dispatcher.UserIpList{}
err := json.Unmarshal(rsp.Body(), &onlineIp)
if err != nil {
log.Print(err)
c.server.ClearOnlineIp(c.Tag)
return nil
}
if c.config.IpRecorderConfig.EnableIpSync {
c.server.UpdateOnlineIp(c.Tag, onlineIp)
log.Printf("[Node: %d] Updated %d online ip", c.nodeInfo.NodeId, len(onlineIp))
}
} else {
c.server.ClearOnlineIp(c.Tag)
}
return nil
}