from fastapi import FastAPI, Request from redis import Redis from rq import Queue from runner import run_java app = FastAPI(title="Safe Java Runner") # Connect to Redis redis_conn = Redis(host="localhost", port=6379) queue = Queue(connection=redis_conn) @app.post("/run") async def submit_code(request: Request): data = await request.json() code = data.get("code", "") if not code.strip(): return {"status": "error", "message": "No code provided"} job = queue.enqueue(run_java, code) return {"status": "queued", "job_id": job.id} @app.get("/result/{job_id}") async def get_result(job_id: str): from rq.job import Job try: job = Job.fetch(job_id, connection=redis_conn) except Exception: return {"status": "error", "message": "Job not found"} if job.is_finished: return {"status": "finished", "result": job.result} elif job.is_failed: return {"status": "failed", "error": str(job.exc_info)} else: return {"status": "running"}