| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/usr/bin/env python3
- # Portions cribbed from https://www.w3reference.com/blog/python3-http-server-post-example/
- from http.server import SimpleHTTPRequestHandler, HTTPServer
- import json
- import subprocess
- import sys
- import threading
- import time
- num_uploads = 0
- niters = 3
- httpd = None
- lox_distributor = None
- log_file = open("uploaded_log", "w")
- def shutdown_servers():
- if lox_distributor is not None:
- lox_distributor.terminate()
- time.sleep(2)
- httpd.shutdown()
- def restart_lox_distributor():
- global lox_distributor
- if lox_distributor is not None:
- lox_distributor.terminate()
- subprocess.run(["/bin/rm", "-rf", "lox_db"], cwd="../lox-distributor")
- lox_distributor = subprocess.Popen(["/usr/bin/cargo", "run", "--release", "--features",
- "test-branch"], cwd="../lox-distributor")
- time.sleep(2)
- class PostHandler(SimpleHTTPRequestHandler):
- def do_POST(self):
- global num_uploads
- path = self.path
- if path != "/log":
- self.send_response(404)
- self.send_header('Content-Type', 'text/plain; charset=utf-8')
- self.end_headers()
- self.wfile.write("Bad URL for POST\n".encode('utf-8'))
- return
- content_length = int(self.headers.get('Content-Length', 0))
-
- post_body_bytes = self.rfile.read(content_length)
- post_body_json_str = post_body_bytes.decode('utf-8')
- post_body_str = json.loads(post_body_json_str)
- log_file.write(post_body_str)
-
- restart_lox_distributor()
- num_uploads += 1
- if num_uploads < niters:
- response = "0"
- else:
- response = "1"
-
- self.send_response(200)
- self.send_header('Content-Type', 'text/plain; charset=utf-8')
- self.end_headers()
- self.wfile.write(response.encode('utf-8'))
- if num_uploads == niters:
- # We're done
- threading.Thread(target=shutdown_servers).start()
-
- if __name__ == '__main__':
- if len(sys.argv) > 1:
- niters = int(sys.argv[1])
- restart_lox_distributor()
- server_address = ('', 8000)
- httpd = HTTPServer(server_address, PostHandler)
- httpd.serve_forever()
|