diff --git a/logs/templates/logs/sidebar.html b/logs/templates/logs/sidebar.html
index b12ed00c..cd8bc02f 100644
--- a/logs/templates/logs/sidebar.html
+++ b/logs/templates/logs/sidebar.html
@@ -30,6 +30,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Évènements
+
+
+ Général
+
Base de données
diff --git a/logs/urls.py b/logs/urls.py
index b8042083..832288e0 100644
--- a/logs/urls.py
+++ b/logs/urls.py
@@ -27,6 +27,7 @@ from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^revert_action/(?P[0-9]+)$', views.revert_action, name='revert-action'),
+ url(r'^stats_general/$', views.stats_general, name='stats-general'),
url(r'^stats_models/$', views.stats_models, name='stats-models'),
url(r'^stats_users/$', views.stats_users, name='stats-users'),
url(r'^stats_actions/$', views.stats_actions, name='stats-actions'),
diff --git a/logs/views.py b/logs/views.py
index 05e0150c..61e6f6e3 100644
--- a/logs/views.py
+++ b/logs/views.py
@@ -93,9 +93,34 @@ def revert_action(request, revision_id):
return redirect("/logs/")
return form({'objet': revision, 'objet_name': revision.__class__.__name__ }, 'logs/delete.html', request)
+@login_required
+@permission_required('cableur')
+def stats_general(request):
+ all_active_users = User.objects.filter(state=User.STATE_ACTIVE)
+ ip = dict()
+ for ip_range in IpType.objects.all():
+ all_ip = IpList.objects.filter(ip_type=ip_range)
+ used_ip = Interface.objects.filter(ipv4__in=all_ip).count()
+ ip[ip_range] = [ip_range, all_ip.count(), used_ip, all_ip.count()-used_ip]
+ stats = [
+ [["Categorie", "Nombre d'utilisateurs"], {
+ 'active_users' : ["Users actifs", User.objects.filter(state=User.STATE_ACTIVE).count()],
+ 'inactive_users' : ["Users désactivés", User.objects.filter(state=User.STATE_DISABLED).count()],
+ 'archive_users' : ["Users archivés", User.objects.filter(state=User.STATE_ARCHIVE).count()],
+ 'adherent_users' : ["Adhérents à l'association", len([user for user in all_active_users if user.is_adherent()])],
+ 'connexion_users' : ["Utilisateurs bénéficiant d'une connexion", len([user for user in all_active_users if user.has_access()])],
+ 'ban_users' : ["Utilisateurs bannis", len([user for user in all_active_users if user.is_ban()])],
+ 'whitelisted_user' : ["Utilisateurs bénéficiant d'une connexion gracieuse", len([user for user in all_active_users if user.is_whitelisted()])],
+ }],
+ [["Range d'ip", "Nombre d'ip totales", "Nombre d'ip utilisées", "Nombre d'ip libres"] ,ip]
+ ]
+ return render(request, 'logs/stats_general.html', {'stats_list': stats})
+
+
@login_required
@permission_required('cableur')
def stats_models(request):
+ all_active_users = User.objects.filter(state=User.STATE_ACTIVE)
stats = {
'Users' : {
'users' : [User.PRETTY_NAME, User.objects.count()],