mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git
synced 2024-12-01 02:49:29 +00:00
refactor(backups): async quota setting
This commit is contained in:
parent
35a7497855
commit
e0b04217cd
|
@ -3,13 +3,19 @@ The tasks module contains the worker tasks that are used to back up and restore
|
||||||
"""
|
"""
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from selfprivacy_api.graphql.common_types.backup import RestoreStrategy, BackupReason
|
from selfprivacy_api.graphql.common_types.backup import (
|
||||||
|
RestoreStrategy,
|
||||||
|
BackupReason,
|
||||||
|
AutobackupQuotas,
|
||||||
|
)
|
||||||
|
|
||||||
from selfprivacy_api.models.backup.snapshot import Snapshot
|
from selfprivacy_api.models.backup.snapshot import Snapshot
|
||||||
from selfprivacy_api.utils.huey import huey
|
from selfprivacy_api.utils.huey import huey
|
||||||
from huey import crontab
|
from huey import crontab
|
||||||
from selfprivacy_api.services.service import Service
|
from selfprivacy_api.services.service import Service
|
||||||
from selfprivacy_api.backup import Backups
|
from selfprivacy_api.backup import Backups
|
||||||
|
from selfprivacy_api.jobs import Jobs, JobStatus, Job
|
||||||
|
|
||||||
|
|
||||||
SNAPSHOT_CACHE_TTL_HOURS = 6
|
SNAPSHOT_CACHE_TTL_HOURS = 6
|
||||||
|
|
||||||
|
@ -36,6 +42,25 @@ def start_backup(
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@huey.task()
|
||||||
|
def set_autobackup_quotas(quotas: AutobackupQuotas, job: Job) -> bool:
|
||||||
|
job = Jobs.add(
|
||||||
|
name="trimming autobackup snapshots",
|
||||||
|
type_id="backups.autobackup_trimming",
|
||||||
|
description="Pruning the excessive snapshots after the new autobackup quotas are set",
|
||||||
|
status=JobStatus.RUNNING,
|
||||||
|
)
|
||||||
|
Jobs.update(job, JobStatus.RUNNING)
|
||||||
|
try:
|
||||||
|
Backups.set_autobackup_quotas(quotas)
|
||||||
|
except Exception as e:
|
||||||
|
Jobs.update(job, JobStatus.ERROR, error=type(e).__name__ + ":" + str(e))
|
||||||
|
return False
|
||||||
|
|
||||||
|
Jobs.update(job, JobStatus.FINISHED)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
@huey.task()
|
@huey.task()
|
||||||
def restore_snapshot(
|
def restore_snapshot(
|
||||||
snapshot: Snapshot,
|
snapshot: Snapshot,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import typing
|
import typing
|
||||||
import strawberry
|
import strawberry
|
||||||
|
|
||||||
|
from selfprivacy_api.jobs import Jobs
|
||||||
|
|
||||||
from selfprivacy_api.graphql import IsAuthenticated
|
from selfprivacy_api.graphql import IsAuthenticated
|
||||||
from selfprivacy_api.graphql.mutations.mutation_interface import (
|
from selfprivacy_api.graphql.mutations.mutation_interface import (
|
||||||
GenericMutationReturn,
|
GenericMutationReturn,
|
||||||
|
@ -18,7 +20,11 @@ from selfprivacy_api.graphql.common_types.backup import (
|
||||||
|
|
||||||
from selfprivacy_api.backup import Backups
|
from selfprivacy_api.backup import Backups
|
||||||
from selfprivacy_api.services import get_service_by_id
|
from selfprivacy_api.services import get_service_by_id
|
||||||
from selfprivacy_api.backup.tasks import start_backup, restore_snapshot
|
from selfprivacy_api.backup.tasks import (
|
||||||
|
start_backup,
|
||||||
|
restore_snapshot,
|
||||||
|
set_autobackup_quotas,
|
||||||
|
)
|
||||||
from selfprivacy_api.backup.jobs import add_backup_job, add_restore_job
|
from selfprivacy_api.backup.jobs import add_backup_job, add_restore_job
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,8 +109,15 @@ class BackupMutations:
|
||||||
To disable autobackup use autobackup period setting, not this mutation.
|
To disable autobackup use autobackup period setting, not this mutation.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
job = Jobs.add(
|
||||||
|
name="trimming autobackup snapshots",
|
||||||
|
type_id="backups.autobackup_trimming",
|
||||||
|
description="Pruning the excessive snapshots after the new autobackup quotas are set",
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
Backups.set_autobackup_quotas(quotas)
|
# this is async and can fail with only a job to report the error
|
||||||
|
set_autobackup_quotas(quotas, job)
|
||||||
return GenericBackupConfigReturn(
|
return GenericBackupConfigReturn(
|
||||||
success=True,
|
success=True,
|
||||||
message="",
|
message="",
|
||||||
|
|
Loading…
Reference in a new issue