2019-12-10 23:04:24 +05:00
|
|
|
#!/usr/local/CyberCP/bin/python
|
2019-03-31 02:47:35 +05:00
|
|
|
import os.path
|
|
|
|
|
import sys
|
|
|
|
|
import django
|
|
|
|
|
sys.path.append('/usr/local/CyberCP')
|
|
|
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
|
|
|
|
django.setup()
|
2019-12-12 08:46:07 +05:00
|
|
|
import CyberCPLogFileWriter as logging
|
2017-10-24 19:16:36 +05:00
|
|
|
import subprocess
|
|
|
|
|
import shlex
|
|
|
|
|
import os
|
|
|
|
|
import time
|
2019-12-11 10:40:35 +05:00
|
|
|
from .backupUtilities import backupUtilities
|
2018-05-21 16:51:28 +05:00
|
|
|
from re import match,I,M
|
2019-03-31 02:47:35 +05:00
|
|
|
from websiteFunctions.models import Websites, Backups
|
|
|
|
|
from plogical.processUtilities import ProcessUtilities
|
2019-07-18 14:08:00 +05:00
|
|
|
from random import randint
|
|
|
|
|
import json, requests
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
class backupSchedule:
|
|
|
|
|
|
2019-08-22 20:38:49 +05:00
|
|
|
|
2018-04-23 19:23:03 +05:00
|
|
|
@staticmethod
|
|
|
|
|
def remoteBackupLogging(fileName, message):
|
|
|
|
|
try:
|
|
|
|
|
file = open(fileName,'a')
|
2019-10-08 13:17:33 -04:00
|
|
|
file.writelines("[" + time.strftime("%m.%d.%Y_%H-%M-%S") + "] "+ message + "\n")
|
2019-12-10 15:09:10 +05:00
|
|
|
print(("[" + time.strftime("%m.%d.%Y_%H-%M-%S") + "] "+ message + "\n"))
|
2018-04-23 19:23:03 +05:00
|
|
|
file.close()
|
2019-12-10 15:09:10 +05:00
|
|
|
except IOError as msg:
|
2018-04-23 19:23:03 +05:00
|
|
|
return "Can not write to error file."
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
@staticmethod
|
2018-08-18 03:56:25 +05:00
|
|
|
def createLocalBackup(virtualHost, backupLogPath):
|
2017-10-24 19:16:36 +05:00
|
|
|
try:
|
|
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Starting local backup for: " + virtualHost)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-07-18 14:08:00 +05:00
|
|
|
###
|
2018-08-18 03:56:25 +05:00
|
|
|
|
2019-07-18 14:08:00 +05:00
|
|
|
pathToFile = "/home/cyberpanel/" + str(randint(1000, 9999))
|
|
|
|
|
file = open(pathToFile, "w+")
|
|
|
|
|
file.close()
|
2019-03-31 02:47:35 +05:00
|
|
|
|
2019-07-18 14:08:00 +05:00
|
|
|
finalData = json.dumps({'randomFile': pathToFile, 'websiteToBeBacked': virtualHost})
|
|
|
|
|
r = requests.post("https://localhost:8090/backup/localInitiate", data=finalData, verify=False)
|
2019-03-31 02:47:35 +05:00
|
|
|
|
2019-07-18 14:08:00 +05:00
|
|
|
data = json.loads(r.text)
|
|
|
|
|
tempStoragePath = data['tempStorage']
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Waiting for backup to complete.. ")
|
|
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
while (1):
|
2019-03-31 02:47:35 +05:00
|
|
|
backupDomain = virtualHost
|
|
|
|
|
status = os.path.join("/home", backupDomain, "backup/status")
|
|
|
|
|
backupFileNamePath = os.path.join("/home", backupDomain, "backup/backupFileName")
|
|
|
|
|
pid = os.path.join("/home", backupDomain, "backup/pid")
|
|
|
|
|
## read file name
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
fileName = open(backupFileNamePath, 'r').read()
|
|
|
|
|
except:
|
|
|
|
|
fileName = "Fetching.."
|
|
|
|
|
|
|
|
|
|
## file name read ends
|
|
|
|
|
|
|
|
|
|
if os.path.exists(status):
|
|
|
|
|
status = open(status, 'r').read()
|
2019-12-10 15:09:10 +05:00
|
|
|
print(status)
|
2019-07-18 14:08:00 +05:00
|
|
|
time.sleep(2)
|
2019-03-31 02:47:35 +05:00
|
|
|
|
|
|
|
|
if status.find("Completed") > -1:
|
|
|
|
|
|
|
|
|
|
### Removing Files
|
|
|
|
|
|
|
|
|
|
command = 'sudo rm -f ' + status
|
|
|
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
|
|
|
|
|
|
command = 'sudo rm -f ' + backupFileNamePath
|
|
|
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
|
|
|
|
|
|
command = 'sudo rm -f ' + pid
|
|
|
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Backup Completed for: " + virtualHost)
|
2019-07-18 14:08:00 +05:00
|
|
|
try:
|
|
|
|
|
os.remove(pathToFile)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
2019-03-31 02:47:35 +05:00
|
|
|
return 1, tempStoragePath
|
|
|
|
|
|
|
|
|
|
elif status.find("[5009]") > -1:
|
|
|
|
|
## removing status file, so that backup can re-run
|
|
|
|
|
try:
|
|
|
|
|
command = 'sudo rm -f ' + status
|
|
|
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
|
|
|
|
|
|
command = 'sudo rm -f ' + backupFileNamePath
|
|
|
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
|
|
|
|
|
|
command = 'sudo rm -f ' + pid
|
|
|
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
|
|
|
|
|
|
backupObs = Backups.objects.filter(fileName=fileName)
|
|
|
|
|
for items in backupObs:
|
|
|
|
|
items.delete()
|
|
|
|
|
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "An error occurred, Error message: " + status)
|
2019-07-18 14:08:00 +05:00
|
|
|
try:
|
|
|
|
|
os.remove(pathToFile)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
2019-03-31 02:47:35 +05:00
|
|
|
return 0, tempStoragePath
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-07-18 14:08:00 +05:00
|
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [119:startBackup]")
|
2019-08-22 20:38:49 +05:00
|
|
|
return 0, str(msg)
|
2018-04-23 19:23:03 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
@staticmethod
|
|
|
|
|
def createBackup(virtualHost, ipAddress, backupLogPath , port):
|
|
|
|
|
try:
|
2018-04-23 19:23:03 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Preparing to create backup for: " + virtualHost)
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Backup started for: " + virtualHost)
|
2018-04-23 19:23:03 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
retValues = backupSchedule.createLocalBackup(virtualHost, backupLogPath)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
if retValues[0] == 1:
|
|
|
|
|
backupPath = retValues[1]
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Backup created for: " + virtualHost)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
## Prepping to send backup.
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Preparing to send backup for: " + virtualHost +" to " + ipAddress)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
backupSchedule.sendBackup(backupPath+".tar.gz", ipAddress, backupLogPath, port)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Backup for: " + virtualHost + " is sent to " + ipAddress)
|
|
|
|
|
|
|
|
|
|
## Backup sent.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "#################################################")
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "#################################################")
|
|
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-03-13 18:22:12 +05:00
|
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [backupSchedule.createBackup]")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
@staticmethod
|
2018-04-23 19:23:03 +05:00
|
|
|
def sendBackup(backupPath, IPAddress, backupLogPath , port):
|
2017-10-24 19:16:36 +05:00
|
|
|
try:
|
2018-04-23 19:23:03 +05:00
|
|
|
|
|
|
|
|
## IPAddress of local server
|
|
|
|
|
|
|
|
|
|
ipFile = "/etc/cyberpanel/machineIP"
|
|
|
|
|
f = open(ipFile)
|
|
|
|
|
ipData = f.read()
|
|
|
|
|
ipAddressLocal = ipData.split('\n', 1)[0]
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
writeToFile = open(backupLogPath, "a")
|
|
|
|
|
command = "sudo scp -o StrictHostKeyChecking=no -P "+port+" -i /root/.ssh/cyberpanel " + backupPath + " root@"+IPAddress+":/home/backup/" + ipAddressLocal + "/" + time.strftime("%a-%b") + "/"
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command), stdout=writeToFile)
|
2018-07-29 01:20:46 +05:00
|
|
|
|
|
|
|
|
## Remove backups already sent to remote destinations
|
|
|
|
|
|
|
|
|
|
os.remove(backupPath)
|
|
|
|
|
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-07-18 14:08:00 +05:00
|
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [189:startBackup]")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def prepare():
|
|
|
|
|
try:
|
2017-12-09 22:30:10 +05:00
|
|
|
destinations = backupUtilities.destinationsPath
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-10-08 13:17:33 -04:00
|
|
|
backupLogPath = "/usr/local/lscp/logs/backup_log."+time.strftime("%m.%d.%Y_%H-%M-%S")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-04-23 19:23:03 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath,"#################################################")
|
2019-10-08 13:17:33 -04:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath," Backup log for: " +time.strftime("%m.%d.%Y_%H-%M-%S"))
|
2018-04-23 19:23:03 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath,"#################################################\n")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-04-23 19:23:03 +05:00
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-04-23 19:23:03 +05:00
|
|
|
## IP of Remote server.
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2017-11-05 21:07:12 +05:00
|
|
|
data = open(destinations,'r').readlines()
|
|
|
|
|
ipAddress = data[0].strip("\n")
|
|
|
|
|
port = data[1].strip("\n")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-04-23 19:23:03 +05:00
|
|
|
## IPAddress of local server
|
|
|
|
|
|
|
|
|
|
ipFile = "/etc/cyberpanel/machineIP"
|
|
|
|
|
f = open(ipFile)
|
|
|
|
|
ipData = f.read()
|
|
|
|
|
ipAddressLocal = ipData.split('\n', 1)[0]
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
|
2019-03-13 23:20:15 +05:00
|
|
|
if backupUtilities.checkIfHostIsUp(ipAddress) != 1:
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Ping for : " + ipAddress + " does not seems to work, however we will continue.")
|
2018-02-19 23:42:57 +05:00
|
|
|
|
2019-03-13 23:20:15 +05:00
|
|
|
|
|
|
|
|
checkConn = backupUtilities.checkConnection(ipAddress)
|
|
|
|
|
if checkConn[0] == 0:
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath,
|
|
|
|
|
"Connection to: " + ipAddress + " Failed, please resetup this destination from CyberPanel, aborting.")
|
2017-10-24 19:16:36 +05:00
|
|
|
return 0
|
2019-03-13 23:20:15 +05:00
|
|
|
else:
|
|
|
|
|
## Create backup dir on remote server
|
|
|
|
|
|
|
|
|
|
command = "sudo ssh -o StrictHostKeyChecking=no -p " + port + " -i /root/.ssh/cyberpanel root@" + ipAddress + " mkdir -p /home/backup/" + ipAddressLocal + "/" + time.strftime(
|
|
|
|
|
"%a-%b")
|
2019-03-26 16:19:03 +05:00
|
|
|
subprocess.call(shlex.split(command))
|
2019-03-13 23:20:15 +05:00
|
|
|
pass
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
for virtualHost in os.listdir("/home"):
|
2018-05-21 16:51:28 +05:00
|
|
|
if match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', virtualHost, M | I):
|
|
|
|
|
backupSchedule.createBackup(virtualHost, ipAddress, backupLogPath, port)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 03:56:25 +05:00
|
|
|
|
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Remote backup job completed.\n")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2017-11-05 21:07:12 +05:00
|
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [prepare]")
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 15:16:15 +05:00
|
|
|
def main():
|
|
|
|
|
backupSchedule.prepare()
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-08-18 15:16:15 +05:00
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|