Libra-1995 commited on
Commit
79ef841
·
1 Parent(s): d39f16b

update code

Browse files
Files changed (2) hide show
  1. Dockerfile +4 -1
  2. web_server.py +65 -7
Dockerfile CHANGED
@@ -15,7 +15,6 @@ ENV PATH /app/miniconda/bin:$PATH
15
 
16
  SHELL ["conda", "run","--no-capture-output", "-p","/app/env", "/bin/bash", "-c"]
17
 
18
- COPY --chown=1000:1000 ./test_server.py /app/test_server.py
19
  COPY --chown=1000:1000 ./web_server.py /app/web_server.py
20
  COPY --chown=1000:1000 ./docker/web_server_config/scene-0383-medium-00.yaml /app/docker/web_server_config/scene-0383-medium-00.yaml
21
  COPY --chown=1000:1000 ./download_pre_datas.py /app/download_pre_datas.py
@@ -27,6 +26,10 @@ ENV TORCH_CUDA_ARCH_LIST "7.5"
27
  ENV http_proxy=
28
  ENV https_proxy=
29
 
 
 
 
 
30
  RUN ./.pixi/envs/default/bin/python /app/download_pre_datas.py
31
 
32
  CMD ["./.pixi/envs/default/bin/python", "web_server.py"]
 
15
 
16
  SHELL ["conda", "run","--no-capture-output", "-p","/app/env", "/bin/bash", "-c"]
17
 
 
18
  COPY --chown=1000:1000 ./web_server.py /app/web_server.py
19
  COPY --chown=1000:1000 ./docker/web_server_config/scene-0383-medium-00.yaml /app/docker/web_server_config/scene-0383-medium-00.yaml
20
  COPY --chown=1000:1000 ./download_pre_datas.py /app/download_pre_datas.py
 
26
  ENV http_proxy=
27
  ENV https_proxy=
28
 
29
+ RUN ./.pixi/envs/default/bin/python3 -m ensurepip
30
+
31
+ RUN ./.pixi/envs/default/bin/python3 -m pip install psutil
32
+
33
  RUN ./.pixi/envs/default/bin/python /app/download_pre_datas.py
34
 
35
  CMD ["./.pixi/envs/default/bin/python", "web_server.py"]
web_server.py CHANGED
@@ -7,23 +7,26 @@ import time
7
  import io
8
  import enum
9
  import hugsim_env
 
10
  from collections import deque, OrderedDict
11
  from datetime import datetime
12
- from typing import Any, Dict
13
  sys.path.append(os.getcwd())
14
 
15
- from fastapi import FastAPI, Body, Header, Depends, HTTPException
16
  from fastapi.responses import HTMLResponse, Response
17
  from omegaconf import OmegaConf
18
- from huggingface_hub import HfApi, hf_hub_download
19
  import open3d as o3d
20
  import numpy as np
21
  import gymnasium
22
  import uvicorn
 
23
 
24
  from sim.utils.sim_utils import traj2control, traj_transform_to_global
25
  from sim.utils.score_calculator import hugsim_evaluate
26
 
 
27
  HF_TOKEN = os.getenv('HF_TOKEN', None)
28
  COMPETITION_ID = os.getenv('COMPETITION_ID', None)
29
 
@@ -38,6 +41,38 @@ class SubmissionStatus(enum.Enum):
38
  FAILED = 4
