func getColorFromColorTeller()

in walkthroughs/howto-timeout-policy/src/colorgateway/main.go [125:159]


func getColorFromColorTeller(request *http.Request) (string, error, int, []byte) {
	colorTellerEndpoint, err := getColorTellerEndpoint()
	if err != nil {
		return "-n/a-", err, 0, nil
	}

	client := xray.Client(&http.Client{})
	req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("http://%s", colorTellerEndpoint), nil)
	if err != nil {
		return "-n/a-", err, 0, nil
	}
	log.Println("Getting Latency: ", request.Header.Get("Latency"))
	req.Header.Set("Latency", request.Header.Get("Latency"))
	log.Println("Setting Latency: ", req.Header.Get("Latency"))
	resp, err := client.Do(req.WithContext(request.Context()))
	if err != nil {
		return "-n/a-", err, resp.StatusCode, nil
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return "-n/a-", err, resp.StatusCode, nil
	}
	if resp.StatusCode != 200 {
		return "-n/a-", nil, resp.StatusCode, body
	}

	color := strings.TrimSpace(string(body))
	if len(color) < 1 {
		return "-n/a-", errors.New("Empty response from colorTeller"), resp.StatusCode, nil
	}

	return color, nil, resp.StatusCode, nil
}