Skip to content

Commit 668001e

Browse files
authored
Merge pull request #3283 from vkarak/feat/results-db-enhancements
[enhancement] Various enhancements to the results DB feature
2 parents 46e7166 + d736308 commit 668001e

File tree

10 files changed

+836
-582
lines changed

10 files changed

+836
-582
lines changed

docs/manpage.rst

Lines changed: 146 additions & 87 deletions
Large diffs are not rendered by default.

docs/tutorial.rst

Lines changed: 63 additions & 63 deletions
Large diffs are not rendered by default.

reframe/frontend/cli.py

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -401,20 +401,20 @@ def main():
401401
'for the selected tests and exit'),
402402
)
403403
action_options.add_argument(
404-
'--delete-stored-session', action='store', metavar='UUID',
405-
help='Delete stored session'
404+
'--delete-stored-sessions', action='store', metavar='QUERY',
405+
help='Delete stored sessions'
406406
)
407407
action_options.add_argument(
408408
'--describe', action='store_true',
409409
help='Give full details on the selected tests'
410410
)
411411
action_options.add_argument(
412-
'--describe-stored-session', action='store', metavar='UUID',
412+
'--describe-stored-sessions', action='store', metavar='QUERY',
413413
help='Get detailed session information in JSON'
414414
)
415415
action_options.add_argument(
416416
'--describe-stored-testcases', action='store',
417-
metavar='SESSION_UUID|PERIOD',
417+
metavar='QUERY',
418418
help='Get detailed test case information in JSON'
419419
)
420420
action_options.add_argument(
@@ -434,12 +434,11 @@ def main():
434434
)
435435
action_options.add_argument(
436436
'--list-stored-sessions', nargs='?', action='store',
437-
const='now-1w:now', metavar='PERIOD', help='List stored sessions'
437+
const='now-1w:now', metavar='QUERY', help='List stored sessions'
438438
)
439439
action_options.add_argument(
440-
'--list-stored-testcases', action='store',
441-
metavar='SESSION_UUID|PERIOD',
442-
help='List stored testcases by session or time period'
440+
'--list-stored-testcases', action='store', metavar='QUERY',
441+
help='List performance info for stored testcases'
443442
)
444443
action_options.add_argument(
445444
'-l', '--list', nargs='?', const='T', choices=['C', 'T'],
@@ -617,7 +616,7 @@ def main():
617616
'(default: "now:now/last:+job_nodelist/+result")')
618617
)
619618
reporting_options.add_argument(
620-
'--session-extras', action='store', metavar='KV_DATA',
619+
'--session-extras', action='append', metavar='KV_DATA',
621620
help='Annotate session with custom key/value data'
622621
)
623622

@@ -641,15 +640,10 @@ def main():
641640
envvar='RFM_SYSTEM'
642641
)
643642
misc_options.add_argument(
644-
'--table-format', choices=['csv', 'plain', 'pretty'],
643+
'--table-format', choices=['csv', 'plain', 'outline', 'grid'],
645644
help='Table formatting',
646645
envvar='RFM_TABLE_FORMAT', configvar='general/table_format'
647646
)
648-
misc_options.add_argument(
649-
'--table-hide-columns', metavar='COLS', action='store',
650-
help='Hide specific columns from the final table',
651-
envvar='RFM_TABLE_HIDE_COLUMNS', configvar='general/table_hide_columns'
652-
)
653647
misc_options.add_argument(
654648
'-v', '--verbose', action='count',
655649
help='Increase verbosity level of output',
@@ -831,7 +825,7 @@ def restrict_logging():
831825
if (options.show_config or
832826
options.detect_host_topology or
833827
options.describe or
834-
options.describe_stored_session or
828+
options.describe_stored_sessions or
835829
options.describe_stored_testcases):
836830
logging.getlogger().setLevel(logging.ERROR)
837831
return True
@@ -983,29 +977,29 @@ def restrict_logging():
983977
if options.list_stored_sessions:
984978
with exit_gracefully_on_error('failed to retrieve session data',
985979
printer):
986-
time_period = options.list_stored_sessions
987-
if time_period == 'all':
988-
time_period = None
980+
spec = options.list_stored_sessions
981+
if spec == 'all':
982+
spec = '19700101T0000+0000:now'
989983

990-
printer.table(reporting.session_data(time_period))
984+
printer.table(reporting.session_data(spec))
991985
sys.exit(0)
992986

993987
if options.list_stored_testcases:
994988
namepatt = '|'.join(options.names)
995989
with exit_gracefully_on_error('failed to retrieve test case data',
996990
printer):
997991
printer.table(reporting.testcase_data(
998-
options.list_stored_testcases, namepatt
992+
options.list_stored_testcases, namepatt, options.filter_expr
999993
))
1000994
sys.exit(0)
1001995

1002-
if options.describe_stored_session:
996+
if options.describe_stored_sessions:
1003997
# Restore logging level
1004998
printer.setLevel(logging.INFO)
1005999
with exit_gracefully_on_error('failed to retrieve session data',
10061000
printer):
10071001
printer.info(jsonext.dumps(reporting.session_info(
1008-
options.describe_stored_session
1002+
options.describe_stored_sessions
10091003
), indent=2))
10101004
sys.exit(0)
10111005

@@ -1020,11 +1014,12 @@ def restrict_logging():
10201014
), indent=2))
10211015
sys.exit(0)
10221016

