From b97819583a6bd34c259fed494c78586f9f772489 Mon Sep 17 00:00:00 2001 From: usmannasir Date: Thu, 19 Sep 2024 21:53:22 +0500 Subject: [PATCH] cmd line facility to rebuild quotas --- plogical/rebuildQuotas.py | 72 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 plogical/rebuildQuotas.py diff --git a/plogical/rebuildQuotas.py b/plogical/rebuildQuotas.py new file mode 100644 index 000000000..5e1d061de --- /dev/null +++ b/plogical/rebuildQuotas.py @@ -0,0 +1,72 @@ +import os,sys + +sys.path.append('/usr/local/CyberCP') +import django +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") +try: + django.setup() +except: + pass +import subprocess + + + +class rebuildQuotas: + + def __init__(self): + pass + + def Rebuild(self): + try: + print("Fixing and rebuilding Quotas...") + + fstab_path = '/etc/fstab' + + rData = open(fstab_path, 'r').read() + + if rData.find('xfs') > -1: + command = "mount | grep ' / '" + + qResult = subprocess.run(command, capture_output=True, text=True, shell=True) + + if qResult.stdout.find('usrquota') > -1: + print("Looks like Quotas are enabled in filesystem, moving on..") + else: + print("Looks like Quotas are not enabled in filesystem, exiting.") + print("Please follow this guide to enable Quotas on XFS file system: ") + exit(1) + else: + command = "mount | grep quota" + qResult = subprocess.run(command, capture_output=True, text=True, shell=True) + if qResult.stdout.find('usrquota') > -1: + print("Looks like Quotas are enabled in filesystem, moving on..") + else: + print("Looks like Quotas are not enabled in filesystem, exiting.") + exit(1) + + + from websiteFunctions.models import Websites + for website in Websites.objects.all(): + print(f"Rebuilding quotas for {website.domain}...") + command = 'chattr -R -i /home/%s/' % (website.domain) + subprocess.run(command, capture_output=True, text=True, shell=True) + + if website.package.enforceDiskLimits: + spaceString = f'{website.package.diskSpace}M {website.package.diskSpace}M' + command = f'setquota -u {website.externalApp} {spaceString} 0 0 /' + print(command) + qResult = subprocess.run(command, capture_output=True, text=True, shell=True) + else: + print(f"Ignored {website.domain} because the selected package does not enforce disk limits.") + except: + pass + +def main(): + + rbQ = rebuildQuotas() + rbQ.Rebuild() + + + +if __name__ == "__main__": + main() \ No newline at end of file