Files

64 lines
1.6 KiB
Python

#!/usr/bin/env python3
"""System metrics collector - outputs JSON to stdout."""
import json
import os
import shutil
def get_disk_usage():
"""Get disk usage for root filesystem."""
usage = shutil.disk_usage('/')
return {
"total": usage.total,
"used": usage.used,
"free": usage.free,
"percent_used": round(usage.used / usage.total * 100, 2)
}
def get_memory_usage():
"""Get memory usage from /proc/meminfo."""
meminfo = {}
with open('/proc/meminfo', 'r') as f:
for line in f:
parts = line.split()
key = parts[0].rstrip(':')
value = int(parts[1])
meminfo[key] = value
total = meminfo.get('MemTotal', 0) * 1024
available = meminfo.get('MemAvailable', meminfo.get('MemFree', 0)) * 1024
used = total - available
return {
"total": total,
"used": used,
"available": available,
"percent_used": round(used / total * 100, 2) if total > 0 else 0
}
def get_load_average():
"""Get system load average."""
load1, load5, load15 = os.getloadavg()
return {
"1min": load1,
"5min": load5,
"15min": load15
}
def get_uptime():
"""Get system uptime in seconds."""
with open('/proc/uptime', 'r') as f:
uptime_seconds = float(f.readline().split()[0])
return round(uptime_seconds, 2)
def main():
metrics = {
"disk": get_disk_usage(),
"memory": get_memory_usage(),
"load_average": get_load_average(),
"uptime_seconds": get_uptime()
}
print(json.dumps(metrics, indent=2))
if __name__ == "__main__":
main()