first commit
This commit is contained in:
38
backend/app/services/file_service.py
Normal file
38
backend/app/services/file_service.py
Normal file
@@ -0,0 +1,38 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user