gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/client/selector/filter.go (about)

     1  package selector
     2  
     3  import (
     4  	"gitee.com/liuxuezhan/go-micro-v1.18.0/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  }