Refactor: allow to add an empty proxy provider to proxy group
This commit is contained in:
@@ -25,10 +25,16 @@ type HealthCheck struct {
|
||||
interval uint
|
||||
lazy bool
|
||||
lastTouch *atomic.Int64
|
||||
running *atomic.Bool
|
||||
done chan struct{}
|
||||
}
|
||||
|
||||
func (hc *HealthCheck) process() {
|
||||
if hc.running.Load() {
|
||||
return
|
||||
}
|
||||
hc.running.Store(true)
|
||||
|
||||
ticker := time.NewTicker(time.Duration(hc.interval) * time.Second)
|
||||
|
||||
go func() {
|
||||
@@ -84,6 +90,10 @@ func (hc *HealthCheck) check() {
|
||||
}
|
||||
|
||||
func (hc *HealthCheck) close() {
|
||||
if !hc.running.Load() {
|
||||
return
|
||||
}
|
||||
hc.running.Store(false)
|
||||
hc.done <- struct{}{}
|
||||
}
|
||||
|
||||
@@ -94,6 +104,7 @@ func NewHealthCheck(proxies []C.Proxy, url string, interval uint, lazy bool) *He
|
||||
interval: interval,
|
||||
lazy: lazy,
|
||||
lastTouch: atomic.NewInt64(0),
|
||||
running: atomic.NewBool(false),
|
||||
done: make(chan struct{}, 1),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,7 +234,9 @@ func (pf *proxyFilterProvider) HealthCheck() {
|
||||
}
|
||||
|
||||
func (pf *proxyFilterProvider) Update() error {
|
||||
var proxies []C.Proxy
|
||||
pf.healthCheck.close()
|
||||
|
||||
proxies := []C.Proxy{}
|
||||
if pf.filter != nil {
|
||||
for _, proxy := range pf.psd.Proxies() {
|
||||
if !pf.filter.MatchString(proxy.Name()) {
|
||||
@@ -248,6 +250,10 @@ func (pf *proxyFilterProvider) Update() error {
|
||||
|
||||
pf.proxies = proxies
|
||||
pf.healthCheck.setProxy(proxies)
|
||||
|
||||
if len(proxies) != 0 && pf.healthCheck.auto() {
|
||||
go pf.healthCheck.process()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -286,10 +292,6 @@ func NewProxyFilterProvider(name string, psd *ProxySetProvider, hc *HealthCheck,
|
||||
|
||||
_ = pd.Update()
|
||||
|
||||
if hc.auto() {
|
||||
go hc.process()
|
||||
}
|
||||
|
||||
wrapper := &ProxyFilterProvider{pd}
|
||||
runtime.SetFinalizer(wrapper, stopProxyFilterProvider)
|
||||
return wrapper
|
||||
|
||||
Reference in New Issue
Block a user