Source code for tapes.reporting.http
from six.moves.BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import json
from . import Reporter
from threading import Thread
[docs]class HTTPReporter(Reporter):
"""Exposes metrics via HTTP.
For web applications, you should almost certainly just use your existing framework's capabilities. This is for
applications that don't have HTTP easily available.
"""
def __init__(self, port, registry=None):
"""
:param port: Port to listen on
:param registry: The registry to report from, defaults to the global one
"""
super(HTTPReporter, self).__init__(registry)
self.port = port
self.thread = None
self.httpd = None
def start(self):
class _RequestHandler(BaseHTTPRequestHandler):
def do_GET(inner_self):
inner_self.send_response(200)
response_string = json.dumps(self.registry.get_stats())
inner_self.send_header('Content-Type', 'application/json')
inner_self.send_header('Content-Length', len(response_string))
inner_self.end_headers()
inner_self.wfile.write(response_string.encode('utf-8'))
server_address = '', self.port
self.httpd = HTTPServer(server_address, _RequestHandler)
self.thread = Thread(target=self.httpd.serve_forever)
self.thread.start()
def stop(self):
self.httpd.shutdown()
self.thread.join()