Skip to content

Commit 3eddfad

Browse files
authored
Fix default fields in trace config (#6403)
Signed-off-by: Ben Sherman <[email protected]>
1 parent 8f3fc03 commit 3eddfad

File tree

3 files changed

+50
-45
lines changed

3 files changed

+50
-45
lines changed

modules/nextflow/src/main/groovy/nextflow/trace/TraceFileObserver.groovy

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import nextflow.processor.TaskHandler
3030
import nextflow.processor.TaskId
3131
import nextflow.trace.config.TraceConfig
3232
import nextflow.trace.event.TaskEvent
33-
import nextflow.util.TestOnly
3433
/**
3534
* Create a CSV file containing the processes execution information
3635
*
@@ -43,22 +42,7 @@ class TraceFileObserver implements TraceObserverV2 {
4342
/**
4443
* The list of fields included in the trace report
4544
*/
46-
List<String> fields = [
47-
'task_id',
48-
'hash',
49-
'native_id',
50-
'name',
51-
'status',
52-
'exit',
53-
'submit',
54-
'duration',
55-
'realtime',
56-
'%cpu',
57-
'peak_rss',
58-
'peak_vmem',
59-
'rchar',
60-
'wchar'
61-
]
45+
List<String> fields
6246

6347
List<String> formats
6448

@@ -99,9 +83,6 @@ class TraceFileObserver implements TraceObserverV2 {
9983
setFieldsAndFormats(config.fields)
10084
}
10185

102-
@TestOnly
103-
protected TraceFileObserver() {}
104-
10586
void setFields( List<String> entries ) {
10687

10788
final names = TraceRecord.FIELDS.keySet()
@@ -126,17 +107,7 @@ class TraceFileObserver implements TraceObserverV2 {
126107
this.fields = result
127108
}
128109

129-
TraceFileObserver setFieldsAndFormats( value ) {
130-
List<String> entries
131-
if( value instanceof String ) {
132-
entries = value.tokenize(', ')
133-
}
134-
else if( value instanceof List ) {
135-
entries = (List)value
136-
}
137-
else {
138-
throw new IllegalArgumentException("Not a valid trace fields value: $value")
139-
}
110+
TraceFileObserver setFieldsAndFormats( List<String> entries ) {
140111

141112
List<String> fields = new ArrayList<>(entries.size())
142113
List<String> formats = new ArrayList<>(entries.size())

modules/nextflow/src/main/groovy/nextflow/trace/config/TraceConfig.groovy

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,34 @@ import nextflow.trace.TraceHelper
2929
@CompileStatic
3030
class TraceConfig implements ConfigScope {
3131

32+
private static final List<String> DEF_FIELDS = List.of(
33+
'task_id',
34+
'hash',
35+
'native_id',
36+
'name',
37+
'status',
38+
'exit',
39+
'submit',
40+
'duration',
41+
'realtime',
42+
'%cpu',
43+
'peak_rss',
44+
'peak_vmem',
45+
'rchar',
46+
'wchar'
47+
)
48+
3249
@ConfigOption
3350
@Description("""
3451
Create the execution trace file on workflow completion (default: `false`).
3552
""")
3653
final boolean enabled
3754

38-
@ConfigOption
55+
@ConfigOption(types=[String])
3956
@Description("""
4057
Comma-separated list of [trace fields](https://nextflow.io/docs/latest/tracing.html#trace-report) to include in the report.
4158
""")
42-
final String fields
59+
final List<String> fields
4360

4461
@ConfigOption
4562
@Description("""
@@ -70,13 +87,23 @@ class TraceConfig implements ConfigScope {
7087

7188
TraceConfig(Map opts) {
7289
enabled = opts.enabled as boolean
73-
fields = opts.fields ?: ''
90+
fields = parseFields(opts.fields)
7491
file = opts.file ?: defaultFileName()
7592
overwrite = opts.overwrite as boolean
7693
raw = opts.raw as boolean
7794
sep = opts.sep ?: '\t'
7895
}
7996

97+
private List<String> parseFields(value) {
98+
if( value == null )
99+
return DEF_FIELDS
100+
if( value instanceof CharSequence )
101+
return value.tokenize(',').collect(it -> it.trim())
102+
if( value instanceof List )
103+
return value
104+
throw new IllegalArgumentException("Not a valid trace fields value: $value")
105+
}
106+
80107
static final String defaultFileName() {
81108
return "trace-${TraceHelper.launchTimestampFmt()}.txt"
82109
}

modules/nextflow/src/test/groovy/nextflow/trace/TraceFileObserverTest.groovy

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import nextflow.processor.TaskId
2626
import nextflow.processor.TaskProcessor
2727
import nextflow.processor.TaskRun
2828
import nextflow.processor.TaskStatus
29+
import nextflow.trace.config.TraceConfig
2930
import nextflow.trace.event.TaskEvent
3031
import nextflow.util.CacheHelper
3132
import nextflow.util.Duration
@@ -43,16 +44,21 @@ class TraceFileObserverTest extends Specification {
4344
TraceRecord.TIMEZONE = TimeZone.getTimeZone('UTC') // note: set the timezone to be sure the time string does not change on CI test servers
4445
}
4546

47+
def createObserver() {
48+
def config = new TraceConfig([:])
49+
return new TraceFileObserver(config)
50+
}
51+
4652
def 'test set fields'() {
4753

4854
when:
49-
def trace = [:] as TraceFileObserver
55+
def trace = createObserver()
5056
trace.fields = ['task_id','name','status']
5157
then:
5258
trace.fields == ['task_id','name','status']
5359

5460
when:
55-
trace = [:] as TraceFileObserver
61+
trace = createObserver()
5662
trace.fields = ['task_id','name','status','xxx']
5763
then:
5864
thrown(IllegalArgumentException)
@@ -63,7 +69,7 @@ class TraceFileObserverTest extends Specification {
6369
def 'test set formats'() {
6470

6571
when:
66-
def trace = [:] as TraceFileObserver
72+
def trace = createObserver()
6773
trace.formats = ['str','num','date']
6874
then:
6975
trace.formats == ['str','num','date']
@@ -75,14 +81,14 @@ class TraceFileObserverTest extends Specification {
7581
def trace
7682

7783
when:
78-
trace = [:] as TraceFileObserver
84+
trace = createObserver()
7985
trace.setFieldsAndFormats(['task_id:str','name:str','status:num', 'start', 'duration'])
8086
then:
8187
trace.fields == ['task_id','name','status', 'start', 'duration']
8288
trace.formats == ['str','str','num', 'date', 'time']
8389

8490
when:
85-
trace = [:] as TraceFileObserver
91+
trace = createObserver()
8692
trace.useRawNumbers(true)
8793
trace.setFieldsAndFormats(['task_id:str','name:str','status:num', 'start:date', 'duration:time', 'realtime'])
8894
then:
@@ -109,7 +115,8 @@ class TraceFileObserverTest extends Specification {
109115
def now = System.currentTimeMillis()
110116

111117
// the observer class under test
112-
def observer = new TraceFileObserver(tracePath: file)
118+
def config = new TraceConfig(file: file.toString())
119+
def observer = new TraceFileObserver(config)
113120

114121
when:
115122
observer.onFlowCreate(null)
@@ -190,7 +197,7 @@ class TraceFileObserverTest extends Specification {
190197
record.wchar = 10_000 * 1024
191198

192199
when:
193-
def trace = [:] as TraceFileObserver
200+
def trace = createObserver()
194201
def result = trace.render(record).split('\t')
195202
then:
196203
result[0] == '30' // task id
@@ -221,8 +228,8 @@ class TraceFileObserverTest extends Specification {
221228
record.rss = 10 * MB
222229

223230
when:
224-
def trace = [:] as TraceFileObserver
225-
trace.setFieldsAndFormats( 'task_id,syscr,syscw,rss,rss:num' )
231+
def trace = createObserver()
232+
trace.setFieldsAndFormats( ['task_id', 'syscr', 'syscw', 'rss', 'rss:num'] )
226233
def result = trace.render(record).split('\t')
227234
then:
228235
result[0] == '5'
@@ -261,8 +268,8 @@ class TraceFileObserverTest extends Specification {
261268
record.realtime = 9005022
262269
record.queue = 'bigjobs'
263270

264-
def trace = [:] as TraceFileObserver
265-
trace.setFieldsAndFormats('task_id,hash,native_id,name,status,exit,submit,duration,realtime,%cpu,rss,vmem,peak_rss,peak_vmem,rchar,wchar,syscr,syscw,duration:num,realtime:num,rss:num,vmem:num,peak_rss:num,peak_vmem:num,rchar:num,wchar:num,queue')
271+
def trace = createObserver()
272+
trace.setFieldsAndFormats(['task_id', 'hash', 'native_id', 'name', 'status', 'exit', 'submit', 'duration', 'realtime', '%cpu', 'rss', 'vmem', 'peak_rss', 'peak_vmem', 'rchar', 'wchar', 'syscr', 'syscw', 'duration:num', 'realtime:num', 'rss:num', 'vmem:num', 'peak_rss:num', 'peak_vmem:num', 'rchar:num', 'wchar:num', 'queue'])
266273
def result = trace.render(record).split('\t')
267274

268275
then:

0 commit comments

Comments
 (0)