import hashlib import os import shutil from pathlib import Path from app.core.config import settings from app.schemas.dashboard import StorageStats def compute_checksum(file_path: str) -> str: sha256 = hashlib.sha256() with open(file_path, "rb") as handle: for chunk in iter(lambda: handle.read(4096), b""): sha256.update(chunk) return sha256.hexdigest() def ensure_data_dir() -> Path: return settings.data_path def get_folder_size() -> int: total = 0 for dirpath, _, filenames in os.walk(ensure_data_dir()): for filename in filenames: try: total += os.path.getsize(Path(dirpath) / filename) except OSError: pass return total def get_storage_stats() -> StorageStats: ensure_data_dir() disk = shutil.disk_usage(ensure_data_dir()) folder_used = get_folder_size() usage_percent = (folder_used / disk.total) * 100 if disk.total else 0 return StorageStats(total=disk.total, used=disk.used, free=disk.free, folder_used=folder_used, usage_percent=usage_percent)