1#!/usr/bin/env python3 2 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" 20 + " 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.", 23 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 + ".") 69 high_sev_elogs_file_path = AUTOBOOT_FFDC_DIR_PATH + AUTOBOOT_FFDC_PREFIX + "high_severity_errorlog.json" 70 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 74 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 78 REDFISH_SUPPORT_TRANS_STATE = \ 79 int(BuiltIn().get_variable_value("${REDFISH_SUPPORT_TRANS_STATE}", default=0)) 80 except Exception: 81 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 92 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 ] 100 101 if REDFISH_SUPPORT_TRANS_STATE: 102 keyword_string = ' ; '.join(keyword_redfish_strings) 103 else: 104 keyword_string = ' ; '.join(keyword_strings) 105 106 set_mod_global(keyword_string) 107 cmd_buf = create_robot_cmd_string("extended/run_keyword.robot", OPENBMC_HOST, SSH_PORT, HTTPS_PORT, 108 REST_USERNAME, REST_PASSWORD, OPENBMC_USERNAME, OPENBMC_PASSWORD, 109 keyword_string, lib_file_path, quiet, 110 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) 119 if num_error_logs > 0: 120 qprint_timen("Adding the name of our high severity error logs FFDC file " 121 + "to the appropriate file list.") 122 shell_cmd("echo " + high_sev_elogs_file_path + " > " + AUTOBOOT_FFDC_LIST_FILE_PATH) 123 else: 124 os.remove(high_sev_elogs_file_path) 125 126 127main() 128