重构提取逻辑,新增 area 表
This commit is contained in:
@@ -21,6 +21,7 @@ func (s *channelBaiyinProvider) prepareCreate(ctx *channelCreateContext) (*chann
|
||||
if err != nil {
|
||||
return nil, core.NewServErr("创建代理网关失败", err)
|
||||
}
|
||||
prov, city := areaProvinceCity(ctx.Area)
|
||||
|
||||
channels := make([]*m.Channel, len(ctx.Ports))
|
||||
chanConfigs := make([]*g.PortConfigsReq, len(ctx.Ports))
|
||||
@@ -30,8 +31,8 @@ func (s *channelBaiyinProvider) prepareCreate(ctx *channelCreateContext) (*chann
|
||||
Port: int(portRef.Port()),
|
||||
Status: true,
|
||||
AutoEdgeConfig: &g.AutoEdgeConfig{
|
||||
Province: u.Z(ctx.Filter.Prov),
|
||||
City: u.Z(ctx.Filter.City),
|
||||
Province: u.Z(prov),
|
||||
City: u.Z(city),
|
||||
Isp: ctx.Filter.Isp.String(),
|
||||
Count: u.P(1),
|
||||
},
|
||||
@@ -52,7 +53,7 @@ func (s *channelBaiyinProvider) prepareCreate(ctx *channelCreateContext) (*chann
|
||||
Channels: channels,
|
||||
applyRemote: func() error {
|
||||
slog.Debug("提交代理端口配置", "proxy", ctx.Proxy.IP.String(), "total_count", len(chanConfigs))
|
||||
if err := ensureEdges(ctx.Proxy, gateway, ctx.Filter, ctx.Count); err != nil {
|
||||
if err := ensureEdges(ctx.Proxy, gateway, ctx.Area, ctx.Filter.Isp, ctx.Count); err != nil {
|
||||
slog.Warn("ensureEdges 失败", "err", err)
|
||||
}
|
||||
if len(chanConfigs) > 0 {
|
||||
@@ -96,16 +97,17 @@ func (s *channelBaiyinProvider) removeRemote(_ string, batch *usedChanBatch) err
|
||||
// ensureEdges 检查本地节点是否足够,如果不足从云端连入
|
||||
// 本地节点通过 Assigned = false 排除已分配节点
|
||||
// 云端节点通过 NoRepeat = true 排除已分配节点
|
||||
func ensureEdges(proxy *m.Proxy, gateway g.GatewayClient, filter *EdgeFilter, count int) error {
|
||||
if filter.IsEmpty() {
|
||||
func ensureEdges(proxy *m.Proxy, gateway g.GatewayClient, area *m.Area, isp *m.EdgeISP, count int) error {
|
||||
prov, city := areaProvinceCity(area)
|
||||
if prov == nil && city == nil && u.X(isp.String()) == nil {
|
||||
return nil // 没有过滤条件,直接返回空,避免无意义的查询
|
||||
}
|
||||
|
||||
// 先查本地
|
||||
localEdges, err := gateway.GatewayEdge(&g.GatewayEdgeReq{
|
||||
Province: filter.Prov,
|
||||
City: filter.City,
|
||||
Isp: u.X(filter.Isp.String()),
|
||||
Province: prov,
|
||||
City: city,
|
||||
Isp: u.X(isp.String()),
|
||||
Limit: &count,
|
||||
Assigned: u.P(false),
|
||||
})
|
||||
@@ -119,9 +121,9 @@ func ensureEdges(proxy *m.Proxy, gateway g.GatewayClient, filter *EdgeFilter, co
|
||||
// 再查云端
|
||||
remaining := count - len(localEdges)
|
||||
cloudEdges, err := g.Cloud.CloudEdges(&g.CloudEdgesReq{
|
||||
Province: filter.Prov,
|
||||
City: filter.City,
|
||||
Isp: u.X(filter.Isp.String()),
|
||||
Province: prov,
|
||||
City: city,
|
||||
Isp: u.X(isp.String()),
|
||||
Limit: &remaining,
|
||||
NoRepeat: u.P(true),
|
||||
ActiveTime: u.P(3600),
|
||||
|
||||
Reference in New Issue
Block a user