Merge main master

This commit is contained in:
2024-12-07 11:21:48 +09:00
parent bc8ccad21d
commit 5974463e54
2 changed files with 63 additions and 0 deletions

BIN
GeoLite2-City.mmdb Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 MiB

63
bot/log_processor.py Normal file
View File

@@ -0,0 +1,63 @@
import geoip2.database
from user_agents import parse
from django.db.models import Count
from users.models import UserActivityLog
# Геолокация по IP
def get_geolocation(ip):
try:
with geoip2.database.Reader('GeoLite2-City.mmdb') as reader:
response = reader.city(ip)
return {
'city': response.city.name,
'country': response.country.name,
'latitude': response.location.latitude,
'longitude': response.location.longitude,
}
except Exception:
return None
# Анализ user-agent
def get_user_agent_details(user_agent_string):
user_agent = parse(user_agent_string)
return {
'device': user_agent.device.family,
'os': user_agent.os.family,
'browser': user_agent.browser.family,
}
# Обработка логов
def analyze_logs():
logs = UserActivityLog.objects.all()
for log in logs:
# Геолокация
geo = get_geolocation(log.ip)
if geo:
log.location = f"{geo['city']}, {geo['country']}"
# User Agent
ua_details = get_user_agent_details(log.UAString)
log.device = ua_details['device']
log.platform = ua_details['os']
log.agent = ua_details['browser']
# Сохранение обновлённой записи
log.save()
# Генерация статистики
def generate_statistics():
statistics = {}
# Уникальные IP
unique_ips = UserActivityLog.objects.values('ip').distinct().count()
statistics['unique_ips'] = unique_ips
# Популярные страницы
popular_pages = UserActivityLog.objects.values('page_url').annotate(count=Count('page_url')).order_by('-count')[:10]
statistics['popular_pages'] = [{"url": page['page_url'], "count": page['count']} for page in popular_pages]
# Типы устройств
devices = UserActivityLog.objects.values('device').annotate(count=Count('device')).order_by('-count')
statistics['devices'] = [{"device": device['device'], "count": device['count']} for device in devices]
return statistics