geoip intgration
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from django.db import models
|
||||
from hotels.models import Hotel
|
||||
from hotels.models import Reservation
|
||||
|
||||
from datetime import datetime, timezone
|
||||
|
||||
class UserActivityLog(models.Model):
|
||||
external_id = models.CharField(max_length=255, unique=True, verbose_name="Внешний ID", db_index=True)
|
||||
@@ -23,11 +23,22 @@ class UserActivityLog(models.Model):
|
||||
page_title = models.TextField(blank=True, null=True, verbose_name="Заголовок страницы")
|
||||
type = models.CharField(max_length=50, verbose_name="Тип", blank=True, null=True)
|
||||
last_counter = models.IntegerField(verbose_name="Последний счетчик", blank=True, null=True)
|
||||
hits = models.IntegerField(verbose_name="Количество обращений", blank=True, null=True)
|
||||
hits = models.IntegerField(verbose_name="Количество обращений",default="0", blank=True, null=True)
|
||||
honeypot = models.BooleanField(verbose_name="Метка honeypot", blank=True, null=True)
|
||||
reply = models.BooleanField(verbose_name="Ответ пользователя", blank=True, null=True)
|
||||
page_url = models.URLField(blank=True, null=True, verbose_name="URL страницы")
|
||||
|
||||
@property
|
||||
def formatted_timestamp(self):
|
||||
"""
|
||||
Преобразует Unix-временную метку в читаемую дату и время.
|
||||
"""
|
||||
if self.timestamp is not None:
|
||||
return datetime.fromtimestamp(self.timestamp, tz=timezone.utc).strftime('%Y-%m-%d %H:%M:%S')
|
||||
return "Нет данных"
|
||||
|
||||
# Изменение имени столбца
|
||||
|
||||
class Meta:
|
||||
indexes = [
|
||||
models.Index(fields=["external_id"], name="idx_external_id"),
|
||||
@@ -40,12 +51,21 @@ class UserActivityLog(models.Model):
|
||||
verbose_name_plural = "Логи активности пользователей"
|
||||
def __str__(self):
|
||||
return f"UserActivityLog {self.id}: {self.page_title}"
|
||||
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Регистрация посетителей"
|
||||
verbose_name_plural = "Регистрации посетителей"
|
||||
|
||||
|
||||
def get_location(self):
|
||||
if not self.ip:
|
||||
return "IP-адрес отсутствует"
|
||||
|
||||
try:
|
||||
geoip_reader = Reader(settings.GEOIP_PATH + '/GeoLite2-City.mmdb')
|
||||
response = geoip_reader.city(self.ip)
|
||||
return f"{response.city.name}, {response.country.name}"
|
||||
except Exception as e:
|
||||
return "Местоположение недоступно"
|
||||
class ExternalDBSettings(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True, help_text="Имя подключения для идентификации.")
|
||||
host = models.CharField(max_length=255, help_text="Адрес сервера базы данных.")
|
||||
@@ -165,18 +185,20 @@ class ImportedHotel(models.Model):
|
||||
|
||||
class SyncLog(models.Model):
|
||||
"""
|
||||
Журнал синхронизации.
|
||||
Журнал синхронизации в разрезе отелей.
|
||||
"""
|
||||
id = models.BigIntegerField(primary_key=True, unique=True, verbose_name="ID")
|
||||
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель")
|
||||
reservation = models.ForeignKey(Reservation, on_delete=models.CASCADE, verbose_name="Бронирование")
|
||||
created = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
|
||||
recieved_records = models.IntegerField(verbose_name="Полученные записи")
|
||||
processed_records = models.IntegerField(verbose_name="Обработанные записи")
|
||||
hotel = models.OneToOneField(Hotel, on_delete=models.CASCADE, verbose_name="Отель")
|
||||
created = models.DateTimeField(auto_now=True, verbose_name="Дата обновления") # Последняя дата обновления записи
|
||||
recieved_records = models.IntegerField(default=0, verbose_name="Полученные записи")
|
||||
processed_records = models.IntegerField(default=0, verbose_name="Обработанные записи")
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Журнал синхронизации"
|
||||
verbose_name_plural = "Журналы синхронизации"
|
||||
|
||||
def __str__(self):
|
||||
return f"Отель: {self.hotel.name} | Получено: {self.recieved_records} | Обработано: {self.processed_records}"
|
||||
|
||||
|
||||
|
||||
class ViolationLog(models.Model):
|
||||
|
||||
Reference in New Issue
Block a user