chore: better defaults and code style
This commit is contained in:
		
							parent
							
								
									6bdd689176
								
							
						
					
					
						commit
						3e252e1ff0
					
				|  | @ -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 | ||||
| 
 | ||||
| 
 | ||||
| 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", | ||||
|         "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]}," | ||||
|         ) | ||||
|     # default value hardcoded | ||||
|     group_config = group_config + "=100:24" | ||||
|     args = args + group_config | ||||
|     return args | ||||
|     return [ | ||||
|         "/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