This commit is contained in:
+38
-5
@@ -3,8 +3,9 @@ from __future__ import annotations
|
||||
import base64
|
||||
import io
|
||||
import logging
|
||||
import shutil
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
@@ -85,23 +86,55 @@ def setup_artifacts(base_dir: Path) -> RunArtifacts:
|
||||
)
|
||||
|
||||
|
||||
def cleanup_old_run_artifacts(base_dir: Path, retention_days: int) -> int:
|
||||
if retention_days < 1 or not base_dir.exists() or not base_dir.is_dir():
|
||||
return 0
|
||||
cutoff = datetime.now(timezone.utc) - timedelta(days=retention_days)
|
||||
removed = 0
|
||||
for child in base_dir.iterdir():
|
||||
try:
|
||||
modified_at = datetime.fromtimestamp(child.stat().st_mtime, tz=timezone.utc)
|
||||
except FileNotFoundError:
|
||||
continue
|
||||
if modified_at >= cutoff:
|
||||
continue
|
||||
if child.is_dir():
|
||||
shutil.rmtree(child, ignore_errors=True)
|
||||
removed += 1
|
||||
elif child.is_file():
|
||||
try:
|
||||
child.unlink()
|
||||
removed += 1
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return removed
|
||||
|
||||
|
||||
def setup_logger(log_file: Path, verbose: bool = True) -> logging.Logger:
|
||||
logger = logging.getLogger("screenjob")
|
||||
logger_name = f"screenjob.{log_file.parent.parent.name}"
|
||||
logger = logging.getLogger(logger_name)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.handlers.clear()
|
||||
logger.propagate = False
|
||||
|
||||
if logger.handlers:
|
||||
return logger
|
||||
|
||||
stream_level = logging.INFO if verbose else logging.WARNING
|
||||
stream_handler = logging.StreamHandler(sys.stdout)
|
||||
stream_handler.setLevel(stream_level)
|
||||
stream_handler.setFormatter(
|
||||
logging.Formatter("%(asctime)s | %(levelname)-8s | %(message)s")
|
||||
logging.Formatter(
|
||||
"%(asctime)s.%(msecs)03d | %(message)s",
|
||||
datefmt="%H:%M:%S",
|
||||
)
|
||||
)
|
||||
|
||||
file_handler = logging.FileHandler(log_file, encoding="utf-8")
|
||||
file_handler.setLevel(logging.DEBUG)
|
||||
file_handler.setFormatter(
|
||||
logging.Formatter(
|
||||
"%(asctime)s | %(levelname)-8s | %(name)s | %(filename)s:%(lineno)d | %(message)s"
|
||||
"%(asctime)s.%(msecs)03d | %(levelname)-8s | %(filename)s:%(lineno)d | %(message)s",
|
||||
datefmt="%Y-%m-%d %H:%M:%S",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user