diff --git a/adapter/provider/parser.go b/adapter/provider/parser.go index cd5c3ff7b..2eaa2a3e9 100644 --- a/adapter/provider/parser.go +++ b/adapter/provider/parser.go @@ -127,5 +127,5 @@ func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvide interval := time.Duration(uint(schema.Interval)) * time.Second - return NewProxySetProvider(name, interval, parser, vehicle, hc) + return NewProxySetProvider(name, interval, schema.Payload, parser, vehicle, hc) } diff --git a/adapter/provider/provider.go b/adapter/provider/provider.go index 3dccefea5..b1934bc7e 100644 --- a/adapter/provider/provider.go +++ b/adapter/provider/provider.go @@ -161,7 +161,7 @@ func (pp *proxySetProvider) Close() error { 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() { 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) pd.Fetcher = fetcher if httpVehicle, ok := vehicle.(*resource.HTTPVehicle); ok { diff --git a/rules/provider/parse.go b/rules/provider/parse.go index 7b1c94097..4683aa386 100644 --- a/rules/provider/parse.go +++ b/rules/provider/parse.go @@ -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 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 }