|
|
|
|
@ -7,7 +7,8 @@ import traceback
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
USER_NAME = "yanguangshaonian"
|
|
|
|
|
USER_NAME = "ubuntu"
|
|
|
|
|
CGROUP_PATH = "/sys/fs/cgroup/rocker"
|
|
|
|
|
ROCKER_PATH = f"/home/{USER_NAME}/rocker/target/debug/rocker"
|
|
|
|
|
HANDLER_FILE = "handler.py"
|
|
|
|
|
HANDLER_CODE = ""
|
|
|
|
|
@ -20,7 +21,7 @@ def main():
|
|
|
|
|
code = request.json.get("code", "")
|
|
|
|
|
language = request.json.get("language", "")
|
|
|
|
|
_id = str(random.randint(8000_0000, 9000_0000))
|
|
|
|
|
resp = {"msg": "", code: "", "id": _id}
|
|
|
|
|
resp = {"msg": "", "code": code, "id": _id, "rt": 0.0}
|
|
|
|
|
|
|
|
|
|
if len(code) > 1_0000:
|
|
|
|
|
resp["msg"] = "代码过长"
|
|
|
|
|
@ -34,6 +35,7 @@ def main():
|
|
|
|
|
with open(f"{user_path}/{HANDLER_FILE}", "w") as f:
|
|
|
|
|
f.write(HANDLER_CODE)
|
|
|
|
|
|
|
|
|
|
starat = time.time()
|
|
|
|
|
try:
|
|
|
|
|
_ = subprocess.run(["sudo", ROCKER_PATH,
|
|
|
|
|
"--id", _id,
|
|
|
|
|
@ -46,7 +48,18 @@ def main():
|
|
|
|
|
resp["msg"] += f"{traceback.format_exc()}\n"
|
|
|
|
|
print(e)
|
|
|
|
|
|
|
|
|
|
time.sleep(3)
|
|
|
|
|
# 20s 超时
|
|
|
|
|
procs_path = f"{CGROUP_PATH}/{_id}/cgroup.procs"
|
|
|
|
|
for _ in range(2000):
|
|
|
|
|
time.sleep(0.01)
|
|
|
|
|
try:
|
|
|
|
|
with open(procs_path) as f:
|
|
|
|
|
procs = [proc for proc in f.read().split("\n") if proc != ""]
|
|
|
|
|
if len(procs) == 0:
|
|
|
|
|
break
|
|
|
|
|
except Exception as e:
|
|
|
|
|
break
|
|
|
|
|
resp["rt"] = time.time() - starat
|
|
|
|
|
|
|
|
|
|
# 读取文件
|
|
|
|
|
try:
|
|
|
|
|
@ -61,6 +74,7 @@ def main():
|
|
|
|
|
subprocess.run(["sudo", ROCKER_PATH,
|
|
|
|
|
"--rm", _id])
|
|
|
|
|
subprocess.run(["sudo", "rm", "-rf", user_path])
|
|
|
|
|
|
|
|
|
|
return resp
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|