mirror of
https://github.com/QingdaoU/JudgeServer.git
synced 2024-12-28 21:31:43 +00:00
fix project structure
This commit is contained in:
parent
a58f7210f6
commit
ff160cbbef
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,7 +7,6 @@ __pycache__/
|
|||||||
.Python
|
.Python
|
||||||
env/
|
env/
|
||||||
bin/
|
bin/
|
||||||
build/
|
|
||||||
develop-eggs/
|
develop-eggs/
|
||||||
dist/
|
dist/
|
||||||
eggs/
|
eggs/
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
FROM ubuntu:14.04
|
FROM ubuntu:14.04
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
RUN rm /etc/apt/sources.list
|
RUN rm /etc/apt/sources.list
|
||||||
COPY deploy/sources.list /etc/apt/
|
COPY sources.list /etc/apt/
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
RUN apt-get -y install software-properties-common python-software-properties python python-dev gcc g++ git libtool python-pip libseccomp-dev cmake openjdk-7-jdk
|
RUN apt-get -y install software-properties-common python-software-properties python python-dev gcc g++ git libtool python-pip libseccomp-dev cmake openjdk-7-jdk
|
||||||
RUN cd /tmp && git clone https://github.com/QingdaoU/Judger && cd Judger && git checkout newnew && mkdir build && cd build && cmake .. && make && make install && cd ../bindings/Python && python setup.py install
|
RUN cd /tmp && git clone https://github.com/QingdaoU/Judger && cd Judger && git checkout newnew && mkdir build && cd build && cmake .. && make && make install && cd ../bindings/Python && python setup.py install
|
||||||
RUN pip install psutil gunicorn web.py requests
|
RUN pip install psutil gunicorn web.py requests
|
||||||
RUN mkdir -p /judger_run /test_case /log /code
|
RUN mkdir -p /judger_run /test_case /log /code
|
||||||
COPY deploy/java_policy /etc
|
COPY java_policy /etc
|
||||||
RUN pip install futures psutil gunicorn web.py
|
RUN pip install futures psutil gunicorn web.py
|
||||||
RUN useradd -r compiler
|
RUN useradd -r compiler
|
||||||
HEALTHCHECK --interval=5s --retries=3 CMD python /code/service.py
|
HEALTHCHECK --interval=5s --retries=3 CMD python /code/service.py
|
||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
CMD chown compiler:compiler /spj; echo 0 > /tmp/counter; gunicorn --workers 4 --threads 4 --error-logfile /log/gunicorn.log --bind 0.0.0.0:8080 server:wsgiapp
|
CMD /bin/bash /code/run.sh
|
@ -18,7 +18,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- /data/JudgeServer/tests/test_case:/test_case:ro
|
- /data/JudgeServer/tests/test_case:/test_case:ro
|
||||||
- /data/log:/log
|
- /data/log:/log
|
||||||
- /data/JudgeServer:/code:ro
|
- /data/JudgeServer/server:/code:ro
|
||||||
environment:
|
environment:
|
||||||
- judger_token=token
|
- judger_token=token
|
||||||
- service_discovery_url=https://virusdefender.net/service.php
|
- service_discovery_url=https://virusdefender.net/service.php
|
||||||
|
@ -3,7 +3,6 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
|
||||||
|
|
||||||
import _judger
|
import _judger
|
||||||
|
|
4
server/run.sh
Normal file
4
server/run.sh
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
chown compiler:compiler /spj
|
||||||
|
echo 0 > /tmp/counter
|
||||||
|
gunicorn --workers 4 --threads 4 --error-logfile /log/gunicorn.log --bind 0.0.0.0:8080 server:wsgiapp
|
@ -13,7 +13,7 @@ from compiler import Compiler
|
|||||||
from config import JUDGER_WORKSPACE_BASE, SPJ_SRC_DIR, SPJ_EXE_DIR, COUNTER_FILE_PATH
|
from config import JUDGER_WORKSPACE_BASE, SPJ_SRC_DIR, SPJ_EXE_DIR, COUNTER_FILE_PATH
|
||||||
from exception import TokenVerificationFailed, CompileError, SPJCompileError,JudgeClientError
|
from exception import TokenVerificationFailed, CompileError, SPJCompileError,JudgeClientError
|
||||||
from judge_client import JudgeClient
|
from judge_client import JudgeClient
|
||||||
from utils import server_info, get_token, logger, TaskCounter
|
from utils import server_info, logger, TaskCounter, token
|
||||||
|
|
||||||
|
|
||||||
DEBUG = os.environ.get("judger_debug") == "1"
|
DEBUG = os.environ.get("judger_debug") == "1"
|
||||||
@ -49,13 +49,6 @@ class JudgeServer(object):
|
|||||||
data["action"] = "pong"
|
data["action"] = "pong"
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@property
|
|
||||||
def _token(self):
|
|
||||||
t = get_token()
|
|
||||||
if not t:
|
|
||||||
raise TokenVerificationFailed("token not set")
|
|
||||||
return hashlib.sha256(t).hexdigest()
|
|
||||||
|
|
||||||
def judge(self, language_config, src, max_cpu_time, max_memory, test_case_id,
|
def judge(self, language_config, src, max_cpu_time, max_memory, test_case_id,
|
||||||
spj_version=None, spj_config=None, spj_compile_config=None, spj_src=None, output=False):
|
spj_version=None, spj_config=None, spj_compile_config=None, spj_src=None, output=False):
|
||||||
# init
|
# init
|
||||||
@ -118,9 +111,9 @@ class JudgeServer(object):
|
|||||||
return "success"
|
return "success"
|
||||||
|
|
||||||
def POST(self):
|
def POST(self):
|
||||||
token = web.ctx.env.get("HTTP_X_JUDGE_SERVER_TOKEN", None)
|
_token = web.ctx.env.get("HTTP_X_JUDGE_SERVER_TOKEN", None)
|
||||||
try:
|
try:
|
||||||
if token != self._token:
|
if _token != token:
|
||||||
raise TokenVerificationFailed("invalid token")
|
raise TokenVerificationFailed("invalid token")
|
||||||
if web.data():
|
if web.data():
|
||||||
try:
|
try:
|
||||||
@ -164,9 +157,6 @@ urls = (
|
|||||||
if DEBUG:
|
if DEBUG:
|
||||||
logger.info("DEBUG=ON")
|
logger.info("DEBUG=ON")
|
||||||
|
|
||||||
# check token
|
|
||||||
JudgeServer()._token
|
|
||||||
|
|
||||||
app = web.application(urls, globals())
|
app = web.application(urls, globals())
|
||||||
wsgiapp = app.wsgifunc()
|
wsgiapp = app.wsgifunc()
|
||||||
|
|
@ -6,7 +6,7 @@ import requests
|
|||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from exception import JudgeServiceError
|
from exception import JudgeServiceError
|
||||||
from utils import server_info, get_token, logger
|
from utils import server_info, logger, token
|
||||||
|
|
||||||
|
|
||||||
class JudgeService(object):
|
class JudgeService(object):
|
||||||
@ -29,7 +29,7 @@ class JudgeService(object):
|
|||||||
def _request(self, data):
|
def _request(self, data):
|
||||||
try:
|
try:
|
||||||
r = requests.post(self.service_discovery_url, data=json.dumps(data),
|
r = requests.post(self.service_discovery_url, data=json.dumps(data),
|
||||||
headers={"X-JUDGE-SERVER-TOKEN": hashlib.sha256(get_token()).hexdigest(),
|
headers={"X-JUDGE-SERVER-TOKEN": token,
|
||||||
"Content-Type": "application/json"}, timeout=5).json()
|
"Content-Type": "application/json"}, timeout=5).json()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(e)
|
@ -3,11 +3,21 @@ from __future__ import unicode_literals
|
|||||||
import _judger
|
import _judger
|
||||||
import psutil
|
import psutil
|
||||||
import socket
|
import socket
|
||||||
import os
|
|
||||||
import logging
|
import logging
|
||||||
import fcntl
|
import fcntl
|
||||||
|
import hashlib
|
||||||
|
import os
|
||||||
|
|
||||||
from config import COUNTER_FILE_PATH
|
from config import COUNTER_FILE_PATH
|
||||||
|
from exception import JudgeClientError
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
handler = logging.FileHandler("/log/judge_server.log")
|
||||||
|
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
|
||||||
|
handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(handler)
|
||||||
|
logger.setLevel(logging.WARNING)
|
||||||
|
|
||||||
|
|
||||||
class TaskCounter(object):
|
class TaskCounter(object):
|
||||||
@ -48,12 +58,11 @@ def server_info():
|
|||||||
|
|
||||||
|
|
||||||
def get_token():
|
def get_token():
|
||||||
return os.environ.get("OJ_WEB_SERVER_ENV_judger_token") or os.environ.get("judger_token")
|
token = os.environ.get("OJ_WEB_SERVER_ENV_judger_token") or os.environ.get("judger_token")
|
||||||
|
if not token:
|
||||||
|
raise JudgeClientError("judger_token not set")
|
||||||
|
return token
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
token = hashlib.sha256(get_token()).hexdigest()
|
||||||
handler = logging.FileHandler("/log/judge_server.log")
|
|
||||||
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
|
|
||||||
handler.setFormatter(formatter)
|
|
||||||
logger.addHandler(handler)
|
|
||||||
logger.setLevel(logging.WARNING)
|
|
Loading…
Reference in New Issue
Block a user