39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
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)
|