Spaces:
Paused
Paused
| from fastapi import FastAPI, Request | |
| from datetime import datetime | |
| from zoneinfo import ZoneInfo | |
| import socket | |
| import urllib.request | |
| import psutil | |
| app = FastAPI() | |
| async def system_info(request: Request): | |
| # 使用 Asia/Shanghai 时区 | |
| current_time = datetime.now(ZoneInfo("Asia/Shanghai")).strftime("%Y-%m-%d %H:%M:%S") | |
| # 获取客户端 IP 地址 | |
| client_host = request.client.host | |
| # 获取服务器端内网 IP 地址 | |
| server_host = socket.gethostbyname(socket.gethostname()) | |
| # 获取服务器端公网 IP 地址 | |
| try: | |
| public_ip = urllib.request.urlopen("https://api.ipify.org").read().decode("utf-8") | |
| except Exception: | |
| public_ip = "Unavailable" | |
| # 获取系统资源信息 | |
| memory = psutil.virtual_memory() | |
| disk = psutil.disk_usage('/') | |
| cpu_percent = psutil.cpu_percent(interval=1) | |
| cpu_times = psutil.cpu_times_percent(interval=1) | |
| # CPU 温度(不同平台支持情况不同) | |
| try: | |
| temps = psutil.sensors_temperatures() | |
| cpu_temp = temps.get("coretemp", [{}])[0].current if "coretemp" in temps else "Unavailable" | |
| except Exception: | |
| cpu_temp = "Unavailable" | |
| return { | |
| "message": "Hello World!", | |
| "timestamp": current_time, | |
| "client_ip": client_host, | |
| "server_ip": server_host, | |
| "public_ip": public_ip, | |
| "status": "success", | |
| "system": { | |
| "memory_total_MB": round(memory.total / 1024 / 1024, 2), | |
| "memory_available_MB": round(memory.available / 1024 / 1024, 2), | |
| "disk_total_GB": round(disk.total / 1024 / 1024 / 1024, 2), | |
| "disk_free_GB": round(disk.free / 1024 / 1024 / 1024, 2), | |
| "cpu_percent": cpu_percent, | |
| "cpu_times_percent": cpu_times._asdict(), | |
| "cpu_temperature": cpu_temp | |
| } | |
| } | |