Skip to content

Commit 7cea908

Browse files
authored
ENH: Improve migas telemetry (#257)
* MAINT: Improve migas telemetry * CI: Test tracking and `--notrack` implementations
1 parent e1d9313 commit 7cea908

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

.circleci/config.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ jobs:
296296
- FS_LICENSE: /tmp/fslicense/license.txt
297297
- DATASET: bcp
298298
- CHECK_BCP: true
299+
- MIGAS_OPTOUT: "1"
299300
steps:
300301
- checkout
301302
- run: *check_skip_job
@@ -364,7 +365,7 @@ jobs:
364365
nibabies-wrapper docker /tmp/data/${DATASET} /tmp/${DATASET}/derivatives/nibabies participant \
365366
-i nipreps/nibabies:latest \
366367
-e NIBABIES_DEV 1 --user $(id -u):$(id -g) \
367-
--network none --notrack \
368+
--network none \
368369
--config $PWD/nipype.cfg -w /tmp/${DATASET}/work \
369370
--fs-subjects-dir /tmp/data/${DATASET}/derivatives/infant-freesurfer \
370371
--skull-strip-template UNCInfant:cohort-1 \

nibabies/cli/run.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ def main():
1515
from pathlib import Path
1616

1717
from ..utils.bids import write_bidsignore, write_derivative_description
18-
from ..utils.telemetry import setup_migas
1918
from .parser import parse_args
2019
from .workflow import build_boilerplate, build_workflow
2120

@@ -29,8 +28,10 @@ def main():
2928
# if `--notrack` is specified, nothing is done.
3029
global EXITCODE
3130
if not config.execution.notrack:
32-
setup_migas(init_ping=True)
33-
atexit.register(_migas_exit)
31+
from nibabies.utils.telemetry import setup_migas
32+
33+
setup_migas(init=True)
34+
atexit.register(migas_exit)
3435

3536
if "participant" in config.workflow.analysis_level:
3637
_pool = None
@@ -151,18 +152,36 @@ def main():
151152
write_bidsignore(config.execution.nibabies_dir)
152153

153154

154-
def _migas_exit() -> None:
155+
def migas_exit() -> None:
155156
"""
156157
Send a final crumb to the migas server signaling if the run successfully completed
157-
158-
This function is registered with `atexit` to run at termination.
158+
This function should be registered with `atexit` to run at termination.
159159
"""
160-
global EXITCODE
161-
status = 'error' if EXITCODE > 0 else 'success'
160+
import sys
162161

163-
from ..utils.telemetry import ping_migas
162+
from nibabies.utils.telemetry import send_breadcrumb
163+
164+
global EXITCODE
165+
migas_kwargs = {'status': 'C'}
166+
# `sys` will not have these attributes unless an error has been handled
167+
if hasattr(sys, 'last_type'):
168+
migas_kwargs = {
169+
'status': 'F',
170+
'status_desc': 'Finished with error(s)',
171+
'error_type': sys.last_type,
172+
'error_desc': sys.last_value,
173+
}
174+
elif EXITCODE != 0:
175+
migas_kwargs.update(
176+
{
177+
'status': 'F',
178+
'status_desc': f'Completed with exitcode {EXITCODE}',
179+
}
180+
)
181+
else:
182+
migas_kwargs['status_desc'] = 'Success'
164183

165-
ping_migas(status=status)
184+
send_breadcrumb(**migas_kwargs)
166185

167186

168187
if __name__ == "__main__":

nibabies/utils/telemetry.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@
33
from .. import __version__, config
44

55

6-
def setup_migas(init_ping: bool = True) -> None:
6+
def setup_migas(init: bool = True) -> None:
77
"""
88
Prepare the migas python client to communicate with a migas server.
9-
If `init_ping` is `True`, send an initial breadcrumb.
9+
If ``init`` is ``True``, send an initial breadcrumb.
1010
"""
1111
# generate session UUID from generated run UUID
1212
session_id = None
1313
if config.execution.run_uuid:
1414
session_id = config.execution.run_uuid.split('_', 1)[-1]
1515

1616
migas.setup(session_id=session_id)
17-
if init_ping:
17+
if init:
1818
# send initial status ping
19-
ping_migas(status='pending')
19+
send_breadcrumb(status='R', status_desc='workflow start')
2020

2121

22-
def ping_migas(*, status: str) -> dict:
22+
def send_breadcrumb(**kwargs) -> dict:
2323
"""
2424
Communicate with the migas telemetry server. This requires `migas.setup()` to be called.
2525
"""
26-
res = migas.add_project("nipreps/nibabies", __version__, status=status)
26+
res = migas.add_project("nipreps/nibabies", __version__, **kwargs)
2727
return res

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ url = https://github.com/nipreps/nibabies
2525
python_requires = >= 3.8
2626
install_requires =
2727
attrs
28-
migas
28+
migas >= 0.3.0
2929
nibabel >= 3.0.1
3030
nipype >= 1.8.1
3131
nitime

0 commit comments

Comments
 (0)