Cybersecurity-Projects/PROJECTS/advanced/haskell-reverse-proxy/examples/test_backend_multi.py

71 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Multi-instance test backend for Aenebris proxy load balancing
Accepts port number as command-line argument
"""
import json
import sys
from http.server import (
HTTPServer,
BaseHTTPRequestHandler,
)
class TestHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/health':
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
response = {
'status': 'healthy',
'port': self.server.server_port
}
self.wfile.write(json.dumps(response).encode())
return
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
response = {
'message':
f'Hello from backend on port {self.server.server_port}!',
'port': self.server.server_port,
'path': self.path,
'method': 'GET'
}
self.wfile.write(json.dumps(response, indent = 2).encode())
def do_POST(self):
content_length = int(self.headers.get('Content-Length', 0))
body = self.rfile.read(content_length)
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
response = {
'message': 'Received POST',
'port': self.server.server_port,
'path': self.path,
'method': 'POST',
'body_length': content_length
}
self.wfile.write(json.dumps(response, indent = 2).encode())
def log_message(self, format, *args):
print(f"[BACKEND:{self.server.server_port}] {format % args}")
if __name__ == '__main__':
if len(sys.argv) < 2:
print("Usage: test_backend_multi.py <port>")
sys.exit(1)
port = int(sys.argv[1])
server = HTTPServer(('localhost', port), TestHandler)
print(f'Test backend running on http://localhost:{port}')
server.serve_forever()