From: Chenxiong Qi <[email protected]>

This gives better performance to get statistics of tasks by user.

---
 hub/kojihub.py       |    9 +++++++++
 www/kojiweb/index.py |    7 ++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/hub/kojihub.py b/hub/kojihub.py
index f794d5d..b0f7e65 100644
--- a/hub/kojihub.py
+++ b/hub/kojihub.py
@@ -9338,6 +9338,15 @@ class RootExports(object):
                                values=locals(), opts=queryOpts)
         return query.iterate()
 
+    def reportTasksByUser(self):
+        """Report of tasks by user"""
+        fields = ('owner', 'tasks_count')
+        sql = '''
+SELECT owner, COUNT(id) AS tasks_count
+FROM task GROUP BY owner ORDER BY owner'''
+        rows = _multiRow(sql, None, fields)
+        return dict(((str(row['owner']), row['tasks_count']) for row in rows))
+
 
 class BuildRoot(object):
 
diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py
index ff15a5f..45a4941 100644
--- a/www/kojiweb/index.py
+++ b/www/kojiweb/index.py
@@ -1986,13 +1986,10 @@ def tasksbyuser(environ, start=None, order='-tasks'):
     maxTasks = 1
     
     users = server.listUsers()
+    data = server.reportTasksByUser()
 
-    server.multicall = True
     for user in users:
-        server.listTasks(opts={'owner': user['id']}, queryOpts={'countOnly': 
True})
-    taskCounts = server.multiCall()
-
-    for user, [numTasks] in zip(users, taskCounts):
+        numTasks = data.get(str(user['id']), 0)
         user['tasks'] = numTasks
         if numTasks > maxTasks:
             maxTasks = numTasks
-- 
1.7.1

--
buildsys mailing list
[email protected]
https://admin.fedoraproject.org/mailman/listinfo/buildsys

Reply via email to