diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index 05b70c75..22facfdd 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -360,28 +360,31 @@ class Server: logger.info("Backup Thread started for server {}.".format(self.settings['server_name'])) def a_backup_server(self): - logger.info("Starting server {} (ID {}) backup".format(self.name, self.server_id)) - self.is_backingup = True - conf = db_helper.get_backup_config(self.server_id) - try: - backup_filename = "{}/{}.zip".format(self.settings['backup_path'], datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')) - logger.info("Creating backup of server '{}' (ID#{}) at '{}'".format(self.settings['server_name'], self.server_id, backup_filename)) - helper.zip_directory(backup_filename, self.server_path) - while len(self.list_backups()) > conf["max_backups"]: - backup_list = self.list_backups() - oldfile = backup_list[0] - backup_path = self.settings['backup_path'] - old_file_name = oldfile['path'] - back_old_file = os.path.join(backup_path, old_file_name) - logger.info("Removing old backup '{}'".format(oldfile)) - os.remove(back_old_file) - self.is_backingup = False - logger.info("Backup of server: {} completed".format(self.name)) - return - except: - logger.exception("Failed to create backup of server {} (ID {})".format(self.name, self.server_id)) - self.is_backingup = False - return + if not self.is_backingup: + logger.info("Starting server {} (ID {}) backup".format(self.name, self.server_id)) + self.is_backingup = True + conf = db_helper.get_backup_config(self.server_id) + try: + backup_filename = "{}/{}.zip".format(self.settings['backup_path'], datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')) + logger.info("Creating backup of server '{}' (ID#{}) at '{}'".format(self.settings['server_name'], self.server_id, backup_filename)) + helper.zip_directory(backup_filename, self.server_path) + while len(self.list_backups()) > conf["max_backups"]: + backup_list = self.list_backups() + oldfile = backup_list[0] + backup_path = self.settings['backup_path'] + old_file_name = oldfile['path'] + back_old_file = os.path.join(backup_path, old_file_name) + logger.info("Removing old backup '{}'".format(oldfile)) + os.remove(back_old_file) + self.is_backingup = False + logger.info("Backup of server: {} completed".format(self.name)) + return + except: + logger.exception("Failed to create backup of server {} (ID {})".format(self.name, self.server_id)) + self.is_backingup = False + return + else: + logger.error("Server {} is already backing up. Please wait for backup to finish.".format(self.server_id)) def list_backups(self): conf = db_helper.get_backup_config(self.server_id) @@ -449,14 +452,7 @@ class Server: #boolean returns true for false for success downloaded = helper.download_file(self.settings['executable_update_url'], current_executable) - if not downloaded: - time.sleep(5) - db_helper.set_update(self.server_id, False) - websocket_helper.broadcast('notification', - "Executable update failed for " + self.name + ". Check log file for details.") - logger.error("Executable download failed.") - - while db_helper.get_server_data_by_id(self.server_id)['updating']: + while db_helper.get_server_stats_by_id(self.server_id)['updating']: if downloaded and not self.is_backingup: logger.info("Executable updated successfully. Starting Server") @@ -477,4 +473,10 @@ class Server: db_helper.add_to_audit_log_raw('Alert', '-1', self.server_id, "Executable update finished for "+self.name, self.settings['server_ip']) if wasStarted: self.start_server() + elif not downloaded and not self.is_backingup: + time.sleep(5) + db_helper.set_update(self.server_id, False) + websocket_helper.broadcast('notification', + "Executable update failed for " + self.name + ". Check log file for details.") + logger.error("Executable download failed.") pass