1023-
if options.delete_stored_session:
1024-
session_uuid = options.delete_stored_session
1017+
if options.delete_stored_sessions:
1018+
query = options.delete_stored_sessions
10251019
with exit_gracefully_on_error('failed to delete session', printer):
1026-
reporting.delete_session(session_uuid)
1027-
printer.info(f'Session {session_uuid} deleted successfully.')
1020+
for uuid in reporting.delete_sessions(query):
1021+
printer.info(f'Session {uuid} deleted successfully.')
1022+
10281023
sys.exit(0)
10291024

10301025
if options.performance_compare:
@@ -1033,7 +1028,9 @@ def restrict_logging():
10331028
printer):
10341029
printer.table(
10351030
reporting.performance_compare(options.performance_compare,
1036-
namepatt=namepatt)
1031+
None,
1032+
namepatt,
1033+
options.filter_expr)
10371034
)
10381035
sys.exit(0)
10391036

@@ -1598,9 +1595,10 @@ def module_unuse(*paths):
15981595
if options.session_extras:
15991596
# Update report's extras
16001597
extras = {}
1601-
for arg in options.session_extras.split(','):
1602-
k, v = arg.split('=', maxsplit=1)
1603-
extras[k] = v
1598+
for sess in options.session_extras:
1599+
for arg in sess.split(','):
1600+
k, v = arg.split('=', maxsplit=1)
1601+
extras[k] = v
16041602

16051603
report.update_extras(extras)
16061604

reframe/frontend/printer.py

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -269,29 +269,14 @@ def table(self, data, **kwargs):
269269
# Map our options to tabulate
270270
if table_format == 'plain':
271271
tablefmt = 'plain'
272-
elif table_format == 'pretty':
272+
elif table_format == 'outline':
273273
tablefmt = 'mixed_outline'
274+
elif table_format == 'grid':
275+
tablefmt = 'mixed_grid'
274276
else:
275277
raise ValueError(f'invalid table format: {table_format}')
276278

277279
kwargs.setdefault('headers', 'firstrow')
278280
kwargs.setdefault('tablefmt', tablefmt)
279281
kwargs.setdefault('numalign', 'right')
280-
hide_columns = rt.runtime().get_option('general/0/table_hide_columns')
281-
if hide_columns and kwargs['headers'] == 'firstrow' and data:
282-
hide_columns = hide_columns.split(',')
283-
colidx = [i for i, col in enumerate(data[0])
284-
if col not in hide_columns]
285-
286-
def _access(seq, i, default=None):
287-
# Safe access of i-th element of a sequence
288-
try:
289-
return seq[i]
290-
except IndexError:
291-
return default
292-
293-
tab_data = [[_access(rec, col) for col in colidx] for rec in data]
294-
else:
295-
tab_data = data
296-
297-
self.info(tabulate(tab_data, **kwargs))
282+
self.info(tabulate(data, **kwargs))

0 commit comments

Comments
 (0)