in pkg/admin/services/traffic/weight.go [50:97]
func (tm *WeightService) Search(p *model.Percentage) ([]*model.Percentage, error) {
result := make([]*model.Percentage, 0)
var con string
if p.Service != "" && p.Service != "*" {
con = util.ColonSeparatedKey(p.Service, p.Group, p.Version)
}
list, err := services.GetRules(con, constant.ConfiguratorRuleSuffix)
if err != nil {
return result, err
}
for k, v := range list {
k, _ = strings.CutSuffix(k, constant.ConfiguratorRuleSuffix)
split := strings.Split(k, ":")
percentage := &model.Percentage{
Service: split[0],
Weights: make([]model.Weight, 0),
}
if len(split) >= 2 {
percentage.Version = split[1]
}
if len(split) >= 3 {
percentage.Group = split[2]
}
override := &model.Override{}
err = yaml.Unmarshal([]byte(v), override)
if err != nil {
return result, err
}
for _, c := range override.Configs {
if c.Side == "provider" && c.Parameters["weight"] != nil {
percentage.Weights = append(percentage.Weights, model.Weight{
Weight: c.Parameters["weight"].(int),
Match: c.Match,
})
}
}
if len(percentage.Weights) > 0 {
result = append(result, percentage)
}
}
return result, nil
}