2019-12-21 19:34:11 +05:00
|
|
|
#!/usr/local/CyberCP/bin/python
|
2019-12-16 13:05:50 +05:00
|
|
|
import os.path
|
|
|
|
|
import sys
|
|
|
|
|
sys.path.append('/usr/local/CyberCP')
|
|
|
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
|
|
|
|
import django
|
|
|
|
|
django.setup()
|
|
|
|
|
from IncBackups.IncBackupsControl import IncJobs
|
|
|
|
|
from IncBackups.models import BackupJob
|
|
|
|
|
from random import randint
|
|
|
|
|
import argparse
|
2020-03-17 20:51:45 +05:00
|
|
|
import json
|
|
|
|
|
from websiteFunctions.models import GitLogs, Websites
|
|
|
|
|
from websiteFunctions.website import WebsiteManager
|
|
|
|
|
import time
|
|
|
|
|
|
2019-12-16 13:05:50 +05:00
|
|
|
try:
|
|
|
|
|
from plogical.virtualHostUtilities import virtualHostUtilities
|
|
|
|
|
from plogical.mailUtilities import mailUtilities
|
|
|
|
|
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
class IncScheduler():
|
|
|
|
|
logPath = '/home/cyberpanel/incbackuplogs'
|
2020-03-17 20:51:45 +05:00
|
|
|
gitFolder = '/home/cyberpanel/git'
|
2019-12-16 13:05:50 +05:00
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def startBackup(type):
|
|
|
|
|
try:
|
|
|
|
|
logging.statusWriter(IncScheduler.logPath, 'Starting Incremental Backup job..', 1)
|
|
|
|
|
tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
|
|
|
|
|
for job in BackupJob.objects.all():
|
|
|
|
|
logging.statusWriter(IncScheduler.logPath, 'Job Description:\n\n Destination: %s, Frequency: %s.\n ' % (job.destination, job.frequency), 1)
|
|
|
|
|
if job.frequency == type:
|
|
|
|
|
for web in job.jobsites_set.all():
|
|
|
|
|
logging.statusWriter(IncScheduler.logPath, 'Backing up %s.' % (web.website), 1)
|
|
|
|
|
|
|
|
|
|
extraArgs = {}
|
|
|
|
|
extraArgs['website'] = web.website
|
|
|
|
|
extraArgs['tempPath'] = tempPath
|
|
|
|
|
extraArgs['backupDestinations'] = job.destination
|
|
|
|
|
|
|
|
|
|
if job.websiteData == 1:
|
|
|
|
|
extraArgs['websiteData'] = True
|
|
|
|
|
else:
|
|
|
|
|
extraArgs['websiteData'] = False
|
|
|
|
|
|
|
|
|
|
if job.websiteDatabases == 1:
|
|
|
|
|
extraArgs['websiteDatabases'] = True
|
|
|
|
|
else:
|
|
|
|
|
extraArgs['websiteDatabases'] = False
|
|
|
|
|
|
|
|
|
|
if job.websiteDataEmails == 1:
|
|
|
|
|
extraArgs['websiteEmails'] = True
|
|
|
|
|
else:
|
|
|
|
|
extraArgs['websiteEmails'] = False
|
|
|
|
|
|
|
|
|
|
extraArgs['websiteSSLs'] = False
|
|
|
|
|
|
|
|
|
|
startJob = IncJobs('createBackup', extraArgs)
|
|
|
|
|
startJob.start()
|
|
|
|
|
|
|
|
|
|
### Checking status
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
if os.path.exists(tempPath):
|
|
|
|
|
result = open(tempPath, 'r').read()
|
|
|
|
|
|
|
|
|
|
if result.find("Completed") > -1:
|
|
|
|
|
|
|
|
|
|
### Removing Files
|
|
|
|
|
|
|
|
|
|
os.remove(tempPath)
|
|
|
|
|
|
|
|
|
|
logging.statusWriter(IncScheduler.logPath, 'Backed up %s.' % (web.website), 1)
|
|
|
|
|
break
|
|
|
|
|
elif result.find("[5009]") > -1:
|
|
|
|
|
## removing status file, so that backup can re-runn
|
|
|
|
|
try:
|
|
|
|
|
os.remove(tempPath)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
logging.statusWriter(IncScheduler.logPath, 'Failed backup for %s, error: %s.' % (web.website, result), 1)
|
|
|
|
|
break
|
|
|
|
|
|
2019-12-21 19:34:11 +05:00
|
|
|
except BaseException as msg:
|
2019-12-16 13:05:50 +05:00
|
|
|
logging.writeToFile(str(msg))
|
|
|
|
|
|
2020-03-17 20:51:45 +05:00
|
|
|
@staticmethod
|
|
|
|
|
def git(type):
|
|
|
|
|
try:
|
|
|
|
|
for website in os.listdir(IncScheduler.gitFolder):
|
|
|
|
|
finalText = ''
|
|
|
|
|
web = Websites.objects.get(domain=website)
|
|
|
|
|
|
|
|
|
|
message = '[%s Cron] Checking if %s has any pending commits on %s.' % (type, website, time.strftime("%m.%d.%Y_%H-%M-%S"))
|
|
|
|
|
finalText = '%s\n' % (message)
|
|
|
|
|
GitLogs(owner=web, type='INFO', message = message).save()
|
|
|
|
|
|
|
|
|
|
finalPathInside = '%s/%s' % (IncScheduler.gitFolder, website)
|
|
|
|
|
|
|
|
|
|
for file in os.listdir(finalPathInside):
|
|
|
|
|
if file.find('public_html') > -1:
|
|
|
|
|
finalPath = '/home/%s/public_html' % (website)
|
|
|
|
|
finalPathConf = '%s/%s' % (finalPathInside, file)
|
|
|
|
|
elif file.find('vmail') > -1:
|
|
|
|
|
finalPath = '/home/vmail/%s' % (website)
|
|
|
|
|
finalPathConf = '%s/%s' % (finalPathInside, file)
|
|
|
|
|
else:
|
|
|
|
|
finalPath = '/var/lib/mysql/%s' % (file)
|
|
|
|
|
finalPathConf = '%s/%s' % (finalPathInside, file)
|
|
|
|
|
|
|
|
|
|
gitConf = json.loads(open(finalPathConf, 'r').read())
|
|
|
|
|
data = {}
|
|
|
|
|
data['domain'] = website
|
|
|
|
|
data['folder'] = finalPath
|
|
|
|
|
data['commitMessage'] = 'Auto commit by CyberPanel %s cron on %s.' % (type, time.strftime('%m.%d.%Y_%H-%M-%S'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if gitConf['autoCommit'] == type:
|
|
|
|
|
|
|
|
|
|
wm = WebsiteManager()
|
|
|
|
|
resp = wm.commitChanges(1, data)
|
|
|
|
|
logging.writeToFile(resp.content)
|
|
|
|
|
resp = json.loads(resp.content)
|
|
|
|
|
|
|
|
|
|
message = 'Folder: %s, Status: %s' % (finalPath, resp['commandStatus'])
|
|
|
|
|
finalText = '%s\n%s' % (finalText, message)
|
|
|
|
|
|
|
|
|
|
if resp['status'] == 1:
|
|
|
|
|
GitLogs(owner=web, type='INFO', message=message).save()
|
|
|
|
|
else:
|
|
|
|
|
GitLogs(owner=web, type='ERROR', message=message).save()
|
|
|
|
|
|
|
|
|
|
if gitConf['autoPush'] == type:
|
|
|
|
|
|
|
|
|
|
wm = WebsiteManager()
|
|
|
|
|
resp = wm.gitPush(1, data)
|
|
|
|
|
resp = json.loads(resp.content)
|
|
|
|
|
|
|
|
|
|
if resp['status'] == 1:
|
|
|
|
|
GitLogs(owner=web, type='INFO', message=resp['commandStatus']).save()
|
|
|
|
|
finalText = '%s\n%s' % (finalText, resp['commandStatus'])
|
|
|
|
|
else:
|
|
|
|
|
GitLogs(owner=web, type='ERROR', message=resp['commandStatus']).save()
|
|
|
|
|
finalText = '%s\n%s' % (finalText, resp['commandStatus'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message = '[%s Cron] Finished checking for %s on %s.' % (type, website, time.strftime("%m.%d.%Y_%H-%M-%S"))
|
|
|
|
|
finalText = '%s\n%s' % (finalText, message)
|
|
|
|
|
logging.SendEmail(web.adminEmail, web.adminEmail, finalText, 'Git report for %s.' % (web.domain))
|
|
|
|
|
GitLogs(owner=web, type='INFO', message=message).save()
|
|
|
|
|
|
|
|
|
|
except BaseException as msg:
|
|
|
|
|
logging.writeToFile('%s. [IncScheduler.git:90]' % (str(msg)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-12-16 13:05:50 +05:00
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='CyberPanel Installer')
|
|
|
|
|
parser.add_argument('function', help='Specific a function to call!')
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
|
|
IncScheduler.startBackup(args.function)
|
2020-03-17 20:51:45 +05:00
|
|
|
IncScheduler.git(args.function)
|
2019-12-16 13:05:50 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|