targetparser.go 957 B

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