Set Content-Length for Metrics requests (#7730)

HTTP requires the response to contain a Content-Length header unless chunked encoding is being used.
Prometheus metrics endpoint did not set this, causing software such as prometheus-proxy to not be able to scrape synapse for metrics.

Signed-off-by: Christian Svensson <blue@cmd.nu>
code_spécifique_watcha
Christian Svensson 4 years ago committed by GitHub
parent 24110255cd
commit 8bbe87f42d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      changelog.d/7730.bugfix
  2. 5
      synapse/metrics/_exposition.py

@ -0,0 +1 @@
Fix missing `Content-Length` on HTTP responses from the metrics handler.

@ -208,6 +208,7 @@ class MetricsHandler(BaseHTTPRequestHandler):
raise
self.send_response(200)
self.send_header("Content-Type", CONTENT_TYPE_LATEST)
self.send_header("Content-Length", str(len(output)))
self.end_headers()
self.wfile.write(output)
@ -261,4 +262,6 @@ class MetricsResource(Resource):
def render_GET(self, request):
request.setHeader(b"Content-Type", CONTENT_TYPE_LATEST.encode("ascii"))
return generate_latest(self.registry)
response = generate_latest(self.registry)
request.setHeader(b"Content-Length", str(len(response)))
return response

Loading…
Cancel
Save