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

This commit is contained in:
wwqgtxx 2025-04-30 14:09:15 +08:00
parent 61d6a9abd6
commit 5c40a6340c
2 changed files with 5 additions and 2 deletions

View File

@ -63,5 +63,5 @@ 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, parse), nil return NewRuleSetProvider(name, behavior, format, time.Duration(uint(schema.Interval))*time.Second, vehicle, schema.Payload, parse), nil
} }

View File

@ -133,7 +133,7 @@ func (rp *RuleSetProvider) Close() error {
return rp.ruleSetProvider.Close() return rp.ruleSetProvider.Close()
} }
func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleFormat, interval time.Duration, vehicle P.Vehicle, parse common.ParseRuleFunc) P.RuleProvider { func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleFormat, interval time.Duration, vehicle P.Vehicle, payload []string, parse common.ParseRuleFunc) P.RuleProvider {
rp := &ruleSetProvider{ rp := &ruleSetProvider{
baseProvider: baseProvider{ baseProvider: baseProvider{
behavior: behavior, behavior: behavior,
@ -147,6 +147,9 @@ func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleForma
} }
rp.strategy = newStrategy(behavior, parse) rp.strategy = newStrategy(behavior, parse)
if len(payload) > 0 { // using as fallback rules
rp.strategy = rulesParseInline(payload, rp.strategy)
}
rp.Fetcher = resource.NewFetcher(name, interval, vehicle, func(bytes []byte) (ruleStrategy, error) { rp.Fetcher = resource.NewFetcher(name, interval, vehicle, func(bytes []byte) (ruleStrategy, error) {
return rulesParse(bytes, newStrategy(behavior, parse), format) return rulesParse(bytes, newStrategy(behavior, parse), format)
}, onUpdate) }, onUpdate)