Skip to content

Commit

Permalink
Merge pull request #206 from casparvl/collect_addional_info_in_mixin
Browse files Browse the repository at this point in the history
Collect addional info in mixin
  • Loading branch information
smoors authored Nov 30, 2024
2 parents 66b678d + ebce23a commit 8054e92
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions eessi/testsuite/eessi_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
from reframe.core.exceptions import ReframeFatalError
from reframe.core.pipeline import RegressionMixin
from reframe.utility.sanity import make_performance_function
import reframe.utility.sanity as sn

from eessi.testsuite import hooks
from eessi.testsuite.constants import DEVICE_TYPES, SCALES, COMPUTE_UNIT, TAGS
from eessi.testsuite.utils import log
from eessi.testsuite import __version__ as testsuite_version


# Hooks from the Mixin class seem to be executed _before_ those of the child class
Expand Down Expand Up @@ -42,6 +44,14 @@ class EESSI_Mixin(RegressionMixin):
bench_name = None
bench_name_ci = None

# Create ReFrame variables for logging runtime environment information
cvmfs_repo_name = variable(str, value='None')
cvmfs_software_subdir = variable(str, value='None')
full_modulepath = variable(str, value='None')

# Make sure the version of the EESSI test suite gets logged in the ReFrame report
eessi_testsuite_version = variable(str, value=testsuite_version)

# Note that the error for an empty parameter is a bit unclear for ReFrame 4.6.2, but that will hopefully improve
# see https://github.com/reframe-hpc/reframe/issues/3254
# If that improves: uncomment the following to force the user to set module_name
Expand Down Expand Up @@ -165,3 +175,36 @@ def assign_tasks_per_compute_unit(self):
def request_mem(self):
"""Call hook to request the required amount of memory per node"""
hooks.req_memory_per_node(self, app_mem_req=self.required_mem_per_node())

@run_after('setup')
def log_runtime_info(self):
"""Log additional runtime information: which CVMFS repo was used (or if it was testing local software),
path to the modulefile, EESSI software subdir, EESSI testsuite version"""
self.postrun_cmds.append('echo "EESSI_CVMFS_REPO: $EESSI_CVMFS_REPO"')
self.postrun_cmds.append('echo "EESSI_SOFTWARE_SUBDIR: $EESSI_SOFTWARE_SUBDIR"')
if self.module_name:
# Get full modulepath
get_full_modpath = f'echo "FULL_MODULEPATH: $(module --location show {self.module_name})"'
self.postrun_cmds.append(get_full_modpath)

@run_after('run')
def extract_runtime_info_from_log(self):
"""Extracts the printed runtime info from the job log and logs it as reframe variables"""
if self.is_dry_run():
return

# If EESSI_CVMFS_REPO environment variable was set, extract it and store it in self.cvmfs_repo_name
repo_name = sn.extractall(r'EESSI_CVMFS_REPO: /cvmfs/(?P<repo>.*)$', f'{self.stagedir}/{self.stdout}',
'repo', str)
if repo_name:
self.cvmfs_repo_name = f'{repo_name}'

software_subdir = sn.extractall(r'EESSI_SOFTWARE_SUBDIR: (?P<subdir>.*)$',
f'{self.stagedir}/{self.stdout}', 'subdir', str)
if software_subdir:
self.cvmfs_software_subdir = f'{software_subdir}'

module_path = sn.extractall(r'FULL_MODULEPATH: (?P<modpath>.*)$', f'{self.stagedir}/{self.stdout}',
'modpath', str)
if module_path:
self.full_modulepath = f'{module_path}'

0 comments on commit 8054e92

Please sign in to comment.