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ı"