|
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