diff --git a/prometheus_client/__init__.py b/prometheus_client/__init__.py index 358146a4..d03d7a30 100644 --- a/prometheus_client/__init__.py +++ b/prometheus_client/__init__.py @@ -18,7 +18,7 @@ CONTENT_TYPE_LATEST = exposition.CONTENT_TYPE_LATEST generate_latest = exposition.generate_latest -MetricsHandler = exposition.MetricsHandler +MetricsHandler = exposition.generate_metrics_handler(REGISTRY) make_wsgi_app = exposition.make_wsgi_app start_http_server = exposition.start_http_server start_wsgi_server = exposition.start_wsgi_server diff --git a/prometheus_client/exposition.py b/prometheus_client/exposition.py index fe859d7b..a642056b 100644 --- a/prometheus_client/exposition.py +++ b/prometheus_client/exposition.py @@ -75,34 +75,33 @@ def generate_latest(registry=core.REGISTRY): output.append('{0}{1} {2}\n'.format(name, labelstr, core._floatToGoString(value))) return ''.join(output).encode('utf-8') - -class MetricsHandler(BaseHTTPRequestHandler): - def do_GET(self): - registry = core.REGISTRY - params = parse_qs(urlparse(self.path).query) - if 'name[]' in params: - registry = registry.restricted_registry(params['name[]']) - try: - output = generate_latest(registry) - except: - self.send_error(500, 'error generating metric output') - raise - self.send_response(200) - self.send_header('Content-Type', CONTENT_TYPE_LATEST) - self.end_headers() - self.wfile.write(output) - - def log_message(self, format, *args): - return - - -def start_http_server(port, addr=''): +def generate_metrics_handler(registry): + class MetricsHandler(BaseHTTPRequestHandler): + def do_GET(self): + params = parse_qs(urlparse(self.path).query) + if 'name[]' in params: + registry = registry.restricted_registry(params['name[]']) + try: + output = generate_latest(registry) + except: + self.send_error(500, 'error generating metric output') + raise + self.send_response(200) + self.send_header('Content-Type', CONTENT_TYPE_LATEST) + self.end_headers() + self.wfile.write(output) + + def log_message(self, format, *args): + return + + +def start_http_server(port, addr='', registry=core.REGISTRY): """Starts an HTTP server for prometheus metrics as a daemon thread""" class ThreadingSimpleServer(ThreadingMixIn, HTTPServer): pass class PrometheusMetricsServer(threading.Thread): def run(self): - httpd = ThreadingSimpleServer((addr, port), MetricsHandler) + httpd = ThreadingSimpleServer((addr, port), generate_metrics_handler(registry)) httpd.serve_forever() t = PrometheusMetricsServer() t.daemon = True