Skip to content

Commit

Permalink
Catch write errors
Browse files Browse the repository at this point in the history
  • Loading branch information
lkysow committed Nov 23, 2021
1 parent b30129b commit b7858ce
Showing 1 changed file with 13 additions and 13 deletions.
26 changes: 13 additions & 13 deletions control-plane/subcommand/consul-sidecar/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,16 +296,13 @@ func (c *Command) mergedMetricsHandler(rw http.ResponseWriter, _ *http.Request)
http.Error(rw, fmt.Sprintf("Received non-2xx status code scraping Envoy proxy metrics: %d: %s", envoyMetrics.StatusCode, string(envoyMetricsBody)), http.StatusInternalServerError)
return
}
_, err = rw.Write(envoyMetricsBody)
if err != nil {
c.logger.Error(fmt.Sprintf("Error writing envoy metrics body: %s", err.Error()))
}
writeResponse(rw, envoyMetricsBody, "envoy metrics", c.logger)

serviceMetricsAddr := fmt.Sprintf("http://127.0.0.1:%s%s", c.flagServiceMetricsPort, c.flagServiceMetricsPath)
serviceMetrics, err := c.serviceMetricsGetter.Get(serviceMetricsAddr)
if err != nil {
c.logger.Warn("Error scraping service metrics", "err", err)
rw.Write(serviceMetricSuccess(false))
writeResponse(rw, serviceMetricSuccess(false), "service metrics success", c.logger)
// Since we've already written the Envoy metrics to the response, we can
// return at this point if we were unable to get service metrics.
return
Expand All @@ -322,21 +319,24 @@ func (c *Command) mergedMetricsHandler(rw http.ResponseWriter, _ *http.Request)
serviceMetricsBody, err := ioutil.ReadAll(serviceMetrics.Body)
if err != nil {
c.logger.Error("Could not read service metrics", "err", err)
rw.Write(serviceMetricSuccess(false))
writeResponse(rw, serviceMetricSuccess(false), "service metrics success", c.logger)
return
}
if non2xxCode(serviceMetrics.StatusCode) {
c.logger.Error("Received non-2xx status code scraping service metrics", "code", serviceMetrics.StatusCode, "response", string(serviceMetricsBody))
rw.Write(serviceMetricSuccess(false))
writeResponse(rw, serviceMetricSuccess(false), "service metrics success", c.logger)
return
}
_, err = rw.Write(serviceMetricsBody)
if err != nil {
c.logger.Error(fmt.Sprintf("Error writing service metrics body: %s", err.Error()))
}
_, err = rw.Write(serviceMetricSuccess(true))
writeResponse(rw, serviceMetricsBody, "service metrics", c.logger)
writeResponse(rw, serviceMetricSuccess(true), "service metrics success", c.logger)
}

// writeResponse is a helper method to write resp to rw and log if there is an error writing.
// respName is the name of this response that will be used in the error log.
func writeResponse(rw http.ResponseWriter, resp []byte, respName string, logger hclog.Logger) {
_, err := rw.Write(resp)
if err != nil {
c.logger.Error(fmt.Sprintf("Error writing service metrics success: %s", err.Error()))
logger.Error(fmt.Sprintf("Error writing %s: %s", respName, err.Error()))
}
}

Expand Down

0 comments on commit b7858ce

Please sign in to comment.