#!/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()