mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Add long_polling_jobs to API (#78)
This commit is contained in:
@@ -55,15 +55,30 @@ def sorted_jobs(all_jobs, sort_by_date=True):
|
|||||||
@server.get('/api/jobs')
|
@server.get('/api/jobs')
|
||||||
def jobs_json():
|
def jobs_json():
|
||||||
try:
|
try:
|
||||||
hash_token = request.args.get('token', None)
|
|
||||||
all_jobs = [x.json() for x in RenderQueue.all_jobs()]
|
all_jobs = [x.json() for x in RenderQueue.all_jobs()]
|
||||||
job_cache_int = int(json.dumps(all_jobs).__hash__())
|
job_cache_int = int(json.dumps(all_jobs).__hash__())
|
||||||
job_cache_token = num_to_alphanumeric(job_cache_int)
|
job_cache_token = num_to_alphanumeric(job_cache_int)
|
||||||
if hash_token and hash_token == job_cache_token:
|
|
||||||
return [], 204 # no need to update
|
|
||||||
return {'jobs': all_jobs, 'token': job_cache_token}
|
return {'jobs': all_jobs, 'token': job_cache_token}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"Exception fetching all_jobs_cached: {e}")
|
logger.exception(f"Exception fetching jobs_json: {e}")
|
||||||
|
return [], 500
|
||||||
|
|
||||||
|
|
||||||
|
@server.get('/api/jobs_long_poll')
|
||||||
|
def long_polling_jobs():
|
||||||
|
try:
|
||||||
|
hash_token = request.args.get('token', None)
|
||||||
|
start_time = time.time()
|
||||||
|
while True:
|
||||||
|
all_jobs = jobs_json()
|
||||||
|
if all_jobs['token'] != hash_token:
|
||||||
|
return all_jobs
|
||||||
|
# Break after 30 seconds to avoid gateway timeout
|
||||||
|
if time.time() - start_time > 30:
|
||||||
|
return [], 204
|
||||||
|
time.sleep(1)
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(f"Exception fetching long_polling_jobs: {e}")
|
||||||
return [], 500
|
return [], 500
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -126,8 +126,9 @@ class RenderServerProxy:
|
|||||||
self.__update_job_cache(timeout, ignore_token)
|
self.__update_job_cache(timeout, ignore_token)
|
||||||
return self.__jobs_cache.copy() if self.__jobs_cache else None
|
return self.__jobs_cache.copy() if self.__jobs_cache else None
|
||||||
|
|
||||||
def __update_job_cache(self, timeout=5, ignore_token=False):
|
def __update_job_cache(self, timeout=30, ignore_token=False):
|
||||||
url = f'jobs?token={self.__jobs_cache_token}' if self.__jobs_cache_token and not ignore_token else 'jobs'
|
url = f'jobs_long_poll?token={self.__jobs_cache_token}' if (self.__jobs_cache_token and
|
||||||
|
not ignore_token) else 'jobs'
|
||||||
status_result = self.request_data(url, timeout=timeout)
|
status_result = self.request_data(url, timeout=timeout)
|
||||||
if status_result is not None:
|
if status_result is not None:
|
||||||
sorted_jobs = []
|
sorted_jobs = []
|
||||||
|
|||||||
Reference in New Issue
Block a user