75 lines
3.5 KiB
Python
75 lines
3.5 KiB
Python
from django.db import models
|
||
|
||
class SystemSettings(models.Model):
|
||
"""Sistem genel ayarları"""
|
||
BACKUP_FREQUENCY_CHOICES = [
|
||
('daily', 'Günlük'),
|
||
('weekly', 'Haftalık'),
|
||
('monthly', 'Aylık'),
|
||
]
|
||
|
||
# Yedekleme ayarları
|
||
backup_enabled = models.BooleanField(default=False, verbose_name="Otomatik Yedekleme Aktif")
|
||
backup_frequency = models.CharField(max_length=10, choices=BACKUP_FREQUENCY_CHOICES, default='weekly', verbose_name="Yedekleme Sıklığı")
|
||
backup_hour = models.IntegerField(default=3, verbose_name="Yedekleme Saati (0-23)")
|
||
backup_minute = models.IntegerField(default=0, verbose_name="Yedekleme Dakikası (0-59)")
|
||
backup_day_of_week = models.IntegerField(default=0, verbose_name="Haftanın Günü (0=Pazartesi, 6=Pazar)", null=True, blank=True)
|
||
backup_day_of_month = models.IntegerField(default=1, verbose_name="Ayın Günü (1-31)", null=True, blank=True)
|
||
|
||
# Linux crontab komutu
|
||
backup_crontab_expression = models.CharField(max_length=100, blank=True, null=True, verbose_name="Crontab İfadesi")
|
||
|
||
# Yedekleme dosya formatı - Her zaman sıkıştırılmış
|
||
backup_format = models.CharField(max_length=10, default='tar.gz', verbose_name="Yedekleme Format")
|
||
|
||
# E-posta bildirim ayarları
|
||
email_notifications = models.BooleanField(default=False, verbose_name="E-posta Bildirimleri")
|
||
notification_email = models.EmailField(blank=True, null=True, verbose_name="Bildirim E-postası")
|
||
|
||
# S3 depolama ayarları (Vultr Object Storage)
|
||
use_s3_storage = models.BooleanField(default=True, verbose_name="Vultr S3 Depolama", help_text="Tüm yedekler Vultr S3 depolama alanına aktarılır")
|
||
s3_access_key = models.CharField(max_length=255, default='', verbose_name="Vultr S3 Erişim Anahtarı")
|
||
s3_secret_key = models.CharField(max_length=255, default='', verbose_name="Vultr S3 Gizli Anahtar")
|
||
s3_bucket_name = models.CharField(max_length=255, default='backups', verbose_name="Vultr S3 Bucket Adı")
|
||
s3_region = models.CharField(max_length=50, default='ams', verbose_name="Vultr S3 Bölge")
|
||
s3_endpoint = models.CharField(max_length=255, default='ams1.vultrobjects.com', verbose_name="Vultr S3 Endpoint")
|
||
|
||
# Son güncelleme zamanı
|
||
updated_at = models.DateTimeField(auto_now=True)
|
||
|
||
def __str__(self):
|
||
return "Sistem Ayarları"
|
||
|
||
def save(self, *args, **kwargs):
|
||
# Crontab ifadesini oluştur
|
||
minute = self.backup_minute
|
||
hour = self.backup_hour
|
||
|
||
if self.backup_frequency == 'daily':
|
||
day_of_month = '*'
|
||
month = '*'
|
||
day_of_week = '*'
|
||
elif self.backup_frequency == 'weekly':
|
||
day_of_month = '*'
|
||
month = '*'
|
||
day_of_week = self.backup_day_of_week
|
||
else: # monthly
|
||
day_of_month = self.backup_day_of_month
|
||
month = '*'
|
||
day_of_week = '*'
|
||
|
||
self.backup_crontab_expression = f"{minute} {hour} {day_of_month} {month} {day_of_week}"
|
||
|
||
# S3 yedekleme zorunlu olduğu için her zaman kontrol et
|
||
if not self.s3_access_key or not self.s3_secret_key or not self.s3_bucket_name:
|
||
raise ValueError("Vultr S3 Erişim Anahtarı, Gizli Anahtar ve Bucket Adı alanları zorunludur!")
|
||
|
||
# S3 storage her zaman aktif
|
||
self.use_s3_storage = True
|
||
|
||
super().save(*args, **kwargs)
|
||
|
||
class Meta:
|
||
verbose_name = "Sistem Ayarları"
|
||
verbose_name_plural = "Sistem Ayarları"
|