se agregaron nuevas caracteristicas

This commit is contained in:
Carlos Tello
2026-08-13 23:07:01 -03:00
parent 1bfb808c79
commit d736db982e
23 changed files with 1244 additions and 100 deletions
+40
View File
@@ -24,6 +24,28 @@ async def create_or_resume_session(
"""
total_chunks = max(1, math.ceil(file_size / chunk_size))
# 1. Check client quota
if client.storage_used_bytes + file_size > client.storage_quota_bytes:
raise ValueError(
f"Client storage quota exceeded. Limit: {client.storage_quota_bytes} bytes. Attempted to upload: {file_size} bytes."
)
# 2. Check global quota
from app.services.settings_service import get_setting
from sqlalchemy import func
global_quota_gb_str = await get_setting(db, "global_quota_gb")
if global_quota_gb_str:
try:
global_quota_bytes = int(global_quota_gb_str) * 1024 * 1024 * 1024
used_res = await db.execute(select(func.sum(Client.storage_used_bytes)))
total_used_bytes = used_res.scalar() or 0
if total_used_bytes + file_size > global_quota_bytes:
raise ValueError(
f"Global storage quota exceeded. Limit: {global_quota_bytes} bytes. Current used: {total_used_bytes} bytes."
)
except ValueError:
pass
# Check for existing incomplete session for this client and file hash
query = (
select(BackupSession)
@@ -193,6 +215,8 @@ async def complete_session(
job = job_res.scalar_one_or_none()
if job:
job_code = job.job_code
job.status = "RUNNING"
job.last_run_at = datetime.now(timezone.utc)
session.status = "ASSEMBLING"
await db.commit()
@@ -230,6 +254,12 @@ async def complete_session(
client.storage_used_bytes += total_bytes
client.last_backup_at = datetime.now(timezone.utc)
if session.job_id:
job_res = await db.execute(select(BackupJob).where(BackupJob.id == session.job_id))
job = job_res.scalar_one_or_none()
if job:
job.status = "SUCCESS"
await db.commit()
await db.refresh(backup_file)
@@ -263,6 +293,16 @@ async def complete_session(
except Exception as ex:
session.status = "FAILED"
session.error_message = str(ex)
if session.job_id:
try:
job_res = await db.execute(select(BackupJob).where(BackupJob.id == session.job_id))
job = job_res.scalar_one_or_none()
if job:
job.status = "FAILED"
except Exception:
pass
await db.commit()
await log_event(