Skip to content

Commit

Permalink
refactor srm srv for detail states and comment (#839)
Browse files Browse the repository at this point in the history
* refactor srm srv for detail states and comment

* remove the srv comment
  • Loading branch information
raylrui authored Feb 3, 2025
1 parent 516e94e commit 593bcd9
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ class SequenceDomain:
# Convention: https://github.com/umccr/orcabus/tree/main/docs/schemas#namespace
_namespace = "orcabus.sequencerunmanager"
sequence: Sequence
state_has_changed: bool = False

# flag to indicate if state or status has changed
state_has_changed: bool = False # reference to State model (uploading, running, new, complete, analyzing, pendinganalysis, ...)
status_has_changed: bool = False # reference to Sequence model (STARTED, SUCCEEDED, FAILED, ABORTED)

@property
def namespace(self) -> str:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,12 @@ def event_handler(event, context):
)
entry = None

# Detect SequenceRunStateChange
# Create SequenceRunState record from BSSH Run event payload
if sequence_domain.state_has_changed:
sequence_state_srv.create_sequence_state_from_bssh_event(event_details)

# Detect SequenceRunStatusChange
if sequence_domain.status_has_changed:
try:
SequenceRule(sequence_domain.sequence).must_not_emergency_stop()
sequence_state_srv.create_sequence_state_from_bssh_event(event_details)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from django.db.models import QuerySet

from sequence_run_manager.models.sequence import Sequence, SequenceStatus
from sequence_run_manager.models.state import State
from sequence_run_manager_proc.domain.sequence import SequenceDomain

# from data_processors.pipeline.tools import liborca
Expand Down Expand Up @@ -113,7 +114,7 @@ def create_or_update_sequence_from_bssh_event(payload: dict) -> SequenceDomain:
# )

seq.save()
return SequenceDomain(sequence=seq, state_has_changed=True)
return SequenceDomain(sequence=seq, status_has_changed=True, state_has_changed=True)
else:
seq: Sequence = qs.get()
seq_domain = SequenceDomain(sequence=seq)
Expand All @@ -125,10 +126,18 @@ def create_or_update_sequence_from_bssh_event(payload: dict) -> SequenceDomain:
seq.status = status
seq.end_time = end_time
seq.save()
seq_domain.status_has_changed = True
else:
logger.info(
f"[SKIP] Existing Sequence Run Status (instrument_run_id={instrument_run_id}, status={status.value})"
)

state = State.objects.filter(sequence=seq).order_by('-timestamp').first() # get latest state
if state is not None and state.status != payload["status"]:
seq_domain.state_has_changed = True
else:
logger.info(
f"[SKIP] Existing Sequence state (instrument_run_id={instrument_run_id}, status={status.value})"
f"[SKIP] Existing Sequence Run State (instrument_run_id={instrument_run_id}, status={payload['status']})"
)

return seq_domain
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.db import transaction
from django.db.models import QuerySet

from sequence_run_manager.models.sequence import Sequence
from sequence_run_manager.models.sequence import Sequence, SequenceStatus
from sequence_run_manager.models.state import State


Expand All @@ -29,7 +29,7 @@ def create_sequence_state_from_bssh_event(payload: dict) -> None:
instrument_run_id = payload["instrumentRunId"]
sequence = Sequence.objects.get(instrument_run_id=instrument_run_id)

# comment for any future usage, None by default
# None by default
comment = None

State.objects.create(status=status, timestamp=timestamp, sequence=sequence, comment=comment)

0 comments on commit 593bcd9

Please sign in to comment.