mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2026-03-06 12:20:45 +01:00
add loging and improve config, ref https://community.cyberpanel.net/t/cyberpanel-backups-v2-proposal/40370
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
|
||||
sys.path.append('/usr/local/CyberCP')
|
||||
import django
|
||||
@@ -13,75 +14,119 @@ except:
|
||||
|
||||
|
||||
class CPBackupsV2:
|
||||
PENDING_START = 0
|
||||
RUNNING = 1
|
||||
COMPLETED = 2
|
||||
FAILED = 3
|
||||
|
||||
def __init__(self, data):
|
||||
self.data = data
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def FetchCurrentTimeStamp():
|
||||
import time
|
||||
return str(time.time())
|
||||
|
||||
def UpdateStatus(self, message, status):
|
||||
from websiteFunctions.models import Backupsv2, BackupsLogsv2
|
||||
self.buv2 = Backupsv2.objects.get(fileName=self.buv2.fileName)
|
||||
self.buv2.status = status
|
||||
self.buv2.save()
|
||||
|
||||
BackupsLogsv2(message=message).save()
|
||||
|
||||
if status == CPBackupsV2.FAILED:
|
||||
self.buv2.website.BackupLock = 0
|
||||
self.buv2.website.save()
|
||||
elif status == CPBackupsV2.COMPLETED:
|
||||
self.buv2.website.BackupLock = 0
|
||||
self.buv2.website.save()
|
||||
|
||||
|
||||
|
||||
|
||||
def InitiateBackup(self):
|
||||
|
||||
from websiteFunctions.models import Websites, ChildDomains, WPSites, WPStaging
|
||||
from websiteFunctions.models import Websites, Backupsv2
|
||||
from django.forms.models import model_to_dict
|
||||
from plogical.mysqlUtilities import mysqlUtilities
|
||||
website = Websites.objects.get(domain=self.data['domain'])
|
||||
|
||||
while(1):
|
||||
|
||||
Config = {'MainWebsite': model_to_dict(website, fields=['domain', 'adminEmail', 'phpSelection', 'state', 'config'])}
|
||||
Config['admin'] = model_to_dict(website.admin, fields=['userName', 'password', 'firstName', 'lastName',
|
||||
'email', 'type', 'owner', 'token', 'api', 'securityLevel',
|
||||
'state', 'initWebsitesLimit', 'twoFA', 'secretKey', 'config'])
|
||||
Config['acl'] = model_to_dict(website.admin.acl)
|
||||
if website.BackupLock == 0:
|
||||
|
||||
### Child domains to config
|
||||
website.BackupLock = 1
|
||||
website.save()
|
||||
|
||||
ChildsList = []
|
||||
self.buv2 = Backupsv2(website=website, fileName='backup-' + self.data['domain'] + "-" + time.strftime("%m.%d.%Y_%H-%M-%S"), status=CPBackupsV2.RUNNING, BasePath=self.data['BasePath'])
|
||||
self.buv2.save()
|
||||
|
||||
for childDomains in website.childdomains_set.all():
|
||||
print(childDomains.domain)
|
||||
ChildsList.append(model_to_dict(childDomains))
|
||||
try:
|
||||
|
||||
Config['ChildDomains'] = ChildsList
|
||||
Config = {'MainWebsite': model_to_dict(website, fields=['domain', 'adminEmail', 'phpSelection', 'state', 'config'])}
|
||||
Config['admin'] = model_to_dict(website.admin, fields=['userName', 'password', 'firstName', 'lastName',
|
||||
'email', 'type', 'owner', 'token', 'api', 'securityLevel',
|
||||
'state', 'initWebsitesLimit', 'twoFA', 'secretKey', 'config'])
|
||||
Config['acl'] = model_to_dict(website.admin.acl)
|
||||
|
||||
#print(str(Config))
|
||||
### Child domains to config
|
||||
|
||||
### Databases
|
||||
ChildsList = []
|
||||
|
||||
connection, cursor = mysqlUtilities.setupConnection()
|
||||
for childDomains in website.childdomains_set.all():
|
||||
print(childDomains.domain)
|
||||
ChildsList.append(model_to_dict(childDomains))
|
||||
|
||||
if connection == 0:
|
||||
return 0
|
||||
Config['ChildDomains'] = ChildsList
|
||||
|
||||
dataBases = website.databases_set.all()
|
||||
DBSList = []
|
||||
#print(str(Config))
|
||||
|
||||
for db in dataBases:
|
||||
### Databases
|
||||
|
||||
query = f"SELECT host,user FROM mysql.db WHERE db='{db.dbName}';"
|
||||
cursor.execute(query)
|
||||
DBUsers = cursor.fetchall()
|
||||
connection, cursor = mysqlUtilities.setupConnection()
|
||||
|
||||
UserList = []
|
||||
if connection == 0:
|
||||
return 0
|
||||
|
||||
for databaseUser in DBUsers:
|
||||
query = f"SELECT password FROM `mysql`.`user` WHERE `Host`='{databaseUser[0]}' AND `User`='{databaseUser[1]}';"
|
||||
cursor.execute(query)
|
||||
resp = cursor.fetchall()
|
||||
print(resp)
|
||||
UserList.append({'user': databaseUser[1], 'host': databaseUser[0], 'password': resp[0][0]})
|
||||
dataBases = website.databases_set.all()
|
||||
DBSList = []
|
||||
|
||||
DBSList.append({db.dbName: UserList})
|
||||
for db in dataBases:
|
||||
|
||||
Config['databases'] = DBSList
|
||||
query = f"SELECT host,user FROM mysql.db WHERE db='{db.dbName}';"
|
||||
cursor.execute(query)
|
||||
DBUsers = cursor.fetchall()
|
||||
|
||||
WPSitesList = []
|
||||
UserList = []
|
||||
|
||||
for wpsite in website.wpsites_set.all():
|
||||
WPSitesList.append(model_to_dict(wpsite,fields=['title', 'path', 'FinalURL', 'AutoUpdates', 'PluginUpdates', 'ThemeUpdates', 'WPLockState']))
|
||||
for databaseUser in DBUsers:
|
||||
query = f"SELECT password FROM `mysql`.`user` WHERE `Host`='{databaseUser[0]}' AND `User`='{databaseUser[1]}';"
|
||||
cursor.execute(query)
|
||||
resp = cursor.fetchall()
|
||||
print(resp)
|
||||
UserList.append({'user': databaseUser[1], 'host': databaseUser[0], 'password': resp[0][0]})
|
||||
|
||||
Config['WPSites'] = WPSitesList
|
||||
DBSList.append({db.dbName: UserList})
|
||||
|
||||
print(json.dumps(Config))
|
||||
Config['databases'] = DBSList
|
||||
|
||||
pass
|
||||
WPSitesList = []
|
||||
|
||||
for wpsite in website.wpsites_set.all():
|
||||
WPSitesList.append(model_to_dict(wpsite,fields=['title', 'path', 'FinalURL', 'AutoUpdates', 'PluginUpdates', 'ThemeUpdates', 'WPLockState']))
|
||||
|
||||
Config['WPSites'] = WPSitesList
|
||||
except BaseException as msg:
|
||||
self.UpdateStatus(str(msg), CPBackupsV2.FAILED)
|
||||
return 0
|
||||
|
||||
print(json.dumps(Config))
|
||||
|
||||
break
|
||||
else:
|
||||
time.sleep(5)
|
||||
|
||||
def BackupDataBases(self):
|
||||
|
||||
@@ -100,5 +145,5 @@ class CPBackupsV2:
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
cpbuv2 = CPBackupsV2({'domain': 'cyberpanel.net'} )
|
||||
cpbuv2 = CPBackupsV2({'domain': 'cyberpanel.net', 'BasePath': '/home/backup', 'BackupDatabase': 1, 'BackupData': 1} )
|
||||
cpbuv2.InitiateBackup()
|
||||
@@ -18,6 +18,8 @@ class Websites(models.Model):
|
||||
state = models.IntegerField(default=1)
|
||||
externalApp = models.CharField(max_length=30, default=None)
|
||||
config = models.TextField(default='')
|
||||
BackupLock = models.IntegerField(default=0)
|
||||
|
||||
|
||||
class ChildDomains(models.Model):
|
||||
master = models.ForeignKey(Websites,on_delete=models.CASCADE)
|
||||
@@ -94,20 +96,16 @@ class NormalBackupSites(models.Model):
|
||||
owner = models.ForeignKey(NormalBackupJobs, on_delete=models.CASCADE)
|
||||
domain = models.ForeignKey(Websites, on_delete=models.CASCADE)
|
||||
|
||||
|
||||
class NormalBackupJobLogs(models.Model):
|
||||
owner = models.ForeignKey(NormalBackupJobs, on_delete=models.CASCADE)
|
||||
status = models.IntegerField()
|
||||
message = models.TextField()
|
||||
|
||||
|
||||
|
||||
class wpplugins(models.Model):
|
||||
owner = models.ForeignKey(Administrator, on_delete=models.CASCADE)
|
||||
Name = models.CharField(max_length=255, default='')
|
||||
config = models.TextField()
|
||||
|
||||
|
||||
class WPSites(models.Model):
|
||||
owner = models.ForeignKey(Websites, on_delete=models.CASCADE)
|
||||
title = models.CharField(max_length=255, default='')
|
||||
@@ -129,7 +127,6 @@ class WPSitesBackup(models.Model):
|
||||
WebsiteID = models.IntegerField(default=-1)
|
||||
config = models.TextField()
|
||||
|
||||
|
||||
class RemoteBackupConfig(models.Model):
|
||||
owner = models.ForeignKey(Administrator, on_delete=models.CASCADE)
|
||||
configtype = models.CharField(max_length=255, default='')
|
||||
@@ -147,3 +144,17 @@ class RemoteBackupsites(models.Model):
|
||||
owner = models.ForeignKey(RemoteBackupSchedule, on_delete=models.CASCADE)
|
||||
WPsites = models.IntegerField(null=True)
|
||||
database = models.IntegerField(null=True)
|
||||
|
||||
import time
|
||||
|
||||
class Backupsv2(models.Model):
|
||||
website = models.ForeignKey(Websites, on_delete=models.CASCADE)
|
||||
fileName = models.CharField(max_length=255)
|
||||
status = models.IntegerField(default=0)
|
||||
timeStamp = models.CharField(max_length=255, default=str(time.time()))
|
||||
BasePath = models.TextField(default='')
|
||||
|
||||
class BackupsLogsv2(models.Model):
|
||||
owner = models.ForeignKey(Backupsv2, on_delete=models.CASCADE)
|
||||
timeStamp = models.CharField(max_length=255, default=str(time.time()))
|
||||
message = models.TextField(default='')
|
||||
Reference in New Issue
Block a user