64 lines
1.6 KiB
Python
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() |