func()

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
}