Created dump_utils.py with get_dump_dict and valid_dump.
Change-Id: Ia59e126213eb7d32ce25b13ee118a2379200dbe7
Signed-off-by: Michael Walsh <micwalsh@us.ibm.com>
diff --git a/data/variables.py b/data/variables.py
index 71744a5..f8dd91f 100644
--- a/data/variables.py
+++ b/data/variables.py
@@ -87,6 +87,8 @@
# Dump URI variable
DUMP_URI = OPENBMC_BASE_URI +'/dump/'
DUMP_ENTRY_URI = DUMP_URI + 'entry/'
+# The path on the BMC where dumps are stored.
+DUMP_DIR_PATH = "/var/lib/phosphor-debug-collector/dumps/"
# Boot progress variables.
STATE_DBUS_BASE = 'xyz.openbmc_project.State.'
diff --git a/lib/dump_utils.py b/lib/dump_utils.py
new file mode 100755
index 0000000..16bf224
--- /dev/null
+++ b/lib/dump_utils.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+
+r"""
+This file contains functions which are useful for processing BMC dumps.
+"""
+
+import gen_print as gp
+import bmc_ssh_utils as bsu
+import var_funcs as vf
+from robot.libraries.BuiltIn import BuiltIn
+import sys
+import os
+import imp
+base_path = os.path.dirname(os.path.dirname(
+ imp.find_module("gen_robot_print")[1])) + os.sep
+sys.path.append(base_path + "data/")
+import variables as var
+
+
+def get_dump_dict(quiet=None):
+
+ r"""
+ Get dump information and return as an ordered dictionary where the keys
+ are the dump IDs and the values are the full path names of the dumps.
+
+ Example robot program call:
+
+ ${dump_dict}= Get Dump Dict
+ Rpvars 1 dump_dict
+
+ Example output:
+
+ dump_dict:
+ [1]: /var/lib/phosphor-debug-collector/dumps/1/obmcdump_1_1508255216.tar.xz
+ [2]: /var/lib/phosphor-debug-collector/dumps/2/obmcdump_2_1508255245.tar.xz
+ [3]: /var/lib/phosphor-debug-collector/dumps/3/obmcdump_3_1508255267.tar.xz
+ [4]: /var/lib/phosphor-debug-collector/dumps/4/obmcdump_4_1508255283.tar.xz
+
+ Description of argument(s):
+ quiet If quiet is set to 1, this function will
+ NOT write status messages to stdout.
+ """
+
+ quiet = int(gp.get_var_value(quiet, 1))
+ cmd_buf = "dump_dir_path=" + var.DUMP_DIR_PATH + " ; " \
+ + "for dump_id in $(ls ${dump_dir_path} | sort -n) ; " \
+ + "do echo -n $dump_id: ; ls ${dump_dir_path}${dump_id}/* ; done"
+ output, stderr, rc = bsu.bmc_execute_command(cmd_buf, quiet=quiet)
+
+ return vf.key_value_outbuf_to_dict(output)
+
+
+def valid_dump(dump_id,
+ dump_dict=None,
+ quiet=None):
+
+ r"""
+ Verify that dump_id is a valid. If it is not valid, issue robot failure
+ message.
+
+ A dump is valid if the indicated dump_id refers to an existing dump with a
+ valid associated dump file.
+
+ Description of argument(s):
+ dump_id A dump ID (e.g. "1", "2", etc.)
+ dump_dict A dump dictionary such as the one returned
+ by get_dump_dict. If this value is None,
+ this function will call get_dump_dict on
+ the caller's behalf.
+ quiet If quiet is set to 1, this function will
+ NOT write status messages to stdout.
+ """
+
+ if dump_dict is None:
+ dump_dict = get_dump_dict(quiet=quiet)
+
+ if dump_id not in dump_dict:
+ message = "The specified dump ID was not found among the existing" \
+ + " dumps:\n"
+ message += gp.sprint_var(dump_id)
+ message += gp.sprint_var(dump_dict)
+ BuiltIn().fail(gp.sprint_error(message))
+
+ if not dump_dict[dump_id].endswith("tar.xz"):
+ message = "There is no \"tar.xz\" file associated with the given" \
+ + " dump_id:\n"
+ message += gp.sprint_var(dump_id)
+ dump_file_path = dump_dict[dump_id]
+ message += gp.sprint_var(dump_file_path)
+ BuiltIn().fail(gp.sprint_error(message))