new api, http://{warcprox_host}:{port}/status returns status info json

This commit is contained in:
Noah Levitt 2017-03-23 09:56:43 -07:00
parent a2f11f4e66
commit 8caae0d7d3
3 changed files with 37 additions and 1 deletions

View File

@ -51,7 +51,7 @@ except:
setuptools.setup(
name='warcprox',
version='2.1b1.dev58',
version='2.1b1.dev59',
description='WARC writing MITM HTTP/S proxy',
url='https://github.com/internetarchive/warcprox',
author='Noah Levitt',

View File

@ -1279,6 +1279,18 @@ def test_dedup_ok_flag(
assert results[0]['filename'] == results[1]['filename']
assert results[0]['offset'] < results[1]['offset']
def test_status_api(warcprox_):
url = 'http://localhost:%s/status' % warcprox_.proxy.server_port
response = requests.get(url)
assert response.status_code == 200
response_dict = json.loads(response.content.decode('ascii'))
assert response_dict.keys() == {
'role', 'version', 'host', 'address', 'port', 'pid', 'load',
'queue_size'}
assert response_dict['role'] == 'warcprox'
assert response_dict['version'] == warcprox.__version__
assert response_dict['port'] == warcprox_.proxy.server_port
if __name__ == '__main__':
pytest.main()

View File

@ -45,6 +45,7 @@ import warcprox
import datetime
import ipaddress
import urlcanon
import os
class WarcProxyHandler(warcprox.mitmproxy.MitmProxyHandler):
'''
@ -198,6 +199,29 @@ class WarcProxyHandler(warcprox.mitmproxy.MitmProxyHandler):
return recorded_url
def do_GET(self):
if self.path == '/status' and self.command == 'GET':
status_info = {
'role': 'warcprox',
'version': warcprox.__version__,
'host': socket.gethostname(),
'address': self.connection.getsockname()[0],
'port': self.connection.getsockname()[1],
'load': 1.0 * self.server.recorded_url_q.qsize() / (
self.server.recorded_url_q.maxsize or 100),
'queue_size': self.server.recorded_url_q.qsize(),
'pid': os.getpid(),
}
payload = json.dumps(
status_info, indent=2).encode('utf-8') + b'\n'
self.send_response(200, 'OK')
self.send_header('Content-type', 'application/json')
self.send_header('Content-Length', len(payload))
self.end_headers()
self.wfile.write(payload)
else:
self.do_COMMAND()
# deprecated
def do_PUTMETA(self):
'''