Init
This commit is contained in:
79
app/db/models.py
Normal file
79
app/db/models.py
Normal file
@@ -0,0 +1,79 @@
|
||||
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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user