blob: 94b6b360530302d2978e72903d8b220069b9c1b6 [file] [log] [blame]
Michael Walshe11a1362017-10-19 15:35:26 -05001#!/usr/bin/env python
2
3r"""
4This file contains functions which are useful for processing BMC dumps.
5"""
6
7import gen_print as gp
Michael Walsh4f3ce172017-10-19 17:28:49 -05008import gen_misc as gm
9import gen_robot_keyword as grk
Michael Walshe11a1362017-10-19 15:35:26 -050010import bmc_ssh_utils as bsu
11import var_funcs as vf
Michael Walsh4f3ce172017-10-19 17:28:49 -050012import os
Michael Walshe11a1362017-10-19 15:35:26 -050013from robot.libraries.BuiltIn import BuiltIn
14import sys
15import os
16import imp
17base_path = os.path.dirname(os.path.dirname(
18 imp.find_module("gen_robot_print")[1])) + os.sep
19sys.path.append(base_path + "data/")
20import variables as var
21
22
23def get_dump_dict(quiet=None):
Michael Walshe11a1362017-10-19 15:35:26 -050024 r"""
25 Get dump information and return as an ordered dictionary where the keys
26 are the dump IDs and the values are the full path names of the dumps.
27
28 Example robot program call:
29
30 ${dump_dict}= Get Dump Dict
31 Rpvars 1 dump_dict
32
33 Example output:
34
35 dump_dict:
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -050036 [1]:
37 /var/lib/phosphor-debug-collector/dumps/1/obmcdump_1_1508255216.tar.xz
38 [2]:
39 /var/lib/phosphor-debug-collector/dumps/2/obmcdump_2_1508255245.tar.xz
40 [3]:
41 /var/lib/phosphor-debug-collector/dumps/3/obmcdump_3_1508255267.tar.xz
42 [4]:
43 /var/lib/phosphor-debug-collector/dumps/4/obmcdump_4_1508255283.tar.xz
Michael Walshe11a1362017-10-19 15:35:26 -050044
45 Description of argument(s):
46 quiet If quiet is set to 1, this function will
47 NOT write status messages to stdout.
48 """
49
50 quiet = int(gp.get_var_value(quiet, 1))
Michael Walsh4f3ce172017-10-19 17:28:49 -050051 cmd_buf = "dump_dir_path=" + var.DUMP_DIR_PATH + " ; " \
Michael Walshe11a1362017-10-19 15:35:26 -050052 + "for dump_id in $(ls ${dump_dir_path} | sort -n) ; " \
53 + "do echo -n $dump_id: ; ls ${dump_dir_path}${dump_id}/* ; done"
54 output, stderr, rc = bsu.bmc_execute_command(cmd_buf, quiet=quiet)
55
56 return vf.key_value_outbuf_to_dict(output)
57
58
59def valid_dump(dump_id,
60 dump_dict=None,
61 quiet=None):
Michael Walshe11a1362017-10-19 15:35:26 -050062 r"""
63 Verify that dump_id is a valid. If it is not valid, issue robot failure
64 message.
65
66 A dump is valid if the indicated dump_id refers to an existing dump with a
67 valid associated dump file.
68
69 Description of argument(s):
70 dump_id A dump ID (e.g. "1", "2", etc.)
71 dump_dict A dump dictionary such as the one returned
72 by get_dump_dict. If this value is None,
73 this function will call get_dump_dict on
74 the caller's behalf.
75 quiet If quiet is set to 1, this function will
76 NOT write status messages to stdout.
77 """
78
79 if dump_dict is None:
80 dump_dict = get_dump_dict(quiet=quiet)
81
82 if dump_id not in dump_dict:
83 message = "The specified dump ID was not found among the existing" \
84 + " dumps:\n"
85 message += gp.sprint_var(dump_id)
86 message += gp.sprint_var(dump_dict)
87 BuiltIn().fail(gp.sprint_error(message))
88
89 if not dump_dict[dump_id].endswith("tar.xz"):
90 message = "There is no \"tar.xz\" file associated with the given" \
91 + " dump_id:\n"
92 message += gp.sprint_var(dump_id)
93 dump_file_path = dump_dict[dump_id]
94 message += gp.sprint_var(dump_file_path)
95 BuiltIn().fail(gp.sprint_error(message))
Michael Walsh4f3ce172017-10-19 17:28:49 -050096
97
98def scp_dumps(targ_dir_path,
99 targ_file_prefix="",
100 dump_dict=None,
101 quiet=None):
Michael Walsh4f3ce172017-10-19 17:28:49 -0500102 r"""
103 SCP all dumps from the BMC to the indicated directory on the local system
104 and return a list of the new files.
105
106 Description of argument(s):
107 targ_dir_path The path of the directory to receive the
108 dump files.
109 targ_file_prefix Prefix which will be pre-pended to each
110 target file's name.
111 dump_dict A dump dictionary such as the one returned
112 by get_dump_dict. If this value is None,
113 this function will call get_dump_dict on
114 the caller's behalf.
115 quiet If quiet is set to 1, this function will
116 NOT write status messages to stdout.
117 """
118
119 targ_dir_path = gm.add_trailing_slash(targ_dir_path)
120
121 if dump_dict is None:
122 dump_dict = get_dump_dict(quiet=quiet)
123
124 status, ret_values = grk.run_key("Open Connection for SCP", quiet=quiet)
125
126 dump_file_list = []
127 for dump_id, source_file_path in dump_dict.iteritems():
128 targ_file_path = targ_dir_path + targ_file_prefix \
129 + os.path.basename(source_file_path)
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -0500130 status, ret_values = grk.run_key("scp.Get File " + source_file_path
131 + " " + targ_file_path, quiet=quiet)
Michael Walsh4f3ce172017-10-19 17:28:49 -0500132 dump_file_list.append(targ_file_path)
133
134 return dump_file_list