This commit is contained in:
ilkeral
2025-08-08 07:24:25 +03:00
parent 342f1314c7
commit f4ee7a2d0b
29 changed files with 5189 additions and 1140 deletions

View File

@ -0,0 +1,74 @@
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ı"