Fixed job detail crash when running job is killed
authorJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Sat, 13 Nov 2010 01:20:18 +0000 (01:20 +0000)
committerJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Sat, 13 Nov 2010 01:20:18 +0000 (01:20 +0000)
Added notify field to job table: Only notify about finished job when "too slow" was displayed.

bin/djais/models.py
bin/djais/views.py
bin/jobrunner.py
html_templates/job.html
structure.sql

index ebdc864c20125dfc4b36def72d918481ad1aa800..e73ff49162ff63bad8ed56eb3cbb98ee64e009d1 100644 (file)
@@ -218,6 +218,7 @@ class Job(models.Model):
     pid = models.IntegerField(blank=True, null=True)
     result = models.IntegerField(blank=True, null=True)
     archive_time = models.DateTimeField(blank=True, null=True)
+    notify = models.CharField(max_length=1, blank=True, null=True)
 
     def queue_rank(self):
         return Job.objects.filter(queue_time__lt=self.queue_time).filter(start_time__isnull=True).count() + 1
index 82b0d2e413087f9c47a80526132003a75b0d5488..a2eec223359eb6458f1181279eca7a3f8c7ec38d 100644 (file)
@@ -775,6 +775,9 @@ def job_get(request, jobid):
         total_wait += 1
         if total_wait > 15:
             request.user.info('Your query is slow. Please be patient.')
+            if not job.notify:
+                job.notify = 'W' # Web
+                job.save()
             return HttpResponseRedirect('/job/%s/' % job.id)
         job = get_object_or_404(Job, id=jobid)
     
index ab78eb93b3ee89ff4a3ed3ed8711e96918cdf753..31b493753e563504f6f1148f2aa30b01c6b53640 100755 (executable)
@@ -98,8 +98,15 @@ def runjob():
     dbcommit()
     logging.info('Job complete: result=%s', returncode)
 
-    sqlexec(u"INSERT INTO user_message (user_id, user_message_category_id, txt) VALUES(%(user_id)s, 'info', %(msg)s)", {'user_id':user_id, 'msg':('Your <a href="/job/%(jobid)s/download">job %(jobid)s</a> is complete.' % {'jobid': jobid}) })
-    dbcommit()
+    sqlexec(u'SELECT notify FROM job where id=%(jobid)s', {'jobid': jobid})
+    row = get_common_cursor().fetchone()
+    if row:
+        notify = row[0]
+        if notify == u'W':
+            sqlexec(u"INSERT INTO user_message (user_id, user_message_category_id, txt) VALUES(%(user_id)s, 'info', %(msg)s)", {'user_id':user_id, 'msg':('Your <a href="/job/%(jobid)s/download">job %(jobid)s</a> is complete.' % {'jobid': jobid}) })
+            sqlexec(u'UPDATE job SET notify=NULL WHERE id=%(jobid)s', {'jobid': jobid})
+            dbcommit()
+        # else SMS, Mail ...
 
     return True
 
index 6300602e157e0cd3524321d1c47b7aeb349a18b8..a1c2fd8eaf563f5bec96eb0692c2f25467bd4e4f 100644 (file)
@@ -18,18 +18,23 @@ Result size: {{ job.get_sucess_size|filesizeformat }}<br>
     {% if job.start_time %}
     Status: <b>Running</b> since {{ job.start_time|date:"Y-m-d H:i:s" }} UTC ( {{ job.running_time}} ) <br>
     {% with job.get_stats as stats %}
-    Process ID: {{ stats.pid }}<br>
-    CPU ID: {{ stats.processor }}<br>
-    Nice: {{ stats.nice }}<br>
-    State: {{ stats.state }}<br>
-    Virtual size: {{ stats.vsize|filesizeformat }}<br>
-    {% comment %}
-    TODO: 
-    "getconf CLK_TCK" = 100 -> 1 tick = 1/100 seconds
-    see Job.get_stat
-    {% endcomment %}
-    Time spent scheduled in user mode: {{ stats.utime }}00 ms<br>
-    Time spent scheduled in system mode: {{ stats.stime }}00 ms<br>
+    {% if stats %}
+        Process ID: {{ stats.pid }}<br>
+        CPU ID: {{ stats.processor }}<br>
+        Nice: {{ stats.nice }}<br>
+        State: {{ stats.state }}<br>
+        Virtual size: {{ stats.vsize|filesizeformat }}<br>
+        {% comment %}
+        TODO: 
+        "getconf CLK_TCK" = 100 -> 1 tick = 1/100 seconds
+        see Job.get_stat
+        {% endcomment %}
+        Time spent scheduled in user mode: {{ stats.utime }}00 ms<br>
+        Time spent scheduled in system mode: {{ stats.stime }}00 ms<br>
+    {% else %}
+        <b>Internal error</b>: process {{ job.pid }} stats are not available.<br>
+        Job runner daemon may be restarting now....
+    {% endif %}
     {% endwith %}
     {% else %}
     Status: <b>Queued</b> since {{ job.queue_time }}.<br>
index 01218e6e6f75b12897f79f0e4639d2eee6555186..2e8c6f0d2bd393876f48b86742d56b29bf41bca2 100644 (file)
@@ -116,7 +116,8 @@ CREATE TABLE job (
     pid integer,
     result integer,
     archive_time timestamp without time zone,
-    friendly_filename character varying(255) NOT NULL
+    friendly_filename character varying(255) NOT NULL,
+    notify character varying(1)
 );