mirror of
https://github.com/internetarchive/warcprox.git
synced 2025-01-18 13:22:09 +01:00
new api, http://{warcprox_host}:{port}/status returns status info json
This commit is contained in:
parent
a2f11f4e66
commit
8caae0d7d3
2
setup.py
2
setup.py
@ -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',
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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):
|
||||
'''
|
||||
|
Loading…
x
Reference in New Issue
Block a user