Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions agent/job.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
except ImportError:
pass


DEFAULT_TIMEOUT = 4 * 3600
agent_database = SqliteDatabase(
"jobs.sqlite3",
timeout=15,
Expand Down Expand Up @@ -176,10 +176,13 @@ def wrapper(wrapped, instance: Base, args, kwargs):
return wrapper


def job(name: str, priority="default", on_success=None, on_failure=None):
def job(name: str, priority="default", timeout=None, on_success=None, on_failure=None):
@wrapt.decorator
def wrapper(wrapped, instance: Base, args, kwargs):
from flask import has_request_context, request

from agent.base import AgentException
from agent.server import Server

if get_current_job(connection=connection()):
instance.job_record.start()
Expand All @@ -195,12 +198,20 @@ def wrapper(wrapped, instance: Base, args, kwargs):
instance.job_record.success(result)
return result
agent_job_id = get_agent_job_id()
agent_job_timeout = None
if has_request_context() and request and request.is_json:
agent_job_timeout = request.json.get("agent_job_timeout", None)
instance.job_record.enqueue(name, wrapped, args, kwargs, agent_job_id)
final_timeout = (
agent_job_timeout or timeout or Server().config.get("job_timeout", None) or DEFAULT_TIMEOUT
)
if not 0 <= final_timeout <= 24 * 3600:
final_timeout = DEFAULT_TIMEOUT
queue(priority).enqueue_call(
wrapped,
args=args,
kwargs=kwargs,
timeout=4 * 3600,
timeout=final_timeout,
result_ttl=24 * 3600,
job_id=str(instance.job_record.model.id),
on_success=on_success or callback,
Expand Down
Loading