123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import os
- import logging
- from time import sleep
- from pathlib import Path
- from datetime import datetime
- from baangt.base.PathManagement import ManagedPaths
- from baangt.base.DownloadFolderMonitoring import DownloadFolderMonitoring
- from baangt.reports import Report
- logger = logging.getLogger("pyC")
- class Cleanup:
- def __init__(self, days: float = 31):
- self.managedPaths = ManagedPaths()
- self.threshold = days
- def clean_logs(self):
- logger.info(f"Removing logs older than {str(self.threshold)} days")
- logs_dir = self.managedPaths.getLogfilePath()
- files = Path(logs_dir).glob('**/*')
- removed = []
- for file in files:
- timedelta = datetime.now() - datetime.fromtimestamp(DownloadFolderMonitoring.creation_date(file))
- if timedelta.total_seconds()/86400 > self.threshold:
- try:
- os.remove(str(file))
- removed.append(file)
- except:
- logger.debug(f"Cannot remove {str(file)}")
- continue
- logger.debug(f"{str(file)} deleted")
- if len(removed) == 0:
- logger.info(f"No log file older than {str(self.threshold)} days found")
- else:
- logger.info(f"{str(len(removed))} Log file deleted")
- def clean_screenshots(self):
- logger.info(f"Removing screenshots older than {str(self.threshold)} days")
- ss_dir = self.managedPaths.getOrSetScreenshotsPath()
- files = Path(ss_dir).glob('**/*')
- removed = []
- for file in files:
- timedelta = datetime.now() - datetime.fromtimestamp(DownloadFolderMonitoring.creation_date(file))
- if timedelta.total_seconds()/86400 > self.threshold:
- try:
- os.remove(str(file))
- removed.append(file)
- except:
- logger.debug(f"Cannot remove {str(file)}")
- continue
- logger.debug(f"{str(file)} deleted")
- if len(removed) == 0:
- logger.info(f"No Screenshot older than {str(self.threshold)} days found")
- else:
- logger.info(f"{str(len(removed))} Screenshot deleted")
- def clean_downloads(self):
- logger.info(f"Removing downloads older than {str(self.threshold)} days")
- downloads_dir = self.managedPaths.getOrSetAttachmentDownloadPath()
- files = Path(downloads_dir).glob('**/*')
- removed = []
- for file in files:
- if file.is_file():
- timedelta = datetime.now() - datetime.fromtimestamp(DownloadFolderMonitoring.creation_date(file))
- if timedelta.total_seconds()/86400 > self.threshold:
- try:
- os.remove(str(file))
- removed.append(file)
- except:
- logger.debug(f"Cannot remove {str(file)}")
- continue
- logger.debug(f"{str(file)} deleted")
- if len(removed) == 0:
- logger.info(f"No downloads older than {str(self.threshold)} days found")
- else:
- logger.info(f"{str(len(removed))} downloads deleted")
- sleep(1)
- logger.info("Removing empty folders inside download folder.")
- files = Path(downloads_dir).glob('**/*')
- removed = []
- for file in files:
- if file.is_dir():
- if len(os.listdir(str(file))) == 0:
- try:
- os.rmdir(str(file))
- removed.append(file)
- except:
- logger.debug(f"Cannot remove folder {str(file)}")
- continue
- logger.debug(f"{str(file)} folder deleted")
- if len(removed) == 0:
- logger.info(f"No empty folder found inside downloads")
- else:
- logger.info(f"{str(len(removed))} empty folder deleted")
- def clean_reports(self):
- #
- # cleanup reports
- #
- logger.info(f"Removing reports older than {str(self.threshold)} days")
- reports_dir = self.managedPaths.getOrSetReportPath()
- files = Path(reports_dir).glob('**/*')
- removed = []
- for file in files:
- timedelta = datetime.now() - datetime.fromtimestamp(DownloadFolderMonitoring.creation_date(file))
- if timedelta.total_seconds()/86400 > self.threshold:
- try:
- os.remove(str(file))
- removed.append(file)
- except:
- logger.debug(f"Cannot remove {str(file)}")
- continue
- logger.debug(f"{str(file)} deleted")
- if len(removed) == 0:
- logger.info(f"No report older than {str(self.threshold)} days found")
- else:
- logger.info(f"{str(len(removed))} reports deleted")
- def clean_all(self):
- self.clean_logs()
- self.clean_screenshots()
- self.clean_downloads()
- self.clean_reports()
|