Spaces:
Build error
Build error
"""Utilities for getting system resource statistics.""" | |
import time | |
import psutil | |
def get_system_stats() -> dict[str, object]: | |
"""Get current system resource statistics. | |
Returns: | |
dict: A dictionary containing: | |
- cpu_percent: CPU usage percentage for the current process | |
- memory: Memory usage stats (rss, vms, percent) | |
- disk: Disk usage stats (total, used, free, percent) | |
- io: I/O statistics (read/write bytes) | |
""" | |
process = psutil.Process() | |
# Get initial CPU percentage (this will return 0.0) | |
process.cpu_percent() | |
# Wait a bit and get the actual CPU percentage | |
time.sleep(0.1) | |
with process.oneshot(): | |
cpu_percent = process.cpu_percent() | |
memory_info = process.memory_info() | |
memory_percent = process.memory_percent() | |
disk_usage = psutil.disk_usage('/') | |
# Get I/O stats directly from /proc/[pid]/io to avoid psutil's field name assumptions | |
try: | |
with open(f'/proc/{process.pid}/io', 'rb') as f: | |
io_stats = {} | |
for line in f: | |
if line: | |
try: | |
name, value = line.strip().split(b': ') | |
io_stats[name.decode('ascii')] = int(value) | |
except (ValueError, UnicodeDecodeError): | |
continue | |
except (FileNotFoundError, PermissionError): | |
io_stats = {'read_bytes': 0, 'write_bytes': 0} | |
return { | |
'cpu_percent': cpu_percent, | |
'memory': { | |
'rss': memory_info.rss, | |
'vms': memory_info.vms, | |
'percent': memory_percent, | |
}, | |
'disk': { | |
'total': disk_usage.total, | |
'used': disk_usage.used, | |
'free': disk_usage.free, | |
'percent': disk_usage.percent, | |
}, | |
'io': { | |
'read_bytes': io_stats.get('read_bytes', 0), | |
'write_bytes': io_stats.get('write_bytes', 0), | |
}, | |
} | |