|
"""Utilities for getting system resource statistics."""
|
|
|
|
import time
|
|
|
|
import psutil
|
|
|
|
|
|
def get_system_stats() -> dict:
|
|
"""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()
|
|
|
|
process.cpu_percent()
|
|
|
|
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('/')
|
|
|
|
|
|
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),
|
|
},
|
|
}
|
|
|