cleaning jobs and tasks
authorMaciej Tronowski <mtro@man.poznan.pl>
Tue, 28 Apr 2015 09:53:33 +0000 (11:53 +0200)
committerMaciej Tronowski <mtro@man.poznan.pl>
Tue, 28 Apr 2015 09:53:33 +0000 (11:53 +0200)
qcg/service.py
qcg/templates/qcg/job.html
qcg/templates/qcg/task.html
qcg/urls.py
qcg/views.py

index c87f40a..be0ccac 100644 (file)
@@ -85,7 +85,7 @@ def update_user_data(user, proxy):
 
 @transaction.atomic
 def update_job(job, proxy):
-    if job.terminated:
+    if job.terminated and job.purged:
         return
 
     ts = time.time()
@@ -180,3 +180,19 @@ def cancel(obj, proxy):
     elapsed = time.time() - ts
     elapsed_py = elapsed - elapsed_cancel
     logger.info('(%.3f) OBJ = %s (%.3f), TIME = %.3f', elapsed, obj, elapsed_cancel, elapsed_py)
+
+
+def clean(obj, proxy):
+    ts = time.time()
+    QCG.start()
+
+    qcg_obj = obj.qcg_job if isinstance(obj, Job) else obj.qcg_task
+    qcg_obj.credential = Credential(proxy)
+
+    jts = time.time()
+    qcg_obj.clean()
+    elapsed_clean = time.time() - jts
+
+    elapsed = time.time() - ts
+    elapsed_py = elapsed - elapsed_clean
+    logger.info('(%.3f) OBJ = %s (%.3f), TIME = %.3f', elapsed, obj, elapsed_clean, elapsed_py)
index 0189ef2..d20049d 100644 (file)
                 {% csrf_token %}
                 <button type="submit" class="btn btn-default">Anuluj zadanie</button>
             </form>
+        {% elif not job.purged %}
+            <form action="{% url 'job_clean' job.job_id %}" method="post">
+                {% csrf_token %}
+                <button type="submit" class="btn btn-default">Usuń katalog roboczy</button>
+            </form>
         {% endif %}
     </div>
 
index 8615cb8..1d83d66 100644 (file)
                 {% csrf_token %}
                 <button type="submit" class="btn btn-default">Anuluj zadanie</button>
             </form>
+        {% elif not task.purged %}
+            <form action="{% url 'task_clean' task.job.job_id task.task_id %}" method="post">
+                {% csrf_token %}
+                <button type="submit" class="btn btn-default">Usuń katalog roboczy</button>
+            </form>
         {% endif %}
     </div>
 
@@ -85,7 +90,7 @@
                                 {% display_attribute 'Katalog roboczy' alloc.working_directory %}
                                 {% display_attribute 'Usunięty katalog roboczy?' task.purged %}
 
-                                {% if alloc.working_directory %}
+                                {% if alloc.working_directory and not task.purged %}
                                     <button class="btn btn-default working-dir"
                                             data-toggle="modal" data-target="#gridftp" data-url="{{ alloc.working_directory|cut:'gsiftp://'  }}">
                                         Przeglądaj katalog roboczy
index 1353522..6d9f0cc 100644 (file)
@@ -13,9 +13,12 @@ urlpatterns = patterns('',
 
     url(r'^$', views.index, name='index'),
     url(r'^jobs/$', views.jobs_list, name='jobs'),
+
     url(r'^job/submit/$', views.job_submit, name='job_submit'),
     url(r'^job/cancel/(?P<job_id>[\w]+)/$', views.job_cancel, name='job_cancel'),
-    url(r'^task/cancel(?P<job_id>[\w]+)/(?P<task_id>[\w]+)/$', views.task_cancel, name='task_cancel'),
+    url(r'^job/clean/(?P<job_id>[\w]+)/$', views.job_clean, name='job_clean'),
+    url(r'^task/cancel/(?P<job_id>[\w]+)/(?P<task_id>[\w]+)/$', views.task_cancel, name='task_cancel'),
+    url(r'^task/clean/(?P<job_id>[\w]+)/(?P<task_id>[\w]+)/$', views.task_clean, name='task_clean'),
 
     url(r'^job/(?P<job_id>[\w]+)/?$', views.job_details, name='job'),
     url(r'^job/(?P<job_id>[\w]+)/(?P<task_id>[\w]+)/?$', views.task_details, name='task'),
index 89ddfa4..b702668 100644 (file)
@@ -23,7 +23,7 @@ from filex.ftp import FTPOperation, FTPError
 from filex.views import make_url
 from qcg.forms import FiltersForm, ColumnsForm, JobDescriptionForm, EnvFormSet
 from qcg.utils import paginator_context
-from qcg.service import update_user_data, submit_job, update_job, cancel
+from qcg.service import update_user_data, submit_job, update_job, cancel, clean
 
 
 def index(request):
@@ -215,6 +215,31 @@ def obj_cancel(request, obj):
     return redirect(obj)
 
 
+@require_POST
+@login_required
+def job_clean(request, job_id):
+    return obj_clean(request, get_object_or_404(request.user.jobs, job_id=job_id))
+
+
+@require_POST
+@login_required
+def task_clean(request, job_id, task_id):
+    return obj_clean(request, get_object_or_404(request.user.tasks, job__job_id=job_id, task_id=task_id))
+
+
+def obj_clean(request, obj):
+    try:
+        clean(obj, request.session['proxy'])
+    except PyqcgException as e:
+        messages.error(request, format_html('<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> {}',
+                                            e.message))
+    else:
+        messages.success(request, format_html('<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> '
+                                              'Usunięto katalog roboczy.'))
+
+    return redirect(obj)
+
+
 @login_required
 def gridftp(request):
     return render(request, 'qcg/gridftp.html',