From 58d9c272003f490fede7f47dca430a4b420698e4 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Tue, 6 Jul 2021 14:52:17 +0200
Subject: [PATCH] =?UTF-8?q?Jobs:=20N=C4=9Bkter=C3=A9=20joby=20mohou=20expi?=
 =?UTF-8?q?rovat=20po=20del=C5=A1=C3=AD=20dob=C4=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 etc/config.py.example | 3 +++
 mo/jobs/__init__.py   | 6 +++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/etc/config.py.example b/etc/config.py.example
index af31c885..b0bf3825 100644
--- a/etc/config.py.example
+++ b/etc/config.py.example
@@ -48,6 +48,9 @@ GC_PERIOD = 60
 # Za jak dlouho expiruje dokončená dávka [min]
 JOB_EXPIRATION = 5
 
+# Některé dávky (analýza scanů) mají delší expiraci [min]
+JOB_EXPIRATION_LONG = 1440
+
 # Kolik nejvýše dovolujeme registrací za minutu
 REG_MAX_PER_MINUTE = 10
 
diff --git a/mo/jobs/__init__.py b/mo/jobs/__init__.py
index e443573e..2d7da1a0 100644
--- a/mo/jobs/__init__.py
+++ b/mo/jobs/__init__.py
@@ -27,6 +27,7 @@ class TheJob:
     job_id: Optional[int]
     gatekeeper: Optional[mo.rights.Gatekeeper]
     errors: List[str]
+    expires_in_minutes: int
 
     def __init__(self, job_id: Optional[int] = None):
         """Pokud chceme pracovat s existujícím jobem, zadáme jeho ID."""
@@ -133,10 +134,13 @@ class TheJob:
         job = self.job
         logger.info(f'Job: Spouštím job #{job.job_id} ({job.type}) uživatele #{job.user_id}')
         job.state = db.JobState.running
+        job.finished_at = None
+        job.expires_at = None
         sess.commit()
 
         try:
             self.gatekeeper = mo.rights.Gatekeeper(job.user)
+            self.expires_in_minutes = config.JOB_EXPIRATION
             _handler_table[job.type](self)
             if self.errors:
                 logger.info(f'Job: Neúspěšně dokončen job #{job.job_id} ({job.result})')
@@ -153,7 +157,7 @@ class TheJob:
             job.result = 'Interní chyba, informujte prosím správce systému.'
 
         job.finished_at = mo.util.get_now()
-        job.expires_at = job.finished_at + timedelta(minutes=config.JOB_EXPIRATION)
+        job.expires_at = job.finished_at + timedelta(minutes=self.expires_in_minutes)
         sess.commit()
 
 
-- 
GitLab