|
32 | 32 | def make_wsgi_app(registry=core.REGISTRY):
|
33 | 33 | '''Create a WSGI app which serves the metrics from a registry.'''
|
34 | 34 | def prometheus_app(environ, start_response):
|
35 |
| - status = str('200 OK') |
36 |
| - headers = [(str('Content-type'), CONTENT_TYPE_LATEST)] |
37 |
| - start_response(status, headers) |
38 | 35 | params = parse_qs(environ['QUERY_STRING'])
|
39 | 36 | r = registry
|
40 | 37 | if 'name[]' in params:
|
41 | 38 | r = r.restricted_registry(params['name[]'])
|
42 |
| - return [generate_latest(r)] |
| 39 | + output = generate_latest(r) |
| 40 | + |
| 41 | + status = str('200 OK') |
| 42 | + headers = [(str('Content-type'), CONTENT_TYPE_LATEST)] |
| 43 | + start_response(status, headers) |
| 44 | + return [output] |
43 | 45 | return prometheus_app
|
44 | 46 |
|
45 | 47 |
|
@@ -75,14 +77,19 @@ def generate_latest(registry=core.REGISTRY):
|
75 | 77 |
|
76 | 78 | class MetricsHandler(BaseHTTPRequestHandler):
|
77 | 79 | def do_GET(self):
|
78 |
| - self.send_response(200) |
79 |
| - self.send_header('Content-Type', CONTENT_TYPE_LATEST) |
80 |
| - self.end_headers() |
81 | 80 | registry = core.REGISTRY
|
82 | 81 | params = parse_qs(urlparse(self.path).query)
|
83 | 82 | if 'name[]' in params:
|
84 | 83 | registry = registry.restricted_registry(params['name[]'])
|
85 |
| - self.wfile.write(generate_latest(registry)) |
| 84 | + try: |
| 85 | + output = generate_latest(registry) |
| 86 | + except: |
| 87 | + self.send_error(500, 'error generating metric output') |
| 88 | + raise |
| 89 | + self.send_response(200) |
| 90 | + self.send_header('Content-Type', CONTENT_TYPE_LATEST) |
| 91 | + self.end_headers() |
| 92 | + self.wfile.write(output) |
86 | 93 |
|
87 | 94 | def log_message(self, format, *args):
|
88 | 95 | return
|
|
0 commit comments