github.com/lingyao2333/mo-zero@v1.4.1/zrpc/resolver/internal/kube/targetparser.go (about)

     1  package kube
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  
     8  	"github.com/lingyao2333/mo-zero/zrpc/resolver/internal/targets"
     9  	"google.golang.org/grpc/resolver"
    10  )
    11  
    12  const (
    13  	colon            = ":"
    14  	defaultNamespace = "default"
    15  )
    16  
    17  var emptyService Service
    18  
    19  // Service represents a service with namespace, name and port.
    20  type Service struct {
    21  	Namespace string
    22  	Name      string
    23  	Port      int
    24  }
    25  
    26  // ParseTarget parses the resolver.Target.
    27  func ParseTarget(target resolver.Target) (Service, error) {
    28  	var service Service
    29  	service.Namespace = targets.GetAuthority(target)
    30  	if len(service.Namespace) == 0 {
    31  		service.Namespace = defaultNamespace
    32  	}
    33  
    34  	endpoints := targets.GetEndpoints(target)
    35  	segs := strings.SplitN(endpoints, colon, 2)
    36  	if len(segs) < 2 {
    37  		return emptyService, fmt.Errorf("bad endpoint: %s", endpoints)
    38  	}
    39  
    40  	service.Name = segs[0]
    41  	port, err := strconv.Atoi(segs[1])
    42  	if err != nil {
    43  		return emptyService, err
    44  	}
    45  
    46  	service.Port = port
    47  
    48  	return service, nil
    49  }