From 091db21cf894c82906083f6d5a1850eee98cadc1 Mon Sep 17 00:00:00 2001 From: trevor Date: Wed, 18 Dec 2024 20:44:21 +0900 Subject: [PATCH] GeoIP is functional --- antifroud/admin.py | 2 +- antifroud/models.py | 21 +++++++++++++++++++-- var_clean.sh | 7 +++++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100755 var_clean.sh diff --git a/antifroud/admin.py b/antifroud/admin.py index 681f4bdb..1d6b6294 100644 --- a/antifroud/admin.py +++ b/antifroud/admin.py @@ -111,7 +111,7 @@ class ExternalDBSettingsAdmin(admin.ModelAdmin): @admin.register(UserActivityLog) class UserActivityLogAdmin(admin.ModelAdmin): - list_display = ("id", "ip", 'get_location',"formatted_timestamp", "date_time", "page_id", "url_parameters", "page_url" ,"created", "page_title", "type", "hits") + list_display = ("id", 'get_location',"formatted_timestamp", "date_time", "page_id", "url_parameters", "page_url" ,"created", "page_title", "type", "hits") search_fields = ("page_title", "url_parameters") list_filter = ("page_title", "created") readonly_fields = ("created", "timestamp") diff --git a/antifroud/models.py b/antifroud/models.py index 5434b5c8..0f7a861e 100644 --- a/antifroud/models.py +++ b/antifroud/models.py @@ -2,6 +2,10 @@ from django.db import models from hotels.models import Hotel from hotels.models import Reservation from datetime import datetime, timezone +from geoip2.errors import AddressNotFoundError +from geoip2.database import Reader +from django.conf import settings +import logging class UserActivityLog(models.Model): external_id = models.CharField(max_length=255, unique=True, verbose_name="Внешний ID", db_index=True) @@ -61,10 +65,23 @@ class UserActivityLog(models.Model): return "IP-адрес отсутствует" try: - geoip_reader = Reader(settings.GEOIP_PATH + '/GeoLite2-City.mmdb') + db_path = f"{settings.GEOIP_PATH}/GeoLite2-City.mmdb" + geoip_reader = Reader(db_path) response = geoip_reader.city(self.ip) - return f"{response.city.name}, {response.country.name}" + + # Извлекаем город и страну на русском языке + city = response.city.names.get('ru', "Город неизвестен") + country = response.country.names.get('ru', "Страна неизвестна") + + return f"{city}, {country}" + + except AddressNotFoundError: + return "IP-адрес не найден в базе" + except FileNotFoundError: + logger.error(f"Файл базы данных GeoIP не найден по пути: {db_path}") + return "Файл базы данных GeoIP не найден" except Exception as e: + logger.error(f"Ошибка при определении местоположения: {e}") return "Местоположение недоступно" class ExternalDBSettings(models.Model): name = models.CharField(max_length=255, unique=True, help_text="Имя подключения для идентификации.") diff --git a/var_clean.sh b/var_clean.sh new file mode 100755 index 00000000..45bbf5d9 --- /dev/null +++ b/var_clean.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# Получаем список всех снапов с ревизиями, фильтруем по статусу "disabled" +snap list --all | awk '/disabled/{print $1,$3}' | while read SNAP_NAME REVISION; do + echo "Удаляю $SNAP_NAME ревизию $REVISION..." + sudo snap remove "$SNAP_NAME" --revision="$REVISION" +done