From dd1c8b23514f3a0cb621b1a0cd36c0cc3907b552 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Mon, 18 Jan 2021 14:01:26 +0500 Subject: [PATCH] fix: disk/bw usage to calculate every 12 hour --- cloudAPI/cloudManager.py | 40 +++++----------- plogical/IncScheduler.py | 22 +++++++++ plogical/vhost.py | 7 +++ plogical/virtualHostUtilities.py | 21 ++++++++- userManagment/views.py | 9 ++-- websiteFunctions/website.py | 81 ++++++++++---------------------- 6 files changed, 89 insertions(+), 91 deletions(-) diff --git a/cloudAPI/cloudManager.py b/cloudAPI/cloudManager.py index 5571d016b..4c54173e4 100755 --- a/cloudAPI/cloudManager.py +++ b/cloudAPI/cloudManager.py @@ -123,6 +123,7 @@ class CloudManager: def fetchWebsiteData(self): try: + currentACL = ACLManager.loadedACL(self.admin.pk) website = Websites.objects.get(domain=self.data['domainName']) admin = Administrator.objects.get(pk=self.admin.pk) @@ -140,39 +141,22 @@ class CloudManager: Data['dbUsed'] = website.databases_set.all().count() Data['dbAllowed'] = website.package.dataBases - diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + self.data['domainName'], - website.package.diskSpace) - - ## bw usage calculation - - try: - execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " findDomainBW --virtualHostName " + self.data[ - 'domainName'] + " --bandwidth " + str( - website.package.bandwidth) - - output = ProcessUtilities.outputExecutioner(execPath) - bwData = output.split(",") - except BaseException: - bwData = [0, 0] + DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(website) ## bw usage calculations - Data['bwAllowed'] = website.package.bandwidth - Data['bwUsed'] = bwData[0] - Data['bwUsage'] = bwData[1] + Data['bwInMBTotal'] = website.package.bandwidth + Data['bwInMB'] = bwInMB + Data['bwUsage'] = bwUsage - if diskUsageDetails != None: - if diskUsageDetails[1] > 100: - diskUsageDetails[1] = 100 + if DiskUsagePercentage > 100: + DiskUsagePercentage = 100 - Data['diskUsage'] = diskUsageDetails[1] - Data['diskUsed'] = diskUsageDetails[0] - Data['diskAllowed'] = website.package.diskSpace - else: - Data['diskUsed'] = 0 - Data['diskUsage'] = 0 - Data['diskInMBTotal'] = website.package.diskSpace + Data['diskUsage'] = DiskUsagePercentage + Data['diskInMB'] = DiskUsage + Data['diskInMBTotal'] = website.package.diskSpace + + ## Data['status'] = 1 final_json = json.dumps(Data) diff --git a/plogical/IncScheduler.py b/plogical/IncScheduler.py index 5c0deb954..703d47051 100644 --- a/plogical/IncScheduler.py +++ b/plogical/IncScheduler.py @@ -731,6 +731,27 @@ Automatic backup failed for %s on %s. except BaseException as msg: logging.writeToFile(str(msg) + ' [S3Backups.runAWSBackups]') + @staticmethod + def CalculateAndUpdateDiskUsage(): + for website in Websites.objects.all(): + try: + try: + config = json.loads(website.config) + except: + config = {} + + config['DiskUsage'], config['DiskUsagePercentage'] = virtualHostUtilities.getDiskUsage("/home/" + website.domain, website.package.diskSpace) + + ## Calculate bw usage + + from plogical.vhost import vhost + config['bwInMB'], config['bwUsage'] = vhost.findDomainBW(website.domain, int(website.package.bandwidth)) + + website.config = json.dumps(config) + website.save() + + except BaseException as msg: + logging.writeToFile('%s. [CalculateAndUpdateDiskUsage:753]' % (str(msg))) def main(): @@ -744,6 +765,7 @@ def main(): IncScheduler.forceRunAWSBackup(args.planName) return 0 + IncScheduler.CalculateAndUpdateDiskUsage() IncScheduler.startBackup(args.function) IncScheduler.runGoogleDriveBackups(args.function) IncScheduler.git(args.function) diff --git a/plogical/vhost.py b/plogical/vhost.py index 5e6b3b24c..78f39b980 100755 --- a/plogical/vhost.py +++ b/plogical/vhost.py @@ -721,11 +721,13 @@ class vhost: if not os.path.exists("/home/" + domainName + "/logs"): print("0,0") + return 0,0 bwmeta = "/home/" + domainName + "/logs/bwmeta" if not os.path.exists(path): print("0,0") + return 0, 0 if os.path.exists(bwmeta): try: @@ -741,19 +743,24 @@ class vhost: percentage = float(percentage) * float(inMB) except: print("0,0") + return 0, 0 if percentage > 100.0: percentage = 100 print(str(inMB) + "," + str(percentage)) + return str(inMB), str(percentage) else: print("0,0") + return 0, 0 except OSError as msg: logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [findDomainBW]") print("0,0") + return 0, 0 except ValueError as msg: logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [findDomainBW]") print("0,0") + return 0, 0 @staticmethod def permissionControl(path): diff --git a/plogical/virtualHostUtilities.py b/plogical/virtualHostUtilities.py index 09d28eb9c..cd875c093 100755 --- a/plogical/virtualHostUtilities.py +++ b/plogical/virtualHostUtilities.py @@ -1308,8 +1308,7 @@ class virtualHostUtilities: def getDiskUsage(path, totalAllowed): try: - totalUsageInMB = ProcessUtilities.outputExecutioner(["sudo", "du", "-hs", path, "--block-size=1M"]).split()[ - 0] + totalUsageInMB = subprocess.check_output('du -hs %s --block-size=1M' % (path), shell=True).decode("utf-8").split()[0] percentage = float(100) / float(totalAllowed) @@ -1347,6 +1346,24 @@ class virtualHostUtilities: except BaseException as msg: logging.CyberCPLogFileWriter.writeToFile(str(msg)) + @staticmethod + def FindStats(website): + + import json + try: + config = json.loads(website.config) + DiskUsage = config['DiskUsage'] + DiskUsagePercentage = config['DiskUsagePercentage'] + bwInMB = config['bwInMB'] + bwUsage = config['bwUsage'] + except: + DiskUsage = 0 + DiskUsagePercentage = 0 + bwInMB = 0 + bwUsage = 0 + + return DiskUsage, DiskUsagePercentage, bwInMB, bwUsage + def main(): parser = argparse.ArgumentParser(description='CyberPanel Installer') diff --git a/userManagment/views.py b/userManagment/views.py index 3c5b8c56a..0a9100e2f 100755 --- a/userManagment/views.py +++ b/userManagment/views.py @@ -1035,11 +1035,12 @@ def fetchTableUsers(request): for items in users: - diskUsage = 0 + diskUsageCurrent = 0 for webs in items.websites_set.all(): - #diskUsage = virtualHostUtilities.getDiskUsage("/home/" + webs.domain, webs.package.diskSpace)[0] + diskUsage - diskUsage = 1 + DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(webs) + diskUsageCurrent = DiskUsage + diskUsageCurrent + owner = Administrator.objects.get(pk=items.owner) @@ -1047,7 +1048,7 @@ def fetchTableUsers(request): 'name': items.userName, 'owner': owner.userName, 'acl': items.acl.name, - 'diskUsage': '%sMB' % str(diskUsage), + 'diskUsage': '%sMB' % str(diskUsageCurrent), 'websites': items.initWebsitesLimit, 'state': items.state } diff --git a/websiteFunctions/website.py b/websiteFunctions/website.py index f05eb7219..1f0720c27 100755 --- a/websiteFunctions/website.py +++ b/websiteFunctions/website.py @@ -452,9 +452,9 @@ class WebsiteManager: else: state = "Active" - #diskUsed = "%sMB" % str(virtualHostUtilities.getDiskUsage("/home/" + items.domain, items.package.diskSpace)[0]) + DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(items) + diskUsed = "%sMB" % str(DiskUsage) - diskUsed = '1MB' ## to be fixed later dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress, 'admin': items.admin.userName, 'package': items.package.packageName, 'state': state, 'diskUsed': diskUsed} @@ -830,38 +830,20 @@ class WebsiteManager: Data['domain'] = self.domain - diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + self.domain, website.package.diskSpace) - - ## bw usage calculation - - try: - execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " findDomainBW --virtualHostName " + self.domain + " --bandwidth " + str( - website.package.bandwidth) - - output = ProcessUtilities.outputExecutioner(execPath) - bwData = output.split(",") - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - bwData = [0, 0] + DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(website) ## bw usage calculations Data['bwInMBTotal'] = website.package.bandwidth - Data['bwInMB'] = bwData[0] - Data['bwUsage'] = bwData[1] + Data['bwInMB'] = bwInMB + Data['bwUsage'] = bwUsage - if diskUsageDetails != None: - if diskUsageDetails[1] > 100: - diskUsageDetails[1] = 100 + if DiskUsagePercentage > 100: + DiskUsagePercentage = 100 - Data['diskUsage'] = diskUsageDetails[1] - Data['diskInMB'] = diskUsageDetails[0] - Data['diskInMBTotal'] = website.package.diskSpace - else: - Data['diskUsage'] = 0 - Data['diskInMB'] = 0 - Data['diskInMBTotal'] = website.package.diskSpace + Data['diskUsage'] = DiskUsagePercentage + Data['diskInMB'] = DiskUsage + Data['diskInMBTotal'] = website.package.diskSpace Data['phps'] = PHPManager.findPHPVersions() @@ -932,38 +914,20 @@ class WebsiteManager: Data['domain'] = self.domain Data['childDomain'] = self.childDomain - diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + self.domain, website.package.diskSpace) - - ## bw usage calculation - - try: - execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py" - execPath = execPath + " findDomainBW --virtualHostName " + self.domain + " --bandwidth " + str( - website.package.bandwidth) - - output = ProcessUtilities.outputExecutioner(execPath) - bwData = output.split(",") - except BaseException as msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - bwData = [0, 0] + DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(website) ## bw usage calculations Data['bwInMBTotal'] = website.package.bandwidth - Data['bwInMB'] = bwData[0] - Data['bwUsage'] = bwData[1] + Data['bwInMB'] = bwInMB + Data['bwUsage'] = bwUsage - if diskUsageDetails != None: - if diskUsageDetails[1] > 100: - diskUsageDetails[1] = 100 + if DiskUsagePercentage > 100: + DiskUsagePercentage = 100 - Data['diskUsage'] = diskUsageDetails[1] - Data['diskInMB'] = diskUsageDetails[0] - Data['diskInMBTotal'] = website.package.diskSpace - else: - Data['diskUsage'] = 0 - Data['diskInMB'] = 0 - Data['diskInMBTotal'] = website.package.diskSpace + Data['diskUsage'] = DiskUsagePercentage + Data['diskInMB'] = DiskUsage + Data['diskInMBTotal'] = website.package.diskSpace Data['phps'] = PHPManager.findPHPVersions() @@ -2393,8 +2357,9 @@ StrictHostKeyChecking no else: state = "Active" - diskUsed = "%sMB" % str( - virtualHostUtilities.getDiskUsage("/home/" + items.domain, items.package.diskSpace)[0]) + DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(items) + + diskUsed = "%sMB" % str(DiskUsage) dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress, 'admin': items.admin.userName, 'package': items.package.packageName, 'state': state, 'diskUsed': diskUsed} @@ -2431,7 +2396,9 @@ StrictHostKeyChecking no else: state = "Active" - diskUsed = "%sMB" % str(virtualHostUtilities.getDiskUsage("/home/" + items.domain, items.package.diskSpace)[0]) + DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(items) + + diskUsed = "%sMB" % str(DiskUsage) dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress, 'admin': items.admin.userName, 'package': items.package.packageName, 'state': state, 'diskUsed': diskUsed}