update: 补充系统接口的数据模型定义

main
chenzhirong 4 months ago
parent 521bf98c56
commit ec16a62ee1

@ -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

@ -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
@ -12,12 +13,12 @@ router = APIRouter(prefix='/monitor', tags=["缓存监控服务"])
@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()
)

@ -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),
}
})

Loading…
Cancel
Save