#!/usr/bin/env python import os import psutil from yunohost.diagnosis import Diagnoser class SystemResourcesDiagnoser(Diagnoser): id_ = os.path.splitext(os.path.basename(__file__))[0].split("-")[1] cache_duration = 3600 * 24 dependencies = [] def run(self): # # RAM # ram = psutil.virtual_memory() ram_total_abs_MB = ram.total / (1024**2) ram_available_abs_MB = ram.available / (1024**2) ram_available_percent = round(100 * ram.available / ram.total) item = dict(meta={"test": "ram"}) infos = {"total_abs_MB": ram_total_abs_MB, "available_abs_MB": ram_available_abs_MB, "available_percent": ram_available_percent} if ram_available_abs_MB < 100 or ram_available_percent < 5: item["status"] = "ERROR" item["summary"] = ("diagnosis_ram_verylow", infos) elif ram_available_abs_MB < 200 or ram_available_percent < 10: item["status"] = "WARNING" item["summary"] = ("diagnosis_ram_low", infos) else: item["status"] = "SUCCESS" item["summary"] = ("diagnosis_ram_ok", infos) yield item # # Swap # swap = psutil.swap_memory() swap_total_abs_MB = swap.total / (1024*1024) item = dict(meta={"test": "swap"}) infos = {"total_MB": swap_total_abs_MB} if swap_total_abs_MB <= 0: item["status"] = "ERROR" item["summary"] = ("diagnosis_swap_none", infos) elif swap_total_abs_MB <= 256: item["status"] = "WARNING" item["summary"] = ("diagnosis_swap_notsomuch", infos) else: item["status"] = "SUCCESS" item["summary"] = ("diagnosis_swap_ok", infos) yield item # # Disks usage # disk_partitions = psutil.disk_partitions() for disk_partition in disk_partitions: device = disk_partition.device mountpoint = disk_partition.mountpoint usage = psutil.disk_usage(mountpoint) free_abs_GB = usage.free / (1024 ** 3) free_percent = 100 - usage.percent item = dict(meta={"test": "diskusage", "mountpoint": mountpoint}) infos = {"mountpoint": mountpoint, "device": device, "free_abs_GB": free_abs_GB, "free_percent": free_percent} if free_abs_GB < 1 or free_percent < 5: item["status"] = "ERROR" item["summary"] = ("diagnosis_diskusage_verylow", infos) elif free_abs_GB < 2 or free_percent < 10: item["status"] = "WARNING" item["summary"] = ("diagnosis_diskusage_low", infos) else: item["status"] = "SUCCESS" item["summary"] = ("diagnosis_diskusage_ok", infos) yield item def main(args, env, loggers): return SystemResourcesDiagnoser(args, env, loggers).diagnose()