func getXRayAddressAndPort()

in agent/envoy_bootstrap/envoy_bootstrap.go [682:714]


func getXRayAddressAndPort() (string, int, error) {
	port, err := env.OrInt("XRAY_DAEMON_PORT", 2000)
	if err != nil {
		return "", 0, err
	}
	addr := "127.0.0.1"
	// AWS_XRAY_DAEMON_ADDRESS may contain a port, if it does it takes priorty over XRAY_DAEMON_PORT
	if v := env.Get("AWS_XRAY_DAEMON_ADDRESS"); v != "" {
		// We use regex to first check that we have a port since the
		// net.SplitHostPort method requires a port exist...
		if len(ipPortRegex.FindSubmatchIndex([]byte(v))) != 0 {
			host, p, err := net.SplitHostPort(v)
			if err != nil {
				return "", 0, fmt.Errorf("Could not parse AWS_XRAY_DAEMON_ADDRESS: \"%s\".", v)
			}
			i, err := strconv.ParseInt(p, 10, strconv.IntSize)
			if err != nil {
				return "", 0, fmt.Errorf("Could not parse AWS_XRAY_DAEMON_ADDRESS: \"%s\".", v)
			}
			port = int(i)
			addr = host
		} else {
			addr = v
		}
		// The x-ray address must be a static IP right now since
		// the extension does not support pointing to a cluster
		if net.ParseIP(addr) == nil {
			return "", 0, fmt.Errorf("AWS_XRAY_DAEMON_ADDRESS must be a static IPv4 or IPv6 address such as \"127.0.0.1\".")
		}
	}

	return addr, port, nil
}