Files
webpanel/app/db/models.py
2024-06-04 22:08:15 +02:00

80 lines
2.5 KiB
Python

from django.db import models
from django.core.files.storage import FileSystemStorage
from django.conf import settings
import pathlib
import uuid
import time
credentials_storage = FileSystemStorage(pathlib.Path(__file__).parent / 'credentials')
class DBCredential(models.Model):
# credentials = models.FileField(storage=credentials_storage)
credentials = models.JSONField(default=dict)
create_db_perm = models.BooleanField(default=False)
user = models.ForeignKey("user.User", on_delete=models.CASCADE)
class DB(models.Model):
name = models.CharField(max_length=100)
db_name = models.CharField(max_length=255)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
credential = models.ForeignKey("DBCredential", on_delete=models.CASCADE)
user = models.ForeignKey("user.User", on_delete=models.CASCADE)
db_types = (
("mysql", "MySQL/MariaDB"),
("postgres", "PostgreSQL"),
)
db_type = models.CharField(max_length=100, choices=db_types)
class DBBackup(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
db = models.ForeignKey("DB", on_delete=models.CASCADE, related_name="backups")
status_choices = [
("waiting", "waiting"),
("running", "running"),
("ok", "Ok"),
("error", "Error"),
("expired", "Expired")
]
status = models.CharField(max_length=20, default="waiting", choices=status_choices)
task_id = models.CharField(max_length=100, null=True)
rel_path = models.CharField(max_length=100)
def save(self, *args, **kwargs):
if not self.rel_path:
self.rel_path = "{db_id}-{timestamp}-{rand_gen}.{db_type}.{ext}".format(
db_id=self.db.id,
timestamp=int(time.time()),
rand_gen=uuid.uuid4().hex[:5],
db_type=self.db.db_type,
ext='sql.gz'
)
return super().save(*args, **kwargs)
def update_status(self, status):
self.status = status
self.save()
def update_task_id(self, task_id):
if task_id != self.task_id:
self.task_id = task_id
self.save()
def set_expired(self):
self.status = "expired"
self.abs_path.unlink(True)
self.save()
@property
def abs_path(self):
return settings.BACKUPS_PATH / self.rel_path