39
 
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  def get_token_info(token: str) -> Dict[str, Any]:
42
  token_info_path = hf_api.hf_hub_download(
43
  repo_id=COMPETITION_ID,
@@ -276,9 +311,15 @@ _result_dict= FifoDict(max_size=100)
276
  env_manager = EnvHandlerManager()
277
 
278
 
279
- def _get_env_handler(auth_token: str = Header(...)) -> EnvHandler:
 
 
 
 
 
 
280
  try:
281
- token_info = get_token_info(auth_token)
282
  except Exception:
283
  raise HTTPException(status_code=401)
284
  return env_manager.get_env_handler(token_info["submission_id"])
@@ -376,13 +417,30 @@ def main_page_endpoint(env_handler: EnvHandler = Depends(_get_env_handler)):
376
 
377
 
378
  @app.get("/")
379
- def main_page_endpoint():
 
 
380
  """
381
  Main page endpoint to display logs.
382
  """
 
 
 
 
 
 
 
 
 
383
  html_content = f"""
384
  <html>
385
- running
 
 
 
 
 
 
386
  </html>
387
  """
388
  return HTMLResponse(content=html_content)
 
7
  import io
8
  import enum
9
  import hugsim_env
10
+ import subprocess as sp
11
  from collections import deque, OrderedDict
12
  from datetime import datetime
13
+ from typing import Any, Dict, Optional
14
  sys.path.append(os.getcwd())
15
 
16
+ from fastapi import FastAPI, Body, Header, Depends, HTTPException, Query
17
  from fastapi.responses import HTMLResponse, Response
18
  from omegaconf import OmegaConf
19
+ from huggingface_hub import HfApi
20
  import open3d as o3d
21
  import numpy as np
22
  import gymnasium
23
  import uvicorn
24
+ import psutil
25
 
26
  from sim.utils.sim_utils import traj2control, traj_transform_to_global
27
  from sim.utils.score_calculator import hugsim_evaluate
28
 
29
+ ADMIN_TOKEN = os.getenv('ADMIN_TOKEN', None)
30
  HF_TOKEN = os.getenv('HF_TOKEN', None)
31
  COMPETITION_ID = os.getenv('COMPETITION_ID', None)
32
 
 
41
  FAILED = 4
42
 
43
 
44
+ def get_gpu_memory():
45
+ output_to_list = lambda x: x.decode('ascii').split('\n')[:-1]
46
+ COMMAND = "nvidia-smi --query-gpu=memory.used --format=csv"
47
+ try:
48
+ memory_use_info = output_to_list(sp.check_output(COMMAND.split(),stderr=sp.STDOUT))[1:]
49
+ except sp.CalledProcessError as e:
50
+ raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
51
+ memory_use_values = [int(x.split()[0]) for x in memory_use_info]
52
+ return memory_use_values
53
+
54
+
55
+ def get_system_status():
56
+ cpu_percent = psutil.cpu_percent(interval=1)
57
+ cpu_count = psutil.cpu_count(logical=True)
58
+
59
+ virtual_mem = psutil.virtual_memory()
60
+ total_mem = virtual_mem.total / (1024 ** 3)
61
+ used_mem = virtual_mem.used / (1024 ** 3)
62
+ mem_percent = virtual_mem.percent
63
+
64
+ system_info = {
65
+ "cpu_percent": cpu_percent,
66
+ "cpu_count": cpu_count,
67
+ "total_memory_gb": round(total_mem, 2),
68
+ "used_memory_gb": round(used_mem, 2),
69
+ "memory_percent": mem_percent,
70
+ "gpus": get_gpu_memory(),
71
+ }
72
+
73
+ return system_info
74
+
75
+
76
  def get_token_info(token: str) -> Dict[str, Any]:
77
  token_info_path = hf_api.hf_hub_download(
78
  repo_id=COMPETITION_ID,
 
311
  env_manager = EnvHandlerManager()
312
 
313
 
314
+ def _get_env_handler(
315
+ auth_token: Optional[str] = Header(None),
316
+ query_token: Optional[str] = Query(None)
317
+ ) -> EnvHandler:
318
+ token = auth_token or query_token
319
+ if not token:
320
+ raise HTTPException(status_code=401, detail="Authorization token is required.")
321
  try:
322
+ token_info = get_token_info(token)
323
  except Exception:
324
  raise HTTPException(status_code=401)
325
  return env_manager.get_env_handler(token_info["submission_id"])
 
417
 
418
 
419
  @app.get("/")
420
+ def main_page_endpoint(
421
+ admin_token: Optional[str] = Query(None),
422
+ ):
423
  """
424
  Main page endpoint to display logs.
425
  """
426
+ if admin_token != ADMIN_TOKEN:
427
+ html_content = f"""
428
+ <html>
429
+ running
430
+ </html>
431
+ """
432
+ return HTMLResponse(content=html_content)
433
+
434
+ system_info = get_system_status()
435
  html_content = f"""
436
  <html>
437
+ <head>
438
+ <title>System Status</title>
439
+ </head>
440
+ <body>
441
+ <h1>System Status</h1>
442
+ <pre>{json.dumps(system_info, indent=4)}</pre>
443
+ </body>
444
  </html>
445
  """
446
  return HTMLResponse(content=html_content)