Files

57 lines
1.7 KiB
Python

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