diff --git a/entity/dto/monitor_dto.py b/entity/dto/monitor_dto.py new file mode 100644 index 0000000..39d9dbf --- /dev/null +++ b/entity/dto/monitor_dto.py @@ -0,0 +1,58 @@ +from typing import List + +from pydantic import BaseModel + + +class CpuInfo(BaseModel): + cpu_num: int + total: float + sys: float + used: float + wait: float + free: float + + +class SystemInfo(BaseModel): + computerName: str + computerIp: str + userDir: str + osName: str + osArch: str + + +class DiskInfo(BaseModel): + dirName: str + sysTypeName: str + typeName: str + total: str # 格式化大小,如 "1.20GB" + free: str # 格式化大小 + used: str # 格式化大小 + usage: float # 百分比 + + +class MemoryInfo(BaseModel): + total: float # GB + used: float # GB + free: float # GB + usage: float # 百分比 + + +class PythonEnvInfo(BaseModel): + name: str + version: str + home: str + inputArgs: str + total: float # MB + max: float # MB + free: float # MB + usage: float # MB + runTime: str # 格式化时间,如 "1天2小时30分钟" + startTime: str # 格式化时间 + + +class ServerInfo(BaseModel): + cpu: CpuInfo + memory: MemoryInfo + system: SystemInfo + disks: List[DiskInfo] + python: PythonEnvInfo diff --git a/router/monitor_app.py b/router/monitor_app.py index e2fac48..869fa56 100644 --- a/router/monitor_app.py +++ b/router/monitor_app.py @@ -2,6 +2,7 @@ import logging from fastapi import APIRouter +from entity.dto.monitor_dto import ServerInfo from router import unified_resp from utils.server_info_utils import ServerInfoUtils @@ -10,14 +11,14 @@ logger = logging.getLogger(__name__) router = APIRouter(prefix='/monitor', tags=["缓存监控服务"]) -@router.get('/server',summary='服务监控') +@router.get('/server', summary='服务监控') @unified_resp -def monitor_server(): +def monitor_server() -> ServerInfo: """服务器信息监控""" - return { - 'cpu': ServerInfoUtils.get_cpu_info(), - 'mem': ServerInfoUtils.get_mem_info(), - 'sys': ServerInfoUtils.get_sys_info(), - 'disk': ServerInfoUtils.get_disk_info(), - 'py': ServerInfoUtils.get_py_info(), - } + return ServerInfo( + cpu=ServerInfoUtils.get_cpu_info(), + memory=ServerInfoUtils.get_mem_info(), + system=ServerInfoUtils.get_sys_info(), + disks=ServerInfoUtils.get_disk_info(), + python=ServerInfoUtils.get_py_info() + ) diff --git a/utils/server_info_utils.py b/utils/server_info_utils.py index 2fcb26f..d2fe7ce 100644 --- a/utils/server_info_utils.py +++ b/utils/server_info_utils.py @@ -7,6 +7,7 @@ from typing import List, Any import psutil from config import get_settings +from entity.dto.monitor_dto import CpuInfo, MemoryInfo, SystemInfo, DiskInfo, PythonEnvInfo from utils.ip_utils import IpUtil @@ -50,7 +51,7 @@ class ServerInfoUtils: return res @staticmethod - def get_cpu_info() -> dict: + def get_cpu_info() -> CpuInfo: """获取CPU信息""" res = {'cpu_num': psutil.cpu_count(logical=True)} cpu_times = psutil.cpu_times() @@ -62,35 +63,35 @@ class ServerInfoUtils: res['used'] = round(cpu_times.user / total, 2) res['wait'] = round(get_attr(cpu_times, 'iowait', 0.0) / total, 2) res['free'] = round(cpu_times.idle / total, 2) - return res + return CpuInfo(**res) @staticmethod - def get_mem_info() -> dict: + def get_mem_info() -> MemoryInfo: """获取内存信息""" number = 1024 ** 3 - return { + return MemoryInfo(**{ 'total': round(psutil.virtual_memory().total / number, 2), 'used': round(psutil.virtual_memory().used / number, 2), 'free': round(psutil.virtual_memory().available / number, 2), - 'usage': round(psutil.virtual_memory().percent, 2)} + 'usage': round(psutil.virtual_memory().percent, 2)}) @staticmethod - def get_sys_info() -> dict: + def get_sys_info() -> SystemInfo: """获取服务器信息""" - return { + return SystemInfo(**{ 'computerName': IpUtil.get_host_name(), 'computerIp': IpUtil.get_host_ip(), 'userDir': os.path.dirname(os.path.abspath(os.path.join(__file__, '../..'))), 'osName': platform.system(), - 'osArch': platform.machine()} + 'osArch': platform.machine()}) @staticmethod - def get_disk_info() -> List[dict]: + def get_disk_info() -> List[DiskInfo]: """获取磁盘信息""" disk_info = [] for disk in psutil.disk_partitions(): usage = psutil.disk_usage(disk.mountpoint) - disk_info.append({ + disk_info.append(DiskInfo(**{ 'dirName': disk.mountpoint, 'sysTypeName': disk.fstype, 'typeName': disk.device, @@ -98,7 +99,7 @@ class ServerInfoUtils: 'free': ServerInfoUtils.get_size(usage.free), 'used': ServerInfoUtils.get_size(usage.used), 'usage': round(usage.percent, 2), - }) + })) return disk_info @staticmethod @@ -108,7 +109,7 @@ class ServerInfoUtils: cur_proc = psutil.Process(os.getpid()) mem_info = cur_proc.memory_info() start_dt = datetime.fromtimestamp(cur_proc.create_time()) - return { + return PythonEnvInfo(**{ 'name': 'Python', 'version': platform.python_version(), 'home': sys.executable, @@ -119,4 +120,4 @@ class ServerInfoUtils: 'usage': round(mem_info.rss / number, 2), 'runTime': ServerInfoUtils.fmt_timedelta(datetime.now() - start_dt), 'startTime': start_dt.strftime(ServerInfoUtils.datetime_fmt), - } + })