diff --git a/dnslog/urls.py b/dnslog/urls.py index 5bef583..c431d5d 100644 --- a/dnslog/urls.py +++ b/dnslog/urls.py @@ -25,6 +25,7 @@ urlpatterns = [ re_path(r'^rebind/gen$', views.rebind_gen, name='rebind_gen'), re_path(r'^as_admin/$', views.as_admin, name='as_admin'), re_path(r'^ip2location$', views.ip_to_location, name='ip_to_location'), + re_path(r'^ip_count/(.+?)$', views.ip_count, name='ip_count'), re_path(r'^config/update$', views.config_update, name='config_update'), path('i18n/', include('django.conf.urls.i18n')), re_path(r'^.*$', views.index, name='index'), diff --git a/logview/views.py b/logview/views.py index 4130d69..cca973f 100644 --- a/logview/views.py +++ b/logview/views.py @@ -21,6 +21,9 @@ from django.conf import settings from django.contrib.auth import logout from django.utils.translation import gettext as _ from django.db.models import Q +from django.db.models import Count +from django.http import JsonResponse +from django.db.models import F def get_city_by_ip(ip): @@ -501,6 +504,19 @@ def ip_to_location(request): return HttpResponse(json.dumps(found)) +def ip_count(request, type): + userid = request.session.get('userid', None) + if not userid: + return redirect('/login') + obj = [] + if type == 'dns': + obj = DNSLog.objects.filter(Q(user_id=userid)).values('ip').annotate(total=Count('ip')).order_by('-total', 'ip') + elif type == 'web': + obj = WebLog.objects.filter(Q(user_id=userid)).values('remote_addr').annotate(total=Count('remote_addr')).annotate(ip= F('remote_addr')).order_by('-total', 'ip') + + return JsonResponse({"data": list(obj)}, safe=False) + + def config_update(request): userid = request.session.get('userid', None) config_name = request.GET.get('name', '') diff --git a/templates/pager.html b/templates/pager.html index 481c39a..613e73b 100644 --- a/templates/pager.html +++ b/templates/pager.html @@ -2,33 +2,46 @@