53 lines
3.4 KiB
Python
Executable File
53 lines
3.4 KiB
Python
Executable File
import subprocess
|
|
|
|
class local_dir_remote:
|
|
def __init__(self, config):
|
|
self.config = config
|
|
self.path = config["path"]
|
|
|
|
def list_dir(self, recursive_search = False):
|
|
path = Path(self.path)
|
|
file_list = []
|
|
delta = timedelta(minutes=2)
|
|
glob_pattern = '*'
|
|
glob_pattern_recursive = '**'
|
|
if not recursive_search:
|
|
#os.
|
|
for file_demo in list(path.glob(glob_pattern)):
|
|
mtime = datetime.fromtimestamp(os.stat(file_demo).st_mtime)
|
|
if mtime < datetime.now() - delta:
|
|
file_list.append(file_demo)
|
|
else:
|
|
for file_directory in list(path.glob(glob_pattern_recursive)):
|
|
try:
|
|
for files in list(file_directory.glob(glob_pattern)):
|
|
if '/maps' in str(files):
|
|
continue
|
|
file_list.append(files)
|
|
except Exception:
|
|
continue
|
|
return file_list
|
|
|
|
def zip_local_directory(self, job):
|
|
source_files = self.list_dir(True)
|
|
zipname = f'{job["zipname"]}-{str(datetime.now()).split(" ")[0]}.tar.xz'
|
|
#-T3 = 3 threads, the backups are meant to run in the night at 5 am to not interfere with players.
|
|
exec_command_state = f"XZ_OPT='-T3 --memlimit-compress=70%' tar --exclude='/home/gameservers/.python_history' --exclude='/home/gameservers/.cache' --exclude='/home/gameservers/css_mg/cstrike/demos' --exclude='/home/gameservers/css_mg/cstrike/download' --exclude='/home/gameservers/css_mg/cstrike/addons/sourcemod/data' --exclude='/home/gameservers/css_jb/cstrike/logs' --exclude='/home/gameservers/css_jb/cstrike/download' --exclude='/home/gameservers/css_jb/cstrike/downloadlists' --exclude='/home/gameservers/css_ze/cstrike/download' --exclude='/home/gameservers/css_ze/cstrike/maps' --exclude='/home/gameservers/css_2_ze/cstrike/maps' --exclude='/home/gameservers/css_zr/cstrike/maps' --exclude='/home/gameservers/css_mg/cstrike/maps' --exclude='/home/gameservers/css_gg/cstrike/maps' --exclude='/home/gameservers/css_jb/cstrike/maps' --exclude='/home/gameservers/css_2_ze/cstrike/download' --exclude='/home/gameservers/css_dev/cstrike/download' --exclude='/home/gameservers/css_2_ze/cstrike/addons/sourcemod/data' --exclude='/home/gameservers/svencoop/svencoop/logs' --exclude='/home/gameservers/css_gg/cstrike/logs' --exclude='/home/gameservers/css_gg/cstrike/download' --exclude='/home/gameservers/css_gg/cstrike/downloadlists' --exclude='/home/gameservers/css_mg_dev/cstrike/demos' --exclude='/home/gameservers/css_mg_dev/cstrike/download' --exclude='/home/gameservers/css_zr/cstrike/download' --exclude='/home/gameservers/svencoop/svencoop_addon/maps' --ignore-failed-read -cJf {zipname} {self.path}"
|
|
print("exec_command_state: ", exec_command_state)
|
|
subprocess.run([exec_command_state], shell=True)
|
|
|
|
return str(Path.cwd()) + '/' + zipname
|
|
|
|
def delete_local_demo(self, pathfile):
|
|
with contextlib.suppress(FileNotFoundError):
|
|
if str(pathfile).endswith('.dem'):
|
|
os.remove(pathfile)
|
|
print('removed demo: ', pathfile)
|
|
|
|
def delete_local_zip(self, zip_file_path):
|
|
with contextlib.suppress(FileNotFoundError):
|
|
if (str(zip_file_path).endswith('.tar.xz')):
|
|
os.remove(zip_file_path)
|
|
print('removed tar xz: ', zip_file_path)
|
|
|