dev #10
|
@ -1,5 +1,6 @@
|
|||
import socket
|
||||
from pathlib import Path
|
||||
from typing import List, Optional
|
||||
from typing import List
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
@ -25,4 +26,4 @@ class Config(BaseModel):
|
|||
groups: Groups = Groups()
|
||||
root: Path = Path(".")
|
||||
path: Path = Path("repo.toml")
|
||||
grading_repo_name: Optional[str] = None
|
||||
grading_repo_name: str = f"{socket.gethostname().split('-')[0]}-joj"
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from joj3_config_generator.models import joj1, task
|
||||
from joj3_config_generator.models.common import Memory, Time
|
||||
from joj3_config_generator.models.const import DEFAULT_CPU_LIMIT, DEFAULT_MEMORY_LIMIT
|
||||
|
||||
jon-lee marked this conversation as resolved
Outdated
|
||||
|
||||
def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage:
|
||||
|
@ -10,10 +9,7 @@ def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage:
|
|||
task.Stage(
|
||||
score=case.score,
|
||||
command=case.execute_args if case.execute_args else "",
|
||||
limit=task.Limit(
|
||||
cpu=Time(case.time) if case.time else DEFAULT_CPU_LIMIT,
|
||||
mem=(Memory(case.memory) if case.memory else DEFAULT_MEMORY_LIMIT),
|
||||
),
|
||||
limit=task.Limit(cpu=Time(case.time), mem=Memory(case.memory)),
|
||||
)
|
||||
)
|
||||
for i, case in enumerate(joj1_config.cases):
|
||||
|
@ -24,16 +20,8 @@ def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage:
|
|||
parsers=["diff", "result-status"],
|
||||
score=100,
|
||||
limit=task.Limit(
|
||||
cpu=(
|
||||
Time(joj1_config.cases[0].time)
|
||||
if joj1_config.cases[0].time is not None
|
||||
else DEFAULT_CPU_LIMIT
|
||||
),
|
||||
mem=(
|
||||
Memory(joj1_config.cases[0].memory)
|
||||
if joj1_config.cases[0].memory is not None
|
||||
else DEFAULT_MEMORY_LIMIT
|
||||
),
|
||||
cpu=Time(joj1_config.cases[0].time),
|
||||
mem=Memory(joj1_config.cases[0].memory),
|
||||
),
|
||||
cases={f"case{i}": cases_conf[i] for i, _ in enumerate(cases_conf)},
|
||||
) # TODO: no strong pattern match here, use dict instead
|
||||
|
|
|
@ -1,28 +1,20 @@
|
|||
import hashlib
|
||||
import shlex
|
||||
import socket
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
from joj3_config_generator.models import repo, result
|
||||
|
||||
|
||||
def get_grading_repo_name(repo_conf: repo.Config) -> str:
|
||||
host_name = "ece280"
|
||||
host_name = socket.gethostname()
|
||||
grading_repo_name = (
|
||||
repo_conf.grading_repo_name
|
||||
if repo_conf.grading_repo_name is not None
|
||||
else f"{host_name.split('-')[0]}-joj"
|
||||
)
|
||||
return grading_repo_name
|
||||
|
||||
|
||||
def get_teapot_stage(repo_conf: repo.Config) -> result.StageDetail:
|
||||
args_ = ""
|
||||
args_ = (
|
||||
args_
|
||||
+ f"/usr/local/bin/joint-teapot joj3-all-env /home/tt/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name(repo_conf)} --max-total-score {repo_conf.max_total_score}"
|
||||
)
|
||||
args = [
|
||||
"/usr/local/bin/joint-teapot",
|
||||
jon-lee marked this conversation as resolved
Outdated
张泊明518370910136
commented
make it a field in repo.toml, if it is unset, then use make it a field in repo.toml, if it is unset, then use `socket.gethostname`. We set this value to pass the test.
李衍志523370910113
commented
resolved. resolved.
|
||||
"joj3-all-env",
|
||||
"/home/tt/.config/teapot/teapot.env",
|
||||
"--grading-repo-name",
|
||||
repo_conf.grading_repo_name,
|
||||
"--max-total-score",
|
||||
str(repo_conf.max_total_score),
|
||||
]
|
||||
|
||||
stage_conf = result.StageDetail(
|
||||
name="teapot",
|
||||
|
@ -30,7 +22,7 @@ def get_teapot_stage(repo_conf: repo.Config) -> result.StageDetail:
|
|||
name="local",
|
||||
with_=result.ExecutorWith(
|
||||
default=result.Cmd(
|
||||
args=shlex.split(args_),
|
||||
args=args,
|
||||
env=["LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"],
|
||||
),
|
||||
cases=[],
|
||||
|
@ -41,49 +33,37 @@ def get_teapot_stage(repo_conf: repo.Config) -> result.StageDetail:
|
|||
return stage_conf
|
||||
|
||||
|
||||
def get_healthcheck_args(repo_conf: repo.Config) -> str:
|
||||
repoSize = repo_conf.max_size
|
||||
immutable = repo_conf.files.immutable
|
||||
repo_size = f"-repoSize={str(repoSize)} "
|
||||
required_files = repo_conf.files.required
|
||||
|
||||
for i, meta in enumerate(required_files):
|
||||
required_files[i] = f"-meta={meta} "
|
||||
|
||||
immutable_files = "-checkFileNameList="
|
||||
for i, name in enumerate(immutable):
|
||||
if i == len(immutable) - 1:
|
||||
immutable_files = immutable_files + name + " "
|
||||
else:
|
||||
immutable_files = immutable_files + name + ","
|
||||
args = "/usr/local/bin/repo-health-checker -root=. "
|
||||
args = args + repo_size
|
||||
for meta in required_files:
|
||||
args = args + meta
|
||||
|
||||
args = args + get_hash(immutable, repo_conf)
|
||||
|
||||
args = args + immutable_files
|
||||
|
||||
return args
|
||||
def get_healthcheck_args(repo_conf: repo.Config) -> List[str]:
|
||||
return [
|
||||
"/usr/local/bin/repo-health-checker",
|
||||
"-root=.",
|
||||
f"-repoSize={str(repo_conf.max_size)}",
|
||||
*[f"-meta={meta}" for meta in repo_conf.files.required],
|
||||
get_hash(repo_conf),
|
||||
f"-checkFileNameList={','.join(repo_conf.files.immutable)}",
|
||||
]
|
||||
|
||||
|
||||
def get_debug_args(repo_conf: repo.Config) -> str:
|
||||
args = ""
|
||||
args = (
|
||||
args
|
||||
+ f"/usr/local/bin/joint-teapot joj3-check-env /home/tt/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name(repo_conf)} --group-config "
|
||||
)
|
||||
def get_debug_args(repo_conf: repo.Config) -> List[str]:
|
||||
group_config = ""
|
||||
for i, name in enumerate(repo_conf.groups.name):
|
||||
group_config = (
|
||||
group_config
|
||||
+ f"{name}={repo_conf.groups.max_count[i]}:{repo_conf.groups.time_period_hour[i]},"
|
||||
+ f"{name}="
|
||||
+ f"{repo_conf.groups.max_count[i]}:"
|
||||
+ f"{repo_conf.groups.time_period_hour[i]},"
|
||||
jon-lee marked this conversation as resolved
Outdated
张泊明518370910136
commented
why not why not `args = "hc -root=. "`
李衍志523370910113
commented
resolved. resolved.
|
||||
)
|
||||
# default value hardcoded
|
||||
group_config = group_config + "=100:24"
|
||||
args = args + group_config
|
||||
return args
|
||||
return [
|
||||
jon-lee marked this conversation as resolved
Outdated
张泊明518370910136
commented
do we need that default? do we need that default?
李衍志523370910113
commented
what is the situation internally in JOJ3? I just added that blindly when I reached that stage. Overall I think 100 times per day should be a reasonable and safe default? considering that there may be group works and due date what is the situation internally in JOJ3? I just added that blindly when I reached that stage. Overall I think 100 times per day should be a reasonable and safe default? considering that there may be group works and due date
张泊明518370910136
commented
They can manually add it if needed. Or just move it to the model default. They can manually add it if needed. Or just move it to the model default.
李衍志523370910113
commented
removed. removed.
|
||||
"/usr/local/bin/joint-teapot",
|
||||
"joj3-check-env",
|
||||
"/home/tt/.config/teapot/teapot.env",
|
||||
"--grading-repo-name",
|
||||
repo_conf.grading_repo_name,
|
||||
"--group-config",
|
||||
group_config,
|
||||
]
|
||||
|
||||
|
||||
def get_healthcheck_config(repo_conf: repo.Config) -> result.StageDetail:
|
||||
|
@ -96,10 +76,10 @@ def get_healthcheck_config(repo_conf: repo.Config) -> result.StageDetail:
|
|||
default=result.Cmd(),
|
||||
cases=[
|
||||
result.OptionalCmd(
|
||||
args=shlex.split(get_healthcheck_args(repo_conf)),
|
||||
args=get_healthcheck_args(repo_conf),
|
||||
),
|
||||
result.OptionalCmd(
|
||||
args=shlex.split(get_debug_args(repo_conf)),
|
||||
args=get_debug_args(repo_conf),
|
||||
env=["LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"],
|
||||
),
|
||||
],
|
||||
|
@ -121,24 +101,11 @@ def calc_sha256sum(file_path: Path) -> str:
|
|||
return sha256_hash.hexdigest()
|
||||
|
||||
|
||||
def get_hash(
|
||||
immutable_files: list[str], repo_conf: repo.Config
|
||||
) -> str: # input should be a list
|
||||
repo_path = (repo_conf.root / repo_conf.path).parent
|
||||
file_path = Path(f"{repo_path}/immutable_files")
|
||||
immutable_hash = []
|
||||
immutable_files_ = []
|
||||
for i, file in enumerate(immutable_files):
|
||||
immutable_files_.append(file_path.joinpath(file.rsplit("/", 1)[-1]))
|
||||
|
||||
for i, file_ in enumerate(immutable_files_):
|
||||
immutable_hash.append(calc_sha256sum(file_))
|
||||
|
||||
hash_check = "-checkFileSumList="
|
||||
|
||||
for i, file in enumerate(immutable_hash):
|
||||
if i == len(immutable_hash) - 1:
|
||||
hash_check = hash_check + file + " "
|
||||
else:
|
||||
hash_check = hash_check + file + ","
|
||||
return hash_check
|
||||
def get_hash(repo_conf: repo.Config) -> str: # input should be a list
|
||||
base_dir = (repo_conf.root / repo_conf.path).parent
|
||||
immutable_dir = base_dir / "immutable_files"
|
||||
immutable_files = [
|
||||
immutable_dir / Path(file).name for file in repo_conf.files.immutable
|
||||
]
|
||||
immutable_hash = [calc_sha256sum(file) for file in immutable_files]
|
||||
return f"-checkFileSumList={','.join(immutable_hash)}"
|
||||
|
|
Loading…
Reference in New Issue
Block a user
is it added to pyproject.toml?
now added