New Soft_errors plug-in
The Soft_errors plug-in will calculate the value of num_err_logs and
save it as a plug-in value for the benefit of the FFDC plug-in. The FFDC
plug-in can use that data to decide whether to collect FFDC data.
Change-Id: I3dc8dd591fc32c2bd4d367d71b30f64a6bbb1376
Signed-off-by: Michael Walsh <micwalsh@us.ibm.com>
diff --git a/bin/plug_ins/Soft_errors/cp_post_boot b/bin/plug_ins/Soft_errors/cp_post_boot
new file mode 100755
index 0000000..07e0d4e
--- /dev/null
+++ b/bin/plug_ins/Soft_errors/cp_post_boot
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+
+from gen_print import *
+from gen_valid import *
+from gen_arg import *
+from gen_misc import *
+from gen_cmd import *
+from var_funcs import *
+from gen_plug_in_utils import *
+from gen_call_robot import *
+
+# Set exit_on_error for gen_valid functions.
+set_exit_on_error(True)
+ignore_err = 0
+
+
+parser = argparse.ArgumentParser(
+ usage='%(prog)s [OPTIONS]',
+ description="%(prog)s will calculate the value of num_err_logs and"
+ + " save it as a plug-in value for the benefit of the FFDC plug-in."
+ + " The FFDC plug-in can use that data to decide whether to collect"
+ + " FFDC data.",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ prefix_chars='-+')
+
+# The stock_list will be passed to gen_get_options. We populate it with the names of stock parm options we
+# want. These stock parms are pre-defined by gen_get_options.
+stock_list = [("test_mode", 0),
+ ("quiet", get_plug_default("quiet", 0)),
+ ("debug", get_plug_default("debug", 0))]
+
+
+def exit_function(signal_number=0,
+ frame=None):
+ r"""
+ Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
+
+ This function will be called by gen_exit_function().
+ """
+
+ process_robot_output_files()
+
+
+def validate_parms():
+ r"""
+ Validate program parameters, etc.
+
+ This function will be called by gen_setup().
+ """
+
+ get_plug_vars()
+
+ global AUTOSCRIPT_STATUS_FILE_PATH
+ # AUTOSCRIPT_STATUS_FILE_PATH is set when we're called by autoscript. For this program to work
+ # correctly, it must be called with autoscript.
+ AUTOSCRIPT_STATUS_FILE_PATH = os.environ.get("AUTOSCRIPT_STATUS_FILE_PATH", "")
+ valid_value(AUTOSCRIPT_STATUS_FILE_PATH)
+ valid_value(AUTOBOOT_OPENBMC_HOST)
+
+
+def main():
+
+ gen_setup()
+
+ print_plug_in_header()
+
+ # Get the number of error logs from the BMC.
+ init_robot_out_parms(get_plug_in_package_name() + "." + pgm_name + ".")
+
+ lib_file_path = init_robot_file_path("lib/logging_utils.robot")
+ lib_file_path += ":" + init_robot_file_path("lib/gen_robot_print.py")
+ set_mod_global(lib_file_path)
+
+ keyword_string = "${error_logs}= Get Error Logs &{filter_low_severity_errlogs}"
+ keyword_string += " ; ${num_error_logs}= Get Length ${error_logs}"
+ keyword_string += " ; Rprint Vars num_error_logs"
+ set_mod_global(keyword_string)
+
+ cmd_buf = create_robot_cmd_string("extended/run_keyword.robot", OPENBMC_HOST, SSH_PORT, HTTPS_PORT,
+ REST_USERNAME, REST_PASSWORD, keyword_string, lib_file_path, quiet,
+ test_mode, debug, outputdir, output, log, report)
+ if not robot_cmd_fnc(cmd_buf):
+ exit(1)
+ # The output contains the num_error_logs value which we will isolate with egrep.
+ rc, out_buf = shell_cmd("egrep '^num_error_logs:[ ]' " + AUTOSCRIPT_STATUS_FILE_PATH, quiet=1,
+ print_output=0)
+ result = key_value_outbuf_to_dict(out_buf)
+ num_error_logs = int(result['num_error_logs'])
+ save_plug_in_value(num_error_logs)
+
+
+main()
diff --git a/bin/plug_ins/Soft_errors/supports_obmc b/bin/plug_ins/Soft_errors/supports_obmc
new file mode 100644
index 0000000..3d284d8
--- /dev/null
+++ b/bin/plug_ins/Soft_errors/supports_obmc
@@ -0,0 +1 @@
+# The presence of this file tells autogui that this plug-in supports Open BMC.