Skip to content

Commit

Permalink
Fix server monitor io blocking (#404)
Browse files Browse the repository at this point in the history
  • Loading branch information
wu-clan authored Sep 5, 2024
1 parent 24528e6 commit 4f5c5c2
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
12 changes: 7 additions & 5 deletions backend/app/admin/api/v1/monitor/server.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from fastapi import APIRouter, Depends
from starlette.concurrency import run_in_threadpool

from backend.common.response.response_schema import ResponseModel, response_base
from backend.common.security.jwt import DependsJwtAuth
Expand All @@ -20,10 +21,11 @@
)
async def get_server_info() -> ResponseModel:
data = {
'cpu': server_info.get_cpu_info(),
'mem': server_info.get_mem_info(),
'sys': server_info.get_sys_info(),
'disk': server_info.get_disk_info(),
'service': server_info.get_service_info(),
# 扔到线程池,避免阻塞
'cpu': await run_in_threadpool(server_info.get_cpu_info),
'mem': await run_in_threadpool(server_info.get_mem_info),
'sys': await run_in_threadpool(server_info.get_sys_info),
'disk': await run_in_threadpool(server_info.get_disk_info),
'service': await run_in_threadpool(server_info.get_service_info),
}
return response_base.success(data=data)
9 changes: 7 additions & 2 deletions backend/utils/server_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def fmt_timedelta(td: timedelta) -> str:
@staticmethod
def get_cpu_info() -> dict:
"""获取 CPU 信息"""
cpu_info = {'usage': round(psutil.cpu_percent(interval=1, percpu=False), 2)} # %
cpu_info = {'usage': round(psutil.cpu_percent(percpu=False), 2)} # %

# 检查是否是 Apple M系列芯片
if platform.system() == 'Darwin' and 'arm' in platform.machine().lower():
Expand Down Expand Up @@ -101,7 +101,12 @@ def get_sys_info() -> dict:
ip = sk.getsockname()[0]
except socket.gaierror:
ip = '127.0.0.1'
return {'name': socket.gethostname(), 'ip': ip, 'os': platform.system(), 'arch': platform.machine()}
return {
'name': socket.gethostname(),
'ip': ip,
'os': platform.system(),
'arch': platform.machine(),
}

@staticmethod
def get_disk_info() -> List[dict]:
Expand Down

0 comments on commit 4f5c5c2

Please sign in to comment.