feat: not inline proxy-provider can also set payload as fallback proxies when file/http parsing fails

This commit is contained in:
wwqgtxx 2025-04-30 16:03:02 +08:00
parent 5c40a6340c
commit f328203bc1
3 changed files with 18 additions and 3 deletions

View File

@ -127,5 +127,5 @@ func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvide
interval := time.Duration(uint(schema.Interval)) * time.Second interval := time.Duration(uint(schema.Interval)) * time.Second
return NewProxySetProvider(name, interval, parser, vehicle, hc) return NewProxySetProvider(name, interval, schema.Payload, parser, vehicle, hc)
} }

View File

@ -161,7 +161,7 @@ func (pp *proxySetProvider) Close() error {
return pp.Fetcher.Close() return pp.Fetcher.Close()
} }
func NewProxySetProvider(name string, interval time.Duration, parser resource.Parser[[]C.Proxy], vehicle types.Vehicle, hc *HealthCheck) (*ProxySetProvider, error) { func NewProxySetProvider(name string, interval time.Duration, payload []map[string]any, parser resource.Parser[[]C.Proxy], vehicle types.Vehicle, hc *HealthCheck) (*ProxySetProvider, error) {
if hc.auto() { if hc.auto() {
go hc.process() go hc.process()
} }
@ -174,6 +174,19 @@ func NewProxySetProvider(name string, interval time.Duration, parser resource.Pa
}, },
} }
if len(payload) > 0 { // using as fallback proxies
ps := ProxySchema{Proxies: payload}
buf, err := yaml.Marshal(ps)
if err != nil {
return nil, err
}
proxies, err := parser(buf)
if err != nil {
return nil, err
}
pd.proxies = proxies
}
fetcher := resource.NewFetcher[[]C.Proxy](name, interval, vehicle, parser, pd.setProxies) fetcher := resource.NewFetcher[[]C.Proxy](name, interval, vehicle, parser, pd.setProxies)
pd.Fetcher = fetcher pd.Fetcher = fetcher
if httpVehicle, ok := vehicle.(*resource.HTTPVehicle); ok { if httpVehicle, ok := vehicle.(*resource.HTTPVehicle); ok {

View File

@ -63,5 +63,7 @@ func ParseRuleProvider(name string, mapping map[string]any, parse common.ParseRu
return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type) return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type)
} }
return NewRuleSetProvider(name, behavior, format, time.Duration(uint(schema.Interval))*time.Second, vehicle, schema.Payload, parse), nil interval := time.Duration(uint(schema.Interval)) * time.Second
return NewRuleSetProvider(name, behavior, format, interval, vehicle, schema.Payload, parse), nil
} }