from django.contrib import admin from .models import SSHCredential, Project, SSHLog @admin.register(SSHCredential) class SSHCredentialAdmin(admin.ModelAdmin): list_display = ('hostname', 'username', 'port', 'is_online', 'last_check') list_filter = ('is_online', 'created_at') search_fields = ('hostname', 'username') readonly_fields = ('is_online', 'last_check', 'created_at') fieldsets = ( ('Bağlantı Bilgileri', { 'fields': ('hostname', 'username', 'password', 'port') }), ('Durum Bilgisi', { 'fields': ('is_online', 'last_check', 'created_at'), 'classes': ('collapse',) }), ) @admin.register(Project) class ProjectAdmin(admin.ModelAdmin): list_display = ('name', 'folder_name', 'url', 'ssh_credential', 'created_at') list_filter = ('ssh_credential', 'created_at') search_fields = ('name', 'folder_name', 'url') readonly_fields = ('created_at', 'updated_at') fieldsets = ( ('Temel Bilgiler', { 'fields': ('name', 'folder_name', 'ssh_credential') }), ('Domain Bilgisi', { 'fields': ('url',), 'description': 'Nginx konfigürasyonu için domain adı (Örnek: example.com)' }), ('Zaman Bilgileri', { 'fields': ('created_at', 'updated_at'), 'classes': ('collapse',) }), ) def get_full_path(self, obj): return obj.get_full_path() get_full_path.short_description = 'Tam Yol' @admin.register(SSHLog) class SSHLogAdmin(admin.ModelAdmin): list_display = ('ssh_credential', 'log_type', 'command', 'status', 'created_at') list_filter = ('log_type', 'status', 'created_at') search_fields = ('command', 'output') readonly_fields = ('created_at',) fieldsets = ( ('Log Detayları', { 'fields': ('ssh_credential', 'log_type', 'command', 'status') }), ('Çıktı', { 'fields': ('output',), 'classes': ('wide',) }), ('Zaman Bilgisi', { 'fields': ('created_at',), 'classes': ('collapse',) }), ) def get_queryset(self, request): return super().get_queryset(request).select_related('ssh_credential') def has_add_permission(self, request): return False # Log kayıtları manuel olarak eklenemez def has_change_permission(self, request, obj=None): return False # Log kayıtları değiştirilemez