Skip to content

Commit

Permalink
Make status update logic easier to read
Browse files Browse the repository at this point in the history
  • Loading branch information
seallard committed May 7, 2024
1 parent 8900516 commit 110aa65
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
1 change: 0 additions & 1 deletion trailblazer/services/analysis_service/analysis_service.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from trailblazer.constants import TrailblazerStatus, WorkflowManager
from trailblazer.constants import Workflow
from trailblazer.dto import (
AnalysesRequest,
AnalysesResponse,
Expand Down
24 changes: 16 additions & 8 deletions trailblazer/services/job_service/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,19 @@ def get_slurm_job_ids(job_id_file: str) -> list[int]:
def get_status(jobs: list[Job]) -> TrailblazerStatus:
if has_same_status(jobs):
return get_single_status(jobs)
is_running: bool = has_running_jobs(jobs)
is_failed: bool = has_failed_jobs(jobs)
if is_failed:
return TrailblazerStatus.ERROR if is_running else TrailblazerStatus.FAILED
return TrailblazerStatus.RUNNING if is_running else TrailblazerStatus.CANCELLED
is_running: bool = is_analysis_ongoing(jobs)
is_failed: bool = is_analysis_failed(jobs)

if is_failed and is_running:
return TrailblazerStatus.ERROR

if is_failed and not is_running:
return TrailblazerStatus.FAILED

if is_running:
return TrailblazerStatus.RUNNING

return TrailblazerStatus.CANCELLED


def has_same_status(jobs: list[Job]) -> bool:
Expand All @@ -33,20 +41,20 @@ def has_same_status(jobs: list[Job]) -> bool:


def get_single_status(jobs: list[Job]) -> SlurmJobStatus:
single_status = jobs[0].status
single_status: str = jobs[0].status
return (
TrailblazerStatus.FAILED
if single_status == SlurmJobStatus.TIME_OUT
else TrailblazerStatus[single_status.upper()]
)


def has_running_jobs(jobs: list[Job]) -> bool:
def is_analysis_ongoing(jobs: list[Job]) -> bool:
run_statuses = SlurmJobStatus.ongoing_statuses()
return any(job.status in run_statuses for job in jobs)


def has_failed_jobs(jobs: list[Job]) -> bool:
def is_analysis_failed(jobs: list[Job]) -> bool:
fail_statuses = SlurmJobStatus.fail_statuses()
return any(job.status in fail_statuses for job in jobs)

Expand Down

0 comments on commit 110aa65

Please sign in to comment.