Skip to content

Commit 45773fa

Browse files
alanbchristieAlan Christie
and
Alan Christie
authored
Refined target loader report and logging (#506)
* fix: Better task reporting (upload) * style: Log tweak - re-upload is now an error --------- Co-authored-by: Alan Christie <alan.christie@matildapeak.com>
1 parent a17e238 commit 45773fa

File tree

2 files changed

+38
-19
lines changed

2 files changed

+38
-19
lines changed

viewer/target_loader.py

+29-14
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def log(self, level: Level, message: str) -> None:
149149
logger.info(msg)
150150

151151
self.stack.append(UploadReportEntry(level=level, message=message))
152-
self._update_task(message)
152+
self._update_task(self.json())
153153

154154
def final(self, message, success=True):
155155
self.upload_state = UploadState.SUCCESS
@@ -166,18 +166,19 @@ def json(self):
166166
return [str(k) for k in self.stack]
167167

168168
def _update_task(self, message: str | list) -> None:
169-
if self.task:
170-
try:
171-
logger.debug("taskstuff %s", dir(self.task))
172-
self.task.update_state(
173-
state=self.upload_state,
174-
meta={
175-
"description": message,
176-
},
177-
)
178-
except AttributeError:
179-
# no task passed to method, nothing to do
180-
pass
169+
if not self.task:
170+
return
171+
try:
172+
logger.debug("taskstuff %s", dir(self.task))
173+
self.task.update_state(
174+
state=self.upload_state,
175+
meta={
176+
"description": message,
177+
},
178+
)
179+
except AttributeError:
180+
# no task passed to method, nothing to do
181+
pass
181182

182183

183184
def _validate_bundle_against_mode(config_yaml: Dict[str, Any]) -> Optional[str]:
@@ -441,6 +442,13 @@ def __init__(
441442
self.target = None
442443
self.project = None
443444

445+
# Initial (reassuring message)
446+
bundle_filename = os.path.basename(self.bundle_path)
447+
self.report.log(
448+
Level.INFO,
449+
f"Created TargetLoader for '{bundle_filename}' proposal_ref='{proposal_ref}'",
450+
)
451+
444452
@property
445453
def final_path(self) -> Path:
446454
return self._final_path
@@ -1256,7 +1264,7 @@ def process_bundle(self):
12561264
# remove uploaded file
12571265
Path(self.bundle_path).unlink()
12581266
msg = f"{self.bundle_name} already uploaded"
1259-
self.report.final(msg, success=False)
1267+
self.report.log(Level.FATAL, msg)
12601268
raise FileExistsError(msg)
12611269

12621270
if project_created and committer.pk == settings.ANONYMOUS_USER:
@@ -1622,6 +1630,11 @@ def load_target(
16221630
target_loader = TargetLoader(
16231631
data_bundle, proposal_ref, tempdir, user_id=user_id, task=task
16241632
)
1633+
1634+
# Decompression can take some time, so we want to report progress
1635+
bundle_filename = os.path.basename(data_bundle)
1636+
target_loader.report.log(Level.INFO, f"Decompressing '{bundle_filename}'")
1637+
16251638
try:
16261639
# archive is first extracted to temporary dir and moved later
16271640
with tarfile.open(target_loader.bundle_path, "r") as archive:
@@ -1636,6 +1649,8 @@ def load_target(
16361649
target_loader.experiment_upload.message = exc.args[0]
16371650
raise FileNotFoundError(msg) from exc
16381651

1652+
target_loader.report.log(Level.INFO, f"Decompressed '{bundle_filename}'")
1653+
16391654
try:
16401655
with transaction.atomic():
16411656
target_loader.process_bundle()

viewer/views.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -1607,15 +1607,19 @@ def get(self, request, task_id, *args, **kwargs):
16071607
elif isinstance(result.info, list):
16081608
messages = result.info
16091609

1610-
# The task is considered to have failed
1611-
# if the word 'FAILED' is in the last line of the message (regardless of case)
1610+
started = result.state != 'PENDING'
1611+
finished = result.ready()
16121612
task_status = "UNKNOWN"
1613-
if result.ready() and messages:
1613+
if finished and messages:
1614+
# The task is considered to have failed if the word 'FAILED'
1615+
# is in the last line of the message (regardless of case)
16141616
task_status = "FAILED" if 'failed' in messages[-1].lower() else "SUCCESS"
1617+
elif started:
1618+
task_status = "RUNNING"
16151619

16161620
data = {
1617-
'started': result.state != 'PENDING',
1618-
'finished': result.ready(),
1621+
'started': started,
1622+
'finished': finished,
16191623
'status': task_status,
16201624
'messages': messages,
16211625
}

0 commit comments

Comments
 (0)