diff --git a/nginxmon/migrations/0006_banned_ip_unbanned_at.py b/nginxmon/migrations/0006_banned_ip_unbanned_at.py new file mode 100644 index 0000000..8903e81 --- /dev/null +++ b/nginxmon/migrations/0006_banned_ip_unbanned_at.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.12 on 2026-04-01 10:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('nginxmon', '0005_banned_ip_model'), + ] + + operations = [ + migrations.AddField( + model_name='bannedip', + name='unbanned_at', + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/nginxmon/models.py b/nginxmon/models.py index 401dd3c..530b045 100644 --- a/nginxmon/models.py +++ b/nginxmon/models.py @@ -209,11 +209,16 @@ class BannedIP(models.Model): reason = models.TextField() request_count = models.IntegerField(default=0) banned_at = models.DateTimeField(auto_now_add=True) + unbanned_at = models.DateTimeField(null=True, blank=True) country = models.CharField(max_length=100, blank=True) city = models.CharField(max_length=100, blank=True) class Meta: ordering = ['-banned_at'] + @property + def is_unbanned(self): + return self.unbanned_at is not None + def __str__(self): return f'{self.ip} [{self.get_ban_source_display()}] @ {self.banned_at:%Y-%m-%d %H:%M}' diff --git a/nginxmon/templates/nginxmon/dashboard.html b/nginxmon/templates/nginxmon/dashboard.html index 44fc8b9..445e165 100644 --- a/nginxmon/templates/nginxmon/dashboard.html +++ b/nginxmon/templates/nginxmon/dashboard.html @@ -286,11 +286,12 @@
{% for ban in banned_ips %} -