Skip to content
Snippets Groups Projects

Restructure log location

Merged Ashwin Kumar Karnad requested to merge restructure-log-location into main
Compare and Show latest version
2 files
+ 60
39
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 34
26
@@ -32,17 +32,19 @@ for given system architecture and MPSD software stack version.\n
The toolchains
are built using the bash script spack_setup.sh, and the results are logged. """
call_date_iso = datetime.datetime.now().replace(microsecond=0).isoformat()
call_date_iso = (
datetime.datetime.now().replace(microsecond=0).isoformat().replace(":", "-")
)
config_vars = {
# kept inside the mpsd_release folder
"cmd_log_file": "install.log",
"cmd_log_file": "script_execution_summary.log",
# Placeholder installer log file name, placed at mpsd_microarch/logs
"installer_log_template": Template(
"${mpsd_release}_${mpsd_microarch}_${date}_${action}.log"
"${mpsd_release}_${mpsd_microarch}_${date}_APEX_${action}.log"
),
# Placeholder build log file name, placed at mpsd_microarch/logs
"build_log_template": Template(
"${mpsd_release}_${mpsd_microarch}_${date}_${toolchain}_${action}.log"
"${mpsd_release}_${mpsd_microarch}_${date}_BUILD_${toolchain}_${action}.log"
),
"metadata_tag_open": "!<meta>",
"metadata_tag_close": "</meta>!",
@@ -151,21 +153,20 @@ def read_metadata_from_logfile(logfile: Union[str, Path]) -> dict:
}
def get_installer_log_file(args: argparse.Namespace, script_dir: str) -> str:
"""Get installer log file name."""
def get_installer_log_file_path(mpsd_release: str, cmd: str, script_dir: str) -> str:
"""Get installer log file path."""
# Get machine configs
os.environ.get("MPSD_OS", "UNKNOWN_OS")
mpsd_microarch = get_native_microarchitecture()
mpsd_release = args.release
# parse logging first
# decide the log_file_name
installer_log_name, build_log_name = create_log_file_names(
mpsd_release=mpsd_release, mpsd_microarch=mpsd_microarch, action=args.action
mpsd_release=mpsd_release, mpsd_microarch=mpsd_microarch, action=cmd
)
log_folder = script_dir / mpsd_release / mpsd_microarch / "logs"
log_folder = script_dir / mpsd_release / "logs"
# if the log_folder dosent exist, dont log this message if
# the command is a info-only command
if args.action not in ["status", "available"]:
if cmd not in ["status", "available"]:
if not os.path.exists(log_folder):
os.makedirs(log_folder)
installer_log_file = log_folder / installer_log_name
@@ -174,7 +175,7 @@ def get_installer_log_file(args: argparse.Namespace, script_dir: str) -> str:
return installer_log_file
def set_up_logging(loglevel="warning", filename=None):
def set_up_logging(loglevel="warning", file_path=None):
"""Set up logging.
This function sets up the logging configuration for the script.
@@ -189,7 +190,7 @@ def set_up_logging(loglevel="warning", filename=None):
- warning (default): only print statements if something is unexpected
- info (show more detailed progress)
- debug (show very detailed output)
filename : str
file_path : str
- filename to save logging messages into
If loglevel is 'debug', save line numbers in log messages.
@@ -271,11 +272,16 @@ def set_up_logging(loglevel="warning", filename=None):
shell_handler.setFormatter(shell_formatter)
# use the log_level_numeric to decide how much logging is sent to shell
shell_handler.setLevel(log_level_numeric)
logger.addHandler(shell_handler)
# Here we set the handlers of the RootLogger to be just the one we want.
# The reason is that the logging module will add a <StreamHandler <stderr>
# (NOTSET)> handler if logging.info/logging.debug/... is used before we
# come across this line. And we do not want that additional handler.
logger.handlers = [shell_handler]
# if filename provided, write log messages to that file, too.
if filename:
file_handler = logging.FileHandler(filename)
if file_path:
file_handler = logging.FileHandler(file_path)
# if we have a file, we write all information in there.
# We could change the level, for example restrict to only DEBUG and above with
# file_handler.setLevel(logging.DEBUG)
@@ -299,9 +305,9 @@ def set_up_logging(loglevel="warning", filename=None):
print_log.addHandler(ch)
# if filename provided, write output of print_log to that file, too
if filename:
if file_path:
# create, format and add file handler
fh = logging.FileHandler(filename)
fh = logging.FileHandler(file_path)
fh.setFormatter(formatter)
print_log.addHandler(fh)
@@ -309,8 +315,8 @@ def set_up_logging(loglevel="warning", filename=None):
# short message
#
logging.debug(
f"Logging has been setup, loglevel={loglevel.upper()}"
+ f"{filename=} {rich_available=}"
f"Logging has been setup, loglevel={loglevel.upper()} "
+ f"{file_path=} {rich_available=}"
)
@@ -784,7 +790,7 @@ def install_environment(
mpsd_release, mpsd_microarch, "install", toolchain=toolchain
)
build_log_folder = release_base_dir / "logs"
build_log_file = build_log_folder / build_log_file_name
build_log_path = build_log_folder / build_log_file_name
# if logs folder dosent exist, create it
if not os.path.exists(build_log_folder):
os.makedirs(build_log_folder)
@@ -795,19 +801,19 @@ def install_environment(
setup_log_cmd(
mpsd_release,
script_dir,
msg=f"installing {toolchain} and logging at {build_log_file}",
msg=f"installing {toolchain} and logging at {build_log_path}",
)
setup_log_cmd(
mpsd_release,
script_dir,
msg=(
f"CMD: bash {spack_setup_script} {' '.join(install_flags)}"
"{toolchain}"
f"CMD: bash {spack_setup_script} {' '.join(install_flags)} "
f"{toolchain}"
),
)
run(
f"bash {spack_setup_script} {' '.join(install_flags)} {toolchain} 2>&1 "
f"| tee -a {build_log_file} ",
f"| tee -a {build_log_path} ",
shell=True,
check=True,
)
@@ -910,9 +916,11 @@ def main():
# target dir is the place where this script exists. the
script_dir = Path(os.path.dirname(os.path.realpath(__file__)))
installer_log_file = get_installer_log_file(args, script_dir)
set_up_logging(args.loglevel, installer_log_file)
set_up_logging(
args.loglevel,
get_installer_log_file_path(args.release, args.action, script_dir),
)
# Check the command and run related function
if args.action == "remove":
Loading