rename sync -> service & add logging
authorMaciej Tronowski <mtro@man.poznan.pl>
Tue, 24 Mar 2015 10:50:22 +0000 (11:50 +0100)
committerMaciej Tronowski <mtro@man.poznan.pl>
Tue, 24 Mar 2015 10:50:22 +0000 (11:50 +0100)
qcg/service.py [new file with mode: 0644]
qcg/sync.py [deleted file]
qcg/views.py

diff --git a/qcg/service.py b/qcg/service.py
new file mode 100644 (file)
index 0000000..fb312c7
--- /dev/null
@@ -0,0 +1,77 @@
+import logging
+import time
+
+from django.db import transaction
+from django.utils.timezone import now
+
+from pyqcg.service import Registry
+from pyqcg.utils import Credential, TimePeriod
+
+
+logger = logging.getLogger(__name__)
+
+
+@transaction.atomic
+def update_user_data(user, proxy):
+    ts = time.time()
+    from qcg.models import User, Job, Task, Allocation, NodeInfo
+
+    credential = Credential(proxy)
+    registry = Registry(credential)
+
+    # put lock on user record (hopefully..?)
+    user = User.objects.select_for_update().get(pk=user.pk)
+
+    changed_filter = {'changed': TimePeriod(after=user.last_update)}
+
+    ###################################
+    # Jobs
+    ###################################
+    jts = time.time()
+    jobs = registry.jobs(**changed_filter)
+    jte = time.time()
+
+    jobs_count = 0
+    for qcg_job in jobs:
+        params = Job.qcg_map(qcg_job, user)
+        job_id = params.pop('job_id')
+
+        Job.objects.update_or_create(job_id=job_id, defaults=params)
+        jobs_count += 1
+
+    ###################################
+    # Tasks
+    ###################################
+    tts = time.time()
+    tasks = registry.tasks(**changed_filter)
+    tte = time.time()
+
+    jobs_cache = {j.job_id: j for j in Job.objects.filter(owner=user)}
+    task_count = 0
+    for qcg_task in tasks:
+        params = Task.qcg_map(qcg_task, jobs_cache)
+        task_id = params.pop('task_id')
+
+        task, created = Task.objects.update_or_create(job__job_id=qcg_task.job_id, task_id=task_id, defaults=params)
+
+        if not created:
+            task.allocations.all().delete()
+
+        for qcg_alloc in qcg_task.allocations:
+            alloc = task.allocations.create(**Allocation.qcg_map(qcg_alloc))
+
+            for qcg_node in qcg_alloc.nodes:
+                alloc.nodes.create(**NodeInfo.qcg_map(qcg_node))
+
+        task_count += 1
+
+    # release user lock
+    user.last_update = now()
+    user.save()
+
+    elapsed = time.time() - ts
+    elapsed_jobs = jte - jts
+    elapsed_tasks = tte - tts
+    elapsed_py = elapsed - elapsed_jobs - elapsed_tasks
+    logger.info('(%.3f) USER = %s, JOBS = %s (%.3f), TASKS = %s (%.3f), TIME = %.3f',
+                elapsed, user, jobs_count, elapsed_jobs, task_count, elapsed_tasks, elapsed_py)
diff --git a/qcg/sync.py b/qcg/sync.py
deleted file mode 100644 (file)
index 9b3cc25..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-from django.db import transaction
-from django.utils.timezone import now
-
-from pyqcg.service import Registry
-from pyqcg.utils import Credential, TimePeriod
-
-
-@transaction.atomic
-def update_user_data(user, proxy):
-    from qcg.models import User, Job, Task, Allocation, NodeInfo
-
-    credential = Credential(proxy)
-    registry = Registry(credential)
-
-    # put lock on user record (hopefully..?)
-    user = User.objects.select_for_update().get(pk=user.pk)
-
-    changed_filter = {'changed': TimePeriod(after=user.last_update)}
-
-    ###################################
-    # Jobs
-    ###################################
-    for qcg_job in registry.jobs(**changed_filter):
-        params = Job.qcg_map(qcg_job, user)
-        job_id = params.pop('job_id')
-
-        Job.objects.update_or_create(job_id=job_id, defaults=params)
-
-    ###################################
-    # Tasks
-    ###################################
-    jobs_cache = {j.job_id: j for j in Job.objects.filter(owner=user)}
-    for qcg_task in registry.tasks(**changed_filter):
-        params = Task.qcg_map(qcg_task, jobs_cache)
-        task_id = params.pop('task_id')
-
-        task, created = Task.objects.update_or_create(job__job_id=qcg_task.job_id, task_id=task_id, defaults=params)
-
-        if not created:
-            task.allocations.all().delete()
-
-        for qcg_alloc in qcg_task.allocations:
-            alloc = task.allocations.create(**Allocation.qcg_map(qcg_alloc))
-
-            for qcg_node in qcg_alloc.nodes:
-                alloc.nodes.create(**NodeInfo.qcg_map(qcg_node))
-
-    # release user lock
-    user.last_update = now()
-    user.save()
index 2a26f83..a760425 100644 (file)
@@ -17,7 +17,7 @@ from pyqcg.utils import Credential
 
 from qcg.forms import FiltersForm, ColumnsForm, JobDescriptionForm, EnvFormSet
 from qcg.utils import paginator_context
-from qcg.sync import update_user_data
+from qcg.service import update_user_data
 
 
 def index(request):
@@ -59,7 +59,6 @@ def parse_date(string):
 def jobs_list(request):
     QCG.start()
     update_user_data(request.user, request.session['proxy'])
-    QCG.stop()
 
     tasks = request.user.tasks.order_by('-job__submission_time', '-submission_time') \
         .select_related('job').prefetch_related('allocations__nodes')