完善通道管理机制 & 增强 otel 记录字段
This commit is contained in:
@@ -25,8 +25,8 @@ var Channel = &channelServer{
|
||||
|
||||
type ChannelServiceProvider interface {
|
||||
CreateChannels(source netip.Addr, resourceId int32, authWhitelist bool, authPassword bool, count int, edgeFilter *EdgeFilter) ([]*m.Channel, error)
|
||||
RemoveChannels(batch string) error
|
||||
ClearExpiredChannels() error
|
||||
RemoveChannels(batch string, proxyId *int32) error
|
||||
ClearExpiredChannels(proxyId int32) (int, error)
|
||||
}
|
||||
|
||||
type channelServer struct {
|
||||
@@ -37,12 +37,12 @@ func (s *channelServer) CreateChannels(source netip.Addr, resourceId int32, auth
|
||||
return s.provider.CreateChannels(source, resourceId, authWhitelist, authPassword, count, edgeFilter)
|
||||
}
|
||||
|
||||
func (s *channelServer) RemoveChannels(batch string) error {
|
||||
return s.provider.RemoveChannels(batch)
|
||||
func (s *channelServer) RemoveChannels(batch string, proxyId *int32) error {
|
||||
return s.provider.RemoveChannels(batch, proxyId)
|
||||
}
|
||||
|
||||
func (s *channelServer) ClearExpiredChannels() error {
|
||||
return s.provider.ClearExpiredChannels()
|
||||
func (s *channelServer) ClearExpiredChannels(proxyId int32) (int, error) {
|
||||
return s.provider.ClearExpiredChannels(proxyId)
|
||||
}
|
||||
|
||||
// 授权方式
|
||||
@@ -220,10 +220,13 @@ func ensure(now time.Time, source netip.Addr, resourceId int32, authWhitelist bo
|
||||
return resource, ips, nil
|
||||
}
|
||||
|
||||
var (
|
||||
freeChansKey = "channel:free"
|
||||
usedChansKey = "channel:used"
|
||||
)
|
||||
func freeChansKey(proxy int32) string {
|
||||
return "channel:free:" + strconv.Itoa(int(proxy))
|
||||
}
|
||||
|
||||
func usedChansKey(proxy int32, batch string) string {
|
||||
return "channel:used:" + strconv.Itoa(int(proxy)) + ":" + batch
|
||||
}
|
||||
|
||||
// 扩容通道
|
||||
func regChans(proxy int32, chans []netip.AddrPort) error {
|
||||
@@ -232,7 +235,7 @@ func regChans(proxy int32, chans []netip.AddrPort) error {
|
||||
strs[i] = ch.String()
|
||||
}
|
||||
|
||||
key := freeChansKey + ":" + strconv.Itoa(int(proxy))
|
||||
key := freeChansKey(proxy)
|
||||
err := g.Redis.SAdd(context.Background(), key, strs...).Err()
|
||||
if err != nil {
|
||||
return fmt.Errorf("扩容通道失败: %w", err)
|
||||
@@ -242,7 +245,7 @@ func regChans(proxy int32, chans []netip.AddrPort) error {
|
||||
|
||||
// 缩容通道
|
||||
func remChans(proxy int32) error {
|
||||
key := freeChansKey + ":" + strconv.Itoa(int(proxy))
|
||||
key := freeChansKey(proxy)
|
||||
err := g.Redis.Del(context.Background(), key).Err()
|
||||
if err != nil {
|
||||
return fmt.Errorf("缩容通道失败: %w", err)
|
||||
@@ -252,13 +255,12 @@ func remChans(proxy int32) error {
|
||||
|
||||
// 取用通道
|
||||
func lockChans(proxy int32, batch string, count int) ([]netip.AddrPort, error) {
|
||||
pid := strconv.Itoa(int(proxy))
|
||||
chans, err := RedisScriptLockChans.Run(
|
||||
context.Background(),
|
||||
g.Redis,
|
||||
[]string{
|
||||
freeChansKey + ":" + pid,
|
||||
usedChansKey + ":" + pid + ":" + batch,
|
||||
freeChansKey(proxy),
|
||||
usedChansKey(proxy, batch),
|
||||
},
|
||||
count,
|
||||
).StringSlice()
|
||||
@@ -296,13 +298,12 @@ return ports
|
||||
|
||||
// 归还通道
|
||||
func freeChans(proxy int32, batch string) error {
|
||||
pid := strconv.Itoa(int(proxy))
|
||||
err := RedisScriptFreeChans.Run(
|
||||
context.Background(),
|
||||
g.Redis,
|
||||
[]string{
|
||||
freeChansKey + ":" + pid,
|
||||
usedChansKey + ":" + pid + ":" + batch,
|
||||
freeChansKey(proxy),
|
||||
usedChansKey(proxy, batch),
|
||||
},
|
||||
).Err()
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user