From 0b0a79b7201f24aeccc07010bf59aa8ce89ffa9c Mon Sep 17 00:00:00 2001
From: Samuel Gaist <samuel.gaist@idiap.ch>
Date: Thu, 24 Sep 2020 16:33:26 +0200
Subject: [PATCH] [statistics][templatetags] Add user accurate computation
 method

This allows for correct numbers to be shown.
---
 .../templatetags/statistics_tags.py           | 45 +++++++++++++++++--
 1 file changed, 42 insertions(+), 3 deletions(-)

diff --git a/beat/web/statistics/templatetags/statistics_tags.py b/beat/web/statistics/templatetags/statistics_tags.py
index 527962a37..f6846984b 100644
--- a/beat/web/statistics/templatetags/statistics_tags.py
+++ b/beat/web/statistics/templatetags/statistics_tags.py
@@ -27,16 +27,55 @@
 
 
 from django import template
+from django.contrib.auth.models import User
 
-from ..views import calculate_totals
+from ...algorithms.models import Algorithm
+from ...attestations.models import Attestation
+from ...backend.models import Environment
+from ...backend.models import Queue
+from ...backend.models import Worker
+from ...databases.models import Database
+from ...dataformats.models import DataFormat
+from ...experiments.models import Experiment
+from ...libraries.models import Library
+from ...plotters.models import Plotter
+from ...plotters.models import PlotterParameter
+from ...reports.models import Report
+from ...search.models import Search
+from ...team.models import Team
+from ...toolchains.models import Toolchain
 
 register = template.Library()
 
 
+def calculate_totals(user):
+    """Caculates all totals required by the statistics display"""
+
+    return dict(
+        users=User.objects.count(),
+        databases=Database.objects.for_user(user, True).count(),
+        environments=Environment.objects.for_user(user, True).count(),
+        queues=Queue.objects.count(),
+        workers=Worker.objects.count(),
+        experiments=Experiment.objects.for_user(user, True).count(),
+        toolchains=Toolchain.objects.for_user(user, True).count(),
+        algorithms=Algorithm.objects.for_user(user, True).count(),
+        libraries=Library.objects.for_user(user, True).count(),
+        dataformats=DataFormat.objects.for_user(user, True).count(),
+        teams=Team.objects.for_user(user, True).count(),
+        attestations=Attestation.objects.for_user(user, True).count(),
+        searches=Search.objects.for_user(user, True).count(),
+        reports=Report.objects.for_user(user, True).count(),
+        plotters=Plotter.objects.for_user(user, True).count(),
+        plotterparameters=PlotterParameter.objects.for_user(user, True).count(),
+    )
+
+
 @register.inclusion_tag("statistics/panels/status.html", takes_context=True)
 def status(context, id):
+    request = context["request"]
     return {
-        "request": context["request"],
+        "user": request.user,
         "panel_id": id,
-        "totals": calculate_totals(),
+        "totals": calculate_totals(request.user),
     }
-- 
GitLab