HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/plogical/rebuildQuotas.py
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 ' / '"

                try:
                    qResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True)
                except:
                    qResult = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=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"
                try:
                    qResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True)
                except:
                    qResult = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                             universal_newlines=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)
                try:
                    qResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True)
                except:
                    qResult = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                             universal_newlines=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)
                    try:
                        qResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True)
                    except:
                        qResult = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                                 universal_newlines=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()