diff --git a/control-plane/subcommand/consul-sidecar/command.go b/control-plane/subcommand/consul-sidecar/command.go index 9527ccd8fc..b6ff0d9d39 100644 --- a/control-plane/subcommand/consul-sidecar/command.go +++ b/control-plane/subcommand/consul-sidecar/command.go @@ -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 @@ -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())) } }