add IP count

This commit is contained in:
lijiejie
2024-06-09 22:54:01 +08:00
parent 80083e67ab
commit 71c6aae27c
4 changed files with 60 additions and 8 deletions
+1
View File
@@ -25,6 +25,7 @@ urlpatterns = [
re_path(r'^rebind/gen$', views.rebind_gen, name='rebind_gen'), 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'^as_admin/$', views.as_admin, name='as_admin'),
re_path(r'^ip2location$', views.ip_to_location, name='ip_to_location'), 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'), re_path(r'^config/update$', views.config_update, name='config_update'),
path('i18n/', include('django.conf.urls.i18n')), path('i18n/', include('django.conf.urls.i18n')),
re_path(r'^.*$', views.index, name='index'), re_path(r'^.*$', views.index, name='index'),
+16
View File
@@ -21,6 +21,9 @@ from django.conf import settings
from django.contrib.auth import logout from django.contrib.auth import logout
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from django.db.models import Q 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): def get_city_by_ip(ip):
@@ -501,6 +504,19 @@ def ip_to_location(request):
return HttpResponse(json.dumps(found)) 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): def config_update(request):
userid = request.session.get('userid', None) userid = request.session.get('userid', None)
config_name = request.GET.get('name', '') config_name = request.GET.get('name', '')
+18 -5
View File
@@ -2,33 +2,46 @@
<nav> <nav>
<ul class="pagination"> <ul class="pagination">
{% if logs.has_previous %} {% if numpages > 5 %}
<li class="page-item"><a class="page-link" href="?page={{ logs.previous_page_number }}"> <li class="page-item"><a class="page-link" href="?{{ query_prefix }}page=1">
<span aria-hidden="true">&laquo;</span></a></li> <span aria-hidden="true">&laquo;</span></a></li>
{% endif %}
{% if logs.has_previous %}
<li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ logs.previous_page_number }}">
<span aria-hidden="true">Previous</span></a></li>
{% else %} {% else %}
<li class="page-item disabled"><span class="page-link" aria-hidden="true">&laquo;</span></li> <li class="page-item disabled"><span class="page-link" aria-hidden="true">Previous</span></li>
{% endif %} {% endif %}
{% if logs.number|add:'-4' > 1 %} {% if logs.number|add:'-4' > 1 %}
<li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ logs.number|add:'-5' }}">&hellip;</a></li> <li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ logs.number|add:'-5' }}">&hellip;</a></li>
{% endif %} {% endif %}
{% spaceless %}
{% for i in logs.paginator.page_range %} {% for i in logs.paginator.page_range %}
{% if logs.number == i %} {% if logs.number == i %}
<li class="page-item active"><span class="page-link">{{ i }} <span class="sr-only">(current)</span></span></li> <li class="page-item active"><span class="page-link">{{ i }} <span class="sr-only">(current)</span></span></li>
{% elif i > logs.number|add:'-5' and i < logs.number|add:'5' %} {% elif i > logs.number|add:'-5' and i < logs.number|add:'5' %}
<li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ i }}">{{ i }}</a></li> <li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ i }}">{{ i }}</a></li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endspaceless %}
{% if logs.paginator.num_pages > logs.number|add:'4' %} {% if logs.paginator.num_pages > logs.number|add:'4' %}
<li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ logs.number|add:'5' }}">&hellip;</a></li> <li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ logs.number|add:'5' }}">&hellip;</a></li>
{% endif %} {% endif %}
{% if logs.has_next %} {% if logs.has_next %}
<li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ logs.next_page_number }}"><span aria-hidden="true">&raquo;</span></a></li> <li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ logs.next_page_number }}"><span aria-hidden="true">Next</span></a></li>
{% else %} {% else %}
<li class="page-item disabled"><span class="page-link" aria-hidden="true">&raquo;</span></li> <li class="page-item disabled"><span class="page-link" aria-hidden="true">Next</span></li>
{% endif %}
{% if numpages > 5 %}
<li class="page-item"><a class="page-link" href="?{{ query_prefix }}page={{ numpages }}">
<span aria-hidden="true">&raquo;</span></a></li>
{% endif %} {% endif %}
<span class="page-link ml-4" style="border: none">{% blocktranslate %}第{{ page }}页 / 共{{ numpages }}页, 共{{ total }}条记录{% endblocktranslate %}</span> <span class="page-link ml-4" style="border: none">{% blocktranslate %}第{{ page }}页 / 共{{ numpages }}页, 共{{ total }}条记录{% endblocktranslate %}</span>
+25 -3
View File
@@ -60,7 +60,8 @@
</div> </div>
{% include 'auto_reload.html' %} {% include 'auto_reload.html' %}
</form> </form>
<div id="ip_count" class="d-flex flex-wrap">
</div>
<div data-example-id="hoverable-table"> <div data-example-id="hoverable-table">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
@@ -68,7 +69,7 @@
<th>ID</th> <th>ID</th>
<th>{% translate '域名' %}</th> <th>{% translate '域名' %}</th>
<th>Type</th> <th>Type</th>
<th>IP</th> <th>IP<button id="btnCountIPs" class="btn btn-sm btn-info py-0 ml-2" onclick="count_ips('dns')">Count</button></th>
<th>{% translate '位置' %} <th>{% translate '位置' %}
<div class="spinner-grow spinner-grow-sm" role="status" id="spinner_location"> <div class="spinner-grow spinner-grow-sm" role="status" id="spinner_location">
</div> </div>
@@ -109,13 +110,15 @@
</div> </div>
{% include 'auto_reload.html' %} {% include 'auto_reload.html' %}
</form> </form>
<div id="ip_count" class="d-flex flex-wrap">
</div>
<div data-example-id="hoverable-table"> <div data-example-id="hoverable-table">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>ID</th>
<th style="width: 350px;">URL</th> <th style="width: 350px;">URL</th>
<th>IP</th> <th>IP<button id="btnCountIPs" class="btn btn-sm btn-info py-0 ml-2" onclick="count_ips('web')">Count</button></th>
<th>{% translate '位置' %} <th>{% translate '位置' %}
<div class="spinner-grow spinner-grow-sm" role="status" id="spinner_location"> <div class="spinner-grow spinner-grow-sm" role="status" id="spinner_location">
</div> </div>
@@ -543,6 +546,25 @@
} }
}); });
function count_ips(type){
$('#btnCountIPs').attr("disabled", true);
$.get("/ip_count/" + type, function(result){
$('#ip_count').html('');
for (let i = 0; i < result['data'].length - 1; i++) {
html = `
<a href="?ip=${result['data'][i]['ip']}" target="_blank">
<div class="card rounded-1 bg-light mr-4 my-1" style="width: 110px;" >
<div class="card-body p-0 justify-content-between d-flex">
<span class="badge bg-light" >${result['data'][i]['ip']}</span> <span class="badge bg-warning float-end rounded-1">${result['data'][i]['total']}</span>
</div>
</div>
</a>`;
$('#ip_count').append(html);
}
$('#btnCountIPs').attr("disabled", false);
});
}
</script> </script>
</body> </body>