#!/usr/bin/env python3 """System health check - collects key metrics and writes JSON report.""" import json import os import platform import subprocess from datetime import datetime, timezone from pathlib import Path def get_disk_usage(path="/"): result = subprocess.run(["df", "-h", path], capture_output=True, text=True) lines = result.stdout.strip().split("\n") if len(lines) >= 2: parts = lines[1].split() return {"total": parts[1], "used": parts[2], "available": parts[3], "use_percent": parts[4]} return None def get_memory_info(): try: with open("/proc/meminfo") as f: lines = f.readlines()[:6] return {line.split(":")[0].strip(): line.split(":")[1].strip() for line in lines} except: return None def get_load_avg(): try: with open("/proc/loadavg") as f: parts = f.read().strip().split() return {"1min": parts[0], "5min": parts[1], "15min": parts[2], "processes": parts[3]} except: return None def get_process_count(): try: return len([p for p in Path("/proc").iterdir() if p.name.isdigit()]) except: return None def main(): report = { "timestamp": datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"), "hostname": platform.node(), "os": platform.system(), "kernel": platform.release(), "python": platform.python_version(), "disk_root": get_disk_usage("/"), "memory": get_memory_info(), "load_avg": get_load_avg(), "process_count": get_process_count(), } print(json.dumps(report, indent=2)) return report if __name__ == "__main__": main()