1
1
# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
2
2
# vi: set ft=python sts=4 ts=4 sw=4 et:
3
- """Stripped out routines for Sentry"""
3
+ """Stripped out routines for Sentry. """
4
4
import os
5
- from pathlib import Path
6
5
import re
7
6
from niworkflows .utils .misc import read_crashfile
8
7
import sentry_sdk
43
42
44
43
45
44
def sentry_setup ():
46
- from os import cpu_count
47
- import psutil
48
- import hashlib
49
-
50
- exec_env = config .execution .exec_env
51
- environment = "prod"
52
- release = config .execution .version
53
- if not release :
54
- environment = "dev"
55
- release = "dev"
56
- elif int (os .getenv ('FMRIPREP_DEV' , '0' )) or ('+' in release ):
57
- environment = "dev"
45
+ """Set-up sentry."""
46
+ release = config .execution .version or "dev"
47
+ environment = "dev" if (
48
+ os .getenv ('FMRIPREP_DEV' , '' ).lower in ('1' , 'on' , 'yes' , 'y' , 'true' )
49
+ or ('+' in release )
50
+ ) else "prod"
58
51
59
52
sentry_sdk .
init (
"https://[email protected] /1137693" ,
60
53
release = release ,
61
54
environment = environment ,
62
55
before_send = before_send )
63
56
with sentry_sdk .configure_scope () as scope :
64
- scope .set_tag ('exec_env' , exec_env )
65
-
66
- if exec_env == 'fmriprep-docker' :
67
- scope .set_tag ('docker_version' , os .getenv ('DOCKER_VERSION_8395080871' ))
68
-
69
- dset_desc_path = config .execution .bids_dir / 'dataset_description.json'
70
- if dset_desc_path .exists ():
71
- desc_content = dset_desc_path .read_bytes ()
72
- scope .set_tag ('dset_desc_sha256' , hashlib .sha256 (desc_content ).hexdigest ())
73
-
74
- free_mem_at_start = round (psutil .virtual_memory ().free / 1024 ** 3 , 1 )
75
- scope .set_tag ('free_mem_at_start' , free_mem_at_start )
76
- scope .set_tag ('cpu_count' , cpu_count ())
77
-
78
- # Memory policy may have a large effect on types of errors experienced
79
- overcommit_memory = Path ('/proc/sys/vm/overcommit_memory' )
80
- if overcommit_memory .exists ():
81
- policy = {'0' : 'heuristic' ,
82
- '1' : 'always' ,
83
- '2' : 'never' }.get (overcommit_memory .read_text ().strip (), 'unknown' )
84
- scope .set_tag ('overcommit_memory' , policy )
85
- if policy == 'never' :
86
- overcommit_kbytes = Path ('/proc/sys/vm/overcommit_memory' )
87
- kb = overcommit_kbytes .read_text ().strip ()
88
- if kb != '0' :
89
- limit = '{}kB' .format (kb )
90
- else :
91
- overcommit_ratio = Path ('/proc/sys/vm/overcommit_ratio' )
92
- limit = '{}%' .format (overcommit_ratio .read_text ().strip ())
93
- scope .set_tag ('overcommit_limit' , limit )
94
- else :
95
- scope .set_tag ('overcommit_limit' , 'n/a' )
96
- else :
97
- scope .set_tag ('overcommit_memory' , 'n/a' )
98
- scope .set_tag ('overcommit_limit' , 'n/a' )
99
-
100
57
for k , v in config .get (flat = True ).items ():
101
58
scope .set_tag (k , v )
102
59
103
60
104
61
def process_crashfile (crashfile ):
105
- """Parse the contents of a crashfile and submit sentry messages"""
62
+ """Parse the contents of a crashfile and submit sentry messages. """
106
63
crash_info = read_crashfile (str (crashfile ))
107
64
with sentry_sdk .push_scope () as scope :
108
65
scope .level = 'fatal'
@@ -169,7 +126,7 @@ def process_crashfile(crashfile):
169
126
170
127
171
128
def before_send (event , hints ):
172
- # Filtering log messages about crashed nodes
129
+ """Filter log messages about crashed nodes."""
173
130
if 'logentry' in event and 'message' in event ['logentry' ]:
174
131
msg = event ['logentry' ]['message' ]
175
132
if msg .startswith ("could not run node:" ):
@@ -193,7 +150,7 @@ def before_send(event, hints):
193
150
194
151
def _chunks (string , length = CHUNK_SIZE ):
195
152
"""
196
- Splits a string into smaller chunks
153
+ Split a string into smaller chunks.
197
154
198
155
>>> list(_chunks('some longer string.', length=3))
199
156
['som', 'e l', 'ong', 'er ', 'str', 'ing', '.']
0 commit comments