in pkg/admin/services/provider_service_impl.go [281:360]
func (p *ProviderServiceImpl) FindService(pattern string, filter string) ([]*model.ServiceDTO, error) {
var (
providers []*model.Provider
reg *regexp.Regexp
err error
)
if !strings.Contains(filter, constant.AnyValue) && !strings.Contains(filter, constant.InterrogationPoint) {
if pattern == constant.IP {
providers, err = p.findByAddress(filter)
if err != nil {
return nil, err
}
} else if pattern == constant.Service {
providers, err = p.FindByService(filter)
if err != nil {
return nil, err
}
} else if pattern == constant.ApplicationKey {
providers, err = p.findByApplication(filter)
if err != nil {
return nil, err
}
} else {
return nil, fmt.Errorf("unsupport the pattern: %s", pattern)
}
} else {
var candidates *set.HashSet
if pattern == constant.IP {
candidates, err = p.findAddresses()
if err != nil {
return nil, err
}
} else if pattern == constant.Service {
candidates, err = p.FindServices()
if err != nil {
return nil, err
}
} else if pattern == constant.ApplicationKey {
candidates, err = p.FindApplications()
if err != nil {
return nil, err
}
} else {
return nil, fmt.Errorf("unsupport the pattern: %s", pattern)
}
filter = strings.ReplaceAll(filter, constant.PunctuationPoint, "\\.")
if hasPrefixOrSuffix(filter) {
filter = strings.ReplaceAll(filter, constant.AnyValue, constant.PunctuationPoint+constant.AnyValue)
}
reg, err = regexp.Compile(filter)
if err != nil {
return nil, err
}
items := candidates.Values()
for _, candidateAny := range items {
candidate := candidateAny.(string)
if reg.MatchString(candidate) {
if pattern == constant.IP {
providers, err = p.findByAddress(candidate)
if err != nil {
return nil, err
}
} else if pattern == constant.Service {
providers, err = p.FindByService(candidate)
if err != nil {
return nil, err
}
} else if pattern == constant.ApplicationKey {
providers, err = p.findByApplication(candidate)
if err != nil {
return nil, err
}
}
}
}
}
return util.Providers2DTO(providers), nil
}