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
}