mirror of https://github.com/dapr/quickstarts.git
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
import os
|
|
import json
|
|
import traceback
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
from urllib.parse import urlparse, parse_qs
|
|
|
|
class DroidJob:
|
|
def __init__(self, droid: str, task: str):
|
|
self.droid = droid
|
|
self.task = task
|
|
|
|
def set_droid_job(decoded_value: str) -> DroidJob:
|
|
# Remove newlines from decoded value and split into droid and task
|
|
droid_str = decoded_value.replace('\n', '')
|
|
droid_array = droid_str.split(':')
|
|
return DroidJob(droid_array[0], droid_array[1])
|
|
|
|
class JobHandler(BaseHTTPRequestHandler):
|
|
def _send_response(self, status_code: int, message: str = ""):
|
|
self.send_response(status_code)
|
|
self.send_header('Content-type', 'application/json')
|
|
self.end_headers()
|
|
if message:
|
|
self.wfile.write(json.dumps({"message": message}).encode('utf-8'))
|
|
|
|
def do_POST(self):
|
|
print('Received job request...', flush=True)
|
|
|
|
try:
|
|
# Check if path starts with /job/
|
|
if not self.path.startswith('/job/'):
|
|
self._send_response(404, "Not Found")
|
|
return
|
|
|
|
# Read request body
|
|
content_length = int(self.headers.get('Content-Length', 0))
|
|
raw_data = self.rfile.read(content_length).decode('utf-8')
|
|
|
|
# Parse outer JSON data
|
|
job_data = json.loads(raw_data)
|
|
|
|
# Extract value directly from the job data
|
|
value = job_data.get('value', '')
|
|
|
|
# Create DroidJob from value
|
|
droid_job = set_droid_job(value)
|
|
|
|
print("Starting droid: " + droid_job.droid, flush=True)
|
|
print("Executing maintenance job: " + droid_job.task, flush=True)
|
|
|
|
self._send_response(200)
|
|
|
|
except Exception as e:
|
|
print("Error processing job request:", flush= True)
|
|
print(traceback.format_exc())
|
|
self._send_response(400, f"Error processing job: {str(e)}")
|
|
|
|
def run_server(port: int):
|
|
server_address = ('', port)
|
|
httpd = HTTPServer(server_address, JobHandler)
|
|
print("Server started on port " + str(port), flush=True)
|
|
httpd.serve_forever()
|
|
|
|
if __name__ == '__main__':
|
|
app_port = int(os.getenv('APP_PORT', '6200'))
|
|
run_server(app_port) |