targetparser.go 1.0 KB

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