mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Add RAM and swap diagnosis + improve message for disk usage
This commit is contained in:
parent
33180d0947
commit
47c7c72455
3 changed files with 97 additions and 43 deletions
|
@ -1,39 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
import os
|
|
||||||
import psutil
|
|
||||||
|
|
||||||
from yunohost.diagnosis import Diagnoser
|
|
||||||
|
|
||||||
class DiskUsageDiagnoser(Diagnoser):
|
|
||||||
|
|
||||||
id_ = os.path.splitext(os.path.basename(__file__))[0].split("-")[1]
|
|
||||||
cache_duration = 3600 * 24
|
|
||||||
dependencies = []
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
|
|
||||||
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_Go = usage.free / (1024 ** 3)
|
|
||||||
free_percent = 100 - usage.percent
|
|
||||||
|
|
||||||
item = dict(meta={"mountpoint": mountpoint, "device": device})
|
|
||||||
if free_Go < 1 or free_percent < 5:
|
|
||||||
item["status"] = "ERROR"
|
|
||||||
item["summary"] = ("diagnosis_diskusage_verylow", {"mountpoint": mountpoint, "device": device, "free_percent": free_percent})
|
|
||||||
elif free_Go < 2 or free_percent < 10:
|
|
||||||
item["status"] = "WARNING"
|
|
||||||
item["summary"] = ("diagnosis_diskusage_low", {"mountpoint": mountpoint, "device": device, "free_percent": free_percent})
|
|
||||||
else:
|
|
||||||
item["status"] = "SUCCESS"
|
|
||||||
item["summary"] = ("diagnosis_diskusage_ok", {"mountpoint": mountpoint, "device": device, "free_percent": free_percent})
|
|
||||||
|
|
||||||
yield item
|
|
||||||
|
|
||||||
def main(args, env, loggers):
|
|
||||||
return DiskUsageDiagnoser(args, env, loggers).diagnose()
|
|
87
data/hooks/diagnosis/50-systemresources.py
Normal file
87
data/hooks/diagnosis/50-systemresources.py
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#!/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)
|
||||||
|
print(item)
|
||||||
|
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)
|
||||||
|
print(item)
|
||||||
|
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={"mountpoint": mountpoint, "device": device})
|
||||||
|
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()
|
|
@ -185,9 +185,15 @@
|
||||||
"diagnosis_dns_discrepancy": "According to the recommended DNS configuration, the value for the DNS record with type {0} and name {1} should be {2}, not {3}.",
|
"diagnosis_dns_discrepancy": "According to the recommended DNS configuration, the value for the DNS record with type {0} and name {1} should be {2}, not {3}.",
|
||||||
"diagnosis_services_good_status": "Service {service} is {status} as expected!",
|
"diagnosis_services_good_status": "Service {service} is {status} as expected!",
|
||||||
"diagnosis_services_bad_status": "Service {service} is {status} :/",
|
"diagnosis_services_bad_status": "Service {service} is {status} :/",
|
||||||
"diagnosis_diskusage_verylow": "Storage {mountpoint} (on device {device}) has only {free_percent}% space remaining. You should really consider cleaning up some space.",
|
"diagnosis_diskusage_verylow": "Storage {mountpoint} (on device {device}) has only {free_abs_GB} GB ({free_percent}%) space remaining. You should really consider cleaning up some space.",
|
||||||
"diagnosis_diskusage_low": "Storage {mountpoint} (on device {device}) has only {free_percent}% space remaining. Be careful",
|
"diagnosis_diskusage_low": "Storage {mountpoint} (on device {device}) has only {free_abs_GB} GB ({free_percent}%) space remaining. Be careful.",
|
||||||
"diagnosis_diskusage_ok": "Storage {mountpoint} (on device {device}) still has {free_percent}% space left!",
|
"diagnosis_diskusage_ok": "Storage {mountpoint} (on device {device}) still has {free_abs_GB} GB ({free_percent}%) space left!",
|
||||||
|
"diagnosis_ram_verylow": "The system has only {available_abs_MB} MB ({available_percent}%) RAM left! (out of {total_abs_MB} MB)",
|
||||||
|
"diagnosis_ram_low": "The system has {available_abs_MB} MB ({available_percent}%) RAM left out of {total_abs_MB} MB. Be careful.",
|
||||||
|
"diagnosis_ram_ok": "The system still has {available_abs_MB} MB ({available_percent}%) RAM left out of {total_abs_MB} MB.",
|
||||||
|
"diagnosis_swap_none": "The system has no swap at all. You should consider adding at least 256 MB of swap to avoid situations where the system runs out of memory.",
|
||||||
|
"diagnosis_swap_notsomuch": "The system has only {total_MB} MB swap. You should consider having at least 256 MB to avoid situations where the system runs out of memory.",
|
||||||
|
"diagnosis_swap_ok": "The system has {total_MB} MB of swap!",
|
||||||
"diagnosis_regenconf_allgood": "All configurations files are in line with the recommended configuration!",
|
"diagnosis_regenconf_allgood": "All configurations files are in line with the recommended configuration!",
|
||||||
"diagnosis_regenconf_manually_modified": "Configuration file {file} was manually modified.",
|
"diagnosis_regenconf_manually_modified": "Configuration file {file} was manually modified.",
|
||||||
"diagnosis_regenconf_manually_modified_details": "This is probably OK as long as you know what you're doing ;) !",
|
"diagnosis_regenconf_manually_modified_details": "This is probably OK as long as you know what you're doing ;) !",
|
||||||
|
@ -201,7 +207,7 @@
|
||||||
"diagnosis_description_ip": "Internet connectivity",
|
"diagnosis_description_ip": "Internet connectivity",
|
||||||
"diagnosis_description_dnsrecords": "DNS records",
|
"diagnosis_description_dnsrecords": "DNS records",
|
||||||
"diagnosis_description_services": "Services status check",
|
"diagnosis_description_services": "Services status check",
|
||||||
"diagnosis_description_diskusage": "Disk usage",
|
"diagnosis_description_systemresources": "System resources",
|
||||||
"diagnosis_description_ports": "Ports exposure",
|
"diagnosis_description_ports": "Ports exposure",
|
||||||
"diagnosis_description_http": "HTTP exposure",
|
"diagnosis_description_http": "HTTP exposure",
|
||||||
"diagnosis_description_regenconf": "System configurations",
|
"diagnosis_description_regenconf": "System configurations",
|
||||||
|
|
Loading…
Add table
Reference in a new issue