blob: 9f9d5152e6440eca8cb02a8986edf4b84f23dc86 [file] [log] [blame]
George Keishinge7e91712021-09-03 11:28:44 -05001#!/usr/bin/env python3
Michael Walsh369b75c2020-05-05 14:00:53 -05002
3from gen_print import *
4from gen_valid import *
5from gen_arg import *
6from gen_misc import *
7from gen_cmd import *
8from var_funcs import *
9from gen_plug_in_utils import *
10from gen_call_robot import *
11
12# Set exit_on_error for gen_valid functions.
13set_exit_on_error(True)
14ignore_err = 0
15
16
17parser = argparse.ArgumentParser(
18 usage='%(prog)s [OPTIONS]',
19 description="%(prog)s will calculate the value of num_err_logs and"
Patrick Williamsa57fef42022-12-03 07:00:14 -060020 + " save it as a plug-in value for the benefit of the FFDC plug-in."
21 + " The FFDC plug-in can use that data to decide whether to collect"
22 + " FFDC data.",
Michael Walsh369b75c2020-05-05 14:00:53 -050023 formatter_class=argparse.ArgumentDefaultsHelpFormatter,
24 prefix_chars='-+')
25
26# The stock_list will be passed to gen_get_options. We populate it with the names of stock parm options we
27# want. These stock parms are pre-defined by gen_get_options.
28stock_list = [("test_mode", 0),
29 ("quiet", get_plug_default("quiet", 0)),
30 ("debug", get_plug_default("debug", 0))]
31
32
33def exit_function(signal_number=0,
34 frame=None):
35 r"""
36 Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
37
38 This function will be called by gen_exit_function().
39 """
40
41 process_robot_output_files()
42
43
44def validate_parms():
45 r"""
46 Validate program parameters, etc.
47
48 This function will be called by gen_setup().
49 """
50
51 get_plug_vars()
52
53 global AUTOSCRIPT_STATUS_FILE_PATH
54 # AUTOSCRIPT_STATUS_FILE_PATH is set when we're called by autoscript. For this program to work
55 # correctly, it must be called with autoscript.
56 AUTOSCRIPT_STATUS_FILE_PATH = os.environ.get("AUTOSCRIPT_STATUS_FILE_PATH", "")
57 valid_value(AUTOSCRIPT_STATUS_FILE_PATH)
58 valid_value(AUTOBOOT_OPENBMC_HOST)
59
60
61def main():
62
63 gen_setup()
64
65 print_plug_in_header()
66
67 # Get the number of error logs from the BMC.
68 init_robot_out_parms(get_plug_in_package_name() + "." + pgm_name + ".")
michaeld4fbcf92020-06-19 17:30:00 -050069 high_sev_elogs_file_path = AUTOBOOT_FFDC_DIR_PATH + AUTOBOOT_FFDC_PREFIX + "high_severity_errorlog.json"
Michael Walsh369b75c2020-05-05 14:00:53 -050070 lib_file_path = init_robot_file_path("lib/logging_utils.robot")
71 lib_file_path += ":" + init_robot_file_path("lib/gen_robot_print.py")
72 set_mod_global(lib_file_path)
73
David Shaw27207642021-10-11 16:21:11 -050074 REDFISH_SUPPORT_TRANS_STATE = int(os.environ.get('REDFISH_SUPPORT_TRANS_STATE', 0))
75 if not REDFISH_SUPPORT_TRANS_STATE:
76 try:
77 from robot.libraries.BuiltIn import BuiltIn
Patrick Williamsa57fef42022-12-03 07:00:14 -060078 REDFISH_SUPPORT_TRANS_STATE = \
79 int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0))
80 except Exception:
David Shaw27207642021-10-11 16:21:11 -050081 pass
82
83 keyword_redfish_strings = \
84 [
85 "${error_logs}= Get Redfish Event Logs &{filter_low_severity_errlogs}",
86 "${num_error_logs}= Get Length ${error_logs}",
87 "Rprint Vars num_error_logs",
88 "${json_string}= Evaluate json.dumps($error_logs, indent=4) modules=json",
89 "Append To File " + high_sev_elogs_file_path + " ${json_string}"
90 ]
91
michaeld4fbcf92020-06-19 17:30:00 -050092 keyword_strings = \
93 [
94 "${error_logs}= Get Error Logs &{filter_low_severity_errlogs}",
95 "${num_error_logs}= Get Length ${error_logs}",
96 "Rprint Vars num_error_logs",
97 "${json_string}= Evaluate json.dumps($error_logs, indent=4) modules=json",
98 "Append To File " + high_sev_elogs_file_path + " ${json_string}"
99 ]
Patrick Williamsa57fef42022-12-03 07:00:14 -0600100
David Shaw27207642021-10-11 16:21:11 -0500101 if REDFISH_SUPPORT_TRANS_STATE:
102 keyword_string = ' ; '.join(keyword_redfish_strings)
103 else:
104 keyword_string = ' ; '.join(keyword_strings)
Michael Walsh369b75c2020-05-05 14:00:53 -0500105
michaeld4fbcf92020-06-19 17:30:00 -0500106 set_mod_global(keyword_string)
Michael Walsh369b75c2020-05-05 14:00:53 -0500107 cmd_buf = create_robot_cmd_string("extended/run_keyword.robot", OPENBMC_HOST, SSH_PORT, HTTPS_PORT,
Michael Sheposd54307f2021-01-11 11:08:21 -0600108 REST_USERNAME, REST_PASSWORD, OPENBMC_USERNAME, OPENBMC_PASSWORD,
109 keyword_string, lib_file_path, quiet,
Michael Walsh369b75c2020-05-05 14:00:53 -0500110 test_mode, debug, outputdir, output, log, report)
111 if not robot_cmd_fnc(cmd_buf):
112 exit(1)
113 # The output contains the num_error_logs value which we will isolate with egrep.
114 rc, out_buf = shell_cmd("egrep '^num_error_logs:[ ]' " + AUTOSCRIPT_STATUS_FILE_PATH, quiet=1,
115 print_output=0)
116 result = key_value_outbuf_to_dict(out_buf)
117 num_error_logs = int(result['num_error_logs'])
118 save_plug_in_value(num_error_logs)
michaeld4fbcf92020-06-19 17:30:00 -0500119 if num_error_logs > 0:
Patrick Williamsa57fef42022-12-03 07:00:14 -0600120 qprint_timen("Adding the name of our high severity error logs FFDC file "
121 + "to the appropriate file list.")
michaeld4fbcf92020-06-19 17:30:00 -0500122 shell_cmd("echo " + high_sev_elogs_file_path + " > " + AUTOBOOT_FFDC_LIST_FILE_PATH)
123 else:
124 os.remove(high_sev_elogs_file_path)
Michael Walsh369b75c2020-05-05 14:00:53 -0500125
126
127main()