Skip to content

Commit 47c7ea2

Browse files
author
Danni Moiseyev
committed
start_http_server for any given registry or the default registry
1 parent 36b5cab commit 47c7ea2

2 files changed

Lines changed: 23 additions & 24 deletions

File tree

prometheus_client/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
CONTENT_TYPE_LATEST = exposition.CONTENT_TYPE_LATEST
2020
generate_latest = exposition.generate_latest
21-
MetricsHandler = exposition.MetricsHandler
21+
MetricsHandler = exposition.generate_metrics_handler(REGISTRY)
2222
make_wsgi_app = exposition.make_wsgi_app
2323
start_http_server = exposition.start_http_server
2424
start_wsgi_server = exposition.start_wsgi_server

prometheus_client/exposition.py

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,33 @@ def generate_latest(registry=core.REGISTRY):
7575
output.append('{0}{1} {2}\n'.format(name, labelstr, core._floatToGoString(value)))
7676
return ''.join(output).encode('utf-8')
7777

78-
79-
class MetricsHandler(BaseHTTPRequestHandler):
80-
def do_GET(self):
81-
registry = core.REGISTRY
82-
params = parse_qs(urlparse(self.path).query)
83-
if 'name[]' in params:
84-
registry = registry.restricted_registry(params['name[]'])
85-
try:
86-
output = generate_latest(registry)
87-
except:
88-
self.send_error(500, 'error generating metric output')
89-
raise
90-
self.send_response(200)
91-
self.send_header('Content-Type', CONTENT_TYPE_LATEST)
92-
self.end_headers()
93-
self.wfile.write(output)
94-
95-
def log_message(self, format, *args):
96-
return
97-
98-
99-
def start_http_server(port, addr=''):
78+
def generate_metrics_handler(registry):
79+
class MetricsHandler(BaseHTTPRequestHandler):
80+
def do_GET(self):
81+
params = parse_qs(urlparse(self.path).query)
82+
if 'name[]' in params:
83+
registry = registry.restricted_registry(params['name[]'])
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)
93+
94+
def log_message(self, format, *args):
95+
return
96+
97+
98+
def start_http_server(port, addr='', registry=core.REGISTRY):
10099
"""Starts an HTTP server for prometheus metrics as a daemon thread"""
101100
class ThreadingSimpleServer(ThreadingMixIn, HTTPServer):
102101
pass
103102
class PrometheusMetricsServer(threading.Thread):
104103
def run(self):
105-
httpd = ThreadingSimpleServer((addr, port), MetricsHandler)
104+
httpd = ThreadingSimpleServer((addr, port), generate_metrics_handler(registry))
106105
httpd.serve_forever()
107106
t = PrometheusMetricsServer()
108107
t.daemon = True

0 commit comments

Comments
 (0)