github.com/annwntech/go-micro/v2@v2.9.5/client/selector/filter.go (about) 1 package selector 2 3 import ( 4 "github.com/annwntech/go-micro/v2/registry" 5 ) 6 7 // FilterEndpoint is an endpoint based Select Filter which will 8 // only return services with the endpoint specified. 9 func FilterEndpoint(name string) Filter { 10 return func(old []*registry.Service) []*registry.Service { 11 var services []*registry.Service 12 13 for _, service := range old { 14 for _, ep := range service.Endpoints { 15 if ep.Name == name { 16 services = append(services, service) 17 break 18 } 19 } 20 } 21 22 return services 23 } 24 } 25 26 // FilterLabel is a label based Select Filter which will 27 // only return services with the label specified. 28 func FilterLabel(key, val string) Filter { 29 return func(old []*registry.Service) []*registry.Service { 30 var services []*registry.Service 31 32 for _, service := range old { 33 serv := new(registry.Service) 34 var nodes []*registry.Node 35 36 for _, node := range service.Nodes { 37 if node.Metadata == nil { 38 continue 39 } 40 41 if node.Metadata[key] == val { 42 nodes = append(nodes, node) 43 } 44 } 45 46 // only add service if there's some nodes 47 if len(nodes) > 0 { 48 // copy 49 *serv = *service 50 serv.Nodes = nodes 51 services = append(services, serv) 52 } 53 } 54 55 return services 56 } 57 } 58 59 // FilterVersion is a version based Select Filter which will 60 // only return services with the version specified. 61 func FilterVersion(version string) Filter { 62 return func(old []*registry.Service) []*registry.Service { 63 var services []*registry.Service 64 65 for _, service := range old { 66 if service.Version == version { 67 services = append(services, service) 68 } 69 } 70 71 return services 72 } 73 }