in main/health.go [185:230]
func (p *HttpHealthProbe) evaluate(lg *slog.Logger) (ProbeResponse, error) {
req, err := http.NewRequest("GET", p.address(), nil)
var probeResponse ProbeResponse
if err != nil {
probeResponse.ApplicationHealthState = Unknown
return probeResponse, err
}
req.Header.Set("User-Agent", "ApplicationHealthExtension/1.0")
resp, err := p.HttpClient.Do(req)
// non-2xx status code doesn't return err
// err is returned if a timeout occurred
if err != nil {
probeResponse.ApplicationHealthState = Unknown
return probeResponse, err
}
defer resp.Body.Close()
// non 2xx status code
if resp.StatusCode < 200 || resp.StatusCode > 299 {
probeResponse.ApplicationHealthState = Unknown
return probeResponse, errors.New(fmt.Sprintf("Unsuccessful response status code %v", resp.StatusCode))
}
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
probeResponse.ApplicationHealthState = Unknown
return probeResponse, err
}
if err := json.Unmarshal(bodyBytes, &probeResponse); err != nil {
probeResponse.ApplicationHealthState = Unknown
return probeResponse, err
}
if err := probeResponse.validateCustomMetrics(); err != nil {
telemetry.SendEvent(telemetry.ErrorEvent, telemetry.AppHealthProbeTask, err.Error(), "error", err)
}
if err := probeResponse.validateApplicationHealthState(); err != nil {
probeResponse.ApplicationHealthState = Unknown
return probeResponse, err
}
return probeResponse, nil
}