wasm_server 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env python3
  2. # Portions cribbed from https://www.w3reference.com/blog/python3-http-server-post-example/
  3. from http.server import SimpleHTTPRequestHandler, HTTPServer
  4. import json
  5. import subprocess
  6. import sys
  7. import threading
  8. import time
  9. num_uploads = 0
  10. niters = 3
  11. httpd = None
  12. lox_distributor = None
  13. log_file = open("uploaded_log", "w")
  14. def shutdown_servers():
  15. if lox_distributor is not None:
  16. lox_distributor.terminate()
  17. time.sleep(2)
  18. httpd.shutdown()
  19. def restart_lox_distributor():
  20. global lox_distributor
  21. if lox_distributor is not None:
  22. lox_distributor.terminate()
  23. subprocess.run(["/bin/rm", "-rf", "lox_db"], cwd="../lox-distributor")
  24. lox_distributor = subprocess.Popen(["/usr/bin/cargo", "run", "--release", "--features",
  25. "test-branch"], cwd="../lox-distributor")
  26. time.sleep(2)
  27. class PostHandler(SimpleHTTPRequestHandler):
  28. def do_POST(self):
  29. global num_uploads
  30. path = self.path
  31. if path != "/log":
  32. self.send_response(404)
  33. self.send_header('Content-Type', 'text/plain; charset=utf-8')
  34. self.end_headers()
  35. self.wfile.write("Bad URL for POST\n".encode('utf-8'))
  36. return
  37. content_length = int(self.headers.get('Content-Length', 0))
  38. post_body_bytes = self.rfile.read(content_length)
  39. post_body_json_str = post_body_bytes.decode('utf-8')
  40. post_body_str = json.loads(post_body_json_str)
  41. log_file.write(post_body_str)
  42. restart_lox_distributor()
  43. num_uploads += 1
  44. if num_uploads < niters:
  45. response = "0"
  46. else:
  47. response = "1"
  48. self.send_response(200)
  49. self.send_header('Content-Type', 'text/plain; charset=utf-8')
  50. self.end_headers()
  51. self.wfile.write(response.encode('utf-8'))
  52. if num_uploads == niters:
  53. # We're done
  54. threading.Thread(target=shutdown_servers).start()
  55. if __name__ == '__main__':
  56. if len(sys.argv) > 1:
  57. niters = int(sys.argv[1])
  58. restart_lox_distributor()
  59. server_address = ('', 8000)
  60. httpd = HTTPServer(server_address, PostHandler)
  61. httpd.serve_forever()